使用#include指令尾随字符

Rod*_*ddy 3 c code-formatting language-lawyer c-preprocessor

我在源文件中看似无关紧要

#include <some_sys_header_file.h>"
Run Code Online (Sandbox Code Playgroud)

它被埋在一堆其他包含使用双引号(而不是尖括号)的内容中,因此没有发现虚假的双引号.

编译器(或者更确切地说,预处理器)很高兴,包括所需的文件,并跳过了剩下的行.

但是,在使用艺术风格格式化文件时,双引号导致文字字符串错误地分割为多行的混乱.

是否应该如何对待这个标准?

Jen*_*ens 6

这是未定义的行为.

C99在6.10中说#include指令具有该形式

# include pp-tokens new-line
Run Code Online (Sandbox Code Playgroud)

唯一以a开头的pp-tokens "是字符串文字(C99 6.4.5 字符串文字)和双引号中的标题名称(C99 6.4.7 标题名称).但是,字符串文字不得包含未转义的换行符,并且标题名称不得包含换行符.孤独"也不能成为标题名称的一部分,因为它不在<>(C99 6.4.7 标题名称)内.根据C99剩下的东西6.4 词汇元素

preprocessing-token:
...
每个非白色空格字符,不能是上述之一

结合第3段中的语义学

如果一个'或一个"字符与最后一个类别匹配,则行为未定义.

所以你可能会或可能不会得到诊断.