我有以下两种结构:
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}
可能只是语法糖,但被认为是“最佳实践”?
答案 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 };
初始化就可以了。
如果你想要更复杂的东西,我建议不要初始化,而是设置代码
只需编写一个设置所需内容的函数,然后调用它即可。对于初始化你可以做的任何事情都会更加简单,可读和可靠。
你的宏,尽量让它们变得漂亮,对我来说似乎是不好的做法。