тела макроса необходимо вставлять пробел? Или это сделано на основе граматики языка?
#define VALUE -1
1-VALUE // 1- -1
Грамматика есть в стандарте
Который пробел ты имеешь в виду?
Да, и там явно видно пробел в том же additive-expression
который появляется между 1-(тут)-1
Даже если тут не будет пробела, выражение будет 1 - -1 Токенизация производится ДО препроцессирования.
Давай разделять ту грамматику которая определяет разбиение исходного текста на лексемы и, ту которая по лексемам (токенам) формирует AST. Пробелы, очевидно, важны только для первой, а препроцессор выдает на выходе токены. Поэтому твой пример работает не за счет вставки пробелов препроцессором, а за счет того, что препроцессор не склеивает 2 - в один токен --.
Это отсутствие склеивания где-нибудь прописано?
Да, Тут https://en.cppreference.com/w/cpp/preprocessor и далее читай фазы трансляции
Обсуждают сегодня