【发布时间】:2019-03-27 12:12:42
【问题描述】:
考虑:
#define TEST(x) x
int arr[2] = TEST({1, 2});
我希望它被预处理成int arr[2] = {1, 2};
相反,gcc 和 clang 都抱怨。 gcc 7.3.0:
./test.c:2:25: error: macro "TEST" passed 2 arguments, but takes just 1
int arr[2] = TEST({1, 2});
clang 3.8.1:
./test.c:2:23: error: too many arguments provided to function-like macro invocation
int arr[2] = TEST({1, 2});
我在宏 (6.10) 的 C 语言标准部分中找不到任何关于大括号被特殊处理的内容。
为什么会这样?
【问题讨论】:
标签: c c-preprocessor