残の業。
Cを書いているとき、gccで以下のような、関数を定義するマクロの中に#pragma
を書きたいときどうするか。
このままではプリプロセッサが#pragma
を文字列化演算子だと思ってコンパイルエラーになってしまう。
なお下のプログラムには大して意味はない。。。。。。
#define loop(x) \ #pragma GCC ivdep \ for (int i = 0; i < N; i++) { \ x[i] = -100; \ } \
ここではc99から導入された_Pragma("directive")
を使えばいい。
#define loop(x) \ _Pragma("GCC ivdep") \ for (int i = 0; i < N; i++) { \ x[i] = -100; \ } \
gccに-E
をつけてプリプロセッサの出力を見るとしっかり#pragma
を使った文に展開されている。
30分くらいハマりました。こんなもんで。