我知道以下是有效代码:
#define SOMEMACRO 10
int arr[SOMEMACRO];
这将导致 int arr[10]
。
如果我想制作一个 2 倍大小的数组(并且在其他地方仍然需要原始宏),这个代码有效吗?
#define SOMEMACRO 10
int arr[2 * SOMEMACRO];
预编译后为 int arr[2 * 10]
。这仍然被编译器视为常量表达式吗?
快速浏览后似乎可行,但这是已定义的行为吗?
最佳答案
是的,它会起作用。MACRO 将按编译时的原样放置,因此 a[2*SOMEMACRO]
将变为 a[2*10]
,这是完全有效的.
要检查预处理的内容,您可以使用 cc -E foo.c
选项
关于c - 在数组声明中使用乘法宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944478/