我與嵌入式內核源代碼的工作,當我看到這樣的事情:C編譯中的錯誤:流浪「##」在節目
#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); \
}
,當我tryed做的是用這個東西##計劃(我不知道這個名字),看看它可以做什麼,我沒有得到它的工作。以下是我所做的測試它的功能。我只是想看看,如果裏面##的說法是文字還是沒有的事,但在我爲它編寫代碼顯然缺少...
#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
任何人都知道什麼是錯的?謝謝
預處理器不知道'i'是什麼,以及如何連接DEFINE_ - 只有在編譯之後和編譯之後,預處理器完成其工作後纔會識別它。所以你不能使用程序變量作爲##連接塊...... –