编译预处理

C 程序设计中的编译预处理是一项重要的功能,包括了宏和文件包含两个主要部分。宏在C 源程序中,可以使用宏来代表一个字符串,称为"宏"。在编译预处理阶段,所有出现的"宏名"都会被替换为宏定义中的字符

C 程序设计中的编译预处理是一项重要的功能,包括了宏和文件包含两个主要部分。

在C 源程序中,可以使用宏来代表一个字符串,称为"宏"。在编译预处理阶段,所有出现的"宏名"都会被替换为宏定义中的字符串,这个过程称为"宏代换"或者"宏展开"。

无参宏的宏名后面不带参数。一般的宏定义形式如下:

```

#define 标识符 字符串

```

使用无参宏定义需要注意以下几点:

1. 宏定义只是一种简单的文本替换,字符串中可以包含任何字符,预处理程序对其不做任何检查。

2. 宏定义不是说明或语句,在行末不要加分号,如果加上分号,则连分号也会被替换。

3. 宏定义必须写在函数之外,其作用域从宏定义命令到源程序结束。

4. 如果在源程序中将宏名用引号括起来,则预处理程序不会对其进行宏代换。

5. 宏定义允许嵌套,可以在宏定义的字符串中使用已经定义的宏名。

文件包含

文件包含命令的功能是将指定的文件插入到当前命令行的位置,取代该命令行,从而将指定的文件和当前的源程序文件连接成一个源文件。

文件包含的一般形式如下:

```

#include "文件名"

```

使用文件包含需要注意以下几点:

1. 使用尖括号表示在系统目录中查找被包含的文件,而不在源文件目录中查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到系统目录中查找。

2. 一个include命令只能指定一个被包含的文件。

3. 文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。

#ifdef条件

如果标识符已经通过#define命令进行了定义,则对程序段1进行编译;否则对程序段2进行编译。一般形式如下:

```

#ifdef 标识符

程序段1

#else

程序段2

#endif

```

#ifndef条件

如果标识符没有通过#define命令进行定义,则对程序段1进行编译;否则对程序段2进行编译。一般形式如下:

```

#ifndef 标识符

程序段1

#else

程序段2

#endif

```

#if条件

如果常量表达式的值为真(非0),则对程序段1进行编译;否则对程序段2进行编译。一般形式如下:

```

#if 常量表达式

程序段1

#else

程序段2

#endif

```

标签: