質問: #define WRITE_test(TEST) \ do{ \ fprintf(stderr, "%s can't open\n", #TEST); \ }while(0); というマクロを書いた上で、ソースをコンパイルすると /**/ if (length_max/*LENGTH_buf_mpi*/ > length+strlen(buf_)) do{ fprintf(stderr, "%s can't open\n", "test"); }while(0); else if (length_max/*LENGTH_buf_mpi*/ > length+strlen(buf_)) do{ fprintf(stderr, "%s can't open\n", "test"); }while(0); else break; とある箇所にエラーなどは現れず /**/ if (length_max/*LENGTH_buf_mpi*/ > length+strlen(buf_)) WRITE_test(test); else if (length_max/*LENGTH_buf_mpi*/ > length+strlen(buf_)) WRITE_test(test); else break; とある箇所で、 「buf_.c:263: error: 構文解析エラー が "else" の前にあります」 というメッセージが現れます。263行とはひとつめのWRITE_test()がある箇所です。 マクロはテキストが置換、展開されるものと考えると、この結果に納得できないでおります。説明がつくでしょうか? コンパイルはgentoo Linux上で/usr/bin/gcc-3.4.4によるものです。
回答: gccの実装/仕様を確認したわけではないので憶測ですが...、 そのエラーメッセージは__LINE__に基づいてたり、 複数行に同じ__LINE__が割り当てられてたりはしないのでしょうか。