对于嵌入式系统,这是"static const” vs “#define” in C"的一种情况。

在带有“传递的”代码和模块的大型/中型项目中,为包含文件,模块等编写常量参数的最佳实践是什么?

在代码“passed-down”中,您不知道所选择的名称是在其他包含的文件中定义的,还是用extern调用或在其他可能包含您的文件的文件中被称为宏。

具有以下3个选项:

  • static const int char_height = 12;
  • #define CHAR_HEIGHT 12
  • enum { char_height = 12 };

  • 哪一个更好(在内存未知的嵌入式系统上)?

    原始代码主要使用#define来实现,但是由于似乎有人为某个设备开发了此演示软件,因此以多种方式随意地实现了此类常量(并且在不同位置甚至在同一文件中)。

    具体来说,这是一个演示代码,展示了特定设备的每种硬件和SDK功能。



    当前,我正在考虑最好从头开始重写项目,并重新实现大多数已编写的函数,以仅从一个c文件中获取其常数,或者将常数的实现重新组织为一种样式。

    但:
  • 这是一个人的项目(因此需要花费很多时间来重新实现所有内容)
  • 已经实现的代码有效,并且已对其进行了多次修订。 (如果没有损坏...)
  • 最佳答案

    始终考虑可读性和内存限制。同样,宏只是在编译之前发生的复制/粘贴操作。话虽如此,我喜欢做以下事情:

  • 如果要在一个C文件中使用(例如,不能跨多个文件全局访问),我将所有常量常量定义为static const。在文件范围内,定义为const的所有内容都应放在ROM中。显然,这些变量在初始化后无法更改。
  • 我使用#define定义所有常量值。
  • 在增加可读性的地方,我使用enum。在您拥有固定范围的值的任何地方,我都喜欢枚举来明确说明意图。

  • 尝试从面向对象的角度来研究项目(即使c不是OO)。隐藏私有(private)函数(不要在 header 中创建原型(prototype)),如果可以避免,请勿使用全局变量,将仅应位于一个c模块(文件)中的变量标记为static,等等。

    关于c - 编写嵌入式系统常数参数的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20979624/

    10-11 00:43