Как сделать компиляцию успешной для программы с массивом переменной длины? (в настоящее время отображается ошибка: массив переменного размера). Я использую gcc в линуксе. Как сделать компилятор совместимым со стандартом c99? Пожалуйста, помогите мне в этом. Заранее спасибо.
Ошибка компиляции массива переменной длины с GCC
Ответы (2)
Как сделать компилятор совместимым со стандартом c99?
По умолчанию компилятор по умолчанию устанавливает наиболее совместимую версию версии C. Укажите явно версию компиляции, скомпилируйте программу с помощью следующей командной строки:
$ gcc -std=c99 -o my_program my_program.c
Определив -std=c99
, компилятор будет использовать стандарт C99
.
Изменить. Если вы по-прежнему получаете предупреждение, а не ошибку, вам нужно предоставить свой код, чтобы узнать, что именно не так.
-std=c99
должен работать правильно. Кроме того, отредактируйте вопрос и добавьте всю информацию после ввода команды gcc -v
в терминале.
- person Rohan Bari; 06.07.2020
-std=c99
предупреждение не исчезнет. Компилятор просто намекает.
- person RobertS supports Monica Cellio; 06.07.2020
gcc
. Это не лязг.
- person Rohan Bari; 06.07.2020
-std=c99
удалило предупреждение. Я просто пытаюсь выяснить, что здесь происходит. Да, недостающий код досаден и невыгоден.
- person RobertS supports Monica Cellio; 06.07.2020
Как сделать компиляцию программы с массивом переменной длины успешной? (в настоящее время отображается ошибка: массив переменного размера).
Обычно компиляция кода с VLA не является ошибкой, если вы не компилируете с флагом -Werror
.
Диагностика, которую вы получаете, скорее всего, всего лишь предупреждение о том, что вы используете внутри нее VLA, что рискованно.
Таким образом, компилятор информирует вас об этом.
Итак, вы действительно можете скомпилировать программу с VLA без ошибок.
Если у вас есть ошибки, они должны принадлежать чему-то другому. Мы не можем найти их, так как вы не указали конкретный код.
Взгляните на этот мой вопрос, не так давно (даже если он для Clang, он охватывает ту же тему, поскольку ответы предполагают, что компилятор может жаловаться на все, что ему нравится):
Почему clang жалуется на использование массивы переменной длины с флагом '-std=c99'?
Всю полезную информацию вы можете найти там.
VLA не переносимы. Попробуйте использовать альтернативы, например, динамически выделяемые массивы с помощью malloc()
.
Связанный:
Как сделать компилятор совместимым со стандартом C99?
Как уже сказал Рохан в своем ответе, для этого вы можете использовать флаг -std-c99
при вызове gcc. Но это, вероятно, не решит вашу проблему.