gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:00:56 26 4
gpt4 key购买 nike

这是 "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特性。

Most of the data I'm thinking about is the kind used to configure the environment: screen dimensions, charset characteristics, something to improve the readability of the code. Not on the automatic configuration a compiler and pre-processor could do. But since there's a lot of code in there and I'm afraid of global name conflicts, I'm reluctant to use #define's

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

但是:

  1. 这是一个单人项目(因此重新实现所有内容会花费很多时间)
  2. 已经实现的代码有效,并且已经修改了数次。 (如果没坏的话……)

最佳答案

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

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

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com