Ошибка компиляции массива переменной длины с GCC

Как сделать компиляцию успешной для программы с массивом переменной длины? (в настоящее время отображается ошибка: массив переменного размера). Я использую gcc в линуксе. Как сделать компилятор совместимым со стандартом c99? Пожалуйста, помогите мне в этом. Заранее спасибо.


person Dhana Prakaash    schedule 06.07.2020    source источник
comment
С достаточно новой версией GCC он автоматически будет использовать более позднюю версию стандарта C. Какую версию вы используете? Что ты пытаешься сделать? Пожалуйста, отредактируйте свой вопрос, включив в него минимально воспроизводимый пример вашего кода, а также полное копирование и вставка (в виде текста) ваших ошибок (с комментариями, добавленными в код, где вы получаете ошибки).   -  person Some programmer dude    schedule 06.07.2020
comment
Также, пожалуйста, найдите время, чтобы прочитать страницы справки, возьмите SO тур, прочитайте Как спросить, а также этот контрольный список вопросов.   -  person Some programmer dude    schedule 06.07.2020
comment
было бы быстрее прочитать диагностическое сообщение, которое говорит вам, что делать, чем писать этот вопрос ...   -  person M.M    schedule 06.07.2020
comment
@MM Обычно предупреждение VLA просто намекает на то, что в своем коде используются VLA. Он не говорит вам, что делать, чтобы удовлетворить компилятор. Если вы не знаете, что такое VLA и каковы его преимущества или недостатки, у вас проблемы. Просить об этом абсолютно уместно.   -  person RobertS supports Monica Cellio    schedule 06.07.2020


Ответы (2)


Как сделать компилятор совместимым со стандартом c99?

По умолчанию компилятор по умолчанию устанавливает наиболее совместимую версию версии C. Укажите явно версию компиляции, скомпилируйте программу с помощью следующей командной строки:

$ gcc -std=c99 -o my_program my_program.c

Определив -std=c99, компилятор будет использовать стандарт C99.

Изменить. Если вы по-прежнему получаете предупреждение, а не ошибку, вам нужно предоставить свой код, чтобы узнать, что именно не так.

person Rohan Bari    schedule 06.07.2020
comment
Да, я пробовал. До сих пор никаких изменений в результате. Спасибо!!! - person Dhana Prakaash; 06.07.2020
comment
@DhanaPrakaash Тогда вам нужно показать свой код, мы точно не знаем, что делает ваш код, и флаг -std=c99 должен работать правильно. Кроме того, отредактируйте вопрос и добавьте всю информацию после ввода команды gcc -v в терминале. - person Rohan Bari; 06.07.2020
comment
@RohanBari Даже с -std=c99 предупреждение не исчезнет. Компилятор просто намекает. - person RobertS supports Monica Cellio; 06.07.2020
comment
@RobertSsupportsMonicaCellio, VLA поддерживаются в стандарте C99, не так ли? - person Rohan Bari; 06.07.2020
comment
@RohanBari stackoverflow.com/questions/61825661/ - person RobertS supports Monica Cellio; 06.07.2020
comment
@RobertSsupportsMonicaCellio, наверное, вопрос помечен gcc. Это не лязг. - person Rohan Bari; 06.07.2020
comment
@RohanBari Он охватывает ответы, которые любой компилятор может сообщить вам о том, что ему нравится делать. Я просил clang, но ответы понятны для любого компилятора в большей части. - person RobertS supports Monica Cellio; 06.07.2020
comment
@RohanBari Это также объясняет, почему при выполнении OP предполагаемая ошибка не исчезает -› Все еще никаких изменений в результате. Я все еще немного смущен ошибкой, которую, кажется, получает OP. Использование VLA не должно вызывать никаких ошибок. - person RobertS supports Monica Cellio; 06.07.2020
comment
@RobertSsupportsMonicaCellio Да, это явно не ошибка. Я просто ответил - как сделать компилятор совместимым со стандартом c99 и это возможный способ убрать предупреждение VLA. Однако я уже попросил код у ОП, чтобы понять, что на самом деле происходит. - person Rohan Bari; 06.07.2020
comment
@RohanBari Я ничего не имею против твоего ответа. Вполне возможно, что использование -std=c99 удалило предупреждение. Я просто пытаюсь выяснить, что здесь происходит. Да, недостающий код досаден и невыгоден. - person RobertS supports Monica Cellio; 06.07.2020
comment
@RohanBari Также ваш ответ отлично отвечает: Как сделать компилятор совместимым со стандартом c99? - Может быть, вам следует подчеркнуть это и разделить оба вопроса. - person RobertS supports Monica Cellio; 06.07.2020

Как сделать компиляцию программы с массивом переменной длины успешной? (в настоящее время отображается ошибка: массив переменного размера).

Обычно компиляция кода с VLA не является ошибкой, если вы не компилируете с флагом -Werror.

Диагностика, которую вы получаете, скорее всего, всего лишь предупреждение о том, что вы используете внутри нее VLA, что рискованно.

Таким образом, компилятор информирует вас об этом.

Итак, вы действительно можете скомпилировать программу с VLA без ошибок.

Если у вас есть ошибки, они должны принадлежать чему-то другому. Мы не можем найти их, так как вы не указали конкретный код.

Взгляните на этот мой вопрос, не так давно (даже если он для Clang, он охватывает ту же тему, поскольку ответы предполагают, что компилятор может жаловаться на все, что ему нравится):

Почему clang жалуется на использование массивы переменной длины с флагом '-std=c99'?

Всю полезную информацию вы можете найти там.

VLA не переносимы. Попробуйте использовать альтернативы, например, динамически выделяемые массивы с помощью malloc().

Связанный:


Как сделать компилятор совместимым со стандартом C99?

Как уже сказал Рохан в своем ответе, для этого вы можете использовать флаг -std-c99 при вызове gcc. Но это, вероятно, не решит вашу проблему.

person RobertS supports Monica Cellio    schedule 06.07.2020