如何在全局数组声明中声明sysconf返回值?
问题描述:
我写了一个程序来维护所有打开的文件描述符的细节。如何在全局数组声明中声明sysconf返回值?
因此,我使用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 option.After预处理工程检查,程序看起来像这样
int arr[sysconf(_SC_OPEN_MAX)];
main()
{
printf("%ld \n",sysconf(_SC_OPEN_MAX));
}
这是我的问题如何在全局声明数组。
答
最简单的方法是动态地分配使用malloc()
数组:
int *arr;
int main(void) {
arr = malloc(sysconf(_SC_OPEN_MAX) * sizeof(int));
...
free(arr);
}
,你现在所拥有的将工作,但前提是arr
声明的函数内部进行的代码。然后它将使用名为variable-length arrays的C99功能。
答
您无法在编译时定义大小未知的全局数组。
最简单的解决方案是定义一个全局指针,并将其分配给在main
开头分配的内存。
谢谢....它会非常全用于我.... – RoCkStUnNeRs 2012-01-30 12:34:13