1.预处理函数
可使用预处理和具备预处理的功能是C语言和其余高级语言的区别之一。编码
宏定义spa
宏定义是预处理命令的一种,它提供了一种能够替换源代码中字符串的机制。code
宏定义的类型blog
能够简单分为有参数宏定义,和无参数宏定义。内存
(1)不带参数宏定义字符串
语法:#define 宏名 字符串input
demo:1 # define Y "ZYY" io
详解:class
注意:宏定义不是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 使用这些宏指令