2010-07-05 4 views
4

На http://groups.google.co.in/group/comp.lang.c/browse_thread/thread/bfb312ad902d94eb/74dcdcacce777679?lnk=gst&q=conditional+operator#74dcdcacce777679Условный оператор и оператор присваивания в C

Существует ответ на данный вопрос, почему
(A% 2 == 0) A = 0: A = 1 дает ошибку.

Что я не понимаю, когда мы используем (приоритет и ассоциативность), и мы используем грамматику C для разбора выражения?

ответ

5

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

Приоритет и ассоциативность получены из грамматики, они не являются правилами. Многие таблицы приоритетов являются чрезмерными упрощениями, которые не работают в некоторых неясных случаях.

+0

Можете ли вы привести несколько примеров, где это будет иметь значение, если приоритет и грамматика пересекаются друг с другом, так как изучать грамматику довольно сложно по сравнению с приоритетом операторов. –

+0

Как показывает ваш пример, любая таблица, которая пытается помещать '?:' Где-то, обычно вводит в заблуждение, поскольку все три операнда имеют разные типы выражений. Вы можете иметь _assignment-expression_ в середине, но не (в C, а не C++). –