如何理解c语言中extern "C"的作用

2025-10-10 23:13:19

1、c语言代码和c++语言编写的代码之间可以相互调用,而extern "C"的用法就在于使c++代码中能访问c语言代码。这就是它的根本作用。

为了后面讲解,我们定义了c++的main函数,并且调用一个Add方法。

如何理解c语言中extern

如何理解c语言中extern

如何理解c语言中extern

2、如果都使用g++编译器,程序编译是没问题的。当我们使用gcc编译Add方法后,在用g++编译整个程序,发现编译报错,找不到Add方法。

如何理解c语言中extern

3、为什么编译c++程序,并使用gcc编译后的c语言目标文件,会报错找不到对应的方法呢?

我们分别用gcc和g++编译add文件,并通过strings查看add方法,发现add方法符号并不相同。如下图所示。

如何理解c语言中extern

4、因为在c++中函数可以重载,所以不能完全通过函数名找到对应的函数。所以,在编译main函数时,报错找不到对应的add方法。

这时就需要使用extern "C"声明c语言函数。

第一种方式:直接在cpp文件中,引用c语言头文件时加上extern "C"声明,如下所示:

如何理解c语言中extern

5、第二种方式,在编写c语言代码时,我们主动提供extern "C"声明,表明我们代码可支持c++语言调用。

如何理解c语言中extern

6、在c语言中添加extern "C"声明时,我们需要加上宏定义_cplusplus的判断。这个宏的作用时,如果使用gcc编译器编译代码则忽略该定义;如果使用g++编译器编译则包含extern "C"声明。

我们看下如果不添加该宏定义时,使用gcc编译将报错,如下图所示:

如何理解c语言中extern

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢