相关疑难解决方法(0)

标准是否定义空指针常量以将所有位设置为零?

(我引用的是ISO/IEC 9899:201x)

在这里我们看到,整数常量表达式具有整数类型:

6.6常量表达式

6. 整数常量表达式应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的sizeof表达式,_Alignof表达式以及作为强制转换的直接操作数的浮点常量.整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为sizeof或_Alignof运算符的操作数的一部分.

这适用于任何整数类型:

6.2.6.2整数类型

5.未指定任何填充位的值.符号位为零的有符号整数类型的有效(非陷阱)对象表示是相应无符号类型的有效对象表示,并且应表示相同的值.对于任何整数类型,所有位为零的对象表示应该是该类型中零值的表示.

然后我们看到使用值为0的整数常量表达式定义空指针常量.

6.3.2.3指针

3. 值为0的整型常量表达式或类型为void*的表达式称为空指针常量.如果将空指针常量转换为指针类型,则保证将结果指针(称为空指针)与指向任何对象或函数的指针进行比较.

因此,空指针常量必须将其所有位设置为零.

但是在线和StackOverflow上有很多答案说这不是真的.

给出引用的部分,我很难相信他们.

(请使用最新标准的参考答案)

c standards language-lawyer

1
推荐指数
2
解决办法
550
查看次数

标签 统计

c ×1

language-lawyer ×1

standards ×1