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


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

Tags in this post...

面试题 相关文章推荐
几道PHP面试题
Apr 14 面试题
PHP开发工程师面试问题集锦
Nov 01 面试题
广州御银科技股份有限公司试卷(C++)
Nov 04 面试题
估算杭州有多少软件工程师
Aug 11 面试题
NULL是什么,它是怎么定义的
May 09 面试题
请解释virtual关键字的含义
Jun 17 面试题
如何判断计算机可能已经中马
Mar 22 面试题
override和overload的区别
Mar 09 面试题
软件测试题目
Feb 27 面试题
Python中pass语句的作用是什么
Jun 01 面试题
UNIX文件类型
Aug 29 面试题
Delphi笔试题
Nov 14 面试题
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 CKEditor 上传图片实现代码
2009/11/06 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
通过DOM脚本去设置样式信息
2010/09/19 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
JS中的forEach、$.each、map方法推荐
2016/04/05 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
解决yum对python依赖版本问题
2019/07/05 Python
tensorboard显示空白的解决
2020/02/15 Python
python能否java成为主流语言吗
2020/06/22 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
资产评估专业学生的自我鉴定
2013/11/14 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
煤矿安全生产责任书
2014/04/15 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
如何撰写促销方案?
2019/07/05 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python