在C中初始化嵌套结构 - 最佳实践

时间:2012-01-07 13:48:12

标签: c

我有以下两种结构:

typedef struct foo__
{
   double *cliendata;
   size_t len;
   size_t f1;
   size_t f2;
}Foo;

typedef struct foobar__
   Foo  a, b, c;
   char[SOME_DIM] name;
   size_t fb1;
   size_t fb2;
   char[SOME_DIM] address;
   Foo d;
   unsigned char id;
}FooBar;

我更喜欢使用EMPTY_FOOBAR2因为我认为它更“正确”(因为它初始化所有字段成员,加上,(我认为)它有助于代码可读性,因为它清楚地表明struct Foobar嵌套struct Foo以及一些字符串。

#define  EMPTY_FOO { NULL, 0, 0, 0}
#define  EMPTY_STRING  {""}
#define  EMPTY_FOOBAR1 { {0},{0},{0}, {""}, 0, 0, {""}, {0}, 0}

#define  EMPTY_FOOBAR2 { EMPTY_FOO, EMPTY_FOO, EMPTY_FOO, \
                         EMPTY_STRING, 0, 0, EMPTY_STRING,\
                         EMPTY_FOO, 0}

可能只是语法糖,但被认为是“最佳实践”?

2 个答案:

答案 0 :(得分:4)

只需使用“通用零初始化程序”:<type> <identifier> = {0};

int i = {0};
double x = {0};
char *pname = {0};
char name[100] = {0};
struct tm moment = {0};
struct foo__ one = {0};
struct foobar__ two = {0};

答案 1 :(得分:0)

如果用零初始化是可以的,那么C的默认= { 0 };初始化就可以了。

如果你想要更复杂的东西,我建议不要初始化,而是设置代码 只需编写一个设置所需内容的函数,然后调用它即可。对于初始化你可以做的任何事情都会更加简单,可读和可靠。

你的宏,尽量让它们变得漂亮,对我来说似乎是不好的做法。

相关问题