Jat*_*ana 1 c comments c-preprocessor
以下行写在C程序中
in/*hello*/t k; error or not
Run Code Online (Sandbox Code Playgroud)
据我说,第一个预处理器会从代码中删除注释,然后代码将转到编译器,因此编译器的代码是
int k;
Run Code Online (Sandbox Code Playgroud)
这完全没问题.
但实际上,当我在gcc编译器上运行它时,它会给出编译器错误
in,k,t没有定义
代码中的注释将被编译器替换为空格.所以
in/*hello*/t k;
Run Code Online (Sandbox Code Playgroud)
会变成
in t k;
Run Code Online (Sandbox Code Playgroud)
这是不正确的.
C11§5.1.1.2翻译阶段
3源文件被分解为预处理标记和空白字符序列(包括注释).源文件不应以部分预处理标记或部分注释结束.每个注释都被一个空格字符替换.保留换行符.是否保留或替换为新行以外的每个非空白字符序列是由实现定义的.