gpt4 book ai didi

c - 错误 : pasting "." and "red" does not give a valid preprocessing token

转载 作者:太空狗 更新时间:2023-10-29 16:20:56 26 4
gpt4 key购买 nike

我正在实现 X 宏,但我遇到了简单宏扩展的问题。此宏(见下文)用于多个宏使用示例,包括在 this 中。文章。 编译器给出一条错误消息,但我可以通过在 GCC 编译器中使用 -E 标志来查看有效的 C 代码。

宏X列表定义如下:

#define LIST \
X(red, "red") \
X(blue, "blue") \
X(yellow, "yellow")

然后:

#define X(a, b) foo.##a = -1;
LIST;
#undef X

但是gcc报错如下:

lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token

就像我说的,我可以通过在 gcc 上使用 -E 开关来查看有效的 C 代码:

lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
foo.red = -1; foo.blue = -1; foo.yellow = -1;;

什么是有效的预处理 token ?谁能解释一下?

(在你说“为什么不只是初始化或 memset()?”之前,这不是我的真实代码。)

最佳答案

. 分隔标记,因此您不能使用 ## 因为 .red 不是有效标记。如果您将两个标记连接成一个标记,则只能使用 ##

这个有效:

#define X(a, b) foo.a = -1;

What's a valid proprocessing token? Can someone explain this?

这是被解析/词法分析的内容。 foo.bar 将被解析为 3 个标记(两个标识符和一个运算符): foo 。 bar 如果您使用 ##,您将只会获得 2 个标记(一个标识符和一个无效标记):foo .bar

关于c - 错误 : pasting "." and "red" does not give a valid preprocessing token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216423/

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