Этот документ в разделе 2.6 «Вычисленные включения» имеет следующий параграф:
Если строка расширяется до потока токенов, начинающегося с токена <и включающего токен>, то токены между <и первым> объединяются, чтобы сформировать имя файла для включения. Любой пробел между токенами сводится к одному пробелу; тогда любой пробел после начального <сохраняется, но завершающий пробел до закрытия> игнорируется . CPP ищет файл в соответствии с правилами для угловых скобок.
Я знаю, что это определяется реализацией, но почему так должно быть в GCC? Я имею в виду конкретно выделенное предложение выше.
РЕДАКТИРОВАТЬ
Я только что заметил, что третий абзац перед приведенным выше говорит следующее:
Вы должны быть осторожны при определении макроса.
#define
сохраняет токены, а не текст. Препроцессор не может знать, что макрос будет использоваться в качестве аргумента#include
, поэтому он генерирует обычные токены, а не имя заголовка. Это вряд ли вызовет проблемы, если вы используете двойные кавычки, которые достаточно близки к строковым константам. Однако если вы используете угловые скобки, у вас могут возникнуть проблемы .
Кто-нибудь знает, на какую проблему указывают здесь?