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++