我们可以在C中现有的函数中声明和定义一个函数吗?


void function(int entry, int x1, int x2)
{
void (*new_func)(int n1, int n2);
new_func = (void (*)(int, int)) entry;

new_func(x1,x2);

}

假设我们有这个函数,有一个函数new_func,它被声明和定义,并从函数内部调用。允许这样做吗?这可能吗?

此代码正在编译,但在调试时似乎退出。

首先,new_func不是一个函数,它是一个函数指针。

您在问题中显示的代码片段将int值转换为void (*)(int, int)类型的函数指针并将其分配给new_func:

new_func = (void (*)(int, int)) entry;

但是你没有提到什么参数传递给function()函数的entry参数。
您是否将函数指针类型转换为int并将其作为第一个参数传递给函数function()?

根据传递给function()函数的第一个参数的值,你的程序可以有实现定义的行为或未定义的行为。

从<<p> em> C11 # 6.3.2.3p5

5整型可以转换为任意类型的指针。除非前面指定,否则结果是实现定义的,可能没有正确对齐,可能没有指向引用类型的实体,并且可能是陷阱表示。67)

从<<p> em> C11 # 6.3.2.3p6

6任何指针类型都可以转换为整型。除前面指定的情况外,结果是由实现定义的。如果结果不能用整数类型表示,则该行为未定义。结果不需要在任何整数类型的值范围内。

嵌套函数不是标准的一部分。然而,一些编译器将其作为扩展来支持。比如gcc。点击这里了解更多关于C中的嵌套函数

然而,这不是这里发生的事情。在你的代码中,它是一个函数指针。在这里阅读更多:C中的函数指针是如何工作的?

如果没有看到完整的代码,我会说entry可能有错误的类型。应该是intptr_tuintptr_t。什么是uintptr_t数据类型?

相关内容

  • 没有找到相关文章

最新更新