【问题标题】:Place macros in a library or convert them to functions?将宏放在库中或将它们转换为函数?
【发布时间】:2021-05-07 10:42:11
【问题描述】:

我一直在课堂上制作一些宏,因为那是我的教授教给我的,但对于实际项目,我们被告知要创建一个库以使我们的生活更轻松。我可以在里面放宏吗?还是我应该将它们转换为函数?如果是这样,有人可以帮我转换其中一个,因为我对返回类型等有点困惑。

#define BV(bit) (1 << (bit))
#define setBit(byte, mask) (byte |= (mask))
#define clearBit(byte, mask) (byte &= ~(mask))

【问题讨论】:

  • 在我看来setBit(byte, mask) 会返回一个byte。原型可能是:byte setBit(byte value, byte mask); 既然这似乎是家庭作业,剩下的就交给你了。
  • 宏属于头文件。因此,您可以拥有一个包含它们的特殊头文件。另一方面,函数可以进入预编译库。

标签: c embedded


【解决方案1】:

您应该删除这些宏并且根本不使用它们。

byte |= 1u &lt;&lt; 3 等代码是最易读的形式。所有 C 程序员都会立即理解代码的作用。如果您在阅读/理解位运算符时遇到困难,那么宏不是解决该问题的方法。

setBit(byte, BV(3)) 之类的代码完全不可读。要理解这一点,C 程序员必须首先学习你的秘密宏语言。当他们已经了解 C 语言时,不应强迫他们学习该语言。

【讨论】:

    【解决方案2】:

    您可以将它们转换为内联函数并将它们放在头文件中,或者您可以将它们保留为宏并将它们放在头文件中。

    无论哪种方式,你都只会有一个头文件,你可以从多个不同的源文件中包含它。

    我不建议将这么简单的东西放入单独编译的库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多