任何人都可以解释代码putchar('/'// * / 1)的含义

时间:2014-02-20 04:11:38

标签: c putchar

我正在练习K& R2。当我在本页中阅读Ben Pfaff的代码http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_1:Exercise_23时,我不明白单个代码putchar('/'// * / 1)是什么意思。在我的编译器中,这是一个语法错误。所以任何人都可以向我解释这一点。

2 个答案:

答案 0 :(得分:4)

如果你在解决方案的开头阅读了评论,它就会解释为什么你会看到这个错误:

  

它还包含以星号和星号结尾的注释示例   评论前面有斜线。请注意,后者将破坏C99   编译器和带有//注释扩展的C89编译器。

在不支持//样式注释的编译器中,这个:

putchar('/' //**/ 
        1) 

相当于:

putchar('/'/1)

哪个是合法的 - 虽然奇怪 - 表达(请记住,在C中char是一种数字类型,因此'/'/1/相同。发生这种情况是因为序列/**/是一个空注释。

在具有//样式注释的现代编译器中,表达式最终等同于:

puchar('/' 1)

这只是一个错误。

答案 1 :(得分:0)

为清楚起见,原始代码分为多行,如下所示:

    putchar('/' //**/
            1);

从这里开始,/ ** / part是一个注释,所以在预处理之后,代码看起来像这样:

putchar('/'/ 1);

等于putchar('/');

您收到编译器错误,因为您将此代码编译为C99,或者最有可能编译为C ++,其中//是单行注释。编译为C89。

抱歉格式不正确 - 从手机上写字......