所有位0都可以是整数的陷阱表示吗?

chq*_*lie 1 c calloc undefined-behavior language-lawyer

通常假设将对象初始化为所有位0是将其所有成员设置为的简单方法0.对于非整数类型,标准不保证这样:

  • 所有位零都可能不是指针的有效表示,即使是空指针,尽管所有常见的现代系统都使用它.
  • 所有位零可能不是浮点数的合法表示,尽管它在IEEE兼容系统上.

整数怎么样?是否完全定义了以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    int *p = calloc(sizeof(*p), 1);
    if (p) {
        printf("%d\n", *p);
        memset(p, 0, sizeof(*p));
        printf("%d\n", *p);
        free(p);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Eug*_*Sh. 10

C标准,6.2.6.2,整数类型

对于任何整数类型,所有位为零的对象表示应该是该类型中零值的表示.