首先,extern "C" 是什么?
它的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。
大家都知道C++是支持重载,而C不支持。
C++中,编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;
而C中,编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名;
所以我们需要extern "C"来决定编译器的编译方式。
extern "C"分为两个部分,extern 和 C。
1)extern
extern是编程语言中的一种属性,它表征了变量、函数等类型的作用域(可见性)属性,是编程语言中的关键字。
当进行编译时,它会告诉编译器它所声明的函数和变量等可以在本模块或者文件以及其他模块或文件中使用。
通常,程序员都只是在“*.h”(头文件)中使用该关键字以限定变量或函数等类型的属性,然后在其他模块或本模块中使用
2)C
C和C++在我们软件工程中其实是会有相互调用或者语言嵌套的情况。
虽然说C++是C的超集,但是它们的编译器是不一样的。
所以这就产生了各自的编译器在对C和C++进行编译时要依据哪一个作为大家都认可的规范或者约定的问题。
通过一些基础特征我们制定了这样的一个规约,这就是“C”的出处,这些基础特征就是:
1)这种调用编译是一种“超”链接;//extern关键字可以表达这种“超”链接
2)这种调用编译不能影响现有的编译规范;//用“C”来规约在C++中对C的编译
3)C++是C的拓展,是C的升华。
因此,extern "C"表明了一种编译规约,其中extern是关键字属性,“C”表征了编译器链接规范。对于extern "C"可以理解成在C++/C中的混合编程的编译指令。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!