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


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

Tags in this post...

面试题 相关文章推荐
Yahoo-PHP面试题3
Jan 14 面试题
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Mar 25 面试题
一套C++笔试题面试题
Jun 06 面试题
试述DBMS的主要功能
Nov 13 面试题
命名空间(namespace)和程序集(Assembly)有什么区别
Sep 25 面试题
网络工程师面试(三木通信技术有限公司)
Jun 05 面试题
华三通信H3C面试题
May 15 面试题
什么是索引指示器
Aug 20 面试题
面向对象设计的原则是什么
Feb 13 面试题
编程用JAVA解析XML的方式
Jul 07 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
Feb 16 面试题
J2EE中的容器都包括哪些
Aug 21 面试题
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实现代码
2018/02/11 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
ES6 十大特性简介
2020/12/09 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
Python入门篇之列表和元组
2014/10/17 Python
举例讲解Django中数据模型访问外键值的方法
2015/07/21 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
css3实现小箭头各种图形效果
2020/07/08 HTML / CSS
找到不普通的东西:Bonanza
2016/10/20 全球购物
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
《水上飞机》教学反思
2014/04/10 职场文书
妇联主席先进事迹
2014/05/18 职场文书
运动会口号16字
2014/06/07 职场文书
社区灵活就业证明
2014/11/03 职场文书
英语通知范文
2015/04/22 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
在js中修改html body的样式
2021/11/11 Javascript
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android