2016-11-24 47 views
0

我需要初始化修復大小的數組很多時候,就像這樣:更智能的數組初始化方法?

for(uint16_t q=0; q<SIZE; q++) 
    array[q]=value; 

數組定義爲float array[SIZE];

是否有這樣做的一個更好的方式,宏或類似的更換?

p.s. 不允許使用mem___來電。

+3

還有什麼比這一點,並沒有'memset'或'memcpy'更好?什麼類型是'數組'? – i486

+4

這是在編譯時已知的「值」還是你得到它的運行時間? – Swanand

+5

請定義「更好」。 –

回答

0

隨着預處理器,你可以這樣做:

#define nmembers(x) (sizeof(x)/sizeof(*(x))) 
#define arrset(arr, val) \ 
    do { \ 
     size_t i; \ 
     for (i = 0; i < nmembers(arr); ++i) \ 
      (arr)[i] = val; \ 
    } while (0) 

float array[SIZE], val = 0.67f; 
arrset(array, val); 
+0

爲什麼你會寫這樣一個醜陋的宏這麼簡單的事?只要寫一個簡單的循環,結尾的故事。沒有必要混淆遺忘的代碼。 – Lundin

+0

想象一下那些循環。這看起來更好:'INITIALIZE(myarr,SIZE,0.0f);'你不覺得。 – Danijel

+0

@Danijel不,它看起來非常糟糕。 C程序員理解C代碼,他們不理解「我的私人祕密宏語言」。存在C中沒有辦法,可以讓你寫這更優雅比'爲(我的size_t = 0; I Lundin

0

C沒有內置的方式來初始化整個陣列的一些非零值。

如果使用GCC,它有Designated Initializers擴展。您可以使用它像:

float widths[] = { [0 ... 99] = 3.14 }; 

這個集合的所有元素來3.14