对于嵌入式系统,这是"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文件中获取其常数,或者将常数的实现重新组织为一种样式。
但:
最佳答案
始终考虑可读性和内存限制。同样,宏只是在编译之前发生的复制/粘贴操作。话虽如此,我喜欢做以下事情:
static const
。在文件范围内,定义为const
的所有内容都应放在ROM中。显然,这些变量在初始化后无法更改。 #define
定义所有常量值。 enum
。在您拥有固定范围的值的任何地方,我都喜欢枚举来明确说明意图。 尝试从面向对象的角度来研究项目(即使c不是OO)。隐藏私有(private)函数(不要在 header 中创建原型(prototype)),如果可以避免,请勿使用全局变量,将仅应位于一个c模块(文件)中的变量标记为
static
,等等。关于c - 编写嵌入式系统常数参数的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20979624/