【问题标题】:Can anyone explain what the code putchar('/' //*/ 1) mean谁能解释一下代码 putchar('/' //*/ 1) 的含义
【发布时间】:2014-02-20 04:11:37
【问题描述】:

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

【问题讨论】:

  • 那是注释和除法运算符。

标签: c putchar


【解决方案1】:

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

它还包含以星号和 斜线前面的注释。注意后者会破坏C99 // 注释扩展的编译器和 C89 编译器。

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

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

相当于:

putchar('/'/1)

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

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

puchar('/' 1)

这只是一个错误。

【讨论】:

  • 不好意思问这个傻问题,其实我确实看过作者的评论。但是作为一个留学生,我的英语其实不太好,没看懂那句话。现在我愿意。谢谢。
【解决方案2】:

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

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

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

putchar('/' / 1);

等于putchar('/');

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多