0
点赞
收藏
分享

微信扫一扫

extern “C”的含义

分湖芝蘭 2022-04-13 阅读 190

目录

1. 作用

extern “C”主要作用是实现C++代码正确调用C代码。加上extern “C”后,编译器编译这部分代码时,会按照C语言进行编译。因为C++支持函数重载,所以编译器编译C++代码时,会将参数类型一起编到编译后的代码中。但是C编译的时候只会将函数名编译到编译后的代码中。

2.extern

extern是编程语言中的一种属性,表示变量、函数等类型的作用域属性,是一个关键字。编译器编译时extern告诉编译器它所声明的函数和变量已经在其他文件中定义,可以其他地方使用。通常在“.c”文件中声明定义变量或者函数,并在“.h”文件中使用该关键字限定变量或者函数,然后可在其他文件或者模块中用include使用,如:

//test1.c
//声明定义,定义时会为其分配空间
int i = 32;
//test1.h
//使用test.c中定义的i
extern int i;
//test2.c
//在其他文件中调用该变量
#include "test.h"
void fun(void){
    if(i > 0){
        print("test extern");
    }
}

3.“C”

多种编程语言会在使用时出现嵌套或者相互调用的情况。如C和C++之间就经常出现互相调用的。虽然C++是C的扩展,但是它们之间的编译器是不同的,这就产生了各自的编译器在对C和C++进行编译的时候要依据那一个作为大家都互相认可的规范或者约定。这就是“C”的出处,“C”就是这样一个约定:

  • 这种调用编译是一种超链接
  • 这种调用编译不能影响现有的编译规则
  • C++是C的拓展

所以extern “C”中,extern表示关键字属性,在其他地方可以使用。“C”就表示了编译器的连接规范。合在一起就可以理解为在C++/C的混合编程下进行编译。

//如果使用的是C++,extern “C”有效,extern “C”中的代码使用C编译器
#ifdef __cplusplus
   extern "C" {
#endif
       ...//需要使用C编译器的编译的代码
//结束使用C编译器
#ifdef __cplusplus
   }
#endif
举报

相关推荐

0 条评论