|
| Anchorhead |
| Лео Перуц - Шведский всадник |
|
| |
Astair @ 12 ноября 2011, 23:08 | Хм, согласен. Однако, одна дополнительная строчка решит эту проблему и даст нам этот результат. Достаточно просто действия разграничить. |
Если ты имеешь в виду что-то вроде:
int temp = 2+2; temp = 5;
То да, результатом выражения temp = 5 будет значение 5, потому что переменная temp является l-value, к которой по правилам семантики языка можно применить операцию присваивания. Но это опять не доказывает твою правоту, потому что '=' является именно что оператором присваивания, а не просто записью, показывающей, что выражение в левой части равно выражению в части правой или, допустим, операцией сравнения (кстати, если бы знак равенства был операцией сравнения, результатом выражения temp = 5 было бы не число 5, а либо 1, либо 0: Истина или Ложь). Твоя ошибка в том, что ты смотришь на синтаксис, тогда как смотреть надо на семантику.
Кстати, с точки зрения синтаксиса Си выражение 2 + 2 = 5 вполне корректно, неправильно оно именно с точки зрения семантики. Если бы анализ исходной программы ограничивался только лексическим и синтаксическим анализом (не включая семантический), то компилятор такое выражение прожевал бы и вероятно даже выплюнул какой-то код. :)
Исправлено: Serke, 13 ноября 2011, 01:52Если тебе дадут линованную бумагу, пиши поперек. |
|