繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM