C++程序的C语言接口
来源:互联网 发布:孙鑫的java视频教程 编辑:程序博客网 时间:2024/06/14 05:26
有时候我们得到一个C++库,但却要在C语言中使用该库中的函数,或者想编一个在C语言下也容易使用的C++库。
首先我们写两个文件,分别是foo.cpp和main.c,
先看main.c
void g(void);
int main()
{
g();
return 0;
}
int main()
{
g();
return 0;
}
只是简单声明了函数g(),再在main()中调用。
g() 在foo.cpp中定义
#include <iostream>
using namespace std;
class Foo {
int i;
public:
Foo(int i = 0);
void print();
};
Foo::Foo(int i) : i(i) {}
void Foo::print()
{
cout << "Foo " << i << endl;
}
extern "C" {
void g(void)
{
Foo foo;
foo.print();
}
}
using namespace std;
class Foo {
int i;
public:
Foo(int i = 0);
void print();
};
Foo::Foo(int i) : i(i) {}
void Foo::print()
{
cout << "Foo " << i << endl;
}
extern "C" {
void g(void)
{
Foo foo;
foo.print();
}
}
定义了一个类Foo,在g()中实例化了一个foo,使用print()方法打印一些信息。
我们所要作的就是在g()函数外加上extern "C" {和},这样C++编译器在编译g()的时候会以C语言的方式来生成g()的内部名,这样连接器才能在C语言目标代码中找到g()的引用。
在GCC下编译:
gcc -c main.c
g++ -c foo.cpp
g++ main.o foo.o
g++ -c foo.cpp
g++ main.o foo.o
在MSVC中编译
cl foo.cpp main.c
上面foo.cpp中的g()声明和定义是在一块儿的,其实只要在函数声明上加上extern "C"就行了,所以我们可以把声明提取到一个头文件foo.h中去。
foo.h
#ifndef FOO_H
#define FOO_H
#ifdef __cplusplus
extern "C" {
#endif
void g(void);
#ifdef __cplusplus
}
#endif
#endif /* FOO_H */
#define FOO_H
#ifdef __cplusplus
extern "C" {
#endif
void g(void);
#ifdef __cplusplus
}
#endif
#endif /* FOO_H */
foo.cpp
#include "foo.h"
#include <iostream>
using namespace std;
class Foo {
int i;
public:
Foo(int i = 0);
void print();
};
Foo::Foo(int i) : i(i) {}
void Foo::print()
{
cout << "Foo " << i << endl;
}
void g(void)
{
Foo foo;
foo.print();
}
#include <iostream>
using namespace std;
class Foo {
int i;
public:
Foo(int i = 0);
void print();
};
Foo::Foo(int i) : i(i) {}
void Foo::print()
{
cout << "Foo " << i << endl;
}
void g(void)
{
Foo foo;
foo.print();
}
main.c
#include "foo.h"
int main()
{
g();
return 0;
}
int main()
{
g();
return 0;
}
- C++程序的C语言接口
- C语言编写的接口程序
- C语言编写的接口程序
- 用C语言编写简单的接口程序
- Matlab与C语言程序的应用编程接口
- Matlab与C语言程序的应用编程接口
- Matlab与C语言程序的应用编程接口
- c语言的程序
- MYSQL的C 语言接口
- MYSQL的C 语言接口
- c 语言小的程序
- fft的c语言程序
- 数码管的c语言程序
- c语言的搞怪程序
- c语言程序的运行
- 我的c语言程序
- 简单的C语言程序
- 我的C语言程序
- u-boot代码分析
- 切身感受Spring AOP的魅力
- 明朝时期中国取得的人类军事史的第一
- Struts2小结
- 用C语言模拟面向对象编程(转)
- C++程序的C语言接口
- ASP.NET程序中常用的三十三种代码
- 轻松一刻 - C++的思索(C++之父访谈录)
- 使用雅虎实现免费站内搜索(转载:车东)
- fighting
- C#25问
- 死蠢写给我的话
- 忘记XP登入密码的9种解决办法
- 使用javaScript和DOM操作svg元素