2011-04-23 59 views
1

foo是必須初始化的全局整數數組。如果將來我將SIZE更改爲6,那麼我將不得不手動添加兩個新的INIT_VALUE項目到初始化列表中。當SIZE的值改變時,是否有宏或其他東西可以用來在編譯時自動修改初始化列表?在編譯時初始化數組

#define SIZE 4 
#define INIT_VALUE 101 

/* global variable that must be initialized */ 
int foo[SIZE] = {INIT_VALUE, 
       INIT_VALUE, 
       INIT_VALUE, 
       INIT_VALUE}; 
+0

一般來說,foo可以是int或其他類型的數組 – Fernando 2011-04-23 11:04:48

+0

http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – 2011-12-04 13:56:38

+0

http://stackoverflow.com/questions/201101/how-to-initialize-an-array-in-c – 2011-12-04 14:03:10

回答

1

如果這INIT_VALUE不爲0,則不能初始化你所提到的方式排列(以支持未知元素)。我不認爲甚至有這樣一個選項來實現它使用宏,可能正確的方法是一個循環來初始化(在函數中)該數組(memset也不會幫助,如果你的值看起來不像0xYXYXYXYX(所有字節都是相同的))

+0

問題是,foo是一個全局變量,必須在使用模塊的任何函數之前進行初始化,因此使用函數來初始化它不是一個選項。 – Fernando 2011-04-23 13:37:37

+0

@Fernando - 問題是你不能。你有兩個選擇:1.在一個函數中初始化它(模塊的初始化)2.每次帽子大小改變時修改源代碼。 – MByD 2011-04-23 15:35:32