Стандартное поведение препроцессора C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Стандартное поведение препроцессора C++

Сообщение Anonymous »

Я изучаю стандарт C++, посвященный точному поведению препроцессора (мне нужно реализовать какой-то препроцессор C++). Насколько я понимаю, приведенный ниже пример (чтобы облегчить мое понимание) должен быть действительным:

Код: Выделить всё

#define dds(x) f(x,
#define f(a,b) a+b
dds(eoe)
su)
Я ожидаю, что первый вызов функционального макроса dds(eoe) будет заменен на f(eoe, (обратите внимание на запятую в строке замены), что затем рассматривается как f(eoe,su) при повторном сканировании ввода.
Но тест с Visual C++ 2010 дал мне это (я сказал VC++ вывести предварительно обработанный файл ):

Код: Выделить всё

eoe+et_leoe+et_l
su)
Это противоречит здравому смыслу и явно неверно. Это ошибка Visual C++ 2010 или мое непонимание стандарта C++? В частности, неправильно ли ставить запятую в конце строки замены, как это сделал я? Насколько я понимаю, в стандартной грамматике C++ разрешены любые токены предварительной обработки.
У меня нет GCC или других версий Visual C++. Как я могу проверить эти компиляторы?

Подробнее здесь: https://stackoverflow.com/questions/225 ... -behaviour
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»