gpt4 book ai didi

C编译错误: stray '##' in program

转载 作者:太空狗 更新时间:2023-10-29 17:16:51 35 4
gpt4 key购买 nike

当我看到这样的东西时,我正在使用嵌入式内核源代码:

#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

有谁知道是怎么回事吗?谢谢

最佳答案

这是token concatenation C预处理器的运算符。您的示例无法编译的原因是您没有在宏中使用 ## 运算符(即 #define 语句)。

这是 another post更多信息。

关于C编译错误: stray '##' in program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933488/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com