A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 米匠 中级黑马   /  2014-10-15 15:45  /  1256 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

预处理指令
在代码编译(0和1)之前执行的指令叫预处理指令。
所有的预处理指令都是以#开头。
预处理的位置是随便写的
预处理指令的作用域:从编写指令的那一行开始一直到文件结尾
#undef 宏名   从这行代码开始,宏失效
宏名一般用大写(或者在宏名前加“k”,代表常量),变量名一般用小写
一、宏定义
格式:#define 宏名 值

#define COUNT 5  //在代码编译前把所有的COUNT都换成5,除了字符串
int main()
{
int ages[COUNT]; = {1, 2, 67, 89, 90};  //数组长度值只能用常量或者宏
for(int i=0; i<COUN ; i++)  //i<常量或宏,不能用变量
{
printf(“%d\n”, ages[i]);
}
return 0;
}
二、带参数的宏定义
带参数的宏定义效率比函数高

#define sum(v1, v2) ((1)+(v2))  //v1+v2应该加括号,否则会出现运算顺序问题,因为宏定义在执行时,只作文本替换,不管运算顺序
#define pingfang(a) ((a)*(a))  //应该把a括上,同样会出现运算顺序的问题
int main()
{
int a = 10;
int b = 20;
int c = sum(a, b);
int d = pingfang(10)/pingfang(2);  //10*10/2*2
int e = pingfang(5+5);  //5+5*5+5
printf(“c=%d, d=%d, e=%d\n”, c, d, e);
return 0;
}
三、条件编译
在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。
只要写了#if,在最后面必须加上#endif

#if 条件1
...code1...
#elif 条件2
...code2...
#else
...code3...
#endif

eg:
#define A 10
int main()
{
int a = 10;
#if (A == 10)
printf(“a是10\n”);
#elif (A == 5)
printf(“a是5\n”);
#else
printf(“a是其他值\n”);
#endif  //必须写endif,因为如果没有结束if的标志,会导致以后的代码都不执行编译
return 0;
}
----------------------------------------------------------------------------------------------------------------
#if defined(MAX)  //如果定义了MAX这个宏
...code...
#endif

#if !defined(MAX)  //如果没有定义MAX这个宏
...code...
#endif

//同上
#ifdef MAX
...code...
#endif

#ifndef MAX
...MAX...
#endif

四、文件包含
1.<>表示系统自带的文件,""表示自定义的文件
2.不允许 循环包含,比如a.h包含b.h,b.h包含a.h

开发中常常出现多次重复包含同一头文件的情况,这样会降低编译效率,为了防止这一情况,可以再头文件中定义条件编译:
test.h
#ifndef TEST.H  //这个宏通常定义为大写的文件名,定义为空即可,防止不同的头文件定义相同的宏
#define TEST.H
函数声明code
#endif

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

3 个回复

倒序浏览
帮你顶一个。笔记挺好的。
回复 使用道具 举报
米匠 来自手机 中级黑马 2014-10-15 23:26:25
藤椅
孙林 发表于 2014-10-15 20:41
帮你顶一个。笔记挺好的。

谢谢。。。。
回复 使用道具 举报
赞一个  楼主 继续坚持啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马