学习笔记 | extern的作用

extern的作用

  • extern可以置于变量或者函数前, extern标识的变量或函数声明定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
  • extern是C、C++语言中表明函数和全局变量作用范围的关键字。
  • 对于extern变量来说,仅仅是一个变量的声明,其并不是定义,因为不会分配内存空间。一个变量可以声明多次,但如果该变量定义多次,会有链接错误。
  • extern表示将变量或函数声明为外部链接,【变量默认是内部链接,函数默认是外部链接】。因此用来外部链接的函数,声明时有无extern都可以链接通过。而全局变量则不行。通常,在模块的头文件中,对本模块提供给其他模块引用的函数和全局变量以关键字extern声明。也就是说C头文件里面定义了一个函数或变量,如果该函数或变量开放给外部,则在h文件中用extern加以声明。外部文件只include该.h文件就可以了。而且编译阶段,外面是找不到该函数的,但是不报错。link阶段会从定义模块生成的目标代码中找到此函数或变量。

例子

举个例子,我们想要声明一个long int runtime_minute变量供多个模块使用:

//time.h
#ifndef TIME_H
#define TIME_H
//首先我们在time.h中进行以下声明:
extern long int runtime_minute;
#endif //TIME_H

在头文件中通过extern声明的变量并没有定义,所以要在time.cpp中给出定义:

//time.cpp
#include "time.h"
//在time.cpp中给出runtime_minute变量的具体定义:
long int runtime_minute = 0;

这时,如果想要在time2.cpp中使用这个定义在time.cpp中的runtime_minute变量,只需要包含time.h这个头文件即可:

//time2.cpp
#include "time.h"
#include 
//在time.cpp中给出runtime_minute变量的具体定义:
int main(){
    runtime_minute++;
    std::cout<<runtime_minute<<std::endl;
    //输出为1
    return 0;
}

你可能感兴趣的:(#,C++语言,extern)