我编写了一个用于维护所有打开文件描述符详细信息的程序。
因此,我使用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));
}
这是我如何在全局声明数组的问题。
答案 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
开头分配的内存。