枚举与宏状态 C++

2024-01-20

(问题与我之前的问题相关here https://stackoverflow.com/questions/3238718/difference-between-const-variable-and-const-type-variable, here https://stackoverflow.com/questions/3231481/enum-element-limit, here https://stackoverflow.com/questions/3199761/define-bit0-bit1-bit2-etc-without-define, and here https://stackoverflow.com/questions/3197913/size-of-define-values).

我正在维护一个非常古老的应用程序,该应用程序是多年前从 DOS 移植到 Windows 的,但许多旧的 C 约定仍然保留了下来。

一个特定的约定是 setBit 和 clrBit 宏:

#ifndef setBit
#define setBit(word, mask) word |= mask
#endif

#ifndef clrBit
#define clrBit(word, mask) word &= ~mask
#endif

我发现我可以将变量声明为枚举类型,并将变量设置为等于定义的枚举值之一。

enum SystemStatus
{
    SYSTEM_ONLINE                = BIT0,
    SYSTEM_STATUS2               = BIT1,
    SYSTEM_STATUS3               = BIT2,
    SYSTEM_STATUS4               = BIT3
};

With BIT0 = 0x00000001, BIT1 = 0x00000002, etc.

SystemStatus systemStatus;

systemStatus = SYSTEM_ONLINE

在您看来,使用 setBit 和 clrBit 宏更像是 C 还是 C++?简单地将变量声明为枚举类型并摆脱所有旧的 setBit/clrBit 内容会更好吗?


不,你不能 - 分配枚举值会覆盖整个值,而宏会更改现有值中的位。 BIT0、BIT1 等是什么?这就像定义 INT0、INT1 等 - 糟糕的做法。

最重要的是,旧的 C 风格代码会给您带来任何问题吗?如果没有,请应用这条历史悠久的规则——如果它没有坏,就不要修理它。

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

枚举与宏状态 C++ 的相关文章

随机推荐

  • Laravel 在共享主机上运行 artisan 命令

    我在以下网站上托管了一个网站http 000webhostapp com http 000webhostapp com一段时间以来它工作正常 但它向我显示了这个错误 生产 错误 未指定应用程序加密密钥 我发现我必须运行这个 artisan
  • 如何使用 Terraform 和 AWS API Gateway 创建 API 代理

    我正在尝试使用 Terraform 在 AWS 上的 API Gateway 中建立一个简单的 API 代理 基本上 我想包装 root 并将请求代理回另一个端点 这可能是最简单的设置 但我似乎无法让它在 Terraform 中工作 您将在
  • 在 html 中添加图像

    我似乎无法在 html 中添加图像 我正在使用 ASP net MVC 3 我的图像名为 KeyLargoPic 位于闪存驱动器上的文件夹 X Project Project Photos Key Largo 中 它看起来是 JPEG 代码
  • 如何使 osx 应用程序向后兼容以及如何测试它们的困惑

    阅读苹果SDK指南后https developer apple com library mac documentation developertools conceptual cross development Overview overv
  • 正则表达式中反斜杠后面的数字是什么意思?

    a b 1 什么是 1这个表达的意思是 1 表示匹配表达式中的第一个捕获组 n将是第 n 个捕获组 注意 0将是整场比赛 在许多引擎中 n 的上限为 9 但有些引擎也支持高达 99 当在正则表达式中使用时 例如 a b 1 这意味着在 a
  • IIS 中的 PuppeteerSharp

    我面临着一个有点恼人的情况 我们尝试在应用程序中使用 PuppeteerSharp 来生成背景 PDF 虽然它在开发模式下运行良好 但在生产环境中却不起作用 该应用程序是一个WebAPI 2 0站点 NET4 7 1 Windows 10机
  • Chef:是否可以定义使用模板的 Chef 资源,并从另一本说明书中调用它?

    我有一个使用 Chef 模板的资源 并且运行良好 食谱中的其他资源和食谱可以调用此资源 就我而言 我定义了一个 Maven 工件资源 在给定一些 Maven 参数 存储库名称 工件 ID 等 的情况下 您可以从 Nexus maven 存储
  • Xamarin:如何从 iOS 库项目加载图像

    我有一个使用 MvvmCross 样式的 Xamarin 项目 有子项目 核心 PCL 视图模型 PCL iOS 可执行 如果我将图像添加到我的 iOS 项目 Resources Images test image png 那么我可以使用以
  • Spring data mongodb - 需要“cursor”选项

    我正在尝试使用 Spring Data MongoDB 3 6 rc4 执行聚合操作 Aggregation agg newAggregation lookup orders orderId id order List
  • Android源从SD卡读取文件时出错

    我正在修改 Android 源 AOSP 以创建文件 sdcard myfile 该文件已正确创建 并且当我执行以下操作时可见cat sdcard myfile from adb shell 该文件是从创建的PackageManagerSe
  • WP7 - NavigationService.Navigate 抱怨它没有接收到对象引用。 。 。但为什么?

    WP7新手问题在这里 我有以下代码 public class KeyboardHandler INotifyPropertyChanged lots of methods here public void FunctionKeyHandle
  • 尝试启动 Android 应用程序时 Eclipse 被卡住

    我正在尝试在 Motorola Milestone A853 上运行 helloandroid 应用程序 我输入 adb devices 手机被正确识别 然而 当我尝试运行应用程序时 Eclipse 总是停留在 27 启动委托 可能是什么原
  • YouTube Api 播放列表视频限制为 50 个。如何获取更多?

    我正在尝试从频道的播放列表中获取视频 有 132 个视频 但我无法获取超过 50 个视频 我知道必须获取 nextPageToken 并将其与 url 一起传递 这是我第一次使用 api 这就是我能够获取 50 个视频的方法 Edit pr
  • 如何在Inno Setup中获取安装程序路径?

    您知道在 Inno Setup 中获取安装程序路径的正确方法吗 我想抓住里面的价值 Code 部分 srcexe 将为您提供安装程序的路径和文件名 src 只会给你安装程序路径
  • Django中通过Ajax输出日志文件

    我遵循了 SO 接受的关于如何从 var log gateway 读取 Django 中的日志文件的答案here https stackoverflow com questions 11908919 python parsing log f
  • 使用 PHP 中的 Facebook Graph API 获得教育

    我正在尝试使用 stdclass 从 Facebook 的图形 API 获取教育信息 这是数组 username blah education school id removed name removed year id removed n
  • v2.x 中的 Parsley.js 日期验证

    是否可以像以前的版本一样在 Parsley v2 X 中使用日期验证 示例 v1 x parsley onorafterdate currentDate 我在文档中找不到有关此问题的信息 我相信对于已记录的核心验证器之外的任何验证器 您将需
  • Visual Studio 2013 VB 智能感知

    如果这是一个愚蠢的问题 请预先道歉 但这让我很烦恼 而且我无法弄清楚 我使用的是 Visual Studio 2013 Professional 通常使用 C 进行编码 当使用 Intellisense 时 当我按 Enter 键选择方法或
  • Python:如何将 Sympy 图像导出为 png? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Python 如何将 Sympy 图
  • 枚举与宏状态 C++

    问题与我之前的问题相关here https stackoverflow com questions 3238718 difference between const variable and const type variable here