msc*_*msc 2 c types pointers compare
在C编程中,比较两种不同类型的指针,如下所示:
int i = 1;
double d = 2.5;
int *ip = &i;
double *dp = &d;
if(ip != dp) // is it UB?
printf("Not same\n");
Run Code Online (Sandbox Code Playgroud)
是ip != dp
未定义用C行为?
C中的直接比较ip != dp
无效.!=
运算符的规范在一次比较中不允许混合int *
和double *
指针.它是C中的约束违规(又称"编译错误").符合标准的C编译器将通过发出诊断消息将您的代码报告为无效.
接下来发生的事情仅取决于您的编译器.它与C语言无关.
将此代码称为"产生未定义行为的C代码"会产生误导.这是正式的,但它与说"War and Piece"的文本是"产生未定义行为的C代码"(在一些接受它的奇怪C编译器中)完全一样.
这里的关键点是这种代码语言约束意味着它根本不是C代码.