C语言总结:预处理命令

C语言总结:预处理命令

2019-3-30

预处理命令可以提高编程效率,但其不是C语句,编译系统不能直接对它们进行编译,而是在编译前会转换为C源程序,然后编译时去掉了预处理命令。

1. 宏定义

宏定义在使用时,系统只是用宏名之后的部分替换语句中包含的宏名,如果是含参宏定义,将实际的参数替换定义时字符串中的对应参数。所以在写宏定义时要注意,宏只是内容的替换,所以要严格遵守语法规则。

//无参宏定义
# define PI 3.1415926

//含参宏定义
# define S(a, b) a*b
area = S(3,2);  // area = 6

//限制宏定义的作用于
# define PI 3.1415926
...    //PI 的有效范围
# undef PI
2. 文件包含

C源代码常包含头文件,也是一种预处理命令。
有两种包含形式,尖括号、双撇号:

#include 
#include "file.h"

二者区别在于,用尖括号时,系统到存方C库函数头文件的目录中寻找要包含的文件,这称为标准方式。用双撇号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。
一般来讲,如果调用库函数而用#include 命令来包含头文件,常用尖括号,以节省查找时间。若包含的是用户自己定义编写的文件,一般用双撇号(不在当前目录中的文件需给出文件路径)。

3. 条件编译

通过人为控制,使得程序中的部分内容在一定条件下才进行编译,即对该部分内容指定编译的条件。
几种形式:

//1)若标识符被定义过,编译程序段
# ifdef 标识符
...
# else
...
# endif

//2)若标识符未被定义过,编译程序段
# ifndef 标识符
...
# else
...
# endif

//3)当表达式为真时,编译程序段,可节省编译所用时间。
# if 表达式
...
# else
...
# endif

程序示例:

#include 
#define RUN 
void main(){
  # ifdef RUN
  printf("Define RUN\n");
  # else
  printf("Undefine RUN\n");
  # endif
  return ;
}

你可能感兴趣的:(C/C++,coding,C/C++总结)