Оценка на правой стороне задания - PullRequest
1 голос
/ 10 февраля 2012

Это int c = (a==b) - это именно то, что я хотел бы сказать в моей C-программе, компилируемой с GCC. Я могу сделать это, очевидно (это работает просто отлично), но я не знаю, может ли это вызвать неопределенное поведение. Моя программа не будет скомпилирована с другим компилятором или другими архитектурами. Это законный ANSI C? Благодаря.

Ответы [ 4 ]

4 голосов
/ 10 февраля 2012

Это полностью законно.если a равно b, то c будет равно 1. иначе будет 0.

1 голос
/ 10 февраля 2012

Совершенно верно, если в области видимости блока объявлено c.

При объявлении в области видимости файла оно недопустимо, поскольку инициализатор должен быть константным выражением.

a == b является выражением и в этом смысле не отличается от другого выражения, такого как a + b или a & b.

1 голос
/ 10 февраля 2012
int c = (a == b);

это совершенно законно.Инициализация является частью стандарта C (C99 §6.7.8), правая часть может быть просто любым выражением присваивания , включая a == b (конечно, при условии, что a и b являютсяопределены и имеют сопоставимый тип).

0 голосов
/ 10 февраля 2012

Ну, это зависит от типа a и b. Если они являются типами, которые поддерживают проверку на равенство, то да, это совершенно законно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...