热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

如何解决《标准是否定义空指针常量以将所有位设置为零?》经验,为你挑选了1个好方法。

(我引用的是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上有很多答案说这不是真的.

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

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



1> ouah..:

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

不,它没有.C标准的任何段落都没有规定这样的要求.

void *p = 0;

p例如,是一个空指针,但标准不要求该对象p必须设置所有位.

有关信息,c-faq网站提到了一些具有非零空指针表示的系统:http://c-faq.com/null/machexamp.html


推荐阅读
author-avatar
大--Man_815
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有