我最近遇到了GCC的错误,无法用一些东西来初始化{0}
.在该错误报告中,报告它的人说:
C标准库中的经典示例是mbstate_t:
mbstate_t state = { 0 }; /* correctly zero-initialized */
Run Code Online (Sandbox Code Playgroud)
与常见但不可移植的:
mbstate_t state;
memset(&state, 0, sizeof state);
Run Code Online (Sandbox Code Playgroud)
虽然我更喜欢并尝试使用{0}
初始化的东西为零,但我已经使用过,并且已经看到其他人使用,该memset
版本将某些东西设置为零.我过去没有遇到任何可移植性问题.
问题:memset
在这里使用真的不便携吗?如果是这样,在什么情况下会不便携?
(T)0
对于浮点和指针类型,不保证按位为零.因此,如果您将memset
其中一个归零,那么您将获得最佳实现定义的内容.
这个问题列出了一些空指针不是按位为零的机器.
我相信Cray做了几个机器的例子,其中按位零没有使你的浮点数为零.