将注释插入typename将产生错误

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没有定义

Yu *_*Hao 9

代码中的注释将被编译器替换为空格.所以

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源文件被分解为预处理标记和空白字符序列(包括注释).源文件不应以部分预处理标记或部分注释结束.每个注释都被一个空格字符替换.保留换行符.是否保留或替换为新行以外的每个非空白字符序列是由实现定义的.