【问题标题】:Use the C preprocessor to increment defines?使用 C 预处理器来增加定义?
【发布时间】:2010-09-30 15:10:20
【问题描述】:

我有一个应用程序需要以分层方式在各种 .h 文件中定义索引。单个文件中有大量通用条目,并且有许多变体头文件被拉入特定项目。

在文件中:“base.h”

   #define AAA 1
   #define BBB 2
   #define CCC 3

在许多文件中,例如:“variant_extended.h”

   #define XXX 4
   #define YYY 5
   #define ZZZ 6

但是,这很麻烦,有没有一种简单的方法可以从 base.h 继续并在构建过程中为定义自动编号?

我经常编辑文件以重新排序或插入新条目,这会导致大量手动管理。我还需要确保数字从 0 开始并且是连续的。这些将是数组中的索引(如邮箱)。

【问题讨论】:

  • 你有什么理由不能使用enum吗?

标签: c c-preprocessor


【解决方案1】:

扩展 Jerry 的评论:

// base.h
enum BaseCodes
{
   AAA = 1,
   BBB,
   CCC,
   FirstExtendedCode
};

// extended.h
enum ExtendedCodes
{
  XXX = FirstExtendedCode,
  YYY,
  ZZZ
}

在这种情况下,ZZZ 保证为 6。将新成员插入枚举会自动重新编号所有其他成员。

【讨论】:

  • 这么简单..我为什么不早点想到。哇!
【解决方案2】:

在base.h中,添加

#define BASE_LAST CCC

然后在您的 variant_extended.h 中,使用

#include "base.h"

#define XXX (BASE_LAST + 1)
#define YYY (BASE_LAST + 2)
#define ZZZ (BASE_LAST + 3)

【讨论】:

    【解决方案3】:

    您可以通过执行以下操作来消除一些的痛苦:

       //
       // base.h
       //
       #define AAA 1
       #define BBB 2
       #define CCC 3
       #define LAST_BASE CCC
    

    和:

       //
       // extended.h
       //
    
       #include "base.h"
    
       #define FIRST_EXTENDED (LAST_BASE + 1)
       #define XXX FIRST_EXTENDED
       #define YYY (FIRST_EXTENDED + 1)
       #define ZZZ (FIRST_EXTENDED + 2)
    

    我怀疑如果我们有更多信息,可能会有更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2021-12-29
      • 2010-11-10
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多