目录 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定义宏的资料请关注自由互联其它相关文章!