|
фича компиляторв, инкремент переменной |
|
|
|
May 11 2007, 11:25
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
На форуме программистов (здесь http://www.rsdn.ru/Forum/?mid=2481623) с пацанами сейчас подняли интересную тему. Думаю, что си-шникам тоже следует остерегаться подобного кода. В двух словах проблема состоит в том, как компилятор должен понимать оператор инкремента.
int i; int x;
i = 5; x = ++i + ++i;
Чему в результате будет равно х ? Прикол в том, что MS VC++ 6.0 и VC++.NET дают результат, равный 14. Майкрософтовский C# и IAR говорят, что х = 13. А более всего удивил Watcom -- у него результат зависит от того, включена-ли оптимизация или нет... Я, конечно, понимаю, что код, который обсуждается, несколько далек от жизни, но все же, знать о таких прибабахах -- надо. Вечером дома, попробую еще в CodeVision эту фичу покрутить.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
 |
Ответов
|
May 11 2007, 11:29
|
Участник

Группа: Новичок
Сообщений: 70
Регистрация: 27-03-07
Пользователь №: 26 533

|
Тут все просто. По стандарту результат исполнения такого кода не определен. Тот, кто пишет такой код - сам себе злобный буратино.
|
|
|
|
Сообщений в этой теме
zhevak фича компиляторв May 11 2007, 11:25 Oldring Цитата(vromanov @ May 11 2007, 15:29) Тут... May 11 2007, 15:37  zltigo Цитата(Oldring @ May 11 2007, 18:37) В вы... May 11 2007, 17:48   vromanov Цитата(zltigo @ May 11 2007, 21:48) Где В... May 11 2007, 18:54    zltigo Цитата(vromanov @ May 11 2007, 21:54) И к... May 11 2007, 19:03     Oldring Цитата(zltigo @ May 11 2007, 23:03) Никак... May 11 2007, 19:59      PrSt Цитата(Oldring @ May 11 2007, 22:59) Поче... May 13 2007, 14:08       lebiga Пора рассматривать известную шутку Ричи и Керниган... May 13 2007, 16:03       zhevak Цитата...
разбиваем как это делает компилятор
temp... May 14 2007, 00:04        Oldring Цитата(zhevak @ May 14 2007, 04:04) Отсюд... May 14 2007, 03:31     vromanov Цитата(zltigo @ May 11 2007, 23:03) Никак... May 11 2007, 20:02      zltigo Цитата(vromanov @ May 11 2007, 23:02) Ком... May 11 2007, 20:19       Oldring Цитата(zltigo @ May 12 2007, 00:19) Нет, ... May 11 2007, 21:07        zltigo Цитата(Oldring @ May 12 2007, 00:07) Это ... May 11 2007, 21:57         Oldring Цитата(zltigo @ May 12 2007, 01:57) Перев... May 12 2007, 07:23          zltigo Цитата(Oldring @ May 12 2007, 10:23) Я-то... May 12 2007, 08:31           Oldring Цитата(zltigo @ May 12 2007, 12:31) Выраж... May 12 2007, 08:45            zltigo Цитата(Oldring @ May 12 2007, 11:45) Ну т... May 12 2007, 09:26             Oldring Цитата(zltigo @ May 12 2007, 13:26) Я при... May 12 2007, 09:34              zltigo Цитата(Oldring @ May 12 2007, 12:34) Не в... May 12 2007, 09:36               Oldring Цитата(zltigo @ May 12 2007, 13:36) Жаль.... May 12 2007, 09:56 Ivan_Kov Проблема стара как "С"...
Скобки использ... May 11 2007, 11:33 zltigo Цитата(Ivan_Kov @ May 11 2007, 14:33) Про... May 11 2007, 18:04 amw GCC 3.4.5
gcc -o x x.c
x = 14
gcc -Os -o x x.c
x =... May 11 2007, 11:33 zltigo Цитата(zhevak @ May 11 2007, 14:25) как к... May 11 2007, 11:57 vromanov не страдайте фигней.
Вот вам выдержка из стандарта... May 11 2007, 12:39 zltigo Цитата(vromanov @ May 11 2007, 15:39) не ... May 11 2007, 12:42 vromanov Как любителю стандартов, вам надо было не искать о... May 11 2007, 12:51 zltigo Цитата(vromanov @ May 11 2007, 15:51) Тут... May 11 2007, 13:13 dxp Цитата(vromanov @ May 11 2007, 19:51) Как... May 11 2007, 13:37  Сергей Борщ Цитата(dxp @ May 11 2007, 16:37) Очевидно... May 11 2007, 14:22   zltigo Цитата(Сергей Борщ @ May 11 2007, 17:22) ... May 11 2007, 14:29 Ivan_Kov Я вот смотрю, и не могу никак понять, что за нужда... May 11 2007, 15:32 vromanov Удивительно, что столь очевидная вещь собрала сто... May 11 2007, 16:08 lebiga Цитата(vromanov @ May 11 2007, 20:08) Уди... May 11 2007, 19:57 defunct Цитатаx = ++i + ++i;
Это в китайских исходниках... May 11 2007, 17:54 vetal По моему все очень просто, т.к. код архитектурно з... May 12 2007, 10:16 Oldring Цитата(vetal @ May 12 2007, 14:16) 3. x=i... May 12 2007, 10:21 vetal ЦитатаТак вот откуда взялась эта третья операция -... May 12 2007, 10:42 Oldring Цитата(vetal @ May 12 2007, 14:42) В дере... May 12 2007, 10:52 zltigo Цитата(vetal @ May 12 2007, 13:42) Это вп... May 12 2007, 11:48 vetal Потому и "undefined bihavior", что по мо... May 12 2007, 11:11 Oldring Цитата(vetal @ May 12 2007, 15:11) Потому... May 12 2007, 12:23  zltigo Цитата(Oldring @ May 12 2007, 15:23) arm-... May 12 2007, 13:05   Oldring Цитата(zltigo @ May 12 2007, 17:05) Молча... May 12 2007, 13:14    zltigo Цитата(Oldring @ May 12 2007, 16:14) В пр... May 12 2007, 14:14     Oldring Цитата(zltigo @ May 12 2007, 18:14) Но пр... May 12 2007, 14:38      zltigo Цитата(Oldring @ May 12 2007, 17:38) В лю... May 12 2007, 14:51       Oldring Цитата(zltigo @ May 12 2007, 18:51) Ну ск... May 12 2007, 15:14        zltigo Цитата(Oldring @ May 12 2007, 18:14) Как ... May 12 2007, 15:42         Oldring Цитата(zltigo @ May 12 2007, 19:42) И при... May 12 2007, 16:06          zltigo Цитата(Oldring @ May 12 2007, 19:06) Стан... May 12 2007, 16:29           Oldring Цитата(zltigo @ May 12 2007, 20:29) Закон... May 12 2007, 16:57            zltigo Цитата(Oldring @ May 12 2007, 19:57) arm-... May 12 2007, 17:55             Oldring Цитата(zltigo @ May 12 2007, 21:55) Меня ... May 13 2007, 08:35              zltigo Цитата(Oldring @ May 13 2007, 11:35) А с ... May 13 2007, 06:24               Oldring Цитата(zltigo @ May 13 2007, 10:24) Посем... May 13 2007, 06:43                zltigo Цитата(Oldring @ May 13 2007, 09:43) А во... May 13 2007, 07:24                 Oldring Цитата(zltigo @ May 13 2007, 11:24) Никак... May 13 2007, 08:02                  zltigo Цитата(Oldring @ May 13 2007, 11:02) Один... May 13 2007, 08:11                   Oldring Цитата(zltigo @ May 13 2007, 12:11) Не дв... May 13 2007, 08:19                    zltigo Цитата(Oldring @ May 13 2007, 11:19) Проб... May 13 2007, 09:15                     Oldring Цитата(zltigo @ May 13 2007, 13:15) Может... May 13 2007, 09:27                      zltigo Цитата(Oldring @ May 13 2007, 12:27) Не с... May 13 2007, 09:38                       Oldring Цитата(zltigo @ May 13 2007, 13:38) Может... May 13 2007, 09:55                        zltigo Цитата(Oldring @ May 13 2007, 12:55) В ст... May 13 2007, 10:12                         Oldring Цитата(zltigo @ May 13 2007, 14:12) Отлич... May 13 2007, 10:26                          zltigo Цитата(Oldring @ May 13 2007, 13:26) Пров... May 13 2007, 10:37                           Oldring Цитата(zltigo @ May 13 2007, 14:37) Aвтор... May 13 2007, 11:03                           vromanov Цитата(zltigo @ May 13 2007, 14:37) Ну ка... May 13 2007, 12:03                            zltigo Цитата(vromanov @ May 13 2007, 15:03) Воо... May 13 2007, 13:15 Niko1a$ Посмотрите полученный ассемблерный код на своей ма... May 12 2007, 12:42 Oldring Цитата(Niko1a$ @ May 12 2007, 16:42)... May 12 2007, 12:46 vetal nios2-elf-gcc выдает без оптимизации 13, с оптимиз... May 12 2007, 13:09 vetal ЦитатаВ обоих случаях оптимизации говорит нельзя?
... May 12 2007, 14:57 singlskv Я Вам не помешаю ?
Выскажу свое ИМХО:
- Компилято... May 12 2007, 22:53 zltigo Цитата(singlskv @ May 13 2007, 01:53) - р... May 13 2007, 06:48 cebotor Цитата(singlskv @ May 13 2007, 02:53) Я В... May 15 2007, 06:19  Oldring Цитата(cebotor @ May 15 2007, 10:19) все ... May 15 2007, 06:26 scifi Ну вы даёте... Эту бы энергию - да в мирных целях ... May 13 2007, 06:20 vromanov А то, что значение переменной может поменяться в ... May 14 2007, 00:07 zhevak Цитата(vromanov @ May 14 2007, 06:07) А т... May 14 2007, 00:19  vromanov Цитата(zhevak @ May 14 2007, 04:19) не-е,... May 14 2007, 00:22 amw В пост #4 при компилляции добавляем -Wall и получа... May 14 2007, 07:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|