C语言怎样定义和声明全局变量和函数最好


Posted in 面试题 onNovember 26, 2013
首先, 尽管一个全局变量或函数可以(在多个编译单元中) 有多处“声明”, 但是“定义” 却只能允许出现一次。定义是分配空间并赋初值(如果有) 的声明。最好的安排是在某个相关的.c 文件中定义, 然后在头文件(.h) 中进行外部声明, 在需要使用的时候, 只要包含对应的头文件即可。定义变量的.c 文件也应该包含该头文件, 以便编译器检查定义和声明的一致性。这条规则提供了高度的可移植性: 它和ANSI C 标准一致, 同时也兼容大多数ANSI 前的编译器和连接器。Unix 编译器和连接器通常使用“通用模式” 允许多重定义, 只要保证最多对一处进行初始化就可以了; ANSI C 标准称这种行为为“公共扩展”, 没有语带双关的意思。
可以使用预处理技巧来使类似DEFINE(int, i);的语句在一个头文件中只出现一次, 然后根据某个宏的设定在需要的时候转化成定义或声明。但不清楚这样的麻烦是否值得。如果希望让编译器检查声明的一致性, 一定要把全局声明放到头文件中。特别是, 永远不要把外部函数的原型放到.c 文件中: 通常它与定义的一致性不能得到检查, 而矛盾的原型比不用还糟糕。

Tags in this post...

面试题 相关文章推荐
类、抽象类、接口的差异
Jun 13 面试题
写一个方法1000的阶乘
Nov 21 面试题
编码实现字符串转整型的函数
Jun 02 面试题
关联、聚合(Aggregation)以及组合(Composition)的区别
Feb 29 面试题
定义一结构体数组表示分数,并求两个分数相加之和
Jun 11 面试题
存储过程和函数的区别
May 28 面试题
如何找出EMP表里面SALARY第N高的employee
Dec 05 面试题
酷瑞网络科技面试题
Mar 30 面试题
如何在C# winform中异步调用web services
Sep 21 面试题
linux面试题参考答案(4)
Jan 28 面试题
解释下列WebService名词:WSDL、SOAP、UDDI
Jun 22 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
Apr 10 面试题
C,C++的几个面试题小集
Jul 13 #面试题
Java工程师面试集锦之Spring框架
Jun 16 #面试题
2019年Java 最常见的 面试题
Oct 19 #面试题
2019年Java面试必问之经典试题
Sep 12 #面试题
金讯Java笔试题目
Jun 18 #面试题
某公司Java工程师面试题笔试题
Mar 27 #面试题
JAVA代码查错题
Oct 10 #面试题
You might like
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
JavaScript 中的事件教程
2007/04/05 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
MySQL最常见的操作语句小结
2015/05/07 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Python3中关于cookie的创建与保存
2018/10/21 Python
python生成lmdb格式的文件实例
2018/11/08 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
OpenCV 边缘检测
2019/07/10 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
智能电子应届生求职信
2013/11/10 职场文书
金融行业务员的自我评价
2013/12/13 职场文书
法学毕业生自我鉴定
2014/01/31 职场文书
森林病虫害防治方案
2014/06/02 职场文书
小学生通知书评语
2014/12/31 职场文书
辩护意见书
2015/06/04 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript