C语言与C++语言相互调用

简介: C语言与C++语言相互调用 1 C++调用C中的函数   1.1 C++调用C中的函数(正确使用)   1、案例源文件组成                                               图1   2、math模块包含文件   1)源文件math.

C语言与C++语言相互调用

1 C++调用C中的函数
 

1.1 C++调用C中的函数(正确使用)
 

1、案例源文件组成


                                              图1

 

2、math模块包含文件
 

1)源文件math.c



                                              图2

2)头文件math.h



                                                     图3

 

3、主模块包含文件
 

1)源文件main.cpp

 



                                                        图4

2)头文件module.h

 



                                                     图5

 

4、编译math模块
 



                                                                 图6

 

5、编译主模块
 



                                                                   图7

6、链接
 



                                                            图8a

 

 



                                                               图8b

 

 

 

1.2 C++调用C中的函数(非正确使用)
1、案例源文件组成


                                                           图9

 

2、math模块包含文件
1)源文件math.c



                                                          图10

2)头文件math.h



                                                             图11

 

 

 

3、主模块包含文件
1)源文件main.cpp



                               图12

2)头文件module.h



                                                        图13

图13与图5内容差异为:图13屏蔽了exterrn “C” {}

 

4、编译math模块


                                                                     图14

 

5、编译主模块


                                                                                 图15

图15与图7中内容差异:图7中的函数符号为add_func,而图15中的函数符号为_Z8add_funcii

因C++为面向对象语言,存在多态性,在编译时会将函数参数类型和个数一并加入符号中,其中_Z8add_funcii中的ii为表示有两个参数,并且参数类型为integer型。

6、链接


                                                                 图16

 

 

 

 

2 C调用C++中的函数
 

2.1 C调用C++中的函数(正确使用)
 

1、源码结构


                                                 图1

 

2、math模块
1)math.h文件



                                      图2

2)math.cpp



                             图3

3)编译math模块



                                                                  图4

 

4)查看math.o中符号内容

 



                                                                图5

3、主模块
1)module.h



                                 图6

2)main.c



                                       图7

3)编译主模块



                                                          图8

4)查看main.o中符号



                                                              图9

4、链接(math.o和main.o)


                                                           图10

 

2.2 C调用C++中的函数(非正确使用)
1、源文件结构


                                               图1

2、math模块
1)math.h文件



                             图2

2)math.cpp文件



                             图3 

3)编译math模块



                                                          图4

4)查看math.o中的符号

 



                                                                 图5

 

3、主模块
1)module.h



                                       图6

2)main.c



                                     图7

3)编译主模块



                                                   图8

4)查看main.o中符号



                                                              图9

 

4、链接(math.o和main.o)
 



                                                        图10 

 

 

 

 

3 总结
C++保留了一部分过程式语言特点,因此可以定义不属于任何类的全局变量和函数;但是C++为面向对象语言,支持函数的重载,C++对全局函数处理方式明显与C不同。extern “C”{}目的是为了让C++正确使用C的代码,加上extern “C”{}之后,会指示编译器对这部分代码按照C语言进行编译,而不是C++。C++支持多态,因此编译过程中会将函数的参数类型合入函数名符号中,而不仅仅是函数名。

__cplusplus为cpp中自定义的宏,extern表明变量和函数是全局性的。

主意:

1)C++调用一个C语言编写的.so库时,包含描述.so库中函数的头文件时,应该将对应的头文件放置在extern “C”{}格式的{}中,。

2)C中引用C++中的全局函数时,C++的头文件需要加extern “C”,而C文件中不能用extern “C”,只能使用extern关键字。
--------------------- 
作者:yanlaifan 
来源:CSDN 
版权声明:本文为博主原创文章,转载请附上博文链接!
相关文章
|
5月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
94 2
|
3月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
86 2
|
1月前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
29 5
|
5月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
99 0
|
1月前
|
算法 编译器 C语言
【C语言】C++ 和 C 的优缺点是什么?
C 和 C++ 是两种强大的编程语言,各有其优缺点。C 语言以其高效性、底层控制和简洁性广泛应用于系统编程和嵌入式系统。C++ 在 C 语言的基础上引入了面向对象编程、模板编程和丰富的标准库,使其适合开发大型、复杂的软件系统。 在选择使用 C 还是 C++ 时,开发者需要根据项目的需求、语言的特性以及团队的技术栈来做出决策。无论是 C 语言还是 C++,了解其优缺点和适用场景能够帮助开发者在实际开发中做出更明智的选择,从而更好地应对挑战,实现项目目标。
82 0
|
3月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
78 5
|
3月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
89 10
|
3月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
3月前
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
|
3月前
|
编译器 Linux C语言
深入计算机语言之C++:C到C++的过度-1
深入计算机语言之C++:C到C++的过度-1