结构零初始化方法

Big*_*gle 3 c memset

struct datainfo info = { 0 };
Run Code Online (Sandbox Code Playgroud)

与...相同

struct datainfo info;
memset(&info, 0, sizeof(info));
Run Code Online (Sandbox Code Playgroud)

有什么区别,哪个更好?

Bat*_*eba 6

第一种是最好的方法,因为它可以保证struct成员被初始化,因为它们将用于static存储。也更清楚。

从标准的角度来看,虽然特定的编译器可能会最终优化第一种方法到第二种方法,但即使它最终破坏了作为padding丢弃的部分内存,也无法保证这两种方法是等效的。

(请注意,在C ++中,第二种方式的行为很可能不确定。是的,C不是C ++,但是相当一部分C代码确实倾向于最终移植到C ++。)

  • 老实说,也许我只是在说C ++程序员,但是我发现`{}`比`{0}`格式更清晰。可耻的C不接受第一种形式(没有GNU扩展名)。 (2认同)