Поиск:

Ответ в темуСоздание новой темы Создание опроса
> gcc vs mvs08 разности при компиляции ? 
:(
    Опции темы
Remiznik
Дата 26.10.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



Извиняюсь за название темы не знаю как точно назвать !
    Вобшем занимался переносом одного проекта из Linux в Windows. А именно хотел прогнать код через компилятор mvs08. 
    И вот тут столкнулся с такой штукой .
Код

int chn;
short int  buf[ 512*chn ];


Этот код нормально собирается в gcc а вот в msv08 выдаёт ошибку. Как я помню нельзя задавать размер массива переменной и значит msv08 прав. Но почему же тогда gcc собирает нормально ? Или он находя такое определение автоматически переделывает его  динамический массив и сам следит за его удалением после выхода из области видимости ? 
PM MAIL   Вверх
niXman
Дата 26.10.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Remiznik, MSVC по ходу, не поддерживает С99(http://ru.wikipedia.org/wiki/C99)

Добавлено через 1 минуту и 33 секунды
Цитата(Remiznik @  26.10.2009,  11:48 Найти цитируемый пост)
Но почему же тогда gcc собирает нормально

Потому что поддерживает.

Цитата(Remiznik @  26.10.2009,  11:48 Найти цитируемый пост)
Или он находя такое определение автоматически переделывает его  динамический массив и сам следит за его удалением после выхода из области видимости ?

Вот тут не знаю. Был бы рад если бы кто-то более просвещенный внес ясность.
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
Remiznik
Дата 26.10.2009, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 30.4.2005

Репутация: нет
Всего: 1



Цитата(niXman @ 26.10.2009,  17:44)
Цитата(Remiznik @  26.10.2009,  11:48 Найти цитируемый пост)
Или он находя такое определение автоматически переделывает его  динамический массив и сам следит за его удалением после выхода из области видимости ?

Вот тут не знаю. Был бы рад если бы кто-то более просвещенный внес ясность.

          Это не утверждение это всеголиш моя догадка . Просто я бы удивлён когда mvs08 выдал ошибку . Пришлось импользовать динамические массивы.
PM MAIL   Вверх
niXman
Дата 26.10.2009, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 211
Регистрация: 4.7.2009

Репутация: нет
Всего: 0



Цитата(Remiznik @  26.10.2009,  16:37 Найти цитируемый пост)
Просто я бы удивлён когда mvs08

Я уже не удивляюсь. Микрософтовский компилятор вообще не особо следует стандартам  С/С++.
Если для изучения С++ тебе важно соответствие стандарту, то лучше использовать Comeau или Mingw
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
586
Дата 28.10.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Цитата(Remiznik @  26.10.2009,  13:48 Найти цитируемый пост)
Или он находя такое определение автоматически переделывает его  динамический массив и сам следит за его удалением после выхода из области видимости ?  

Нет. Память выделяется в стеке, как для обычных локальных переменных -- http://codepad.org/ddBj8wj5
Код
#include <stdio.h>

int c;

int main()
{
    int a;
    int b[rand()%10+2];
    int *p = (int*)malloc(4);
    printf("%p\n%p\n%p\n%p", &a, &b, &c, p);
    free(p);
    return 0;
}
Код
0xbf71c1e0
0xbf71c1b0
0x8049800
0x804a078

Первые два адреса находятся рядом, т.е., переменная a и массив b находятся в одной области памяти - в стеке.

Это сообщение отредактировал(а) 586 - 28.10.2009, 01:17
PM   Вверх
just_geek
Дата 29.10.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



Это одно из многочисленных расширений gcc, так что ничего удивительного. Я думаю ты бы не сильно удивился, воспользовшись майрософтскими расширениями и столкнувшись с проблемами при портировании под gcc...
PM MAIL   Вверх
andrew_121
Дата 29.10.2009, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(just_geek @  29.10.2009,  01:31 Найти цитируемый пост)
воспользовшись майрософтскими расширениями

Разница в том, что микрософтовские расширения не стандартны. А мы говорим про стандарт С99.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
just_geek
Дата 29.10.2009, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



Ну это если о С99 говорить, для С89 или С++ это работает в виде расширения. Ну и даже для С99, реализация не до конца соответствует стандарту (по крайней мере в доках gcc так написано smile )
PM MAIL   Вверх
andrew_121
Дата 29.10.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(just_geek @  29.10.2009,  02:18 Найти цитируемый пост)
Ну и даже для С99, реализация не до конца соответствует стандарту

Реализация С99 ?

Или реализация конкретно этого случая
Код

int chn;
short int  buf[ 512*chn ];

?

Это сообщение отредактировал(а) andrew_121 - 29.10.2009, 10:06


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
just_geek
Дата 29.10.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: нет
Всего: 10



да, реализация variable-length arrays.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.