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++混合编程的例子代码可以直接运行里面的例子很丰富每一段都有注释和解释适合了解c和c++混合编程的人员了解
支持Linux 下 C与C++混合编程的makefile 。
这是对C/C++代码 封装 可以用C#调用。事实上,C系列中还存在一种语言叫做托管C++,这种语言语法上和C++几乎一样,但是却和C#一样编译成为微软中间语言,这样就可以和C#良好地通信,即可以在c#中使用托管C++类
包含两个通用的Makefile,原理比较类似,适用于.c、.cpp、.cc的C/C++混合编程,当然也适用于只有一种语言的工程,用户可以根据各自的工程目录,稍加修改便可使用。
本书介绍了使用MATLAB与C/C++语言进行混合编程的各种接口和技术,主要内容包括使用C/C++语言调用MATLAB引擎进行混合编程,使用MAT文件实现MATLAB和C/C++语言的数据共享,使用C/C++语言编写C-MEX文件供MATLAB调用,在...
MATLAB与C_C++混合编程 张亮 2008年 扫描电子书
《MATLAB与C/C++混合编程》由张亮等所著,本书介绍了使用MATLAB与C/C++语言进行混合编程的各种接口和技术,主要内容包括使用C/C++语言调用MATLAB引擎进行混合编程,使用MAT文件实现MATLAB和C/C++语言的数据共享,...
基于matlab与c和c++混合编程的电子书
汇编程序设计与C_C++混合编程 很薄的一本小书 但有时很有用。 个人原创书籍。
将在MATLAB中执行效率低的部分用C或C++实现,可提高MATLAB执行效率
Matlab与C_C++混合编程技术
qml与c++混合编程的简单例子,主要介绍了两种与c++混合编程的方式。
本文先通过介绍Matlab的接口技术引入Matlab与C/C++混合编程的先决条件,通过阐述不同编程环境下的缺点证实混合编程的需要,扬长避短发挥出Matlab与C/C++结合的最大优点。 然后,本文对混合编程技术进行深入探究,...
本文先通过介绍Matlab的接口技术引入Matlab与C/C++混合编程的先决条件,通过阐述不同编程环境下的缺点证实混合编程的需要,扬长避短发挥出Matlab与C/C++结合的最大优点。 然后,本文对混合编程技术进行深入探究,...
主要介绍了C和C++混合编程问题,需要的朋友可以参考下
更多请参考我的链接:http://blog.csdn.net/haohaojian/article/details/54630572
MATLAB与C C++混合编程.pdf
NULL 博文链接:https://45121739-163-com.iteye.com/blog/734980
C++和Java是主流的两种编程语言,但是现在整个网上对实现这两种语言混合编程的资料少之又少,却又说之不全,并且有时多种问题现在也含糊不清,对正在学习或使用这两种语言的朋友造成很大的困扰。本人的这篇拙作,...
附件是本人通过C++调用Matlab engine的方式写的DLL接口,通过接口可以直接调用simulink模型,比其他方式调用的优点是,不用再将模型生成代码或Dll