【发布时间】:2022-01-07 04:58:25
【问题描述】:
来自this comment in GCC bug #53119:
在 C 中,
{0}是通用零初始化器,等效于 C++ 的{}(后者在 C 中无效)。每当您想要一个完整但概念上不透明或实现定义类型的零初始化对象时,都必须使用它。 C标准库中的经典例子是mbstate_t:mbstate_t state = { 0 }; /* correctly zero-initialized */相对于普通但不便携:
mbstate_t state; memset(&state, 0, sizeof state);
让我感到奇怪的是,后一个版本可能是不可移植的(即使对于实现定义的类型,编译器也必须知道大小)。这里有什么问题,memset(x, 0, sizeof x) 何时不可移植?
【问题讨论】:
标签: c portability memset