具有不同参数列表的函数指针赋值

时间:2013-03-04 11:43:44

标签: c types function-pointers keil

考虑这个程序:

int func2(char x, char y)
{
    return x+y;
}

int (*fp1)(char);

void main() 
{ 
    fp1 = func2; /* func2 has one more argument than fp1 */
} 

最终作业是否符合C90标准?

Keil C51 v9.06接受程序时没有警告,而gcc抱怨

  

警告:从不兼容的指针类型

分配

我想知道这是否是Keil编译器中的错误,或者实际上是符合C90的处理方式。

更新:根据this answer on C99,相应的演员是合法的。但是如果调用函数指针,则会得到未定义的行为。这是否意味着作业也是合法的?

2 个答案:

答案 0 :(得分:1)

真正的问题是你为什么要这样做?

一旦你指向fp1时调用func2func2将返回垃圾,因为参数2未被传递(它将是堆栈上的一些随机值,或者在CPU寄存器中。)

答案 1 :(得分:0)

当你使用函数指针fp1构建函数func2的调用时,堆栈上只传递一个值,但实际上,function2也会在堆栈上引用第二个值。所以任何一个程序都会给出分段错误和失败。或者,如果没有失败,第二个参数将具有垃圾值。