Ошибка в троичном выражении - PullRequest
1 голос
/ 15 марта 2010

Рассмотрим следующий код, который показывает ошибку времени компиляции:

#include <stdio.h>

int main(int argc, char** argv)
{
   int x=5,y=0,z=2;
   int a=z?x,y?x:(y); // but z?x,y?x:y:z is not showing any error
    printf("%d",a);
return 0;
}

Пожалуйста, помогите мне объяснить причину, по которой z?x,y?x:y:z не показывает ошибку?

Ответы [ 4 ]

3 голосов
/ 15 марта 2010

С чего бы это; это допустимо и группы как это:

z?(x, (y?x:y)):z

Средний операнд условного выражения может быть любым выражением.

2 голосов
/ 15 марта 2010

это правильно .. для каждого ? точно один: будет там в троичные выражения который отсутствовал в z? x, y? x: (y);

0 голосов
/ 15 марта 2010

z?x,y?x:y:z - это два троичных выражения. Я бы написал так:

z ? (x, y ? x : y) : z

Всегда существует ровно один ? для каждого :.

0 голосов
/ 15 марта 2010

Запятая , не является частью троичных выражений.

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