次のようなものを見たとき、私は組み込みカーネル ソースで作業していました。
#define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src, clksrc_nr, clksrc_src) \
static void __init omap##name##_timer_init(void) \
{ \
omap2_gp_clockevent_init((clkev_nr), clkev_src); \
omap2_gp_clocksource_init((clksrc_nr), clksrc_src); \
}
そして、この ## のもの (名前はわかりません) を使用して実際に何ができるかを確認するプログラムを作成しようとしたとき、動作しませんでした。以下は、その機能をテストするために行ったことです。## 内の引数がリテラルかどうかを確認したいだけですが、コンパイルするコードに何かが明らかに欠けています...
#include <stdio.h>
#include <stdlib.h>
#define DEFINE_1 2
#define DEFINE_2 4
#define DEFINE_3 6
#define DEFINE_i 9
int main(void)
{
int i;
for(i=1;i<4;i++) {
printf("numero %d = %d\n",i,DEFINE_##i##);
}
return EXIT_SUCCESS;
}
gcc の出力は次のとおりです。
test.c: In function ‘main’:
test.c:14:5: error: stray ‘##’ in program
test.c:14:33: error: ‘DEFINE_’ undeclared (first use in this function)
test.c:14:33: note: each undeclared identifier is reported only once for each function it appears in
test.c:14:42: error: expected ‘)’ before ‘i’
test.c:14:42: error: stray ‘##’ in program
誰が何が悪いのか知っていますか?ありがとう