#ifndef、#define和#endif的用法
来源:互联网 发布:手机淘宝优惠券在哪里 编辑:程序博客网 时间:2024/05/01 14:03
在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果.h文件里只是进行了声明工作,即使不使用# ifndef宏定义,一个c文件多次包含同一个h文件也不会报错。使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;如果加了#ifndef,则不会出现这种错误。
但是在c++语言中,#ifndef的作用域只是在单个文件中。所以如果.h文件里定义了全局变量,即使采用#ifndef宏定义,一个c++文件包含同一个h文件多次还是会出现全局变量重定义的错误。
在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量“重定义”的错误。在头文件中实用#ifndef #define #endif能避免头文件的重定义。
例如要编写头文件test.h
#ifndef _TEST_H
#define _TEST_H//一般是文件名的大写
头文件结尾写上一行:
#endif
这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。
把头文件的内容都放在#ifndef和#endif中。不管你的头文件会不会被多个文件引用,你都要加上这个。一般为:
#ifndef<标识>
#define <标识>
......
#endif<标识>
在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线
如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
那么是否#ifndef#define#endif就没用了呢, 大家可以想想, 当我们a.cpp中写了多个#include "a.h"时, 如果我们使用了#ifndef#define#endif那么预编译阶段就只会包含一个a.h中的内容到a.cpp中, 你也许会说, 有谁会傻到在a.cpp中写多个#include "a.h"呢, 那么请考虑稍微复杂点的情况, 当我们main.cpp中包含了a.h和b.h, 而a.h中我们又包含了b.h, 那么如果我们使用了#ifndef#define#endif则main.obj只会包含一份b.h。
- #ifndef、#define和#endif的用法
- #ifndef #define,#endif 和 #if DEBUG,#endif的用法
- #ifndef,#define,#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef #define #endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef#define#endif的用法
- #ifndef #define #endif 的用法
- #ifndef#define#endif的用法
- http://blog.lesspainful.com/
- 套题总结:2011成都网络赛
- 微论坛:移动互联网使语音互动门槛急剧降低
- 隐藏UITableView空Cell的Separator Lines
- 【Android开发学习17】Android OpenGL ES 光照与混合glDrawElements
- #ifndef、#define和#endif的用法
- ※C++随笔※=>☆C++基础☆=>※№浅谈指针与引用
- Notes On <Agile Web Application Development with Yii 1.1 and PHP5> - 01
- IOS程序之间的文件共享
- calabash
- 写给4年前没有开始做设计的自己
- uva10344 - 23 out of 5
- centos 5.3 上安装 emacs 23.2
- Ubuntu 12.04下玩转终端管理器Byobu