Как объявить возвращаемое значение sysconf в объявлении глобального массива? - PullRequest
4 голосов
/ 30 января 2012

Я написал программу для поддержки всех деталей дескриптора открытого файла.

Итак, я использовал функцию sysconf, чтобы получить разрешенный дескриптор максимального времени открытия файла во время выполнения.

если объявление массива не в глобальном значении, значит, оно не говорит об ошибке. Оно работает нормально.

Это моя программа,

#define MAX_CLIENT sysconf(_SC_OPEN_MAX)   
int arr[MAX_CLIENT];
main ()

{
 printf("%ld \n",MAX_CLIENT);
}

когда я делаю компиляцию это говорит об ошибке

error: variably modified ‘arr’ at file scope

Затем я проверил с помощью опции cc -E. После того, как препроцессор работает, программы выглядят так

int arr[sysconf(_SC_OPEN_MAX)];
main ()

{
 printf("%ld \n",sysconf(_SC_OPEN_MAX));
}

это моя проблема, как объявить массив в глобальном.

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Самый простой вариант - динамически распределить массив с помощью malloc():

int *arr;

int main(void) {
  arr = malloc(sysconf(_SC_OPEN_MAX) * sizeof(int));
  ...
  free(arr);
}

Код, который у вас есть сейчас , будет работать , но только если arr объявлено внутри функции. Затем он будет использовать функцию C99 под названием массивы переменной длины .

0 голосов
/ 30 января 2012

Нельзя определить глобальный массив по размеру, который не известен во время компиляции.

Самое простое решение - определить глобальный указатель и назначить его памяти, выделенной в начале main.

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