首页 > 解决方案 > “#define BUF 8”与“#define BUF (8)

问题描述

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

#define BUF (8)

#define BUF 8

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

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

标签: c

解决方案


范围内宏标识符的外观仅由替换文本替换。因此,这段代码...

#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));

x,它为和保留不同数量的内存y


推荐阅读