アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

Visual C++6.0 のデバッグ中に、ローカル変数を
変数ウィンドウに書き込んで、値を変更して動作確認を
行っているのですが、グローバル変数(たとえばerrnoなど)を、同様に変数ウィンドウに書き込むと、「CXX0017: Error: シンボル "errno"が見つかりません」と表示されてしまいます。errnoをローカル変数のようにデバッグ中に書き換えることはできないのでしょうか。

よろしくお願いします。

A 回答 (3件)

errnoは多分だめかと。


errnoはグローバル変数ということになっていますが、errnoの実装は最近は関数であることが多いためです。

で、#defeineでマクロ定義されている場合も、そのままではだめで、元の変数の名前を指定する必要があります。

そういう特殊なもの意外でしたら、ローカル変数と同じ方法でOKです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

errnoの定義位置を参照したところ、
#define errno (*_errno())
となっていました。

よくわかりました。どうもありがとうございました。

お礼日時:2005/06/17 12:16

#1の方の回答にあるように、errnoはグローバル変数とは限りません。



includeファイルを調べてみればわかりますが、
#define errno (*_errno())
と定義されている部分があります。

正確にはVC6だとライブラリがシングルスレッドだとerrnoというグローバル変数になりますが、
マルチスレッドの場合errnoがスレッド毎に独立でないと問題が出るため、上記の設定が有効になるようです。

もし、シングルスレッドで構わないのであれば、プロジェクトの設定 >> C/C++ >> コード生成で使用するライブラリにシングルスレッドかシングルスレッド デバッグを使えばグローバル変数として使えます。
但し、意味がわからない、シングルスレッドでも構わないかどうか判断できない場合は変えないほうが無難でしょう。

マルチスレッドライブラリでも_errnoの戻り値を調べてアドレス指定で参照、変更すれば可能です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

errnoの定義位置を参照したところ、
#define errno (*_errno())
となっていました。

よくわかりました。どうもありがとうございました。

お礼日時:2005/06/17 12:19

手元にVC++6.0が無くて確認できませんが、可能であったハズです。


Hello World!のような簡単なプログラムで試してみては?


書き換えできない原因で思いつくのは、グローバル変数を宣言しているソースにデバッグ情報が無いとか。
TRACE文などで&errnoを表示して該当アドレスを直に書き換えてみるとか…。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

errnoの定義位置を参照したところ、
#define errno (*_errno())
となっていました。

よくわかりました。どうもありがとうございました。

お礼日時:2005/06/17 12:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!