预处理指令分3种:
1>宏定义
2>条件编译
3>文件包含
预处理指令在代码翻译成0 1之前执行
预处理的位置是随便写的
预处理指令的作用域:从编写指令的那一行开始一直到文件结尾
# undef COUNT // 从这行开始,COUNT这个宏失效
宏名一般用大写或者以k开头,变量名一般用小写
带参数的宏定义:
宏定义只会替换代码
# define <stdio.h>
# define sum(v1, v2) ((v1)+(v2))//右边替换左边,加上括号,严谨
# define pingfang(a) ((a)*(a)) //都要写括号
带参数的宏定义比函数高,因为宏定义是在翻译之前进行的文本替换,简单的干脆用宏定义
条件编译:满足条件才进行编译
if else if else 中以有些代码没有执行,但是都参与编译存在.o目标文件
# if ()
{
}
# elif ()
{
}
# else
printf("a为其他值\n");
# endif// 一定加上
}
条件编译效率更高,在编译之前进行,无用的代码不参与编译
只要写#if,后面必须加上#endif
# if defined (A)
语句;
# endif
# if !defined (A)
语句;
# endif
# ifdef MAX
语句;
# endif
# ifndef MAX
语句;
# endif
文件包含:
1.<> 表示系统自带的文件,"" 表示自定义的文件
2.不允许循环包含,比如a.h包含 b.h,b.h又包含a.h
3.函数写很多遍声明也可以编译通过
重复包含函数声明会降低效率
李四.h
# ifndef LISI_H // LISI_H可以写成任何名字,一般写成文件名,使宏名不重复
# define LISI_H
int sum(int a, int b);
#endif
王五.h
# ifndef WANG_WU // WANG_WU可以写成任何名字,一般写成文件名,使宏名不重复
# define WANG_WU
int cheng(int a, int b);
#endif
1>宏定义
2>条件编译
3>文件包含
预处理指令在代码翻译成0 1之前执行
预处理的位置是随便写的
预处理指令的作用域:从编写指令的那一行开始一直到文件结尾
# undef COUNT // 从这行开始,COUNT这个宏失效
宏名一般用大写或者以k开头,变量名一般用小写
带参数的宏定义:
宏定义只会替换代码
# define <stdio.h>
# define sum(v1, v2) ((v1)+(v2))//右边替换左边,加上括号,严谨
# define pingfang(a) ((a)*(a)) //都要写括号
带参数的宏定义比函数高,因为宏定义是在翻译之前进行的文本替换,简单的干脆用宏定义
条件编译:满足条件才进行编译
if else if else 中以有些代码没有执行,但是都参与编译存在.o目标文件
# if ()
{
}
# elif ()
{
}
# else
printf("a为其他值\n");
# endif// 一定加上
}
条件编译效率更高,在编译之前进行,无用的代码不参与编译
只要写#if,后面必须加上#endif
# if defined (A)
语句;
# endif
# if !defined (A)
语句;
# endif
# ifdef MAX
语句;
# endif
# ifndef MAX
语句;
# endif
文件包含:
1.<> 表示系统自带的文件,"" 表示自定义的文件
2.不允许循环包含,比如a.h包含 b.h,b.h又包含a.h
3.函数写很多遍声明也可以编译通过
重复包含函数声明会降低效率
李四.h
# ifndef LISI_H // LISI_H可以写成任何名字,一般写成文件名,使宏名不重复
# define LISI_H
int sum(int a, int b);
#endif
王五.h
# ifndef WANG_WU // WANG_WU可以写成任何名字,一般写成文件名,使宏名不重复
# define WANG_WU
int cheng(int a, int b);
#endif