我明白这段代码永远不应该被执行,但是 *(NULL)
是否按照 C99 标准成功编译?
#include <stdio.h>
int main(void) {
*(NULL);
return 0;
}
PS:在 ideone 上运行它返回 0 但我不知道正在使用的编译器版本:(
最佳答案
如果 NULL
被简单地定义为 0
(这是允许的),那么 *(0)
是一个约束违规并且必须被诊断.如果 NULL
被定义为 ((void *)0)
那么 *((void *)0)
调用未定义的行为(通过取消引用 null指针)并且编译器不需要发出任何诊断,但程序也不需要按照您期望的方式运行。
关于c - *(NULL) 是否按 C99 标准编译成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432585/