Я пытаюсь скомпилировать приведенный ниже код, используя

gcc -c -g -std=c99 -MMD -MP -MF "build/Debug/Cygwin_4.x-Windows/main.o.d" -o build/Debug/Cygwin_4.x-Windows/main.o main.cpp

В приведенном ниже коде в функции func используется VLA, который, как мне кажется, должен поддерживаться c99, который, как мне кажется, я использую с помощью флага -std = c99.

Проблема в том, что когда я запускаю это, я получаю следующее предупреждение и ошибки:

cc1plus: предупреждение: параметр командной строки '-std = c99' допустим для C / ObjC, но не для C ++

main.cpp: 11: 35: ошибка: использование параметра вне тела функции перед токеном ']' void func (int a, int b, int arry [a] [b]) { ^

main.cpp: 11: 38: ошибка: использование параметра вне тела функции перед токеном ']' void func (int a, int b, int arry [a] [b]) {

Первое предупреждение заставляет меня задаться вопросом, пытается ли gcc скомпилировать код как c или c ++. Второе заставляет меня думать, что есть проблема с использованием функций VLA, хотя я понимаю, что c99 должен поддерживать это.

Код:

void func(int a, int b, int arry[a][b]){
 //Do stuff
}


int main(int argc, char** argv) {

    int setSize=6;
    int sets[setSize][setSize]={0};

    func(setSize,setSize,sets);

    return 0;
}

ABD

Ответов: 1

Ответы (1)

gcc является компилятором Gnu Collection и может выступать в качестве внешнего интерфейса для большего, чем просто C (хотя без использования специфической для языка прокладки может произойти сбой без передачи дополнительных параметров, если он работает вообще).

Если ваш файл не имеет правильного расширения, вы можете явно указать язык с помощью -x, например, -xc в вашем случае.

Однако предпочтительным вариантом было бы исправить имя файла.

2022 WebDevInsider