【发布时间】:2018-04-24 02:41:03
【问题描述】:
在 C 编程中,像这样比较两种不同类型的指针:
int i = 1;
double d = 2.5;
int *ip = &i;
double *dp = &d;
if(ip != dp) // is it UB?
printf("Not same\n");
ip != dp 在 C 中是未定义的行为吗?
【问题讨论】:
-
1.为什么不自己查标准呢? 2. 你为什么要这样做?
-
是的,我花了整整 40 秒才找到。 port70.net/~nsz/c/c11/n1570.html#6.5.9p2
-
@EugeneSh。那么你的答案是什么,UB,实现定义,有效且始终不相等?
-
引用如下:两个操作数都是指向兼容类型的合格或不合格版本的指针;
-
这是 C 语言中的constaint 违规。 IE。您发布的代码无效。它不能编译为 C。这是标准的责任范围结束的地方。其他一切都只是您特定编译器的怪癖。