为嵌入式系统编写常量参数的最佳实践

2024-02-25

这是一个案例C 中的“static const”与“#define” https://stackoverflow.com/questions/1674032/static-const-vs-define-in-c对于嵌入式系统。

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

在“传递”的代码中,您不知道您选择的名称是否在其他包含的文件中定义,或者可能使用 extern 调用,或者在可能包含您的文件的其他文件中作为宏调用。

有以下 3 个选项:

  1. static const int char_height = 12;
  2. #define CHAR_HEIGHT 12
  3. enum { char_height = 12 };

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

原代码主要使用#define就是为了这个,但是这些常量以多种方式随意实现(甚至在不同的位置,甚至在相同的文件中),因为似乎有几个人为某个设备开发了这个演示软件。

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

我考虑的大多数数据是用于配置环境的数据:屏幕尺寸、字符集特征、提高代码可读性的数据。编译器和预处理器无法进行自动配置。但由于里面有很多代码,而且我担心全局名称冲突,所以我不愿意使用#define

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

But:

  1. 这是一个单人项目(因此需要花费大量时间来重新实现所有内容)
  2. 已经实现的代码可以工作并且已经被修改了几次。 (如果没坏的话……)

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

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

尝试以面向对象的视角来处理该项目(即使 c 不是 OO)。隐藏私有函数(不要在标头中创建原型),如果可以避免的话不要使用全局变量,将只应驻留在一个 C 模块(文件)中的变量标记为static, etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为嵌入式系统编写常量参数的最佳实践 的相关文章

随机推荐