C++/C互相调用误区

       最近被问到自己常用什么语言编程,我说用C语言,然后被问你做嵌入式的C怎样调用C++库,这个问题还真没想过,查阅资料整理了下。

准备了两个文件test.h、test.c

test.h

#ifndef __TEST_H__

#define __TEST_H__

int add(int a, int b);

#endif

test.c

#include "test.h"

int add(int a, int b)

{

    return (a + b);

}

       熟悉的人都知道C++函数重载编译时会带参数类型,和C语言编译生成的函数会不一样。习惯用CMakeLists.txt去编译程序,然后文件名也用的“.cpp”(cc),在编译时会使用g++编译器,不涉及到C++调用C的问题,可以直接调用。若果文件名用的“.c”,使用CMakeLists.txt编译时会使用gcc编译器,生成的so不能直接被g++编译器直接调用,应用程序在引用“test.h”头文件时需做如下处理,告诉编译器这段代码用C语言编译。

#ifdef __cplusplus

extern "C"{

#include "test.h"

}

#endif

#include <stdio.h>

int main()

{

    int a = 10;

    int b = 20;

    printf("%d + %d = %d\n", a, b, add(a, b));

    return 0;

}

       同样的,如果用C语言调用C++库,需要对C++库头文件做如下处理(调用别人的库需要二次封装,引用第三方库头文件时做同样处理,并使用g++编译)。

#ifndef __TEST_HPP__

#define __TEST_HPP__

#ifdef __cplusplus

extern "C"{

int add(int a, int b);

}

#endif

#endif

       原谅我这个老菜鸟平时没有注意那么多细节,只是觉得自己用的就是C语言,在CMakeLists.txt非常好用的情况下,没有关心编译细节问题。简单记录了下自己的心得,描述不准确的地方大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值