#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
与其后面的冗余表达式之间的逗号只是comma operator。 printf调用和以下表达式的结果都将被丢弃。
int(3)
在C ++中工作的原因是因为它是functional cast。这在C中不受支持,这就是它失败的原因。
正如Paul R已经解释的那样,该语句在C ++中起作用,因为,
(逗号运算符)只是忽略,
左边的表达式的返回值(但确实执行它)。
所以在C ++中,行printf("\n a = %d", a),int(3);
的评估如下:
printf("\n a = %d", a)
被执行。它的结果被丢弃了。int
,但由于它未分配给变量,因此该语句无效并被丢弃。