Рассмотрим:
#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});
лязг 3.8.1:
./test.c:2:23: error: too many arguments provided to function-like macro invocation
int arr[2] = TEST({1, 2});
Я не смог найти упоминаний о фигурных скобках, специально обрабатываемых в стандартном разделе языка C для макросов (6.10).
Почему это происходит?