Почему мне разрешено использовать переменную const, определенную как размер массива в C?
Когда я запускаю следующий код, он отлично работает для C:
#include<stdio.h>
int main(void)
{
const int x=5;
char arr[x];
printf("%d",sizeof(arr));
}
Но я не только прочитал, что const
квалифицированные переменные не являются константами real
(поэтому они не могут использоваться в case
состоянии switch-case
), но следующая ссылка из IBM подтверждает, что (IBMLINK) и говорит:
const int k = 10;
int ary[k]; /* allowed in C++, not legal in C */
Почему тогда мне разрешено использовать квалифицированную переменную const
в C как размер массива без каких-либо ошибок?
Ответы
Ответ 1
c99
поддерживают массивы переменной длины, но c90
не поддерживает массивы переменной длины, это можно сделать более четко, если вы используете gcc
и пытаетесь скомпилировать эти аргументы:
gcc -std=c89 -pedantic
это даст вам следующее предупреждение:
warning: ISO C90 forbids variable length array ‘y’ [-Wvla]
но если вы скомпилируете с помощью c99
, это прекрасно:
gcc -std=c99 -pedantic
Как указано Джоном Боде в отношении стандартных массивов переменной длины 2011 C (VLA
), теперь необязательно. Вот статья Dr Dobbs о VLA, а также ссылка на gcc
docs, как указал Уэйн Конрад.