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


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

Tags in this post...

面试题 相关文章推荐
数据库面试要点基本概念
Oct 31 面试题
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
May 01 面试题
介绍一下SQL Server的全文索引
Aug 15 面试题
武汉英思工程科技有限公司–ORACLE面试测试题目
Apr 30 面试题
Net Remoting把服务器端激活两种模式
Jan 22 面试题
NET程序员上机面试题
May 23 面试题
如何选择使用结构还是类
May 30 面试题
abstract是什么意思
Feb 12 面试题
几个Shell Script面试题
Aug 31 面试题
介绍一下XMLHttpRequest对象
Feb 12 面试题
Ajax主要包含了哪些技术
Jun 12 面试题
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
Nov 09 面试题
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
PHP中获取时间的下一周下个月的方法
2014/03/18 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
采购主管的岗位职责
2013/12/17 职场文书
社区志愿者心得体会
2014/01/03 职场文书
热门专业求职信
2014/05/24 职场文书
推普周活动总结
2014/08/28 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
淮海战役观后感
2015/06/11 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS