ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++全局变量的编译、链接、使用

2022-04-12 12:02:32  阅读:148  来源: 互联网

标签:定义 包含 作用域 namespace C++ 编译 使用 extern 全局变量


全局变量,在.h文件声明。

1、加extern,别的文件可以使用,.cpp可以使用,其它包含此头文件的都可以使用。但如果超过2个文件包含此头文件,会有重复定义的链接错误。
    可以使用 namespace 来解决,匿名namespace相当于编译为此obj生成了 随机的作用域名称,多个文件包含,也就形成了多个随机作用域,所以一般不建议使用匿名namespace。
    
2、不加extern,只有.h可以使用,本文件的.cpp也不可以使用。
    虽然不可使用,但依旧可以多文件包含此头文件,但是包含后,就是多作用域,也就是多个随机作用域名称。A.cpp包含,就是随机作用域A,B.cpp包含就是随机作用域B。操作时,各用个的。
    多包含,依然可以使用 namespace 来解决重复定义的问题。

全局变量使用总结:

1、正确的使用方式:.h中实名namespace+extern声明,对应.cpp中带类型的 变量定义,可初始化,也可不初始化;
2、.h中直接声明,不定义,不加namespace,不加extern,.cpp中直接不认识此变量,编译错误。因为 不加extern声明,只限制在本文件可用。
3、.h中直接声明+定义,(有初始化就代表定义),单个文件包含没有问题,可以使用。多包含时,重复定义的链接错误。
4、.h中使用匿名namasapce,随机作用域,单个文件包含没有问题,因为就一个作用域在使用。多文件包含,会在有多份定义在多个作用域中。使用错误,很难查出错误。
5、.h中使用实名namespace,不使用extern,多个文件包含,依然有重复定义的链接错误;
6、.h中,实名namespace,不使用extren,只声明,不定义,在对应.cpp中定义变量时,会有 编译错误:重定义;
7、.h中,实名namespace,使用extren,只声明,不定义。则链接错误:无此变量的定义,也是LNK2001: 无法解析的外部符号。

简单总结:

多文件使用变量,请使用实名namespace+extern声明+定义;

标签:定义,包含,作用域,namespace,C++,编译,使用,extern,全局变量
来源: https://www.cnblogs.com/Mojito2020/p/16134417.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有