Сколько будет i++ + ++i?
За Write-only Code нужно отрывать руки
Вопрос для собеседования на вакансию C/C++-программиста: int i = 5, j = i++ + ++i; – чему равно i и j? Ответ вида “За такое нужно руки отрывать”, не подходит, ибо автор вопроса считает, что знает правильный ответ — i=7, j=12. Но так ли это? Автор приводит следующую аргументацию: Данная конструкция вполне приемлемая, в результате будет i=7, [...]
← Вернуться к полной версии записи «Сколько будет i++ + ++i?»…
Автор: Vladimir; опубликовано в: C/C++; метки: C/C++, ошибка13
Апр
2009
Апр
2009
Комментарии к статье «Сколько будет i++ + ++i?» (5) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «Сколько будет i++ + ++i?»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


Уважаемый Владимир!
Аналогичные Вашему вопросы я регулярно задаю своим студентам на контрольных модулях по С++. К сожалению, мало кто отвечает. Прилагаю реализацию на VC++ 2005. Все три варианта реализации дают один и тот же результат.
Вопрос: какой версией gcc Вы пользовались?
gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3
Visual C++ (особенно 2005) не очень-то славится поддержкой стандарта.
Да, Владимир, это правда. Но сколько людей его используют! Поэтому нужно знать его сильные и слабые стороны. А gcc, конечно, ОЧЕНЬ продвинутый и развивающийся компилятор, но мои студенты, к сожалению, его практически не знают.
А это результат 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
Вообще целью статьи было показать, что использование кода, поведение которого не определено стандартом, является очень плохой идеей: результаты меняются даже в разных версиях одного и того же компилятора и сильно зависят от того, какие оптимизации компилятор может применить.