C语言预处理

1.预处理函数

  可使用预处理和具备预处理的功能是C语言和其余高级语言的区别之一。编码

宏定义spa

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

宏定义的类型blog

  能够简单分为有参数宏定义,和无参数宏定义。内存

(1)不带参数宏定义字符串

  语法:#define 宏名 字符串input

   demo:1 # define Y "ZYY" io

  详解:class

  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:\n");
 8     printf("%d,%d\n",x,y);
 9     printf("the main number is %d\n",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:\n"); //printf 
 8     S(D,&a);//scanf 
 9     P("The number is :\n"); //printf    
10     P(D,a);// printf 
11     P("\n"); //printf 
12     return 0;
13 }

f1.h存放宏替换指令

f2.cpp 使用这些宏指令

相关文章
相关标签/搜索