更智能的阵列初始化方式?

时间:2016-11-24 13:34:06

标签: c arrays

我需要经常初始化一个修复大小的数组,如下所示:

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

数组定义为float array[SIZE];

有没有更好的方法可以做到这一点,取而代之的是宏观或类似的?

P.S。 不允许使用mem___来电。

2 个答案:

答案 0 :(得分:0)

C没有内置的方法将整个数组初始化为某个非零值。

如果您使用GCC,则其扩展名为Designated Initializers。您可以像使用它一样使用它:

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

这会将所有元素设置为3.14

答案 1 :(得分: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);