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


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

Tags in this post...

面试题 相关文章推荐
C语言变量的命名规则都有哪些
Dec 27 面试题
C语言中break与continue的区别
Jul 12 面试题
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
Apr 15 面试题
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
Aug 04 面试题
西安启天科技有限公司网络工程师面试题笔试题
Jun 12 面试题
维德科技C#面试题笔试题
Dec 09 面试题
Windows和Linux动态库应用异同
Jul 28 面试题
如何写出高质量、高性能的MySQL查询
Nov 17 面试题
写clone()方法时,通常都有一行代码,是什么?
Oct 31 面试题
JAVA中运算符的分类及举例
Sep 12 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
Sep 26 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
Oct 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
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
js 获取服务器控件值的代码
2010/03/05 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python import与from import使用及区别介绍
2018/09/06 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
python占位符输入方式实例
2019/05/27 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
基于python实现雪花算法过程详解
2019/11/16 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
迪拜航空官方网站:flydubai
2017/04/20 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
《匆匆》教学反思
2014/02/22 职场文书
宿舍标语大全
2014/06/19 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
校园安全教育心得体会
2016/01/15 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫