【发布时间】:2014-06-26 23:29:30
【问题描述】:
我最近遇到了 GCC 的错误,它阻止使用 {0} 初始化某些东西。 In that bug report,举报人说:
C标准库中的经典例子是mbstate_t:
mbstate_t state = { 0 }; /* correctly zero-initialized */
相对于普通但不便携:
mbstate_t state;
memset(&state, 0, sizeof state);
虽然我更喜欢并尝试使用{0} 将某些内容初始化为零,但我已经使用并且看到其他人使用memset 版本将某些内容设置为零。我过去没有遇到任何可移植性问题。
问题:在这里使用memset 真的不便携吗?如果是这样,在什么情况下它是不可移植的?
【问题讨论】:
-
iiuc,该错误不会防止使用
={0}初始化结构;它只是提出了一个不必要的警告,可以通过所有通常的方式来抑制。当然,这是一个错误,它被标记为已解决(仅在报告发布两年后 :)) -
@rici:是的,你是对的。我使用
-Werror构建,所以有时我会忘记什么是通常的错误和什么是通常的警告。