C语言预处理

1.预处理

  可以使用预处理和具有预处理的功能是C语言和其他高级语言的区别之一。

宏定义

  宏定义是预处理命令的一种,它提供了一种可以替换源代码中字符串的机制。

宏定义的类型

  可以简单分为有参数宏定义,和无参数宏定义。

(1)不带参数宏定义

  语法:#define 宏名 字符串

   demo:1 # define Y "ZYY" 

  详解:

  1.   # 表示这是一条预处理命令
  2.   宏名是一个标识符,必须符合C语言标识符的规定
  3.   字符串 这里可以是常数,表达式,格式字符串等。

注意:宏定义不是C语言,不需要在末尾加分号.  

      宏名定义以后也可以成为其他宏名定义的一部分

     demo:  # define PI 3.1415 

       # define PI2 PI*PU 

注意:如果字符串中含有宏名的话则不会被替换

#undef 可以用来终止宏定义的作用范围

语法: #undef 宏名


(2)带参数的宏定义

  带参数的宏定义不是简单的字符串替换,还要进行参数替换 一般形式如下:

    #define 宏名(参数) 字符串

  demo:

 1 # include <stdio.h>
 2 # include <stdlib.h>
 3 # define MIX(a,b) ((a)*(b)+(b)) 
 4 int main ()
 5 {
 6     int x = 5,y = 9;
 7     printf("x,y:
");
 8     printf("%d,%d
",x,y);
 9     printf("the main number is %d
",MIX(x,y));
10     return 0;
11 }

用宏定义来代替函数的好处是可以增加代码的执行速度,因为不存在函数的调用,缺点是由于重复编码,增加了程序的长度

注意:

     宏定义时参数要加括号,如不加括号,则有时结果是正确的,有时结果却是错误的

     宏扩展必须使用括号来保护表达式中低优先级的操作符号,以确保调用时达到想要的效果

     在带参数宏定义中,形式参数不分配内存单元,不必作类型定义

     在宏定义中,宏名与带参数的括号之间不可以加空格,否则会将空格以后的字符都作为替代字符串的一部分


2.#include指令

在一个源文件中可以使用#include指令将另一个源文件的全部内容包含进来

  demo:

1 # include <stdio.h>
2 # include "stdio.h"

上面给出了<> 尖括号 ""和双引号两种形式,它们是有一定的区别的

1)尖括号

  系统到存放C库函数头文件所在的目录中寻找要包含的文件,这是标准的方式

2)双引号

  系统先到当前代码文件所在的目录下寻找要包含的文件,如果找不到,再到存放C库函数头文件所在的目录中寻找

demo:

                                        f1.h

1 # define P printf
2 # define S scanf
3 # define D "%d"
4 # define C "%c"
5  

              f2.cpp

 1 # include <stdio.h>
 2 # include <stdlib.h>
 3 # include "f1.h"
 4 int main ()
 5 {
 6     int a;
 7     P("please input:
"); //printf 
 8     S(D,&a);//scanf 
 9     P("The number is :
"); //printf    
10     P(D,a);// printf 
11     P("
"); //printf 
12     return 0;
13 }

f1.h存放宏替换指令

f2.cpp 使用这些宏指令

原文地址:https://www.cnblogs.com/dire/p/5221012.html