[英]Can I compare a function pointer to a function for equality?
这是有效的C99代码吗? (我想我在问它是否可携带)
void test(void){
return;
}
void (*fp)(void) = test;
if (fp == test){ <--- This line
printf("Success\n");
}
我只收集可以比较的相同类型的指针,所以也许我的问题是像“ test”这样的函数名称是否只是指针别名? 也许有人可以告诉我我的问题比我能做到的更好:)
该代码是有效的ANSIC。
实际上发生的是,函数名称(例如代码中的test
会自动转换为函数的指针。
您可以将test
更改为&test
,结果是相同的。
是的,很好。 在这种情况下,C标准很容易解释(C11 6.3.2.1/4):
函数指示符是具有函数类型的表达式。 除非是
sizeof
运算符或一元&
运算符的操作数,否则将类型为“函数返回类型”的函数指定符转换为具有类型为“函数返回指针的指针”的表达式。
在您的情况下, test
是具有函数类型的表达式。 它被转换为void(*)(void)
类型的函数指针。 这是与fp
兼容的指针类型,因此==
运算符允许它。
关于相等运算符==
,标准说(C11 6.5.9,重点是):
当且仅当两个都是空指针,并且两个指针都是指向同一对象的指针(包括指向对象和位于其开头的子对象的指针)或函数时 , 两个指针的比较结果相等 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.