C语言陷阱:宏定义与函数的区别
来源:互联网 发布:文明的冲突 知乎 编辑:程序博客网 时间:2024/04/28 15:18
有的时候宏定义可以实现类似函数的功能,例如:
#include <stdio.h>#define max(A, B) ((A) > (B) ? (A) : (B))int main() {int x = max(20,32);printf("%d\n", x);return 0;}
但是使用宏定义一定要格外注意括号的使用,不然很可能因为优先级问题使得程序出错,例如:
#include <stdio.h>#define abs(X) (X > 0 ? X : -X)int main() {int y = abs(12-23);printf("%d\n", y);return 0;}
正确的写法是:
#include <stdio.h>#define abs(X) ((X) > 0 ? (X) : -(X))int main() {int y = abs(12-23);printf("%d\n", y);return 0;}
0 0
- C语言陷阱:宏定义与函数的区别
- C语言宏定义函数与函数的区别
- 函数式宏定义与普通函数的区别?C语言宏定义和宏定义函数 ?
- 函数式宏定义与普通函数的区别?C语言宏定义和宏定义函数 ?
- C语言中宏定义函数与普通函数的区别
- c++中const、内联函数与c语言中的宏定义的区别
- C语言定义与声明的区别
- C语言定义与声明的区别
- 84 C语言带参宏定义和函数的区别
- 再看c语言的缺陷与陷阱
- C语言的陷阱与缺陷
- c语言的陷阱与缺陷小记
- c 语言中宏定义和定义全局变量的区别
- c语言中宏定义和函数区别
- C语言中变量定义与声明的区别
- C语言中变量定义与声明的区别
- C语言中的声明与定义的区别
- C语言中的声明与定义的区别
- POJ 1226 出现或者翻转后出现在每一个串中的子串
- CF - 387 - B. George and Round(指针)
- 配置SSH无密码登陆
- Binary Tree Inorder Traversal
- How do I instantiate a Queue object in java?
- C语言陷阱:宏定义与函数的区别
- 如何检测Java 字符串中是否包含某字符
- Restore IP Addresses
- Java HashMap遍历的两种方式
- Reverse Linked List II
- linux 学习(开山)
- Copy A Linked List With Next And Random Pointer
- 连接oracle xe
- SQLite 数据库使用