目录 1.宏是什么 2.宏的用法 3. 宏的注意事项 4. 宏和函数的区别 5.命名要求 6. 条件编译 常见条件编译指令及应用场景 1.宏是什么 #define 机制包括了一个规定,允许把参数替换到文本中,
目录
- 1.宏是什么
- 2.宏的用法
- 3. 宏的注意事项
- 4. 宏和函数的区别
- 5.命名要求
- 6. 条件编译
- 常见条件编译指令及应用场景
1.宏是什么
#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。
语法:
#define name( parament-list ) stuff
parament-list:是一个由逗号隔开的符号表。
2.宏的用法
#define SUM(x,y) ((x)+(y))
int main()
{
int a = 10;
int b = 20;
int ret = SUM(a, b);
printf("%d\n", ret);
return 0;
}
简要说明:宏已经被替换
分位三个阶段:预编译、编译、汇编
3. 宏的注意事项
定义什么替换什么
来看这一例:
#define NUM(x,y) x+y
int main()
{
int a = 2;
int b = 3;
printf("%d\n", NUM(a, b) * NUM(a, b));
//结果:11
return 0;
}
原因:num(a,b)*num(a,b) = a + b * a + b=11
4. 宏和函数的区别
宏带副作用参数:
#define MAX(a, b) ( (a) > (b) ? (a) : (b) )
int main()
{
int x = 5;
int y = 8;
int z = MAX(x++, y++);
printf("x=%d y=%d z=%d\n", x, y, z);//输出的结果是什么
return 0;
}
//( (x++) > (y++) ? (x++):(y++) )
//输出结果:x=6,y=10,z=9
5.命名要求
宏名必须大写
函数不要全部大写
6. 条件编译
常见条件编译指令及应用场景
1.单分支
编译指令:
#if 常量表达式
//…
#endif
应用场景:
int main()
{
#if 4>2
printf("hello world!\n");
#endif
return 0;
}
//输出hello world
2.多分支
编译指令:
#if 常量表达式
//…
#elif 常量表达式
//…
#else
//…
#endif
应用场景:
int main()
{
#if 1>2
printf("xixi\n");
#elif 4>3
printf("haha\n");
#else
printf("heihei\n");
#endif
return 0;
}
//输出结果:haha
可不能和if else选择语句混淆,多分支条件编译从上往下走,如果有一个分支成立,后面分支就不再执行;但是选择语句是从上往下走,有一个分支成立,继续查看后面分支是否成立
3.判断是否被定义
编译指令:
1. > #if defined(symbol) 或 #ifdef symbol
2. > #if !defined(symbol) 或 #ifndef symbol
应用场景:
```c
#define DEF
int main()
{
#if defined(DEF)
printf("haha\n");
#endif
#ifdef MAX
printf("heihei\n");
#endif
return 0;
}
//输出结果:haha
```
4.嵌套指令
编译指令
#if 常量表达式
#ifdef symbol
//操作
#endif
#elif 常量表达式
#ifdef symbol
//操作
#endif
#endif
条件编译指令也支持嵌套,注意#endif结束本次嵌套
5.删除宏定义
编译指令:
#undef
应用场景:
#define DEF
int main()
{
#undef DEF//删除DEF宏定义了
#ifdef DEF
printf("hehe\n");
#endif
return 0;
}
以上就是C语言#define定义宏的使用详解的详细内容,更多关于C语言#define定义宏的资料请关注自由互联其它相关文章!
