考虑这个程序:
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 提示
warning: assignment from incompatible pointer type
我想知道这是 Keil 编译器中的错误还是实际上是一种符合 C90 标准的处理方法。
更新:根据 this answer on C99 , 对应的转换是合法的。但是如果你调用函数指针,你会得到未定义的行为。这是否意味着转让也是合法的?
最佳答案
真正的问题是您为什么要这样做?
当你调用指向 func2
的 fp1
时,func2
将返回垃圾,因为参数 2 没有被传递(它会是堆栈上或 CPU 寄存器中的某个随机值)。
关于c - 具有不同参数列表的函数指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200762/