2010-09-30 5 views
1

J'ai une application qui a besoin de définir des index dans divers fichiers .h d'une manière hiérarchique. Il existe un grand nombre d'entrées communes dans un fichier unique et un certain nombre de fichiers d'en-tête de variante qui sont insérés dans des projets spécifiques.Utiliser le préprocesseur C pour incrémenter les définitions?

Dans le fichier: "base.h"

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

Dans de nombreux fichiers comme: "variant_extended.h"

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

Cependant, ceci est lourd, il est un moyen simple de transporter sur base.h et auto-number définit dans le processus de construction?

Je modifie fréquemment les fichiers pour réorganiser ou insérer de nouvelles entrées, ce qui entraîne beaucoup de gestion manuelle. Je dois également m'assurer que les numéros commencent à 0 et sont contigus. Ce seront des index dans un tableau (comme les boîtes aux lettres).

+4

Y at-il une très bonne raison pour laquelle vous ne pouvez pas utiliser 'enum'? –

Répondre

2

développiez commentaire de Jerry:

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

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

Dans ce cas, ZZZ est garanti d'être 6. Insérez de nouveaux membres dans les énumérations renumérote automatiquement tous les autres membres.

+0

Si simple ... pourquoi je n'y ai pas pensé plus tôt. Doh! – JeffV

2

En base.h, ajoutez

#define BASE_LAST CCC 

alors dans votre variant_extended.h, utilisez

#include "base.h" 

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

Vous pouvez supprimer certains de la douleur en faisant quelque chose comme ceci:

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

et:

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

Je suppose qu'il y a probablement un meilleur moyen si nous avions plus d'informations.

Questions connexes