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


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

Tags in this post...

面试题 相关文章推荐
PHP中如何创建和修改数组
May 02 面试题
如何启动时不需输入用户名与密码
May 09 面试题
面向对象编程的优势是什么
Dec 17 面试题
经典c++面试题二
Aug 14 面试题
SQL SERVER面试资料
Mar 30 面试题
在SQL Server中创建数据库主要有那种方式
Sep 10 面试题
一些高难度的SQL面试题
Nov 29 面试题
Can a struct inherit from another class? (结构体能继承类吗)
Jul 22 面试题
sealed修饰符是干什么的
Oct 23 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
Jan 19 面试题
MYSQL支持事务吗
Aug 09 面试题
Java模拟试题
Nov 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
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
vue-router项目实战总结篇
2018/02/11 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python函数装饰器用法实例详解
2015/06/04 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
python中import与from方法总结(推荐)
2019/03/21 Python
Python GUI编程完整示例
2019/04/04 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
python实现同一局域网下传输图片
2020/03/20 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Django websocket原理及功能实现代码
2020/11/14 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
关于webview适配H5上传照片或者视频文件的方法
2020/11/04 HTML / CSS
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
市政管理求职信范文
2014/05/07 职场文书
公司授权委托书样本
2014/09/15 职场文书
领导干部作风建设工作总结
2014/10/23 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
班主任工作总结范文
2015/08/13 职场文书
教师节主题班会教案
2015/08/17 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书