gpt4 book ai didi

c - 程序可能检测 NULL 是用整数还是指针类型定义的方式?

转载 作者:太空狗 更新时间:2023-10-29 16:32:35 24 4
gpt4 key购买 nike

C 允许将 NULL 定义为任何空指针常量,换句话说,任何整数常量表达式 的计算结果为 0,或者这样的表达式转换为 void *。我的问题涉及定义的选择是否真的很重要,即一个否则正确的程序是否可能取决于使用的定义。出于这个问题的目的,我想忽略像 NULL 传递给可变参数函数或缺少原型(prototype)的函数这样的问题,因为我已经单独处理过它。让我们假设 sizeof NULL == sizeof(void *)sizeof NULL == sizeof(T) 对于某些整数类型 T,这样 sizeof 不足以回答NULL 是否具有指针类型的问题。

显然,C11 提供了一种方法来区分NULL 或任何其他表达式的类型:_Generic 关键字。

C99 还提供了一种看似可靠的晦涩方法:

int null_has_ptr_type()
{
char s[1][1+(int)NULL];
int i = 0;
return sizeof s[i++], i;
}

NULL 的类型是否有任何其他方法可以由符合规范的 C 程序确定?有没有在 C89 中工作的?

最佳答案

通过问题、答案和评论,我认为我们建立了:

  1. C11 方式很简单 (_Generic)。
  2. 由于存在错误的编译器,C99 方式相当不可靠。
  3. 由于 typedef,字符串化方法是死胡同。
  4. 没有找到其他方法。

所以答案似乎是没有可靠的 C11 之前的方法,而且似乎没有有效的 C99 之前的方法。

关于c - 程序可能检测 NULL 是用整数还是指针类型定义的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14239969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com