extern的用法

1. extern修饰变量和函数

声明extern关键字的全局变量和函数可以使得它们能够跨文件被访问

(1)针对同一个文件中的变量

#include <iostream>
using namespace std;

void func();

int main()
{
    func();
    extern int num;
    cout << num << endl; // 如果不使用前一行,则会发生错误使用了未声明的标志符num
    return 0;
}

int num = 3;

void func()
{
    cout << num << endl;
}

//如果没有声明extern int num; 在main函数中调用num,则未定义,因为int num=3;定义在main函数后,将定义放在前面就可以使用,当然也可以使用extern,但是不建议

(2)不同文件中使用extern

一般在头文件中声明extern修饰的函数和变量,在cpp文件中实现

它的作用就是: 声明的函数和变量可以在本编译单元或其他编译单元中使用。 即B编译单元要引用A编译单元中定义的全局变量或函数时,B编译单元只要包含A编译单元的头文件即可,在编译阶段,B编译单元虽然找不到该函数或变量,但它不会报错,它会在链接时从A编译单元生成的目标代码中找到此函数

2. extern "C"

   如 extern "C" {void fun(int a, int b);},它的作用是:编译器在编译fun这个函数名时按C的规则去翻译相应的函数名而不是C++的。

3. extern, const, static

  • extern和static不能同时修饰一个变量,它们的含义背道而驰
  • const单独修饰的全局变量跟static具有相同的特性,即它们只能作用于本编译模块中,而当const与extern一起的时候,特性就跟extern的一样,只不过使用const修饰后这个变量不可以被修改
posted on 2020-04-14 14:28  JJ_S  阅读(596)  评论(0编辑  收藏  举报