• extern关键字


    如果一个头文件被  #include  到一个以上的源文件里,这个头文件中所有的定义就会出现在每一个有关的源码文件里。这会使它们里的符号被定义一次以上,从而出现连接错误。解决办法就是不要在头文件里定义变量。你只需要在头文件里声明它们,然后在适当的源码文件(应该#include 那个头文件的那个)里定义它们一次。extern告诉编译器其所声明的符号的存在,并不会使编译器分配贮存空间。当做一个声明而不是做定义的时候,在声明前放一个关键字“extern”。

    在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。

    extern关键字的作用是声明变量和函数为外部链接,即该变量或函数名在其他文件中可见。没有分配内存空间,声明的格式和定义的格式一定要严格相符。

    1、用extern声明外部变量,扩展它在程序中的作用域

    #include<iostream>

    using namespace std;

    void main(){

    int f (int);

    extern a; //外部变量声明

    cout<f(a)<<endl;

    }

    int a=10; //定义外部变量

    int f(int x){

    cout<<"the number is "<<x<<endl;

    }

    2、 用extern将外部变量的作用域扩展到其他文件。

    3、用extern声明外部函数

  • 相关阅读:
    【VS】解决Visual Studio无法登录的问题
    当vue 页面加载数据时显示 加载loading
    form 表单提交的另一种方式 js
    onclick="return doAlert()" onclick="return false"
    vue中sessionStorage的使用
    js把两个对象合并成一个对象
    Oracle 分页查询的一个实例
    oracle Group by 分组查询后,分页
    ProceedingJoinPoint获取当前方法
    Spring AOP无法拦截内部方法调用
  • 原文地址:https://www.cnblogs.com/relaxgirl/p/3255536.html
Copyright © 2020-2023  润新知