Где расширение V ++ для g ++? - PullRequest
0 голосов
/ 11 ноября 2010

Мой вопрос связан с этой веткой.

Вот код

#include <stdio.h>

int main(int argc, char *argv[printf("Hello, world!\n")]) {}

Я случайно сохранил его как файл *.cpp и попытался скомпилировать его с помощью g++. Но я получил ошибку и предупреждение.

error: expected ',' or '...' before 'argv'
warning: second argument of 'int main(int, char*)' should be 'char ** '

Я знаю, что приведенный выше код не является стандартным C ++ [размер массива должен быть константным выражением в C ++], но Я всегда думал, что g++ поддерживает массив переменной длины как расширение. Где я не прав?

P.S .: Приведенный выше код компилируется с CLang ++

C:\Users\SUPER USER\Desktop>type check.cpp
#include <stdio.h>

int main(int argc, char *argv[printf("Hello, world!\n")]) {}
C:\Users\SUPER USER\Desktop>clang++ check.cpp

C:\Users\SUPER USER\Desktop>

1 Ответ

6 голосов
/ 11 ноября 2010

g ++ позволяет (опять же, как расширение) VLA.Я думаю, что это просто не позволяет им в списках параметров.Это компилируется в g ++ 4.4.1.

#include <stdio.h>

int main(int argc, char *argv[])
{
    char *array[printf("Hello, world!\n")];
}
...