1. 全局变量的初始化

对于不同编译单位的全局变量,其初始化的顺序没有任何的保证,因此对不同编译单位里的全局变量,在它们的初始化顺序之间建立依赖性都是不明智的。

此外也没办法捕捉到全局变量初始化抛出的异常,一般来说要减少全局变量的使用,特别是限制那些要求复杂初始化的全局变量。

1,尽量不用全局变量

2,用静态变量,通过访问器进行访问

例如:全局变量

int a = 5;

int b = a;

如果a,和b定义在同一个文件里,那没什么问题,结果b等于5.

如果a和b定义在不同文件里,就不能保证b也等于5,也就是说不能保证a先初始化.

事实上,除了在同一个文件定义的全局对象的初始化是按照定义次序来进行的之外,其他全局或静态变量之间的初始化次序没有任何保障。解决这种问题的方法是不直接使用全局变量,而改用一个包装函数来访问,例如

int get_a()

{

static int a = 5;

return a;

}

int get_b()

{

static int b = get_a();

return b;

}

这样的话,无论get_a和get_b是否定义在同一个文件中,get_b总是能够返回正确的结果,原因在于,函数内部的静态变量是在第一次访问的时候来初始化。

任何时候,如果在不同的被编译单元中定义了"非局部静态对象",并且这些对象的正确行为依赖于它们被初始化的某一特定顺序,就会产生问题.你绝对无法控制不同被编译单元中非局部静态对象的初始化顺序.对于函数中的静态对象(即"局部"静态对象)它们在函数调用过程中初次碰到对象的定义时被初始化..

注意:千万不要写出和编译顺序相关的程序来。

关于全局变量的初始化,C语言和C++是有区别的。

在C语言中,只能用常数对全局变量进行初始化,否则编译器会报错。

在C++中,如果在一个文件中定义了int a = 5;要在另一个文件中定义int b = a;的话,前面必须对a进行声明:extern int a;否则编译不通过.、即使是这样,int b = a;这句话也是分两步进行的:在编译阶段,编译器把b当作是未初始化数据而将它初始化为0;在执行阶段,在main被执行前有一个全局对象的构造过程, int b = a;被当作是int型对象b的拷贝初始化构造来执行。

其实,准确地说,在C++中全局对象、变量的初始化是独立的,如果不是象int a = 5;这样的已初始化数据,那么就是象b这样的未初始化数据。

而C++中全局对象、变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用。对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。

---------------------------------------------------------------------------------------------------------------------------

另:

c语言中 支持 结构体间的整体附值。

C语言如何正确初始化数据,C语言变量的初始化相关推荐

  1. php初始化函数赋值,PHP变量的初始化以及赋值方式介绍

    什么是变量 变量通俗的来说是一种容器.根据变量类型不同,容器的大小不一样,自然能存放的数据大小也不相同.在变量中存放的数据,我们称之为变量值. PHP 中的变量用一个美元符号后面跟变量名来表示.变量名 ...

  2. php对多个变量进行初始化,PHP如何对变量进行初始化和初始化

    PHP如何对变量进行初始化和初始化 发布时间:2020-06-26 18:10:48 来源:亿速云 阅读:158 作者:Leah PHP如何对变量进行初始化和初始化?针对这个问题,这篇文章详细介绍了相 ...

  3. 字体文件解析 c语言,如何正确地从C语言的文件中读取某些字符串?

    您试图从文件中读取的内容并不简单,但可以通过设置一个标志来处理,该标志告诉您是否已经看到 'a' 或 'b' ,跳过所有空白和 ':' 字符,将所有其他字符存储在缓冲区中,根据需要重新分配,然后在第二 ...

  4. c语言不能正确输出最小值,C语言综合测试.doc

    C语言综合测试 1.在C语言中,下面()转义序列表示换行(选一项)在C语言中,为了输出如图所示的一字符(),下面的代码正确的是().(选择一项)'c') B)putchar('c') C)printf ...

  5. 易语言取php网页数据,易语言爬取网页内容方法

    写个辅助工具的时候需要提取网页里面的某些内容,我这里便把方法告诉大家,希望对大家有所帮助,记得投票给我哦! 1.在新建的windos窗口程序中画: 两个编辑框.一个按钮. 再添加模块如图中三步! 我们 ...

  6. c语言采用文件存储数据,C语言读写文件大全 之 基础篇

    一直想着把C语言和C++关于文件操作的相关内容总结一下,这样在使用的时候就可以顺手拈来,嗯,这就是好记性不如烂笔头.既然是文件操作,那么开篇就从"文件"的介绍开始. 1.文件 文件 ...

  7. c语言中用文件处理数据,C语言文件处理 -C语言从文件中读写格式化数据

    从图 1 所示的文件 fin.txt 中读取学生姓名.身高和体重,计算并显示它们的平均值,并且将显示结果保存到文件 fout.txt 中. 图 1:输入输出文件示例 C语言代码清单 1:读取学生姓名. ...

  8. c语言存储多个数据,C语言中如何求数组真实存有数据的元素个数

    这个是比较容易解决的,这是我把楼主的程序略加修改后的代码: # include # include # include int main() { int a[100]; int n; int i; i ...

  9. 易语言post发送php数据,易语言post上传文件

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 php源码是 $save_path = ""; if($_POST["save_path"]){ $save_pa ...

  10. Mysql_DML数据修改语言

    #DML语言  增删该查询 数据操作语言: 插入:insert 修改:update 删除:delete #一.插入语句     #方式一:经典的插入 语法: insert into 表名(列名,... ...

最新文章

  1. sublime 安装插件GitGutter报错,git binary cannot be found等等
  2. POJ_2104 K-th Number 【主席树】
  3. linux的find命令
  4. 音视频技术开发周刊 59期
  5. 团队作业—系统设计和任务分配
  6. CentOS开发ASP.NET Core入门教程
  7. Linux中一些 不是很常用的配置修改
  8. JavaScript 打印结果时多出一个undefined/出现undefined
  9. matplotlib画图设置线条透明度
  10. MongoDB compass 连接不上远程服务器的解决方法
  11. 喜马拉雅FM下载的音频转换为正常文件的JAVA实现
  12. 无限循环病毒HTML,红包群无限循环病毒式裂变引流
  13. Hystrix使用分析
  14. 债务美元是怎样“炼成”的
  15. dw2019连接mysql数据库_VS 2019 连接MySQL数据库配置记录
  16. python爬虫初步学习
  17. 前端如何实现整套视频直播技术流程(以打扑克直播软件为例)
  18. ubuntu下以管理员权限开机自启动自己的程序
  19. javaweb知识点总结(黑马视频笔记)
  20. 复分析阿尔福斯下载中文_《复分析(原书第3版)》([美]阿尔福斯(Ahlfors,L.V.))【摘要 书评 试读】- 京东图书...

热门文章

  1. 【项目实战】高并发内存池
  2. Android lua编辑工具,Lua脚本编辑器
  3. 五步轻松搞定QGIS三维地形浏览
  4. 《冰河世纪》特效指导罗皓做客【ftrack聊天室】
  5. 暗黑3 和社群服务器连线中断,进入《暗黑3夺魂之镰》必须知道10件事
  6. JS中var、let以及const关键字到底怎么用?
  7. linux系统漏洞firefart,记:从文件上传漏洞到获得root权限
  8. More Grounded Image Captioning by Distilling Image-Text Matching Model
  9. 手把手教你做项目多线程篇——基础知识详解
  10. python打印列表的下标和值的例子: