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

问题描述 投票:3回答:2
#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 ++编译差异之间允许的逗号感到困惑。

c++ syntax
2个回答
11
投票

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

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

甚至只是:

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

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

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


2
投票

int(3)在C ++中工作的原因是因为它是functional cast。这在C中不受支持,这就是它失败的原因。

正如Paul R已经解释的那样,该语句在C ++中起作用,因为,(逗号运算符)只是忽略,左边的表达式的返回值(但确实执行它)。

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

  • printf("\n a = %d", a)被执行。它的结果被丢弃了。
  • 数字3转换为int,但由于它未分配给变量,因此该语句无效并被丢弃。
© www.soinside.com 2019 - 2024. All rights reserved.