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

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

问题描述:

我写了一个程序来维护所有打开的文件描述符的细节。如何在全局数组声明中声明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 option.After预处理工程检查,程序看起来像这样

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声明的函数内部进行的代码。然后它将使用名为variable-length arrays的C99功能。

+0

谢谢....它会非常全用于我.... – RoCkStUnNeRs 2012-01-30 12:34:13

您无法在编译时定义大小未知的全局数组。

最简单的解决方案是定义一个全局指针,并将其分配给在main开头分配的内存。