首页 > 代码库 > 5.预处理

5.预处理

编译之前的处理指令
A.宏定义
a.
//Like static constant
#define NUM 6

//The truth of macro define is replacing the constant
//Replace "sum(a, b)" with "a+b"
#define sum(a, b) a+b
 
实质是字符替换
 
b.带参数的宏定义
#define sum(v1,v2) v1+v2
 
但是这种“函数”有缺点
    printf("sum = %d\n", sum(1, 2) * sum(3, 4));
out:
sum = 11
因为宏定义的实质是文本替换,不会进行计算,实际计算是 1 + 2 * 3 + 4
解决:给每个变量、算式加上括号
#define sqr(a) ((a)*(a))
    printf("sqr = %d\n", sqr(5+5));
 
 
B.条件编译
条件成立的时候才进行编译
#define NUM 1

int main(int argc, const char * argv[]) {

#if NUM == 0
    printf("0");
#elif NUM > 0
    printf(">0");
#elif NUM < 0
    printf("<0");
#endif
   
    printf("\n");
    return 0;
}
 
 
C.文件包含
系统自带使用<> #include <stdio.h>
自定义”” #include “mylib.h”
 
使用<>直接到系统目录中寻找资源
使用””先在源程序目录寻找,若找不到再前往系统目录
 
防止多次定义,多次引入:
#ifndef NUM
#define NUM 3
#endif
 
不能循环包含!!
 
 

5.预处理