Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

Размер массива структур

#c


Вот такой код в CodeBlock работает без ошибок

typedef struct exmpl{
   int index; 
   char name[50];   
   int count; 
   } result;

   int size;
   scanf("%d", &size);

   result data[size];


Но в Visual Studio выдает ошибки


  error C2057: expected constant expression 
  
  error C2466: cannot allocate an array of constant size 0 
  
  error C2133: 'data' : unknown size


Как я понимаю проблема не в IDE а в стандартах С или компиляторах ?
    


Ответы

Ответ 1



Где именно вы объявляете ваш массив? Если ваш массив объявлен локально, то вы пытаетесь использовать Variable Length Arrays (VLA) - свойство языка С начиная с версии С99. Компилятор MSVC не поддерживает VLA, даже несмотря на то, что в современном MSVC поддержка С99 реализована [почти] полностью. Стандарт С11 сделал VLA опциональным свойством языка, так что возможно мы никогда и не увидим их поддержки в MSVC. В нелокальных же областях VLA объявляться не может.

Ответ 2



Нету в стандарте C массивов с динамическим выделением. Это была одноразовая слабость, реверанс в сторону фортранщиков, которую поддержали в GCC, который и применятся в CBlocks (дрянная кстати IDE, имеет самый дубовый конфигуратор проектов в этой части вселенной). Так вот, хотите динамику - либо malloc/realloc/free, либо C++ и STL.

Комментариев нет:

Отправить комментарий