怎样编写能够被C调用的C++函数
2010-09-02 13:58
232 查看
比如你用C++编写了某个函数
/* a.hpp */
void f(int i, char c, float x);
/* a.cpp */
#include "a.hpp"
void f(int i, char c, float x)
{
}
你想用g++编译该函数 g++ -c a.cpp ,这样编译出来的a.o是无法被gcc用来链接的,由于cpp和c的调用约定和name mangling的不同,为了达到目的,我们可以这么修改a.hpp
/ * a.hpp */
#ifdef __cplusplus
extern "C" {
#endif
void f(int i, char c, float x);
#ifdef __cplusplus
}
#endif
同时在编译的时候比如关闭一些c++特有选项,比如g++ -fno-exceptions,最终编译出来的a.o就能够被gcc链接成功了。
/* a.hpp */
void f(int i, char c, float x);
/* a.cpp */
#include "a.hpp"
void f(int i, char c, float x)
{
}
你想用g++编译该函数 g++ -c a.cpp ,这样编译出来的a.o是无法被gcc用来链接的,由于cpp和c的调用约定和name mangling的不同,为了达到目的,我们可以这么修改a.hpp
/ * a.hpp */
#ifdef __cplusplus
extern "C" {
#endif
void f(int i, char c, float x);
#ifdef __cplusplus
}
#endif
同时在编译的时候比如关闭一些c++特有选项,比如g++ -fno-exceptions,最终编译出来的a.o就能够被gcc链接成功了。
相关文章推荐
- 条款5:了解C++默认编写并调用哪些函数
- C++默认编写并调用的函数
- Effective C++ 条款05:了解C++编写并调用哪些函数
- 条款5、了解C++默默编写并调用了哪些函数
- [effictive c++]条款05 了解c++默默编写并调用哪些函数
- Item 5:了解C++默默编写并调用哪些函数【effective C++读书笔记】
- c++怎样让返回对象的函数不调用拷贝构造函数
- 条款5.了解c++默默编写并且调用了哪些函数。
- Effective C++:条款05:了解C++默默编写并调用哪些函数
- C++ 了解C++默默编写并调用哪些函数(构造 析构 拷贝构造 拷贝赋值)
- C++默默编写并调用哪些函数
- 条款05:了解C++默默编写并调用哪些函数
- 读书笔记_Effective_C++_条款五:了解C++默默编写并调用哪些函数
- Effective C++ 条款5:了解C++默默调用并编写了哪些函数
- effective c++ 条款05 了解C++默默编写和调用了哪些函数
- Effective C++——》条款5:了解C++默默编写并调用哪些函数 .
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- (4)了解C++默默编写并调用了哪些函数
- 【Effective C++】条款5:了解C++默默编写并调用哪些函数
- C++自己编写头文件类与函数的调用(超简单实例)