如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗

2023-06-29   


一般情况下, 不行。复杂之处在于, 有的机器不同类型数据的指针有不同的内
   部表达。这样的NULL 定义对于接受字符指针的的函数没有问题, 但对于其它类型的指针参数仍然有问题(在缺少原型的情况下), 而合法的构造如FILE *fp = NULL;则会失败。
   不过, ANSI C 允许NULL 的可选定义#define NULL ((void *)0)
   除了潜在地帮助错误程序运行(仅限于使用同样类型指针的机器, 因此帮助有限) 以外, 这样的定义还可以发现错误使用NULL 的程序(例如, 在实际需要使用ASCII NUL 字符的地方; )。无论如何, ANSI 函数原型确保大多数(尽管不是全部;)指针参数在传入函数时正确转换。因此, 这个问题有些多余。


相关内容:

  1. NULL是什么,它是怎么定义的
  2. 如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
  3. 在使用非全零作为空指针内部表达的机器上, NULL是如何定义
  4. int *p=NULL和*p= NULL有什么区别
  5. C语言面试题
  6. 用C语言实现文件读写操作