You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中能否在函数内声明并定义函数?相关代码疑问

C代码问题解答

先明确核心误解:这段代码没有声明或定义new_func函数,void (*new_func)(int n1, int n2);是声明了一个函数指针变量,它的作用是指向一个「接受两个int参数、返回值为void」的函数。

1. 这种写法是否被允许?

合法,符合C语言标准。函数指针的声明、整数到函数指针的强制转换(平台允许的前提下)、通过函数指针调用函数,都是C语法允许的操作。

2. 是否可行?

可行性完全取决于传入的entry参数:

  • 如果entry确实是某个符合void(*)(int,int)类型的函数的地址(比如通过(int)&目标函数传入,且平台支持函数地址转int),那么调用new_func(x1,x2)可以正常执行目标函数,是可行的。
  • 如果entry是随机值、无效地址,或者对应的内存不是合法的可执行代码,那么调用行为属于未定义行为,程序必然出问题。

3. 编译正常但调试时程序退出的原因

编译通过是因为代码没有语法错误,编译器只会检查语法合规性,不会验证地址有效性。调试时退出的核心原因是传入的entry不是有效的函数地址:

  • 可能传入的entry是无意义的整数,转成函数指针后指向了无效内存,执行new_func(x1,x2)时触发内存访问错误(比如段错误),被系统强制终止。
  • 也可能是平台上函数指针的长度和int类型长度不匹配(比如64位系统中函数指针占8字节,int占4字节),转换时丢失了高位地址,导致最终的函数指针指向错误区域,执行时崩溃。

内容的提问来源于stack exchange,提问作者abssyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:12:47