打印
[学习资料]

宏定义函数利器

[复制链接]
156|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-7-18 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一:C语言中的宏定义函数是一种预处理指令,用于在编译之前对代码进行替换和展开。宏定义函数具有以下几个优势:

代码重用:通过宏定义函数,可以将一段代码片段定义为一个宏,然后在程序中多次调用该宏,从而实现代码的重用。这样可以减少代码的冗余,提高代码的可维护性和可读性。

编译时展开:宏定义函数在编译时会被直接展开,而不需要函数调用的开销。这样可以减少函数调用带来的额外开销,提高程序的执行效率。

参数灵活性:宏定义函数可以接受不同数量和类型的参数,而不像普通函数需要事先声明参数的类型和数量。这样可以在一定程度上提高代码的灵活性和通用性。

条件编译:宏定义函数可以与条件编译结合使用,根据不同的条件选择性地展开或忽略宏定义函数的代码。这样可以根据不同的编译选项生成不同的代码,实现更灵活的程序控制。

二:在学习参考了前两个宏定义函数以后,充分体会了宏定义函数的妙用,个人总结了后五个常用宏定义函数提供大家参考,在个人嵌入式MCU编程中发挥了十分巧妙的作用。
#define return_if_fail(p)                                                  \
  if (!(p)) {                                                              \
    return;                                                                \
  }

#define return_value_if_fail(p, value)                                     \
  if (!(p)) {                                                              \
    return (value);                                                        \
  }

#define return_if_in_invalid_time(clock, time)                             \
      static unsigned int TimerNode = 0;                                   \
      if (clock - TimerNode < time)                                        \
        return;                                                            \
      else                                                                 \
        TimerNode = clock;                                                 \

#define return_value_if_in_invalid_time(clock, time, value)                \
      static unsigned int TimerNode = 0;                                   \
      if (clock - TimerNode < time)                                        \
        return (value);                                                    \
      else                                                                 \
        TimerNode = clock;                                                 \


#define execute_once(p)                                                    \
      static char executed = 0;                                            \
      if (!executed) {                                                     \
        p;                                                                 \
        executed = 1;                                                      \
      }

#define execute_invalid_time(clock, time, p)                               \
      static unsigned int TimerNode = 0;                                   \
      if (clock - TimerNode > time) {                                      \
        p;                                                                 \
        TimerNode = clock;                                                 \
      }

#define do_if_flag_set(flag, p)                                            \
  if (flag!=0) {                                                           \
    p;                                                                     \
    flag=0;                                                                \
  }


————————————————
版权声明:本文为CSDN博主「嵌入式小宁」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_53592457/article/details/131438241

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15650

帖子

12

粉丝