繁体   English   中英

逗号而不是分号,为什么这个语句在C ++中没有给出语法错误?

[英]Comma instead of semicolon, Why does this statement not give syntax error in C++?

#include <iostream>
using namespace std;

int main() {
    // your code goes here
    int a  = 10;
    printf("\n a = %d", a),int(3);
    return 0;
}

这段代码在C ++( http://ideone.com/RSWrxf )中运行良好,但是相同的printf行在C中不起作用。为什么它在C++ 我对两个语句和C / C ++编译差异之间允许的逗号感到困惑。

int(3)在C中是无效的语法。你可以这样写它:

printf("\n a = %d", a),(int)3;

甚至只是:

printf("\n a = %d", a),3;

这将在C和C ++中编译。

请注意, printf与其后面的冗余表达式之间的逗号只是逗号运算符 printf调用和以下表达式的结果都将被丢弃。

int(3)在C ++中工作的原因是因为它是一个功能强制转换 这在C中不受支持,这就是它失败的原因。

正如保罗- [R已经解释,本声明C ++,因为工作, (逗号操作)简单地忽略了表达的左边的返回值, (但并执行它)。

所以在C ++中,行printf("\\na = %d", a),int(3); 评估如下:

  • printf("\\na = %d", a) 它的结果被丢弃了。
  • 数字3转换为int ,但由于它未分配给变量,因此该语句无效并被丢弃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM