C语言(预处理)

- 预处理

在程序编译之前进行的处理,所有的编译预处理命令以#开头。分为宏定义、文件包含、条件编译。


1. 宏

宏定义的作用是某段代码的别名,以#define开头,结尾不用分号。
eg:#define PI 3.14//宏名一般用大写字母
在编译预处理时,只是简单的替换。宏名的有效范围是从定义位置到文件结束。如需终止宏定义的作用域,可以用#undef命令。
eg:#define PI 3.14
//......
#undef PI

若已定义的标识符在字符串中出现,则不替换。
eg:

这里写图片描述

  1. 无参宏:上述为无参宏
    #define R 2.0
    #define PI 3.14
    #define L 2*PI*R//可以在宏定义的时候引用已定义的宏
    1. 有参宏:#define S(a,b) a*b
      S(1+2,3);//表达式替换成a+b*3
      #define S(a,b) (a)*(b)//此时S(1+2,3)将替换成(1+2)*3
      注:有参宏定义时,宏名与参数间不能有空格,否则将空格后
      字符替换成宏名(成为无参宏)。

2.文件包含

将指定的文件内容嵌入到指定源文件中,包括两种方式。

  1. #include"xxx.x"//通用方式。此方式一般包含自己写的文件,即先在源文件所在目录中查找要包含的文件,若未能找到则按标准方式查找。
  2. #include<xxx.x>//标准方式。此方式只在c语言编译器的c函数库头文件中查找要包含的文件。

3.条件编译

  1. #ifdef 宏名 /*程序段1*/判断某个宏是否被定义, 若已定义, 执行随后的程序段1(类似于if判断语句)。
  2. #else/*程序段2*/if判断后,若宏未定义则执行程序段2。
    eg:#define PI 3.14
            #ifdef PI
          程序段1

            #else
          程序段2
         此时执行程序段1。
      
  3. #ifndef 宏名 /*程序段1*/r若宏名没有被定义则执行程序段1
      
  4. #endif 为#if, #ifdef, #ifndef这些条件命令的结束标志。

猜你喜欢

转载自blog.csdn.net/BeatRex/article/details/75733534
今日推荐