经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言:代码宏详解
来源:jb51  时间:2021/9/28 12:15:32  对本文有异议

1、定义宏

  1. #define ARRAY_SIZE 100
  2. double data[ARRAY_SIZE];

如下图,上方代码在编译器进行宏替换时会将代码中的ARRAY_SIZE替换成100

在这里插入图片描述

2、宏函数

宏函数的参数是没有任何类型的概念的,因此

宏函数使用如下,代码中的MAX(3,4)会替换成宏定义的表达式

  1. #define MAX(a,b) a > b ? a : b
  2. int n1 = MAX(3,4);

在这里插入图片描述

注意

在这里插入图片描述

上方替换出错,是因为给宏函数的参数传递的是一个表达式,可以使用下图方法

在这里插入图片描述

宏函数的参数不要传表达式,如下图,表达式进行了2次运算

在这里插入图片描述

3、多行宏

使用斜杠连接下一行代码,适用于代码很长的宏

  1. #define IS_HEX_CHARACTOR(ch) ( (ch) >= '0' && (ch) <= '9') || ( (ch) >= 'A' && (ch) <= 'F') || ( (ch) >= 'a' && (ch) <= 'f')
  2. int main(){
  3. printf("is hex charactor:%d", IS_HEX_CHARACTOR('a'));
  4. }

在这里插入图片描述

4、宏变长参数

  1. #define PRINTLNF(format, ...) printf(format, __VA_ARGS__)

在这里插入图片描述

在这里插入图片描述

5、原样输出变量名

在这里插入图片描述

6、例子

  1. #include <stdio.h>
  2. #define PRINTF(format, ...) printf("("__FILE__":%d) %s: "format,__LINE__,__FUNCTION__, ##__VA_ARGS__)
  3. #define PRINT_INT(value) PRINTF(#value":%d \n", value)
  4. int main(){
  5. int no = 1;
  6. PRINT_INT(no);
  7. return 0;
  8. }

在这里插入图片描述

7、宏与函数的差异

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注w3xue的更多内容!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号