【发布时间】:2018-05-24 10:35:18
【问题描述】:
我一直在浏览一个旧的源项目,试图让它编译和运行(这是一个已上传到 GitHub 的旧游戏)。我认为很多代码都是用 C-style/C-syntax 编写的(很多 typedef struct {...} 之类的),我注意到它们定义了以下样式的某些宏:
#define MyMacroOne (1<<0) //This equals 1
#define MyMacroTwo (1<<1) //This equals 2, etc.
所以我现在的问题是 - 有什么理由会以这种方式定义宏吗?因为例如0x01和0x02就是上面的数值结果。还是系统不会读取 MyMacroOne = 0x01 而是读取值为 (1
编辑:感谢您的所有投入!
【问题讨论】:
-
搜索代码时,它们是如何使用的?
-
这些是位掩码中的标志;它们都有一个位集。如果这就是您所追求的,那么就不太容易犯错误,例如这样写 2049 而不是 2048。
-
使用上述简单模式可以更容易地发现错别字。十六进制编码不容易发现简单的拼写错误。
-
正如 Wintermute 所说,这是典型的位掩码。每个位都有一个含义,以这种方式编写可以轻松发现哪个宏设置了哪个位。
-
您可以立即看到应该在这样的掩码中设置哪个位。第 6 位不能意外使用 64 而不是 128。
标签: c++ c enums macros bit-shift