如何理解c语言中extern "C"的作用
在c或c++语言程序中,我们总能看到extern "C"后跟大括号的声明,这个有什么作用呢?有时候在c语言中,有时候又在c++文件中找到,它的用法到底是怎么样的呢?
本文详细介绍extern "C"在c/c++语言中的作用。
c语言代码和c++语言编写的代码之间可以相互调用,而extern "C"的用法就在于使c++代码中能访问c语言代码。这就是它的根本作用。
为了后面讲解,我们定义了c++的main函数,并且调用一个Add方法。
如果都使用g++编译器,程序编译是没问题的。当我们使用gcc编译Add方法后,在用g++编译整个程序,发现编译报错,找不到Add方法。
为什么编译c++程序,并使用gcc编译后的c语言目标文件,会报错找不到对应的方法呢?
我们分别用gcc和g++编译add文件,并通过strings查看add方法,发现add方法符号并不相同。如下图所示。
因为在c++中函数可以重载,所以不能完全通过函数名找到对应的函数。所以,在编译main函数时,报错找不到对应的add方法。
这时就需要使用extern "C"声明c语言函数。
第一种方式:直接在cpp文件中,引用c语言头文件时加上extern "C"声明,如下所示:
第二种方式,在编写c语言代码时,我们主动提供extern "C"声明,表明我们代码可支持c++语言调用。
在c语言中添加extern "C"声明时,我们需要加上宏定义_cplusplus的判断。这个宏的作用时,如果使用gcc编译器编译代码则忽略该定义;如果使用g++编译器编译则包含extern "C"声明。
我们看下如果不添加该宏定义时,使用gcc编译将报错,如下图所示:
版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/answer/183139.html