Опубликовано 11 октября, 200916 г. comment_6857513 Стандартный вопрос: int i = 5; int k = ++i + ++i; чему равно k. Компиляторы выдают то 12, то 13, то 14. Что по этому поводу говорят стандарты C и C++? Жалоба
Опубликовано 11 октября, 200916 г. comment_6857557 lurkmore.ru Вы вроде сами ответили на свой вопрос. Компиляторы трактуют логику и делают это по-разному. Жалоба
Опубликовано 11 октября, 200916 г. Автор comment_6857581 Там нет ссылок ни на один стандарт, а только констатация факта. Жалоба
Опубликовано 11 октября, 200916 г. comment_6857642 Если компилятор поддерживает инфиксную унарную операцию, то однозначно 13 (Это для С/С++) Если не поддерживает и переводит в постфиксную, то 13 Если вообще не поддерживает унарные операции, то 10 А можно название компиляторов, что дают результат 12 и 14 ? Жалоба
Опубликовано 11 октября, 200916 г. comment_6857666 Если компилятор поддерживает инфиксную унарную операцию, то однозначно 13 (Это для С/С++) Если не поддерживает и переводит в постфиксную, то 13 Если вообще не поддерживает унарные операции, то 10 А можно название компиляторов, что дают результат 12 и 14 ? Ступил :) 13 читать как 14 ;) Жалоба
Опубликовано 11 октября, 200916 г. Автор comment_6857780 Из тех же соображений Java выдаст 13. У меня gcc и g++ выдали 14. Жалоба
Опубликовано 11 октября, 200916 г. comment_6858651 Не надо так делать программы, очень нехороший стиль. Если не ошибаюсь, какой то стандарт с++ указывал что порядок вычисления операндов не определен. Жалоба
Опубликовано 12 октября, 200916 г. Автор comment_6858793 Не надо так делать программы, очень нехороший стиль. По-моему, нормальный. Я бы так писать не стал, но ереси в этом не вижу. А если это не так очевидно написать? В конче концов, если вычисление инкремента (а дело не только в нём) оставить на произвол компилятора, но будет чушь. И стандарт должен этот произвол ограничить Если не ошибаюсь, какой то стандарт с++ указывал что порядок вычисления операндов не определен. Так я и спрашиваю - какой? А в С? Жалоба
Опубликовано 12 октября, 200916 г. comment_6858923 Задачка-то из теста для приема на работу :) +1 про неопределенность порядка вычисления операндов. Надо бы ссылочку на стандарт, чтобы вопрос закрыть. Встроенные операторы-исключения, первый аргумент которых вычисляется сначала: a && b a || b a ? b : c a , b Жалоба
Опубликовано 12 октября, 200916 г. comment_6859006 Стандарты, как известно, продаются за деньги, но нагуглить ссылочку на драфт стандарта можно за пару минут. Except as indicated by the syntax /27/ or otherwise specified later (for the function-call operator () , && , || , ?: , and comma operators), the order of evaluation of subexpressions and the order in which side effects take place are both unspecified. http://flash-gordon.me.uk/ansi.c.txt пункт 3.3 EXPRESSIONS (это C, думаю, должно всех устроить :) ) А вообще лучше всего сказано на lurkmore, ссылка была выше: Иными словами, даже попытки ответить на этот вопрос иначе как «UB.» демонстрируют недостаточную квалифицированность отвечающего. Жалоба
Стандартный вопрос:
int i = 5;
int k = ++i + ++i;
чему равно k. Компиляторы выдают то 12, то 13, то 14. Что по этому поводу говорят стандарты C и C++?