extern 宣言をGLOBALとして、プリプロセッサ処理でexternの有無を分ける手法( http://dixq.net/rp/5.html )がありますが、
この手法で構造体をヘッダファイルに直接記述した場合、
GLOBAL struct Icon{
int picon;
};
GLOBAL struct Menu{
int bg;
int bgb;
int bgs;
};
GLOBAL struct Texture{
int item_mask;
};
GLOBAL struct GameGraphics{
struct Icon icon;
struct Menu menu;
struct Texture tex;
};
GLOBAL struct GameData{
struct GameGraphics pic,alpha;
}data;
という警告が出てしまいます。
そして、ビルド時にはなぜか出力されませんが、先ほどのコードの data の部分にエラーなどを示す赤波線が表示され、そこにカーソルを合わせると
Error: 宣言に"GameData data" (宣言された 行 x 、ファイル名"ヘッダファイルパス") との互換性がありません
というエラー表示( x は data が記述されている行番号)が出てしまいます。
前者のバグは、 ネストされる予定の構造体に付けたGLOBALがexternになり、実体のない構造体をexternしていたことによる警告ということが特定でき、struct GameData以外のGLOBALを削除することで解決しましたが、後者のバグは原因が特定できません……。
なぜこのような表示が出るのでしょうか・・・><