Перейти к содержанию
Посмотреть в приложении

A better way to browse. Learn more.

Форум Академгородка, Новосибирск

A full-screen app on your home screen with push notifications, badges and more.

Чтобы установить это приложение на iOS и iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
Чтобы установить это приложение на Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

++i + ++i

Опубликовано

Стандартный вопрос:

 

int i = 5;

int k = ++i + ++i;

 

чему равно k. Компиляторы выдают то 12, то 13, то 14. Что по этому поводу говорят стандарты C и C++?

Рекомендуемые сообщения

Опубликовано

lurkmore.ru

Вы вроде сами ответили на свой вопрос. Компиляторы трактуют логику и делают это по-разному.

Опубликовано

Если компилятор поддерживает инфиксную унарную операцию, то однозначно 13 (Это для С/С++)

Если не поддерживает и переводит в постфиксную, то 13

Если вообще не поддерживает унарные операции, то 10

 

А можно название компиляторов, что дают результат 12 и 14 ?

Опубликовано
Если компилятор поддерживает инфиксную унарную операцию, то однозначно 13 (Это для С/С++)

Если не поддерживает и переводит в постфиксную, то 13

Если вообще не поддерживает унарные операции, то 10

 

А можно название компиляторов, что дают результат 12 и 14 ?

Ступил :)

13 читать как 14 ;)

Опубликовано
Не надо так делать программы, очень нехороший стиль. Если не ошибаюсь, какой то стандарт с++ указывал что порядок вычисления операндов не определен.
Опубликовано
  • Автор
Не надо так делать программы, очень нехороший стиль.

 

По-моему, нормальный. Я бы так писать не стал, но ереси в этом не вижу. А если это не так очевидно написать? В конче концов, если вычисление инкремента (а дело не только в нём) оставить на произвол компилятора, но будет чушь. И стандарт должен этот произвол ограничить

 

Если не ошибаюсь, какой то стандарт с++ указывал что порядок вычисления операндов не определен.

 

Так я и спрашиваю - какой? А в С?

Опубликовано

Задачка-то из теста для приема на работу :)

 

+1 про неопределенность порядка вычисления операндов. Надо бы ссылочку на стандарт, чтобы вопрос закрыть.

 

Встроенные операторы-исключения, первый аргумент которых вычисляется сначала:

a && b
a || b
a ? b : c
a , b

Опубликовано

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

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.» демонстрируют недостаточную квалифицированность отвечающего.

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

Аккаунт

Навигация

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.