2012-01-30 118 views
4

我寫了一個程序來維護所有打開的文件描述符的細節。如何在全局數組聲明中聲明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)); 
} 

這是我的問題如何在全局聲明數組。

回答

3

最簡單的方法是動態地分配使用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

0

您無法在編譯時定義大小未知的全局數組。

最簡單的解決方案是定義一個全局指針,並將其分配給在main開頭分配的內存。