定义全局变量 —— python & C

15 篇文章 0 订阅

出发点

  • 我希望能将配置变量全都声明在一个文件中,这样主要程序代码的文件就不会很紊乱(很多全局变量要放在所有函数外面,也就是文件最前面定义)

C

  • 在一个cpp中声明,在另一个文件中使用extern声明,然后就可以直接调用了
    • 但是这样,并不能解决主文件很乱的问题
    • 另一方面,轮子哥等众人也不建议这么做(如果多文件的话,很多人会倾向于在头文件中进行extern声明,然后包含头文件吧,但是头文件中定义变量是很业余的做法)
  • 推荐的方法就是:
//foo.C
Foo& getFoo() {
static Foo foo;
return foo;
}
//foo.H
Foo& getFoo();

使用get()而不是直接使用静态变量是为了防止不同编译器初始化顺序不同,至于内存泄漏检查之类的,以后再看吧…

  • 关于extern和static的事情,更多的可以看refer

python

  • 利用函数的局部静态变量 + import 达到全局变量共享
  • 代码想要写得好看,可以参考使用property修饰符

补充

  1. 什么是编译单元
    当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。
    这个编译单元会被编译成为一个与cpp 文件名同名的目标文件( .o (linux系统) 或是.obj(windows系统) ) 。连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。
    可以把它理解为:#include完头文件的内容后(即将头文件的内容粘贴到cpp中之后)的cpp文件就是编译单元。简单说,一个编译单元就是一个经过预处理的cpp文件。

  2. 声明可以多次,定义只有一次,只有定义的时候才会分配内存

  3. extern
    1). extern是声明,如果extern a=xx ,那么相当于没有extern(直接定义了)。

    2). 此外,有了extern,就不需要#include "xx.h"了

  4. static
    1). extern和static不能同时修饰一个变量
    2). static修饰的全局变量声明与定义同时进行(这是必须的),也就是说当你在头文件中使用static声明了全局变量后,它也同时被定义了
    3).static修饰全局变量的作用域只能是本身的编译单元,也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它【所以使用get方法~】

  5. const
    1). 看特性我觉得可以用来当作全局的配置变量的声明和定义,但是还没看完 ,链接如下:https://blog.csdn.net/you1314520me/article/details/12996013

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值