Сколько будет i++ + ++i?

За Write-only Code нужно отрывать руки

Вопрос для собеседования на вакансию C/C++-программиста: int i = 5, j = i++ + ++i; – чему равно i и j? Ответ вида “За такое нужно руки отрывать”, не подходит, ибо автор вопроса считает, что знает правильный ответ — i=7, j=12. Но так ли это? Автор приводит следующую аргументацию: Данная конструкция вполне приемлемая, в результате будет i=7, [...]

← Вернуться к полной версии записи «Сколько будет i++ + ++i?»…

Автор: ; опубликовано в: C/C++; метки: C/C++, ошибка
13
Апр
2009

RSS Комментарии к статье «Сколько будет i++ + ++i?» (5)  »

  1. Надежда

    Уважаемый Владимир!
    Аналогичные Вашему вопросы я регулярно задаю своим студентам на контрольных модулях по С++. К сожалению, мало кто отвечает. Прилагаю реализацию на VC++ 2005. Все три варианта реализации дают один и тот же результат.
    Вопрос: какой версией gcc Вы пользовались?

    • gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3

      Visual C++ (особенно 2005) не очень-то славится поддержкой стандарта.

      • Надежда

        Да, Владимир, это правда. Но сколько людей его используют! Поэтому нужно знать его сильные и слабые стороны. А gcc, конечно, ОЧЕНЬ продвинутый и развивающийся компилятор, но мои студенты, к сожалению, его практически не знают.

  2. Надежда

    А это результат gcc-3.4.5 (без оптимизации)
    Enter value static int i= 5
    i=7 j=12

    Enter value int i= 5
    i=7 j=12

    Enter value volatile int i= 5
    i=6 j=11

  3. Вообще целью статьи было показать, что использование кода, поведение которого не определено стандартом, является очень плохой идеей: результаты меняются даже в разных версиях одного и того же компилятора и сильно зависят от того, какие оптимизации компилятор может применить.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Сколько будет i++ + ++i?»

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा