`

C和C++混合编程

 
阅读更多

1.#pragma once
关于#pragma once ,VC
++及G++都支持,大胆的用吧。


导出类型必须一致.要么是C的,要么是C++
2.__cplusplus
这个是必须的
#ifdef __cplusplus
extern “C” {
#endif

// Routines Here

#ifdef __cplusplus
}
#endif

c++中调用c的代码
1、对于 C++ 中非类的成员函数,可以简单的在函数声明前面加 extern "C" ,通常函数声明位于头文件中,当然也可以将声明和函数定义一起放在 cpp 中 ,在没有声明的情况下,直接在定义前添加 extern "C" 也可

2、对于 C++ 类的成员函数,则需要另外做一个 cpp 文件,将需要调用的函数进行包装 。
要实现 C++ 中调用 C 的代码,具体操作:

对于 C 中的函数代码,要么将 C 代码的头文件进行修改,在其被含入 C++ 代码时在声明中加入 extern "C" 或者在 C++ 代码中重新声明一下 C 函数,重新声明时添加上 extern "C" 头 。

通过以上的说明,我明白一点,那就是加 extern "C" 头一定是加在 C++ 的代码文件中才能起作用的 。
下面分析一下这个现象的实质原因:

C 编译器编译函数时不带函数的类型信息,只包含函数符号名字,如 C 编译器把函数 int a(float x) 编译成类似 _a 这样的符号, C 连接器只要找到了调用函数的符号,就可以连接成功,它假设参数类型信息是正确的,这是 C 编译连接器的缺点。而 C++ 编译器为了实现函数重载,编译时会带上函数的类型信息,如他把上面的 a 函数可能编译成 _a_float 这样的符号为了实现重载,注意它还是没有带返回值得信息,这也是为什么 C++ 不支持采用函数返回值来区别函数重载的原因之一,当然,函数的使用者对函数返回值的处理方式(如忽略)也是重要原因。

基于以上, C 调用 C++ ,首先需要用封装函数把对 C++ 的类等的调用封装成 C 函数以便 C 调用,于是 extern "C" 的作用是:让编译器知道这件事,然后以 C 语言的方式编译和连接封装函数 (通常是把封装函数用 C++ 编译器按 C++ 方式编译,用了 extern "C" 后,编译器便依 C 的方式编译封装接口,当然接口函数里面的 C++ 语法还是按 C++ 方式编译;对于 C 语言部分 -- 调用者,还是按 C 语言编译;分别对 C++ 接口部分和 C 部分编译后,再连接就可以实现 C 调用 C++ 了 )。相反 ,C++ 调用 C 函数, extern "C" 的作用是:让 C++ 连接器找调用函数的符号时采用 C 的方式 ,即使用 _a 而不是 _a_float 来找调用函数

转:http://www.cppblog.com/aaxron/archive/2011/04/19/144526.html

分享到:
评论

相关推荐

    c和c++混合编程代码

    在IT领域,C和C++混合编程是一种常见的实践,尤其在需要利用C语言的高效性和C++的面向对象特性时。下面将详细讲解C和C++混合编程的相关知识点。 首先,C和C++混合编程的核心在于它们之间的兼容性。C++是C语言的一个...

    通用Makefile,适用于C/C++混合编程

    针对C和C++混合编程的项目,通用Makefile显得尤为重要,因为它可以有效地处理这两种语言之间的差异,简化构建流程。 标题“通用Makefile,适用于C/C++混合编程”指出,这些Makefile设计的目标是处理同时包含C和C++...

    object-c和c++混合编程的项目研究

    将 Objective-C 和 C++ 结合起来进行混合编程可以带来许多优势,特别是在需要高性能和灵活性的项目中。这种混合编程通常发生在 iOS 或 macOS 开发中,因为 Objective-C 是苹果平台的主要编程语言之一,而 C++ 则提供...

    c.c++混合编程

    在IT行业中,C和C++混合编程是一种常见的技术实践,特别是在需要利用C++的面向对象特性与C语言的高效性能的场景下。标题"**c.c++混合编程**"所指的就是这种技术,它允许开发者在同一个项目中同时使用C和C++语言,以...

    linux C与C++混合编程通用makefile

    支持Linux 下 C与C++混合编程的makefile 。

    C/C++和C#混合编程

    通过上述步骤,我们可以看到C/C++与C#混合编程的实现方法不仅可行,而且在实际应用中具有很高的灵活性和实用性。托管C++作为一种桥梁技术,在实现跨语言调用方面发挥了关键作用,使得开发者能够在充分利用各自语言...

    C#与C++混合编程.pdf

    总结来说,C#与C++混合编程不仅需要对两种语言本身有深入的理解,还需要掌握如何在不同的编程范式和运行环境中进行有效沟通。托管C++作为一个混合体,其能够生成中间语言代码以及调用本地代码的特性,为我们提供了一...

    QML 和C++混合编程宝典.zip_C语言能实现gui编程吗

    通过"QML与C++混合编程.docx"和"QML与C++混合编程.pdf"这两份文档,读者可以深入理解QML和C++的协同工作原理,学习如何在实际项目中有效地运用这两种技术。无论是初学者还是经验丰富的开发者,这份资料都将提供宝贵...

    MATLAB与C++混合编程程序

    MATLAB与C++混合编程是一种将两者的优势结合起来的编程方式,允许开发者利用MATLAB的强大数学计算能力和C++的高效执行速度以及系统级访问能力。在实际应用中,这种混合编程模式常见于高性能计算、嵌入式系统以及需要...

    MATLAB与C_C++混合编程 张亮 2008年

    《MATLAB与C/C++混合编程》是一本由张亮于2008年编著的专业书籍,...总之,《MATLAB与C/C++混合编程》是一本深入浅出的指南,它将帮助读者充分利用MATLAB的便捷性和C/C++的性能,解决复杂计算问题,提升软件开发效率。

    MATLAB与C_C++混合编程

    本书介绍了使用MATLAB与C/C++语言进行混合编程的各种接口和技术,主要内容包括使用C/C++语言调用MATLAB引擎进行混合编程,使用MAT文件实现MATLAB和C/C++语言的数据共享,使用C/C++语言编写C-MEX文件供MATLAB调用,在...

    MATLAB与C_C++混合编程之MATLAB调用C程序

    总之,MATLAB与C/C++混合编程是一种强大的技术,能够结合MATLAB的易用性和C/C++的高性能。通过编写MEX函数,我们可以利用C/C++的效率来加速MATLAB的计算,同时保持MATLAB的交互性和灵活性。熟练掌握这一技术,将极大...

    Makefile标准模板,清晰明了,支持c和c++混合编程

    在给定的场景中,`Makefile`支持C和C++的混合编程,这意味着它可以处理`.c`(C语言)和`.cpp`(C++语言)源文件。通常,C++编译器`g++`能够处理这两种类型的源文件,因为C是C++的子集,所以C代码可以在C++环境中编译...

    Matlab与C_C++混合编程技术研究.pdf

    在科研和工业开发中,混合编程尤其重要,因为它能够结合不同语言的特定优势,比如Matlab的强大的数学计算、数据分析和可视化能力,以及C/C++的高效运行时性能。 Matlab与C/C++的混合编程技术可以在多个层面上实现,...

    C/C++混合编程例程

    这是一个很好的学习实例,可以帮助你理解和掌握C/C++混合编程的技术。 总的来说,C/C++混合编程是一种实用的技术,它允许我们在保留C语言的高效性的同时利用C++的高级特性。通过正确地设置接口和管理内存,我们可以...

    Object-C、C、C++混合编程

    在IT行业中,Object-C、C和C++的混合编程是一种常见的技术实践,特别是在开发iOS和macOS应用程序时,因为Apple的开发环境Xcode支持这三种语言的集成。这篇博文(虽然链接不可用)可能探讨了如何有效地在这些语言之间...

    MATLAB与C C++混合编程.part1.rar

    《MATLAB与C/C++混合编程》由张亮等所著,本书介绍了使用MATLAB与C/C++语言进行混合编程的各种接口和技术,主要内容包括使用C/C++语言调用MATLAB引擎进行混合编程,使用MAT文件实现MATLAB和C/C++语言的数据共享,...

    汇编程序设计与C_C++混合编程

    ### 汇编程序设计与C/C++混合编程 #### 知识点概览 - **混合编程概念**:在程序开发中,特别是在系统级编程领域,常常会遇到需要使用不同编程语言的情况,以结合各自的优势。混合编程指的是在同一程序中使用两种或...

    C#C++混合编程示例(C#调用非托管C++类)

    C#和C++混合编程可以充分利用两者的优点,如C#的高级特性与C++的底层控制。理解如何在C#中调用非托管C++类对于跨语言开发和优化性能的应用至关重要。VS2010为此提供了良好的支持,使得这个过程更加顺畅。

    C++与Simulink混合编程(Engine方式)

    本主题聚焦于"C++与Simulink混合编程(Engine方式)",这种技术允许开发者利用C++的强大性能和面向对象特性,同时结合Simulink的动态系统建模能力。Matlab Engine API提供了这样的桥梁,使得C++能够直接调用Simulink...

Global site tag (gtag.js) - Google Analytics