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


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

Tags in this post...

面试题 相关文章推荐
介绍一下Java的安全机制
Jun 28 面试题
JAVA的事件委托机制和垃圾回收机制
Sep 07 面试题
天逸系统(武汉)有限公司Java笔试题
Dec 29 面试题
2019年Java 最常见的 面试题
Oct 19 面试题
Java工程师面试集锦之Spring框架
Jun 16 面试题
如何估计一张表的大小(假设该表中有1万条数据)
Mar 27 面试题
TCP协议通讯的过程和步骤是什么
Oct 18 面试题
this关键字的含义
Apr 08 面试题
什么是Linux虚拟文件系统VFS
Aug 25 面试题
英智兴达软件测试笔试题
Oct 12 面试题
Python里面如何实现tuple和list的转换
Jun 13 面试题
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之数据库操作详解及乱码解决!
2007/01/02 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
详解javascript函数的参数
2015/11/10 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
2018/02/08 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
泛谈JS逻辑判断选择器 || &&
2019/05/24 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python单链表的简单实现方法
2014/09/23 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
python实现文字版扫雷
2020/04/24 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
《日月潭》教学反思
2014/02/28 职场文书
婚礼主持词开场白
2014/03/13 职场文书
python基础之函数的定义和调用
2021/10/24 Python