| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > GNU toolchain > gcc vs mvs08 разности при компиляции ? |
| Автор: Remiznik 26.10.2009, 13:48 | ||
| Извиняюсь за название темы не знаю как точно назвать ! Вобшем занимался переносом одного проекта из Linux в Windows. А именно хотел прогнать код через компилятор mvs08. И вот тут столкнулся с такой штукой .
Этот код нормально собирается в gcc а вот в msv08 выдаёт ошибку. Как я помню нельзя задавать размер массива переменной и значит msv08 прав. Но почему же тогда gcc собирает нормально ? Или он находя такое определение автоматически переделывает его динамический массив и сам следит за его удалением после выхода из области видимости ? |
| Автор: Remiznik 26.10.2009, 18:37 | ||||
Это не утверждение это всеголиш моя догадка . Просто я бы удивлён когда mvs08 выдал ошибку . Пришлось импользовать динамические массивы. |
| Автор: niXman 26.10.2009, 22:38 |
Я уже не удивляюсь. Микрософтовский компилятор вообще не особо следует стандартам С/С++. Если для изучения С++ тебе важно соответствие стандарту, то лучше использовать http://www.comeaucomputing.com/ или http://sourceforge.net/projects/mingw/ |
| Автор: 586 28.10.2009, 00:53 | ||||||
Нет. Память выделяется в стеке, как для обычных локальных переменных -- http://codepad.org/ddBj8wj5
Первые два адреса находятся рядом, т.е., переменная a и массив b находятся в одной области памяти - в стеке. |
| Автор: just_geek 29.10.2009, 01:31 |
| Это одно из многочисленных расширений gcc, так что ничего удивительного. Я думаю ты бы не сильно удивился, воспользовшись майрософтскими расширениями и столкнувшись с проблемами при портировании под gcc... |
| Автор: andrew_121 29.10.2009, 02:12 |
Разница в том, что микрософтовские расширения не стандартны. А мы говорим про стандарт С99. |
| Автор: just_geek 29.10.2009, 02:18 |
| Ну это если о С99 говорить, для С89 или С++ это работает в виде расширения. Ну и даже для С99, реализация не до конца соответствует стандарту (по крайней мере в доках gcc так написано |
| Автор: andrew_121 29.10.2009, 10:05 | ||||
Реализация С99 ? Или реализация конкретно этого случая
? |
| Автор: just_geek 29.10.2009, 13:24 |
| да, реализация variable-length arrays. |