6.10.3.3 спецификации c11 гласит:
каждый экземпляр токена предварительной обработки ## в списке замен (не из аргумента) удаляется, а предыдущий токен предварительной обработки объединяется со следующимтокен предварительной обработки.[...] Если результат не является допустимым токеном предварительной обработки, поведение не определено.
Таким образом, 1 ## ## будет заменен на 1 ##, который не является действительным токеном предварительной обработки, поэтому поведение не определено.Это правильно?
#include <stdio.h>
int main()
{
#define foo 1 ## ## 2
printf("%d\n", foo);
return 0;
}
Компиляция вышеприведенного с gcc -std=c11 -Wall -Wpedantic
не дает никаких предупреждений, и вывод равен 12, как если бы был только один ##
.Это ожидаемый результат?