gpt4 book ai didi

c - 为什么大括号周围的括号启用预处理器宏返回值

转载 作者:行者123 更新时间:2023-12-05 08:45:08 37 4
gpt4 key购买 nike

当我编写宏时,我喜欢将定义括在大括号中(即 { }),以防止可能发生的任何潜在命名空间冲突。但是,为了从宏中得到一个返回值,宏定义出于某种原因也需要用括号括起来。省略周围的括号会导致不返回任何值。这是为什么?

例如

#define ADD1(x)    \
({int y = (x) + 1; \
y;})

int foo = 3;
int bar = ADD1(foo);
//
// versus
//
#define ADD1_BROKEN(x) \
{int y = (x) + 1; \
y;}

int baz = ADD_BROKEN(foo); // DOES NOT COMPILE

最佳答案

第一个宏中的内容是 expression statement这是一个 gcc 扩展。它允许在允许表达式的地方使用 block 语句, block 中的最后一条语句是表达式的值。

第二种情况不起作用,因为您试图将 block 语句用作不允许的表达式。

话虽如此,您的特定示例作为一个简单的表达式会更好:

#define ADD1(x) ((x) + 1)

如果你真的需要一些看起来像函数的复杂东西,就做一个函数。

关于c - 为什么大括号周围的括号启用预处理器宏返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74033336/

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