c - *(NULL) 是否按 C99 标准编译成功?

标签 c c99

我明白这段代码永远不应该被执行,但是 *(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/

相关文章:

c - argv 和波兰语符号计算器

c - function_name(int * pn)和function_name(int * pn)有什么区别?

c - 使用函数调用初始化静态变量会产生编译错误?

android - YUV 缓冲区转换为 RGB 的内存分配

c - 当我将标志 "-std=c99"添加到 minwg32 时会发生什么?

c - 关于我的模块化代码在 C 中使用 void* 作为动态数据类型的几个问题

c - 是否有 GCC 关键字允许结构重新排序?

c - 如何检测用户是否在菜单中输入字母

c++ - C99 stdint.h 头文件和 MS Visual Studio

c++ - __func__ 值在 C 和 C++ 之间的区别