【发布时间】:2010-05-04 10:32:19
【问题描述】:
int valid (int x, int y) {
return x + y;
}
int invalid (int x) {
return x;
}
int func (int *f (int, int), int x, int y) {
//f is a pointer to a function taking 2 ints and returning an int
return f(x, y);
}
int main () {
int val = func(valid, 1, 2),
inval = func(invalid, 1, 2); // <- 'invalid' does not match the contract
printf("Valid: %d\n", val);
printf("Invalid: %d\n", inval);
/* Output:
* Valid: 3
* Invalid: 1
*/
}
在inval = func(invalid, 1, 2); 行,为什么我没有收到编译器错误?如果func 期望一个指向采用 2 个 int 的函数的指针,而我将一个指向采用单个 int 的函数的指针传递给一个指针,为什么编译器不抱怨?
另外,既然发生了这种情况,那么invalid 函数中的第二个参数y 会发生什么变化?
【问题讨论】:
-
只是出于好奇...上面的程序输出正确吗?
-
是的,确实如此……这就是我问的原因。
-
您是否在编译时出现警告?
标签: c pointers function function-pointers