C++和C代码相互调用

同一个程序中,可以同时使用C和C++编写代码,而且可以相互调用。

1. C++中调用C代码

这是最常用的情景,只需要在C++中用extern "C"包含C头文件即可。例如:

extern "C“{

#include "stdio.h"

}

2. C调用C++代码

在C++中extern ”C“ 的含义是使用C语言的编译和链接规则编译和链接下面的代码。

所以C++中的函数,声明前如果加上extern ”C“, 那么编译器就不会对它做命名修饰,编译出来的代码就可以在C程序中直接调用。

当然在调用之前还是要先声明的。C语言不兼容C++,所以不能直接包含.hpp等C++的头文件。只能在逐个声明。比如:

//.hpp

extern "C" void sayHello( const char * name);

//.cpp

void sayHello( const char * name)

{

  cout << "Hi, " << name << "!" << endl;

}

 

在C语言的文件中可以如下调用sayHello.

//.c

extern void sayHello(const char * name);

sayHello( "World" );

 

如果C++要导出多个函数给C程序调用,可以下面的方式:

//.hpp

extern "C" {

int function1();

int function2();

}

 

3. 如果不想在.hpp中声明某个函数,比如C文件和C++文件同属某个模块,C需要调用C++的某个函数,而该模块又不想导出该函数,则可以直接在定义是声明extern "C":

//.cpp

extern "C"{

void sayHello( const * name)

{

  cout << ”Hi, " << name << endl;

}

}

extern “C” void sayHello( const char * name)

{

  cout << "Hi, " << name << endl;

}

C文件中的调用方法同上。

4. make通过变量$(CC)会根据源文件的的类型自动选择gcc或g++编译原代码。

.c: gcc

.cpp/.cc: g++

posted @ 2020-11-23 11:40  耕读编码  阅读(579)  评论(0编辑  收藏  举报