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面试题1
Jul 20 面试题
为什么使用接口?
Aug 13 面试题
JDK安装目录下有哪些内容
Aug 25 面试题
C++:局部变量能否和全局变量重名
Mar 03 面试题
C++面试题目
Jun 25 面试题
C++是不是类型安全的
Feb 18 面试题
STP协议的主要用途是什么?为什么要用STP
Dec 20 面试题
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
Nov 20 面试题
介绍一下linux的文件权限
Feb 15 面试题
Linux的主要特性
Sep 03 面试题
客服端调用EJB对象的几个基本步骤
Jan 15 面试题
Java面试笔试题大全
Nov 23 面试题
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/02/10 PHP
PHP学习笔记(二):变量详解
2015/04/17 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
采购文员岗位职责
2013/11/20 职场文书
承诺书格式
2014/06/03 职场文书
考研导师推荐信范文
2015/03/27 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL
字节飞书面试promise.all实现示例
2022/06/16 Javascript