我理解这个代码永远不应该被执行但是*(NULL)通过C99标准成功编译了吗?
#include <stdio.h>
int main(void) {
*(NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
PS:在ideone上运行它返回0但我不知道正在使用的编译器版本:(
如果NULL被定义为简单0(允许),那么*(0)是违反约束并且必须被诊断.如果NULL定义为((void *)0)然后*((void *)0)调用未定义的行为(通过解除引用空指针)并且编译器不需要发出任何诊断,但程序也不需要按照您期望的方式运行.