カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810434
FAQカテゴリ(大) C-SPYデバッガ
最終更新日 2013-01-23

質問内容

マクロ記述のエラーを簡単に見つける方法はないですか?

回答内容

#defineマクロが間違っていた場合、コンパイラは展開された記述でエラーメッセージを出すので、

エラー箇所の特定が困難な場合が数多く発生します。

 

たとえば、以下のような記述を見てみます。

#define  AAAAA  aa(

int main()
{
  AAAAA;

・・・

この例では、#define の定義が不完全であるためにコンパイルすると以下のようなエラーが出ます。

Warning[Pe223]: function "aa" declared implicitly D:・・・\main.c 7
Error[Pe029]: expected an expression C:・・・\main.c 7
Error[Pe018]: expected a ")" C:・・・\main.c 7
Error while running C/C++ Compiler

 

 

関数mainを書いている人と#defineを記述する人が別だと、複雑なプログラムではなぜエラーになるのかを

判断するのは難しい作業になります。

C/C++コンパイラのオプション--macro_positions_in_diagnostics を使うと

Warning[Pe223]: function "aa" declared implicitly D:・・・\main.c 2
 in expansion of macro "AAAAA" at line 7 of "D:・・・\main.c".
Error[Pe029]: expected an expression D:・・・\main.c 7
Error[Pe018]: expected a ")" D:・・・\main.c 7
Error while running C/C++ Compiler

というようにマクロを展開したという情報を出してくれます。展開した情報が示されることで、

コンパイルエラーの原因などを特定しやすくなります。

 

プロジェクトオプションでC/C++COmpiler → Extra Optionsのタブ → Use command line optionsにチェックを入れ、

--macro_positions_in_diagnostics を指定してください。

 

 

 

 

 

参考資料URL