您的位置:首页 > 其它

#define #if #ifdef #ifndef 作用和区别

2016-12-07 09:11 453 查看

#define

#define
 用来进行定义
#define kTabBar_Height        49.0f
#define kString @"哈哈哈"
1
2
1
2

#if

#if 常量表达式
//程序段1
#else
// 程序段2
#endif
1
2
3
4
5
1
2
3
4
5
它的作用是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。

#ifdef

#ifdef <标识符>
//程序段1
#else
//程序段2
#endif
1
2
3
4
5
1
2
3
4
5
它的作用是:当标识符已经被定义过,则对程序段1进行编译,否则编译程序段2。

#ifndef

#ifndef <标识符>
//程序段1
#else
//程序段2
#endif
1
2
3
4
5
1
2
3
4
5
只是第一行与前一种形式不同:将
#ifdef
改为
#ifndef
。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。 

但是也是有区别的一般的, 条件指示符
#ifndef
检查预编译常量在前面是否已经被定义。#ifndef 的最主要目的是防止头文件的重复包含和编译。 

如果#ifndef…#endif在头文件中,千万不要忽略了头件的中的
#ifndef
,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 

所以, 还是把头文件的内容都放在
#ifndef
#endif
中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:
#ifndef <标识>
#define <标识>
......
......
#endif
#endif
1
2
3
4
5
6
1
2
3
4
5
6
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:
stdio.h

#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
#endif
1
2
3
4
5
1
2
3
4
5




0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: