このドキュメントのセクション2.6計算済みインクルードには、次の段落があります。
行が<トークンで始まり、>トークンを含むトークンストリームに展開される場合、<と最初の>の間のトークンが結合されて、含まれるファイル名が形成されます。トークン間の空白は1つのスペースに削減されます。その後、最初の<の後のスペースは保持されますが、閉じる>の前のスペースは無視されます。CPPは山かっこインクルードのルールに従ってファイルを検索します。
これは実装で定義されていることはわかっていますが、なぜGCCにとってこのようにする必要があるのですか?上記の強調表示された文を具体的に参照しています。
編集
上で引用したものの前の3番目の段落が次のことを言っていることに気づきました。
マクロを定義するときは注意が必要です。
#define
テキストではなくトークンを保存します。プリプロセッサは、マクロがの引数として使用されることを知る方法がない#include
ため、ヘッダー名ではなく通常のトークンを生成します。文字列定数に十分近い二重引用符を含むインクルードを使用する場合、これが問題を引き起こすことはほとんどありません。 ただし、山括弧を使用すると、問題が発生する可能性があります。
ここでどんな問題が指摘されているか知っていますか?