#define foo 1 ## ## 2 вызывает неопределенное поведение? - PullRequest
0 голосов
/ 21 мая 2018

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, как если бы был только один ##.Это ожидаемый результат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...