Определение переменной в C - PullRequest
1 голос
/ 15 июля 2011

Что означает следующее объявление в C?

char a = (10,23,21);

При выводе значения "a" с "% u" вывод равен 21. gcc не выдает никакой ошибки.Что это за своего рода декларация и какая от этого польза?

Ответы [ 2 ]

7 голосов
/ 15 июля 2011

Вы видите оператор запятой на работе.Оператор запятой a,b оценивает a, отбрасывает результат, затем возвращает b.

Поскольку 10 и 23 не имеют побочных эффектов, это эквивалентно char a = 21;

3 голосов
/ 15 июля 2011

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

В этом случае это бесполезно;однако, если вы используете его с выражениями с побочными эффектами, это дает реальный эффект.

Пример полу-«полезного» выражения (с побочными эффектами):

int a = 10;
int is_a_odd_after_increment = ++a, a % 2;

Первое выражение (++a) имеет явный побочный эффект, и оно оценивается первым (до a % 2).Второе выражение - это выражение, которое дается в присваивании.

...