xiv*_*r77 5 c function-pointers undefined-behavior language-lawyer
我们可以将特定签名的函数地址放入函数指针中,该函数指针被定义为具有其他签名并无缝使用吗?
例如,以下代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
得到编译并在我的机器上运行良好.我是以某种方式调用未定义的行为吗?
要在通话print_n(p)中print_n_wrapper 被定义的,因为所有你正在做的是转换void*其最初是int*一个int*
作业f = print_n;会给你带来麻烦.虽然分配的规定,对后续调用的行为f(&n) 是不确定的.