如何在全局数组声明中声明sysconf返回值?

时间:2012-01-30 12:27:23

标签: c global-variables

我编写了一个用于维护所有打开文件描述符详细信息的程序。

因此,我使用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 个答案:

答案 0 :(得分:3)

最简单的选择是使用malloc()动态分配数组:

int *arr;

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

您现在拥有的代码工作,但只有在函数内声明了arr时才会这样做。然后它将使用名为variable-length arrays的C99功能。

答案 1 :(得分:0)

您无法定义编译时未知的大小全局数组。

最简单的解决方案是定义一个全局指针,并将其分配给main开头分配的内存。