Fak*_*ame 7 c embedded readability microprocessors
我正在为微处理器编写一些代码.
它有一些大的关键常数.
#define F_CPU 16000000UL
在这种情况下,这是CPU频率.在赫兹.
实际上,如果没有手动在数字上标记光标,则很难判断它是1,600,000,160,000,000还是16,000,000.
如果我在数字中加入逗号#define F_CPU 16,000,000UL,它会截断常量.
我使用了一些具有特定数字分隔符的深奥语言,旨在使大数字更具可读性(例如16_000_000,主要是用于MCU的语言).大型"神奇数字"在嵌入式内容中相当普遍,因为它们需要描述MCU如何与现实世界对话.
C中有这样的东西吗?
Mr *_*ter 10
是的,C确实有预处理器分隔符: ##
所以你可以写
#define F_CPU 16##000##000UL
其含义与16000000UL 完全相同.(与16*1000*1000等其他结构不同,您需要注意不要将它们放在乘法可能导致问题的地方.)
也许是这样的?
#define MHz(x) (1000000 * (x))
...
#define F_CPU MHz(16)
Run Code Online (Sandbox Code Playgroud)
另外,我不喜欢#defines.通常最好有enums或常量:
static const long MHz = 1000*1000;
static const long F_CPU = 16 * MHz;
Run Code Online (Sandbox Code Playgroud)
一种可能性是这样写:
#define F_CPU (16 * 1000 * 1000)
Run Code Online (Sandbox Code Playgroud)
或者
#define MHz (1000*1000)
#define F_CPU (16 * MHz)
Run Code Online (Sandbox Code Playgroud)
编辑:其他建议的MHz(x)可能更好