#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, поэтому он терпит неудачу там.
Как уже объяснил Пол Р., это утверждение работает в C ++, так как ,
(оператор запятой) просто игнорирует возвращаемое значение выражения слева от ,
(но выполняет это).
Так что в C ++ строка printf("\n a = %d", a),int(3);
оценивается так:
printf("\n a = %d", a)
выполнен. Это результат отбрасывается.int
, но поскольку он не присвоен переменной, этот оператор не имеет никакого эффекта и отбрасывается.