#define

1、不带参宏定义

#define,宏定义命令,它也是C语言预处理命令的一种。

所谓宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。

例如

1
#define N 100

在编译过程中遇到 N 时,会直接替换为 100。

2、带参公定义

宏定义可以携带参数。

例如

1
2
3
4
5
6
7
#define M(y) y*y+3*y  //宏定义

int main()
{
// 以下命令解释为 5*5+3*5
int a = M(5);
}

3、防止头文件重复包含

如下所示

1
2
3
4
5
6
#ifndef __HEADER_One_H__ // 意思是:宏开始行,如果还没有定义 __HEADER_One_H__ 则 进入,否则退出
#define __HEADER_One_H__ // 定义 __HEADER_One_H__

// header1.h 头文件内容

#endif // 宏结束行

模版:

1
2
3
4
#ifndef __x_H__
#define __x_H__

#endif // 宏结束行

#if 与 #if defined

1、#if

#if的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如

1
2
3
4
5
6
7
8
9
#define  A 0  // 把A定义为0

#if (A > 1)
printf("A > 1"); // 编译器没有编译该语句,该语句不生成汇编代码
#elif (A == 1)
printf("A == 1"); // 编译器没有编译该语句,该语句不生成汇编代码
#else
printf("A < 1"); // 编译器编译了这段代码,且生成了汇编代码,执行该语句
#endif

模版:

1
2
3
4
5
#if x

#else

#endif
1
2
3
4
5
6
7
#if x

#elif x

#else

#endif

2、#if defined

1
2
3
#if defined (x)
...code...
#endif

这个#if defined它不管里面的 x 的逻辑是“真”还是“假”。它只管这个程序的前面的宏定义里面有没有定义 x 这个宏,如果定义了 x 这个宏,那么,编译器会编译中间的 …code…,否则会直接忽视中间的 …code… 代码。