给C++函数形参传入一个C类型的函数指针

简介: 给C++函数形参传入一个C类型的函数指针

/*

   C++Primer这本书上书上是说C++接收C的函数指针时,必须用typedef定义一个和传入的C的函数同类型的一个函数类型别名,用这个类型的指针作为函数形参,

   编译器才知道传入的是一个C函数,如果不用typedef直接写成函数指针的形式则会编译不过,但是我刚刚试了一下是可以用的!!应该是现代编译器做了混合链接的优化处理。


下面是演示代码:


extern"C" typedef void (CFUNC)(int a, int b);
typedef int CPPFUNC(int a, int b);
extern"C" void CFunction(int a, int b)
{
    printf("[a:%d],[b:%d]",a,b);
}
int CPPFunction(int a, int b)
{
    printf("[a:%d],[b:%d]", a, b);
    return a + b;
}
void GetCFunctionPointer(CFUNC*p)
{
    p(111, 222);
}
void GetCPPFunctioPointer(CPPFUNC * p)
{
    p(666, 777);
}
void Call()
{
    GetCFunctionPointer(CFunction);
}
void CallCppFunc()
{
    GetCPPFunctioPointer(CPPFunction);
}
    Call();
    CallCppFunc();
*/


相关文章
|
6天前
|
存储 C语言 C++
如何通过指针作为函数参数来实现函数的返回多个值
在C语言中,可以通过将指针作为函数参数来实现函数返回多个值。调用函数时,传递变量的地址,函数内部通过修改指针所指向的内存来改变原变量的值,从而实现多值返回。
|
6天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
6天前
|
存储 搜索推荐 C语言
如何理解指针作为函数参数的输入和输出特性
指针作为函数参数时,可以实现输入和输出的双重功能。通过指针传递变量的地址,函数可以修改外部变量的值,实现输出;同时,指针本身也可以作为输入,传递初始值或状态。这种方式提高了函数的灵活性和效率。
|
10天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
21天前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
41 6
|
21天前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
18 0
C++ 多线程之线程管理函数
|
23天前
利用指针函数
【10月更文挑战第2天】利用指针函数。
15 1
|
24天前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
24 1
|
25天前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
31 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
21天前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
19 0