Запятая вместо точки с запятой. Почему этот оператор не дает синтаксической ошибки в 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 ++ допускается запятая.

3

Решение

int(3) недопустимый синтаксис в C. Вы можете написать это так:

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

или даже просто:

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

и это будет компилироваться как в C, так и в C ++.

Обратите внимание, что запятая между printf и избыточное выражение, следующее за ним просто оператор запятой. Результаты как вызова printf, так и следующего выражения отбрасываются.

11

Другие решения

Причина по которой int(3) работает в C ++, потому что это функциональный состав. Это не поддерживается в C, поэтому он терпит неудачу там.

Как уже объяснил Пол Р., это утверждение работает в C ++, так как , (оператор запятой) просто игнорирует возвращаемое значение выражения слева от , (но выполняет это).

Так что в C ++ строка printf("\n a = %d", a),int(3); оценивается так:

  • printf("\n a = %d", a) выполнен. Это результат отбрасывается.
  • Номер 3 приведен к int, но поскольку он не присвоен переменной, этот оператор не имеет никакого эффекта и отбрасывается.
2

По вопросам рекламы [email protected]