我正在练习K& R2。当我在本页中阅读Ben Pfaff的代码http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_23时,我不明白单个代码putchar('/'// * / 1)是什么意思。在我的编译器中,这是一个语法错误。所以任何人都可以向我解释这一点。
答案 0 :(得分:4)
如果你在解决方案的开头阅读了评论,它就会解释为什么你会看到这个错误:
它还包含以星号和星号结尾的注释示例 评论前面有斜线。请注意,后者将破坏C99 编译器和带有//注释扩展的C89编译器。
在不支持//
样式注释的编译器中,这个:
putchar('/' //**/
1)
相当于:
putchar('/'/1)
哪个是合法的 - 虽然奇怪 - 表达(请记住,在C中char
是一种数字类型,因此'/'/1
与/
相同。发生这种情况是因为序列/**/
是一个空注释。
在具有//
样式注释的现代编译器中,表达式最终等同于:
puchar('/' 1)
这只是一个错误。
答案 1 :(得分:0)
为清楚起见,原始代码分为多行,如下所示:
putchar('/' //**/
1);
从这里开始,/ ** / part是一个注释,所以在预处理之后,代码看起来像这样:
putchar('/'/ 1);
等于putchar('/');
您收到编译器错误,因为您将此代码编译为C99,或者最有可能编译为C ++,其中//是单行注释。编译为C89。
抱歉格式不正确 - 从手机上写字......