• cpp: extern的作用


    转自:https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

    1.基本

    它是用来声明变量或者函数,说明在其他文件中被定义,那么链接时就在其他模块中寻找。

    用来说明“此变量/函数是在别处定义的,要在此处引用”。

    例子:

        (1) 在test1.h中有下列声明:
        #ifndef TEST1H
        #define TEST1H
        extern char g_str[]; // 声明全局变量g_str
        void fun1();
        #endif
        (2) 在test1.cpp中
        #include "test1.h"
            char g_str[] = "123456"; // 定义全局变量g_str
            void fun1() { cout << g_str << endl; }
        (3) 以上是test1模块, 它的编译和连接都可以通过,如果我们还有test2模块也想使用g_str,只需要在原文件中引用就可以了
        #include "test1.h"
    
         void fun2()    { cout << g_str << endl;    }

    这样的话g_str就是全局变量,一般这么来声明,而不能用static在头文件中声明+定义,那样会造成其他文件的污染。

    如果在头文件中直接声明而不加extern,那么多此包含head文件,就会产生重定义的错误。

    2.作用

    https://blog.csdn.net/big_bit/article/details/51595714

    在一个文件中定义了变量和函数, 在其他文件中要使用它们, 可以:

    1. 使用头文件,然后声明它们,然后其他文件去包含头文件
    2. 在其他文件中直接extern

    3.定义与声明

    1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。

          extern int i; //声明,不是定义
    
           int i; //声明,也是定义

    2.如果声明有初始化式,就被当作定义,即使前面加了extern。只有当extern声明位于函数外部时,才可以被初始化。

    extern double pi=3.1416; //定义

    3.函数的声明和定义区别比较简单,带有{}的就是定义,否则就是声明。

          extern double max(double d1,double d2); //声明
    
           double max(double d1,double d2){}//定义

    4.除非有extern关键字,否则都是变量的定义

          extern int i; //声明
    
           int i; //定义

    4.总结

    1. 不要把变量定义放入.h文件,这样容易导致重复定义错误

    2. 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。(static修饰的变量作用域就是当前文件)

    3. 可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。

  • 相关阅读:
    基于element-ui图片封装组件
    计算时间间隔具体每一天
    C语言学习笔记 —— 函数作为参数
    AtCoder Beginner Contest 049 题解
    AtCoder Beginner Contest 048 题解
    AtCoder Beginner Contest 047 题解
    AtCoder Beginner Contest 046 题解
    AtCoder Beginner Contest 045 题解
    AtCoder Beginner Contest 044 题解
    AtCoder Beginner Contest 043 题解
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14193399.html
Copyright © 2020-2023  润新知