причуды компиляторов. |
Здравствуйте, гость ( Вход | Регистрация )
причуды компиляторов. |
molchanoviv |
20.2.2009, 11:15
Сообщение
#1
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
Сегодня на работе во время ожидания окончания очередной антивирусной проверки на просторах интернета наткнулся на такую штуку
При компиляции этого кода gcc выдает undefined behaviour и в кач-ве результата i=7, а интел хавает все без варнингов и результат i=6 Выводы делаем сами и желательно отписываем сюда. |
|
|
kuler |
20.2.2009, 11:18
Сообщение
#2
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
кто то не соответствует стандарту
|
|
|
Tonal |
20.2.2009, 11:41
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Оба соответствуют.
Это действительно undefined behaviour. Результат может быть любой в зависимости от компилятора и его опций. |
|
|
void* |
26.2.2009, 15:38
Сообщение
#4
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
Я как-то заметил еще одну интересную вещь. Не помню точно, какая версия, но компилятор из VS(cl.exe) не поддерживает динамические массивы такого типа(а они есть в стандарте), в то время как g++ тут не имеет проблем:
|
|
|
AD |
26.2.2009, 16:08
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Я как-то заметил еще одну интересную вещь. Не помню точно, какая версия, но компилятор из VS(cl.exe) не поддерживает динамические массивы такого типа(а они есть в стандарте), в то время как g++ тут не имеет проблем:
Известный факт! Borland на эту штуку тоже ругается! Лучше делать так - код воспримется любым компилятором:
|
|
|
void* |
26.2.2009, 16:32
Сообщение
#6
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
|
|
|
Tonal |
26.2.2009, 18:08
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
В стандарте динамических массивов нет - это расширение gcc.
Так что тут и микрософт и багланд как раз более соответствуют стандарту. |
|
|
Novak |
26.2.2009, 18:18
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: 6 |
|
|
|
Litkevich Yuriy |
26.2.2009, 18:47
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
void* |
26.2.2009, 21:06
Сообщение
#10
|
Программист-самоучка Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: 3 |
В стандарте динамических массивов нет - это расширение gcc. Ясно, спасибо буду теперь знать. Просто очень давно сталкивался с этим, вот и подзабыл детали этой проблемы. П.С. Кстати а может кто-нибудь привести реальные примеры непридерживания стандартов компилятором от Borland (интересно просто)? |
|
|
Текстовая версия | Сейчас: 14.1.2025, 0:00 |