如何解决C原语可以比void *宽吗?
我知道void*
可以容纳任何指针,但是我也想知道,使用强制转换它是否可以容纳除数组或结构(即基元和并集)以外的任何内容。这是对C(如果是哪个版本)的保证,或者只是特定于实现的东西甚至不是事情?
解决方法
我也想知道,使用强制转换是否可以容纳除数组或结构之外的任何东西,即基元和并集。这是C [...]的保证吗?
不,不是。作为反例,在32位CPU的C实现中,指针通常为32位宽, * ,但C要求类型long long int
至少为64位宽。 ** C在任何算术类型的大小上均不设置上限,在任何指针类型的大小上均不设置(显式)下限,因此,原则上,甚至short
也可能比void *
宽。
* ,例如GCC uses the pointer representation specified by the target application binary interface (ABI)。在x86 Linux上,这表示defines the size of an address as 4 bytes的x86 System V ABI。
** 根据当前C语言标准的5.2.4.2.1 / 1段,类型为long long int
的对象可表示的最大值必须至少为{{1} },即2 63 -1。如果还包括符号位,则9223372036854775807
至少需要64位。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。