该C++代码片段是否合法?源文件能否以未闭合header-name结尾?
缺失闭合
>的头文件名能否作为源文件结尾? 考虑以下代码片段:
#define X iostream> #include <X
在#include之后,能构成预处理标记的最长字符序列是<,其后紧跟一个标识符。该标识符在预处理阶段会被替换为iostream>,替换完成后,该指令符合格式< h-char-sequence >。由此看来,该程序应该是合法的。
另一方面,标准中lex.phases章节规定:
源文件不得以部分预处理标记或部分注释结尾。
在我看来,上述程序并未以部分预处理标记结尾。然而,标准的脚注中指出:
当源文件以需要终止字符序列的多字符标记的前半部分结尾时,会产生部分预处理标记,例如缺失闭合
"或>的header-name。
这让我感到困惑。源文件能否以缺失闭合>的header-name结尾?
MSVC和GCC对该代码片段的处理方式不同。
内容的提问来源于stack exchange,提问作者avakar
相关产品推荐
相关产品推荐

