C/C++教程

C++/C互相调用误区

本文主要是介绍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非常好用的情况下,没有关心编译细节问题。简单记录了下自己的心得,描述不准确的地方大家批评指正。

这篇关于C++/C互相调用误区的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!