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