реклама на сайте
подробности

 
 
> фича компиляторв, инкремент переменной
zhevak
сообщение May 11 2007, 11:25
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 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 -- у него результат зависит от того, включена-ли оптимизация или нет... 07.gif

Я, конечно, понимаю, что код, который обсуждается, несколько далек от жизни, но все же, знать о таких прибабахах -- надо.

Вечером дома, попробую еще в CodeVision эту фичу покрутить.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vromanov
сообщение May 14 2007, 00:07
Сообщение #2


Участник
*

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



А то, что значение переменной может поменяться в результате прерывания? Или в начале каждой sequence point прерывание запрещать, а потом разрешать?

Сообщение отредактировал vromanov - May 14 2007, 00:11
Go to the top of the page
 
+Quote Post
zhevak
сообщение May 14 2007, 00:19
Сообщение #3


Знающий
****

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



Цитата(vromanov @ May 14 2007, 06:07) *
А то, что значение переменной может поменяться в результате прерывания? Или в начале каждой sequence point прерывание запрещать, а потом разрешать?

не-е, ну... предполагается, что переменная i -- это обычная переменная, не volatile. Определена внутри какой-нибудь функции, т.е. размещается либо на стеке, либо в регистрах МП. Иначе говоря, никто из вне ее торкнуть не может.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
vromanov
сообщение May 14 2007, 00:22
Сообщение #4


Участник
*

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



Цитата(zhevak @ May 14 2007, 04:19) *
не-е, ну... предполагается, что переменная i -- это обычная переменная, не volatile.

Про исходный пример все ясно. Так просто нельзя писать, т.к. результат по стандарту не определен. Мы уже про другое.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zhevak   фича компиляторв   May 11 2007, 11:25
- - vromanov   Тут все просто. По стандарту результат исполнения ...   May 11 2007, 11:29
|- - 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
- - amw   В пост #4 при компилляции добавляем -Wall и получа...   May 14 2007, 07:34


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 07:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016