我写了一个程序来维护所有打开的文件描述符的详细信息。
因此,我使用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));
}
这是我的问题,如何在global中声明数组。
最简单的选项是使用malloc()
:动态分配阵列
int *arr;
int main(void) {
arr = malloc(sysconf(_SC_OPEN_MAX) * sizeof(int));
...
free(arr);
}
您现在拥有的代码可以工作,但前提是arr
是在函数内部声明的。然后,它将利用C99的功能,称为可变长度阵列。
不能定义编译时未知大小的全局数组。
最简单的解决方案是定义一个全局指针,并将其分配给main
开头分配的内存。