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


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

Tags in this post...

面试题 相关文章推荐
PHP如何删除一个Cookie值
Nov 15 面试题
JSF面试题:如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?
Oct 05 面试题
输入N,打印N*N矩阵
Feb 20 面试题
这段代码难道不该打印出56吗
Feb 27 面试题
什么是表空间(tablespace)和系统表空间(System tablespace)
Feb 25 面试题
一些.net面试题
Oct 06 面试题
端口镜像是怎么实现的
Mar 25 面试题
编写一个类体现构造,公有,私有方法,静态,私有变量
Aug 10 面试题
企业面试题试卷附带答案
Dec 20 面试题
介绍一下EJB的分类及其各自的功能及应用
Aug 23 面试题
AJax面试题
Nov 25 面试题
如何通过jdbc调用存储过程
Apr 19 面试题
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
一个oracle+PHP的查询的例子
2006/10/09 PHP
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
python如何实现excel数据添加到mongodb
2015/07/30 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
四年的个人工作自我评价
2013/12/10 职场文书
面料业务员岗位职责
2013/12/26 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
大学军训感想
2014/02/12 职场文书
党员政治学习材料
2014/05/14 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
法人代表证明书格式
2014/10/01 职场文书
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫