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

标签 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 提示

warning: assignment from incompatible pointer type

我想知道这是 Keil 编译器中的错误还是实际上是一种符合 C90 标准的处理方法。

更新:根据 this answer on C99 , 对应的转换是合法的。但是如果你调用函数指针,你会得到未定义的行为。这是否意味着转让也是合法的?

最佳答案

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

当你调用指向 func2fp1 时,func2 将返回垃圾,因为参数 2 没有被传递(它会是堆栈上或 CPU 寄存器中的某个随机值)。

关于c - 具有不同参数列表的函数指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200762/

相关文章:

c - 从 'char*' 到 'char [-fpermissive] 的转换无效

c - 为什么点分十进制的最后一个数字不转换为二进制?

c# - 检查账户类型

r - 将列转换为日期类型会更改原始值的年份

c++ - 了解编译器如何解析指向函数的指针

c++ - 将捕获的 lambda 作为函数指针传递

python - C zlib crc32 和 Python zlib crc32 不匹配

c++ - 将具有堆栈缓冲区的 printf 样式记录器转换为字符串流

Haskell 类型同义词声明可能有约束?

c - “返回”作为函数指针数组中的函数