------- IOS培训、android培训、期待与您交流! ----------
预处理指令
1预处理指令的使用
预处理指令一般是在文件进行编译之前进行的,在文件未编译成0和1可执行的文件前,程序先对文件中的所有预处理指令进行处理,替换成相应的内容。
预处理指令一般有三种情况:
1>宏定义
2>条件编译
3>文件包含
预处理指令的作用域从定义的哪一行开始,直到文件的结束。预处理指令可以定义在文件的任何位置。想要提前结束预处理指令的作用域,可以使用关键字Undef。所有的预处理指令末尾都不要加分号。
如define COUNT 5 一般预处理指令中的宏名使用一般大写,以区别普通的变量 。或者使用k打头以表示是常量。
带参数的宏定义
#define sum(v1,v2)v1+v2相当于将 左边的sum(v1,v2)替换成v1+v2
但是在同一行中多次使用宏定义时会出现情况如:
sum(2,4)*sum(3,6)被替换成2+4*3+6,为了避免这种情况,我们经常使用(v1+v2)
但是这样使用也不严谨,如下面的情况#define pow(a) (a*a)
当使用如下情况的时候pow(4+4)/pow(3+2)替换成 (4+4*4+4)/(3+2*3+2)为了避免这种情况,可以做如下的修改#define pow(a) ((a)*(a))
宏定义的效率要比函数的执行效率要高,因为函数在运行中调用,需要花一定的时间,而宏定义时在是编译之前将代码进行替换,所以效率要比函数高一点。对于一些简单的运算经常使用宏定义。
条件编译
所谓条件编译就是在我们的代码满足一定的条件才进行编译。
条件编译的格式如下:
#if 条件1
。。。code1。。。。
#elif 条件2
。。。。code2。。。
#else
。。。。code3。。。。
#endif
使用分析情况如if else,但是一定要在结尾加上#endif
#define A 10
#if (A==10)
printf("hello everybody\n");
#endif
条件编译的条件判断只能取到宏定义中的值对于那些程序中的变量取不到。
条件编译的形式有三种
#define A
#if defined(A)
#if !defined(A)
#ifdef (A)
#ifndef(A)
#if A
条件包含
文件包含指令有 #include《》和#include" "两种,《》这种编译器会先从系统函数库中寻找,而“ ”包含文件,编译器会优先从用户自定义的头文件中寻找。文件包含的作用是拷贝include中的内容到定义处。
文件包含使用时要注意不要循环包含,如在一个test.m 中包含math.h,但是不要在math.h中包含test.m这样循环包含。
为了防止重复包含文件,可以通过在头文件中使用
#ifndef HeadFIle_H
#define HeadFIle_H
#endif
typedef的使用
typedef的作用时给类型起一个别名,简化类名。
typedef int MyInt;
MyInt a=10;
在typdef的语句的末尾要加上分号。
typedef的使用场合:
1>基本数据类型
2>结构体
3>指针
4>枚举
5>指向函数的指针
typedef和宏定义的区别和使用注意
#define String2 char*
typedef char * String;
int main()
{
String a,b;
String2 a2,b2;
return 0;
}
#define 和typedef都可以为类型名起别名,但是在同时定义两个变量时,这两种就有差别。