C语言和C++的混合编译
在 GCC 编译器中,可以将不同编程语言生成的目标文件混合在一起使用,但是操作起来非常的困难,因为不同的编程语言都有自己的特性。 混合使用时要处理好产生的各种问题,包括全局命名约定、命令、参数传递、数据类型转换、出错处理,以及两种语言标准运行时的库的混合。
那么如何编译文件呢?可以使用下面的命令:
如果在头文件中声明函数,就要将整个头文件都声明为extern "C",这是标准 C++ 语法,展示如下:
在C++中调用C
C 程序和 C++ 程序可以自然的混合。C++ 可以看作是 C 语言的扩展,因此调用规则是相同的,而且数据类型也是基本相同。唯一的区别主要体现在函数名上:C语言使用的是简单的参数名,不考虑参数的个数和类型,而 C++ 中的函数总会将它的参数类型列表当作函数名的一部分。因此 C++ 程序提供一些特殊的功能可以直接声明调用 C 函数。实例如下:
/*hello.c*/
#include <stdio.h>
void sayhello(char *str)
{
printf(“hello world\n”);
}
/*main.cpp*/
#include <iostream>
using namespace std;
extern “C” void sayhello(char *str);
int main(int argc,char *argv[])
{
sayhello(“hello from cpp to c\n”);
return 0;
}
可以看到上述的代码中,在 C++ 程序中直接调用 C 程序中的函数,原因是在 C++ 程序中它的声明是 extern "C"。那么如何编译文件呢?可以使用下面的命令:
g++ -c main.cpp -o main.o
gcc -c hello.c -o hello.o
gcc main.o hello.o -lstdc++ -o main
如果在头文件中声明函数,就要将整个头文件都声明为extern "C",这是标准 C++ 语法,展示如下:
extern “C”{
int add(int a,int b);
double div(double a,double b);
};
在C中调用C++
在 C 程序中调用 C++ 程序时,C++ 程序提供的函数可以使用 C 语言的调用顺序,下面的例子展示如何在 C++ 程序中创建 C 函数。
/*hello.cpp*/
#include <iostream>
using namespace std;
extern “C” void sayhello(char *str);
void sayhello(char *str)
{
cout<<str<<endl;
}
/*main.c*/
#include <stdio.h>
int main(int argc,char *argv[])
{
Sayhello(“hello form C to C++”);
return 0;
}
编译使用的命令:
g++ -c hello.cpp -o hello.o
gcc -c main.c -o main.o
gcc hello.o main.o -lstdc++ -o main
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算