#ifndef 在头文件中的作用
2015-08-22 10:29
363 查看
#ifndef
在头文件中的作用
在一个大的软件工程里面,
可能会有多个文件同时包含一个头文件,
当这些文件编译链接成
一个可执行文件时
,就会出现大量
“
重定义
”
的错误。在头文件中实用
#ifndef #define #endif
能避免头文件的重
定义。
方法:例如要编写头文件
test.h
在头文件开头写上两行:
#ifdef _TEST_H
#define _TEST_H//
一般是文件名的大写
头文件结尾写上一行:
#endif
这样一个工程文件里同时包含两个
test.h
时,就不会出现重定义的错误了。
分析:当第一次包含
test.h
时,由于没有定义
_TEST_H
,条件为真,这样就会包含(执行)
#ifndef _TEST_H
和
#endif
之间的代码,
当第二次包含
test.h
时前面一次已经定义了
_TEST_H
,
条件为假,
#ifndef
_TEST_H
和
#endif
之间的代码也就不会再次被包含,这样就避免了重定义了。
#ifndef __74HC595_H__
#define __74HC595_H__
#endif
#ifndef _optimizedvector_h // if not define _optimizedvector_h
#define _optimizedvector_h // then define _optimizedvector_h
通俗点就是如果没定义
_optimizedvector_h
,那就定义
_optimizedvector_h
,防止重复编译
头文件中的
#ifndef
,
这是一个很关键的东西。
比如你有两个
C
文件,
这两个
C
文件都
include
了同一个头文件。而编
译时,这两个
C
文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
还是把头文件的内容都放在
#ifndef
和
#endif
中吧。不管你的头文件会不会被多个文件引
用,你都要加上这个。一般
格式是这样的:
#ifndef <
标识
>
#define <
标识
>
......
#endif
<
标识
>
在理论上来说可以是自由命名的,
但每个头文件的这个
“标识”
都应该是唯一的。标
识的命名规则一般是头
文件名全大写,前后加下划线,并把文件名中的“
.
”也变成下划线,
如:
stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
在头文件中的作用
在一个大的软件工程里面,
可能会有多个文件同时包含一个头文件,
当这些文件编译链接成
一个可执行文件时
,就会出现大量
“
重定义
”
的错误。在头文件中实用
#ifndef #define #endif
能避免头文件的重
定义。
方法:例如要编写头文件
test.h
在头文件开头写上两行:
#ifdef _TEST_H
#define _TEST_H//
一般是文件名的大写
头文件结尾写上一行:
#endif
这样一个工程文件里同时包含两个
test.h
时,就不会出现重定义的错误了。
分析:当第一次包含
test.h
时,由于没有定义
_TEST_H
,条件为真,这样就会包含(执行)
#ifndef _TEST_H
和
#endif
之间的代码,
当第二次包含
test.h
时前面一次已经定义了
_TEST_H
,
条件为假,
#ifndef
_TEST_H
和
#endif
之间的代码也就不会再次被包含,这样就避免了重定义了。
#ifndef __74HC595_H__
#define __74HC595_H__
#endif
#ifndef _optimizedvector_h // if not define _optimizedvector_h
#define _optimizedvector_h // then define _optimizedvector_h
通俗点就是如果没定义
_optimizedvector_h
,那就定义
_optimizedvector_h
,防止重复编译
头文件中的
#ifndef
,
这是一个很关键的东西。
比如你有两个
C
文件,
这两个
C
文件都
include
了同一个头文件。而编
译时,这两个
C
文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
还是把头文件的内容都放在
#ifndef
和
#endif
中吧。不管你的头文件会不会被多个文件引
用,你都要加上这个。一般
格式是这样的:
#ifndef <
标识
>
#define <
标识
>
......
#endif
<
标识
>
在理论上来说可以是自由命名的,
但每个头文件的这个
“标识”
都应该是唯一的。标
识的命名规则一般是头
文件名全大写,前后加下划线,并把文件名中的“
.
”也变成下划线,
如:
stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
相关文章推荐
- 【07】 Boost库学习笔记之异步通信(UDP)
- 【08】 Boost库学习笔记之异步通信(Serial)
- 对于多线程访问同一变量是否需要加锁的问题
- Codeforces Round #249 (Div. 2)453C Cardiogram(模拟)
- iOS过场动画调研笔记
- ubuntu 12.04 下搭接Qt 嵌入式开发环境
- Objective-C基础知识点
- ORA-01747: user.table.column, table.column 或列说明无效
- Spring MVC 教程,快速入门,深入分析
- fatal error LNK1281: 无法生成 SAFESEH 映像。
- [网络流24题] 10 餐巾 (线性规划网络优化 ,最小费用最大流)
- POJ 3090 Visible Lattice Points
- 社説 20150822 70年談話質疑 歴史認識の共有進める土台に
- 【05】 Boost库学习笔记之正则表达式(regex)
- 【06】 Boost库学习笔记之异步通信(TCP)
- bootstrap 手机 菜单
- iOS UIControl 几个事件的说明
- poj-1077 八数码 【a*】
- 【03】 Boost库学习笔记之Bind
- 【04】 Boost库学习笔记之线程(thread)