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值
Jun 30 面试题
WebSphere 应用服务器都支持哪些认证
Dec 26 面试题
怎样创建、运行java程序
Aug 01 面试题
中软Java笔试题
Nov 11 面试题
C++:局部变量能否和全局变量重名
Mar 03 面试题
字符串str除首尾字符外的其他字符按升序排列
Mar 08 面试题
编写类String 的构造函数、析构函数和赋值函数
Sep 09 面试题
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
May 01 面试题
Discard Protocol抛弃协议的作用是什么
Oct 10 面试题
介绍一下Linux内核的排队自旋锁
Aug 27 面试题
几个Linux面试题笔试题
Dec 01 面试题
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
Apr 24 面试题
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写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Pythony运维入门之Socket网络编程详解
2019/04/15 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
python实现感知机模型的示例
2020/09/30 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
软件测试面试题
2015/10/21 面试题
节水口号标语
2014/06/19 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
房产协议书范本2014
2014/09/30 职场文书
工会经费申请报告
2015/05/15 职场文书
党支部季度考核意见
2015/06/02 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书