预处理指令:
------ IOS培训、android培训、期待与您交流!-------
在代码翻译成0和1之前;
所有的预处理指令都是以#开头的;
预处理的位置是随便写的;
预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾;
怎么将预处理指令的作用域只是程序的一部分:在作用域的结尾处加 #undef COUNT;
1、 宏定义1(不带参数)
/* 所有的预处理指令都是以#开头*/
#include<stdio.h>
#define COUNT 6 //格式:#define 宏名 值;
//宏名一般写大写或者以k开头,是为了与变量区别
Int main()
{
//如果不加#define COUNT 6,数组中的元素个数不能用变量表示,故会报错;
//需要在开头加上#define
Intages[COUNT]={1,2,67,89,90};
//用双引号括住的宏不会被替换掉
Char*name=”COUNT”;
Printf(“%s\n”,name);//输出结果是COUNT
For(int i=0;i<COUNT;i++){
Printf(“%d\n”,ages[i]) ;
}
#undef COUNT //COUNT的作用域到这里结束
Int a=COUNT;
return 0;
}
2、 宏定义2(带参数)//带参数的宏定义比函数效率高
Int sum(int a,int b)
{
return a+b;
}
Int main()
{
Int a=10;
Int b=20;
//这样就可以实现函数的调用,完成了加法运算
Int c=sum(a,b);
return 0;
}
//但是也可以不用函数完成加法运算,即用带参数的宏来实现加法运算
//格式:#define sum(v1,v2) v1+v2
#include<stdio.h>
#define sum(v1,v2) (v1+v2)
Int main()
{
//宏定义会在翻译成0和1之前将左边的换成右边的;
//宏定义只负责换代码,不负责计算
int d=sum(2,3)*sum(6,4)//实际上完成的是int d=2+3*6+4;
//这时候将宏定义换成 #define sum(v1+v2) (v1+v2);
//即带参数的宏定义一定要在参数和结果值上都得加小括号
Int a=10;int b=20;
Int c=sum(a,b);
printf(“c is %d\n”,c);
reurn0;
}
3、 条件编译
基本用法: #if 条件1
…code1…
#elif 条件2
…code2…
#else
…code3…
#endif
实例:
#include<stdio.h>
Int main()
{
int a=10;
//这个时候不能访问a,因为程序还没有翻译;
//在条件编译中一般判断宏的值,所以需要在程序中定义一个宏
#if (a==10)
printf(“a是10\n”);
#elif(a==5)
printf(“a是5\n”);
#else
printf(“a是其他值”);
#endif
return0;
}
修改程序如下:
#include<stdio.h>
#define A 10
Int main()
{
#if(A==10)
Printf(“a is 10\n”);
#else printf(“a is not 10\n”);
#endif
return 0;
}
#ifdef和#ifndef的使用
基本语法:
//如果定义了宏MAX就执行code
#ifdef MAX
…code…
#endif
//如果没有定义宏MAX就执行code
#ifndef MAX
…code…
#endif
4、文件包含
需要事先写一个.h文件
在.c文件中引用.h文件
//<>是系统自带的文件,“”表示自定义的文件
//不允许循环包含,比如a.h包含b.h,b.h又包含a.h
//重复包含一个头文件会降低程序的效率
#include”lisi.h”
int main()
{
int c=sum(10,19);
printf(“cis %d\n”,c);
return0;
}
但是在.h文件中需要将.c文件中定义的宏#ifdef … #endif
------ IOS培训、android培训、期待与您交流!-------