宏
2016年7月28日 星期四15:00
不带参数的宏
#include
#define COUNT 5
void test();
int main(int argc, const char * argv[]) {
/**
预处理指令:
在我们的文件翻译成0和1之前做的操作我们称之为预处理指令
一般情况下预处理都是以#号开头
宏定义格式
1.不带参数的宏定义
2.带参数的宏定义
#define 宏名 值
宏定义后面不要写分号
宏定义的作用:
会在程序翻译成0和1之前,将所有宏名替换为 宏的值
宏定义在什么时候替换:
源代码 -> 预处理 -> 汇编 -> 二进制 -> 可执行程序
规范:
一般情况下宏名都大写,多个单词之间用_隔开
*/
int a[COUNT] = {1,2,3,4,5};
for (int i = 0; i
printf("a[%i] = %i\n",i,a[i]);
}
//#undef COUNT
/**
宏定义也有作用域:
从定义的那一行起,一直到文件末尾
虽然默认情况下宏定义的作用域是从定义的那一行开始,一直到文件末尾,但是我们也可以通过对应的关键字提前结束宏定义的作用域
结束宏定义 #undef
*/
test();
return 0;
}
void test()
{
int b[COUNT] = {6,7,8,9,0};
for (int i = 0; i
printf("b[%i] = %i\n",i,b[i]);
}
}
带参数的宏
#include
/**
SUM 宏的名称
(v1, v2) 参数,注意点 不需要写成数据类型
v1 + v2 用于替换的内容
带参数的宏注意点
1.一般情况下建议写带参数的宏的时候,给每个参数加上一个()
2.一般情况下建议写带参数的宏的时候,给结果也加上一个()
*/
#define SUM(v1, v2) v1 + v2
int main(int argc, const char * argv[]) {
int a = 10;
int b = 5;
/**
int res = sum(a,b);
SUM(a,b) v1 == a v2 == b
a+b
int res = a+b;
*/
int res = SUM(a, b);
printf("res = %i \n",res);
return 0;
}