繁体   English   中英

是否可以将函数指针与函数进行相等性比较?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM