URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 37449
[ Назад ]

Исходное сообщение
"OpenNews: Релиз GCC 4.2"

Отправлено opennews , 16-Май-07 19:17 
Вышел (http://gcc.gnu.org/) релиз новой ветки набора компиляторов GCC 4.2 (http://gcc.gnu.org/gcc-4.2/).


Особенности новой версии (http://gcc.gnu.org/gcc-4.2/changes.html):
-  Удалена опция -fshared-data;
-  В компиляторы C, C++ и Fortran добавлена поддержка техники параллельного программирования OpenMP (http://gcc.gnu.org/projects/gomp/).
-  Новые опции -fstrict-overflow и -Wstrict-overflow для управления поведением при переполнении переменной;
-  Новая опция -fno-toplevel-reorder отключающая перегруппировку порядка следования top-level функций, переменных и asm вставок.
-  В преддверии появления в GCC 4.3 поддержки описанного в стандарте C99 метода обработки inline функций, GCC 4.2 выдает предупреждение при использовании нестатичных inline  функций.
- Другие привязанные к определенным архитектурам или языкам изменения (http://gcc.gnu.org/gcc-4.2/changes.html).


URL: GCC 4.2
Новость: http://www.opennet.me/opennews/art.shtml?num=10782


Содержание

Сообщения в этом обсуждении
"Релиз GCC 4.2"
Отправлено celz , 16-Май-07 19:17 
Ну наконец то в релизе нативно OpenMP, с ноября ждал!

"Релиз GCC 4.2"
Отправлено Аноним , 17-Май-07 00:13 
Народ!
Объясите, почему, если i = 5, то
++i + ++i
даёт 14??
Ведь как я понимаю (пошагово)
1)++i даёт 6
2)затем 6 складывается с ++i,
а т.к. ++i увеличит значение i до выполнения какой-либо другой операции, то получается, что 6 складывается с (6 + 1).
Должно тогда получаться 13??
А все говорят: 14.
Объясните С-новичку :(

"Релиз GCC 4.2"
Отправлено Acron , 17-Май-07 01:05 
>>а т.к. ++i увеличит значение i до выполнения какой-либо другой операции, то получается, что 6 складывается с (6 + 1)
не 6, а i складывается с (6+1).
А 6+1 и есть i. Следовательно, в итоге имеем: 7+7=14
i первая и i вторая это одна и та же ячейка памяти.

"Релиз GCC 4.2"
Отправлено Xan , 17-Май-07 01:38 
Что, опять эта задачка?
Причина в том, что компилятор использует оптимизацию с помощью регистров.
volatile int i = 5;
решит эту проблему и результат будет по стандарту - 13.

"Релиз GCC 4.2"
Отправлено Anton , 17-Май-07 03:18 
Не надо людям мозги пудрить. Не разбираешься - молчи лучше... "Оптимизация с помощью регистров" ровно как и "volatile" здесь абсолютно не к месту. А к месту здесь стандарт C++, который утверждает следующее:

Chapter 5 Expressions
...
4 Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take place, is unspecified.58) Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored. The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full expression; otherwise the behavior is undefined. [ Example:

i = v[i ++]; / / the behavior is undefined
i = 7 , i++ , i ++; / / i becomes 9
i = ++i + 1; / / the behavior is undefined
i = i + 1; / / the value of i is incremented

—end example ]

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


"Релиз GCC 4.2"
Отправлено Ф , 17-Май-07 10:55 
в с++ временное значение в выражении возвращает по ссылке, а не по значению.
а по стандарту - это не определенное поведение

"Релиз GCC 4.2"
Отправлено Dvorkin , 17-Май-07 23:19 
тоже любитель анального юмора?
http://community.livejournal.com/ru_programming/750836.html

"Релиз GCC 4.2"
Отправлено blob , 20-Май-07 12:38 
Почему? Вы работаете с ОДНОЙ ячейкой памяти. правильный ответ == 14. Неужели Вы этого не видите :)

"Релиз GCC 4.2"
Отправлено horsh , 17-Май-07 03:01 

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


6.5 Expressions

...

2  Between the previous and next sequence point an object shall have its stored value modified AT MOST ONCE by the evaluation of an expression. Furthermore, the prior value shall be read only to determine the value to be stored.71)

...

71) This paragraph renders undefined statement expressions such as

i = ++i + 1;
a[i++] = i;

while allowing

i = i + 1;
a[i] = i;


"Релиз GCC 4.2"
Отправлено Xumorist , 19-Май-07 00:06 
Да уж - в постах о выходе компилятора обсуждают прикол с bash.org.ru :-D
Пацтулом :)

"Релиз GCC 4.2"
Отправлено Ламер , 19-Май-07 13:13 
>Да уж - в постах о выходе компилятора обсуждают прикол с bash.org.ru
>:-D
>Пацтулом :)

Кстати, этот прикол не на одном форуме программеров сейчас обсуждается. :)



"Релиз GCC 4.2"
Отправлено Аноним , 18-Июн-07 18:20 
Для того, чтобы понять, надо стать компилятором.
1) Пробелы убрали
2) Слева направо делаем разбор выражения
   а) ++i это префисный инкремент                           ++i  == 6
   б) затем два плисика подряд это постфиксный инкркмент    i++  == 7
   в) затем еще плюс это, наконец, сложение                 i+i  7 + 7 == 14

"Релиз GCC 4.2"
Отправлено Аноним , 01-Июл-07 17:37 
13 получится если поставить скобки :

(++i)+(++i) == 13