よくある質問(FAQ)

「可変引数」のあるマクロ定義で解析エラーが発生しました。

解析エラーの回避策について

質問

「可変引数」のあるマクロ定義で解析エラーが発生しています。回避策を教えてください。
「言語設定」は「ANSI-C」に設定しています。

■記述例
#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))

■解析エラー
CasePlayer2-E-CPP : マクロ定義が正しくありません.
 C:\XXXXXXXX\YYYYYYYY\ソースファイル名.c(行番号)

回答

「可変引数」のあるマクロ定義が、ANSI-C 仕様に違反しているため、解析エラーが発生しています。
「可変引数」のあるマクロ定義は、C99 又は GNU-C で規定されている言語仕様です。

■回避策
使用コンパイラの言語仕様に合わせて、C99 又は GNU-C を選択することで、エラーを回避できます。
※「Cオプションパラメータ」の設定で、エラーを回避することはできません。

ANSI-C で使用する場合は、「可変引数」のあるマクロ定義 そのものを削除(コメントアウト)してください。

■ コメントアウトの例
#ifndef CP2
 #define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
#else
 #define __unlocks()
#endif

※ CasePlayer2で解析するときは「#define __unlocks()」が有効となるようにします。
※"CP2"の定義は、CasePlayer2の「プリプセッサの設定」ダイアログの「#define(デファイン名[=数値])」へ設定してください。