首页 > 代码库 > 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
#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;
}
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.预处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。