const в C: невозможно выделить массив постоянного размера 0 - PullRequest
5 голосов
/ 09 июня 2011

Небольшой кусочек кода:

void func()
{
   const int BUF_SIZE = 5;
   char scale[BUF_SIZE];
}

Этот код хорошо построен под C ++, но под C у меня есть ошибки:

error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0

Почему?

Компилятор: Microsoft Visual C ++ 2008

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 09 июня 2011

В C (все варианты, я полагаю), const, по иронии судьбы, не является константным выражением в C. В версиях до C99 длины массивов должны быть константным выражением.

Однако в C99 есть концепция «массивов переменной длины», поэтому, если вы компилируете компилятор, совместимый с C99, ваш код должен быть допустимым, даже если BUF_SIZE не является константным выражением.

2 голосов
/ 09 июня 2011

Я бы сделал что-то вроде этого:

#define BUF_SIZE 5
void func(){
    char scale[BUF_SIZE];
}

Это будет делать то, что вам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...