[英]how to declare the sysconf return value in global array declaration?
我写了一个程序来维护所有打开的文件描述符细节。
因此,我使用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));
}
这是我的问题如何在全局声明数组。
最简单的选择是使用malloc()
动态分配数组:
int *arr;
int main(void) {
arr = malloc(sysconf(_SC_OPEN_MAX) * sizeof(int));
...
free(arr);
}
你现在拥有的代码可以工作,但只有在函数内声明了arr
。 然后它将使用称为可变长度数组的C99功能。
您无法定义编译时未知的大小的全局数组。
最简单的解决方案是定义一个全局指针,并将其分配给在main
的开头分配的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.