c-如何在全局数组声明中声明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选项。预处理器工作后,程序看起来像这个

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开头分配的内存。

相关内容

  • 没有找到相关文章