栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++/C互相调用误区

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

int main()

{

    int a = 10;

    int b = 20;

    printf("%d + %d = %dn", 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非常好用的情况下,没有关心编译细节问题。简单记录了下自己的心得,描述不准确的地方大家批评指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号