ansi c结构从c99初始化

时间:2016-04-29 11:06:35

标签: c migration structure

我正在转换C版本的代码,该代码允许内联变量声明并在结构类型变量初始化中使用数学到不允许它们两者的版本,我需要它们工作相同。我认为需要澄清的代码是:

// definitions

typedef struct poly poly_t;

struct poly
{
    size_t d;    /* degree */
    byte c[512]; /* coefficients */
};

// usage in the middle of the method 
// (contains non-declaring code before)

poly_t tmp = { 1, {1, gf_exp[i]} };

我将其转换为:

poly_t tmp; // at the beginning of function scope

// then at the same spot of previous declaration

tmp.d = 1;
tmp.c[0] = 1;
tmp.c[1] = gf_exp[i];

这是初始化此结构的正确方法吗?

我需要他们两个在变量中初始化相同的值。

1 个答案:

答案 0 :(得分:1)

他们并不完全相同。从tmp.c[2]tmp.c[511]的变量未初始化,并且包含垃圾。

您可以使用= {0}

强制进行零初始化
poly_t tmp = {0}; // Set all elements to zero
tmp.d = 1;
tmp.c[0] = 1;
tmp.c[1] = gf_exp[i];

或者,您可以使用初始化程序设置第一个元素:

poly_t tmp = {1}; // Set tmp.d to 1, and other elements to zero
tmp.c[0] = 1;
tmp.c[1] = gf_exp[i];