c - 在数组声明中使用乘法宏

标签 c arrays macros

我知道以下是有效代码:

#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/

相关文章:

c - 使用前向声明解决循环依赖

C - 无法将结构指针传递给函数

c - MPI_Comm_rank 总是写 0

c - 估算微 Controller 的计算预算 (Arduino)

python - numpy `ValueError: operands could not be broadcast together with shape ...`

c - 需要帮助从 ltp 测试套件文件 tst_res.c 理解这个宏

javascript - Javascript 函数的意外输出

javascript - 在数组中搜索,而不仅仅是唯一值

macros - 在 Rust 中解析匹配武器的递归宏

c++ - 未知(损坏的内存)错误。 sprintf_s 输出.c