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


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

Tags in this post...

面试题 相关文章推荐
J2SDK1.5与J2SDK5.0有什么区别
Sep 19 面试题
解释一下抽象方法和抽象类
Aug 27 面试题
什么造成了Java里面的异常
Apr 24 面试题
实现strstr功能,即在父串中寻找子串首次出现的位置
Aug 05 面试题
为什么要有struct关键字
May 08 面试题
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
Feb 10 面试题
SQL Server面试题
Oct 17 面试题
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
Apr 28 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
Feb 20 面试题
Ajxa常见问题都有哪些
Mar 26 面试题
Static Nested Class 和 Inner Class的不同
Nov 28 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
Mar 30 面试题
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静态类的原罪详解
2013/05/06 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
Javascript实现动态时钟效果
2018/11/17 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
python调用新浪微博API项目实践
2014/07/28 Python
python daemon守护进程实现
2016/08/27 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python动态进度条的实现代码
2019/07/03 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
英国复古服装购物网站:Collectif
2019/10/30 全球购物
茶叶生产计划书
2014/01/10 职场文书
试用期员工考核制度
2014/01/22 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
个人整改措施书面材料
2014/10/24 职场文书
婚礼父母答谢词
2015/01/04 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书