![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
molchanoviv |
![]()
Сообщение
#1
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: ![]() ![]() ![]() |
Сегодня на работе во время ожидания окончания очередной антивирусной проверки на просторах интернета наткнулся на такую штуку
При компиляции этого кода gcc выдает undefined behaviour и в кач-ве результата i=7, а интел хавает все без варнингов и результат i=6 Выводы делаем сами и желательно отписываем сюда. |
|
|
kuler |
![]()
Сообщение
#2
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
кто то не соответствует стандарту
|
|
|
Tonal |
![]()
Сообщение
#3
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Оба соответствуют.
Это действительно undefined behaviour. Результат может быть любой в зависимости от компилятора и его опций. |
|
|
void* |
![]()
Сообщение
#4
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
Я как-то заметил еще одну интересную вещь. Не помню точно, какая версия, но компилятор из VS(cl.exe) не поддерживает динамические массивы такого типа(а они есть в стандарте), в то время как g++ тут не имеет проблем:
|
|
|
AD |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Я как-то заметил еще одну интересную вещь. Не помню точно, какая версия, но компилятор из VS(cl.exe) не поддерживает динамические массивы такого типа(а они есть в стандарте), в то время как g++ тут не имеет проблем:
Известный факт! ![]()
|
|
|
void* |
![]()
Сообщение
#6
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Tonal |
![]()
Сообщение
#7
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
В стандарте динамических массивов нет - это расширение gcc.
Так что тут и микрософт и багланд как раз более соответствуют стандарту. ![]() |
|
|
Novak |
![]()
Сообщение
#8
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
void* |
![]()
Сообщение
#10
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
В стандарте динамических массивов нет - это расширение gcc. Ясно, спасибо буду теперь знать. Просто очень давно сталкивался с этим, вот и подзабыл детали этой проблемы. П.С. Кстати а может кто-нибудь привести реальные примеры непридерживания стандартов компилятором от Borland (интересно просто)? |
|
|
Tonal |
![]()
Сообщение
#11
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
П.С. Кстати а может кто-нибудь привести реальные примеры непридерживания стандартов компилятором от Borland (интересно просто)? У меня была большая подборка багов для багланда. Основная масса в поддержке шаблонов и исключений. Не зря половина boost-а багландом не компилится. Насколько она актуальна сейчас - не в курсе - слез с него уже довольно давно. Мой любимый:
На bcc 5.6.4 (C++Builder 6 sp4) и раньше вызывается деструктор несозданного объекта... Причём эта кочующая бага. Я на неё нарывался со статическими объектами и с тернарным оператором. Как оно сейчас - просто не в курсе. |
|
|
Andrew Selivanov |
![]() ![]()
Сообщение
#12
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Субъективное впечатление:
Mingw (3.4.5) не особо любит когда весь код пихают прямо в хидер. И большие инлайны тоже плохо переваривает. А вот темплейты (например из Boost) кушает без вопросов! Причём похоже что проблема на уровне линкера... и в известных багах этого вроде нет. А может у меня просто руки кривые ![]() |
|
|
molchanoviv |
![]()
Сообщение
#13
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: ![]() ![]() ![]() |
Не в курсе как тройка, а вот 4-ка отлично все переваривает.
|
|
|
Kagami |
![]()
Сообщение
#14
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
molchanoviv |
![]()
Сообщение
#15
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: ![]() ![]() ![]() |
Я в основном пользую линукс. В винду загружаюсь очень редко(да и снес бы ее давно если бы мой младший брат не играл в игры)
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 15:52 |