Как я могу включить использование VLA, массивов переменной длины, как определено в C99, в MS Visual C ++ или это вообще невозможно?
Да, я знаю, что стандарт C ++ основан на C89 и что VLA недоступны в стандарте C89 и, следовательно, недоступны в C ++, но MSVC ++ также должен быть компилятором C, поведение, которое можно включить с помощью / Параметр компилятора TC (Compile as C Code (/TC)
). Но это, похоже, не включает VLA, и процесс компиляции завершается с теми же ошибками при сборке, что и C ++ (Compile as C++ Code (/TP)
). Может быть, компилятор MSVC ++ C совместим только с C89, или мне что-то не хватает (какая-то специальная конструкция или прагма / определение)?
Пример кода:
#include <stdlib.h>
int main(int argc, char **argv)
{
char pc[argc+5];
/* do something useful with pc */
return EXIT_SUCCESS;
}
Ошибки компиляции:
ошибка C2057: ожидаемое постоянное выражение
ошибка C2466: невозможно выделить массив постоянного размера 0
ошибка C2133: 'pc': неизвестный размер
std::vector
вместо VLA. Однако совет не помогает решить этот вопрос из-за требования C. - person jww   schedule 15.09.2018