type t (* void *)

ソフトウエアのこととか

C: マクロ定義の中にプラグマを書きたい

残の業。

Cを書いているとき、gccで以下のような、関数を定義するマクロの中に#pragmaを書きたいときどうするか。
このままではプリプロセッサ#pragmaを文字列化演算子だと思ってコンパイルエラーになってしまう。
なお下のプログラムには大して意味はない。。。。。。

#define loop(x)               \
#pragma GCC ivdep             \
for (int i = 0; i < N; i++) { \
  x[i] = -100;                \
}                             \

ここではc99から導入された_Pragma("directive")を使えばいい。

gcc.gnu.org

#define loop(x)               \
_Pragma("GCC ivdep")          \
for (int i = 0; i < N; i++) { \
  x[i] = -100;                \
}                             \

gcc-Eをつけてプリプロセッサの出力を見るとしっかり#pragmaを使った文に展開されている。
30分くらいハマりました。こんなもんで。