使用C预处理器来递增定义?

时间:2010-09-30 15:10:20

标签: c c-preprocessor

我有一个应用程序需要以分层方式在各种.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开始并且是连续的。这些将是数组中的索引(如邮箱)。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

扩展Jerry的评论:

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

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

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

答案 2 :(得分:0)

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

   //
   // 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)

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