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

use*_*107 3 c++ syntax

#include <iostream>
using namespace std;

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

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

Pau*_*l R 11

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

printf("\n a = %d", a),(int)3;
Run Code Online (Sandbox Code Playgroud)

甚至只是:

printf("\n a = %d", a),3;
Run Code Online (Sandbox Code Playgroud)

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

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