【发布时间】:2015-07-24 11:41:34
【问题描述】:
我们可以将特定签名的函数地址放入定义为具有其他签名的函数指针中并无缝使用吗?
比如下面的代码
#include <stdio.h>
void print_n(int *pn) {
printf("%d\n", *pn);
}
void print_n_wrapper(void *p) {
print_n(p);
}
int main(void) {
int n = 123;
void (*f)(void *) = print_n_wrapper;
f(&n);
f = print_n;
f(&n);
return 0;
}
在我的机器上编译并运行良好。我是否以某种方式调用了未定义的行为?
【问题讨论】:
-
是的,您正在调用 UB。这些指针类型不兼容。
-
它可以找到,但编译器告诉你
warning: assignment from incompatible pointer type
标签: c function-pointers language-lawyer undefined-behavior