当我正在处理嵌入式内核源码时,我看到了这样的内容:
#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
有人知道出了什么问题吗?谢谢
i
是什么,也不知道如何与 DEFINE_ 进行连接。它只会在编译时及之后才被识别,远在预处理器完成工作之后。因此,您不能将程序变量用作 ## 连接的一部分... - SF.