2

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

4

2 回答 2

4

如果您阅读解决方案开头的评论,它会解释您看到该错误的原因:

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

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

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

相当于:

putchar('/'/1)

这是合法的——尽管奇怪——表达式(请记住,在 C 中 achar是数字类型,因此'/'/1与 相同/)。发生这种情况是因为序列/**/是空注释。

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

puchar('/' 1)

这只是一个错误。

于 2014-02-20T04:18:03.913 回答
0

为了清楚起见,原始代码被放置在多行中,如下所示:

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

从这里开始,/**/ 部分是注释,因此经过预处理后,代码将如下所示:

putchar('/' / 1);

等于 putchar('/');

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

抱歉格式错误-用我的手机写...

于 2014-02-20T04:21:55.960 回答