Цей документ у розділі 2.6 Computed Includes має такий параграф:
Якщо рядок розширюється до потоку токенів, що починається з <лексеми і включає> маркер, то лексеми між <і першим> об'єднуються, щоб утворювати ім'я файлу, яке потрібно включити. Будь-який пробіл між маркерами зводиться до одного простору; то будь-який простір після початкового <зберігається, але пробіл перед закриттям> ігнорується . CPP шукає файл відповідно до правил для кутових дужок.
Я знаю, це визначено реалізацією, але чому це має бути таким чином для GCC? Я конкретно маю на увазі вище виділене речення.
EDIT
Я щойно помітив, що третій абзац перед цитованим вище говорить наступне:
Ви повинні бути обережними, визначаючи макрос.
#define
зберігає лексеми, а не текст. Препроцесор не може знати, що макрос буде використовуватися як аргумент#include
, тому він генерує звичайні лексеми, а не ім'я заголовка. Це навряд чи спричинить проблеми, якщо ви будете використовувати подвійні цитати, які досить близькі до рядкових констант. Якщо ви використовуєте кутові дужки, можливо, у вас виникнуть проблеми .
Хтось знає, на яку проблему тут вказують?