gpt4 book ai didi

c - "#define BUF 8"与“#define BUF (8)

转载 作者:行者123 更新时间:2023-12-02 05:32:31 28 4
gpt4 key购买 nike

有什么区别(如果有的话):

#define BUF (8)

#define BUF 8

我在 C 编程方面不是很有经验,并且从未见过只有 1 个数字的 #define 而不是将其放在括号中。

PS:代码是在 64 位 linux 系统上使用带有 -m32 标志的 gcc 编译的。所以最终的二进制文件是 32 位 ELF 可执行文件。

最佳答案

范围内宏标识符的出现只是简单地用替换文本替换。因此,这段代码......

#define BUF 8
#define BUF2 (8)

x = BUF * BUF2;

...扩展为

x = 8 * (8);

特别是,括号是替换文本的一部分,而不是宏定义的一部分。 (但不要将它与类似函数的宏定义混淆,后者在标识符和左括号之间没有空格。)

在那种情况下,这两个宏定义可以几乎但不能完全互换使用。然而,括号在其他情况下会产生更大的差异。考虑一下:

#define MY_SIZE 16 + 7
#define MY_SIZE2 (16 + 7)

void *x = malloc(8 * MYSIZE);
void *y = malloc(8 * MYSIZE2);

扩展为

void *x = malloc(8 * 16 + 7);
void *y = malloc(8 * (16 + 7));

,为xy保留不同数量的内存。

关于c - "#define BUF 8"与“#define BUF (8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55714878/

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