替代#define以获得C的灵活性

时间:2012-02-01 18:10:50

标签: c function c-preprocessor

如何构建一些 C 代码,以便我不必费力地返回     当我需要在中间添加新项目时,重新定义(即#define)事物。     这是一个代码示例(在实际代码中,有大约200个不同的 定义):

 #define CREAM   1
 #define SALT    2
 #define BUTTER  3
 #define SUGAR   4
 #define FAT     5

void healthyDiet()
{
    int length = 10;
    int menu[500];
    void consume(int, int);

    //   ******  these must be called in the following order only  
    consume( menu[ CREAM ],  length);
    consume( menu[ SALT ],   length);
    consume( menu[ BUTTER ], length);
    consume( menu[ SUGAR ],  length);
    consume( menu[ FAT ],    length);
}

但是现在我需要#define并添加LARD,如果顺序那么这将是直截了当的     这里并不重要。但LARD必须在SUGAR之前和BUTTER之后。所以     我现在需要编辑定义:

#define CREAM    1
#define SALT     2
#define BUTTER  3
#define LARD    4
#define SUGAR   5   // changed from 4
#define FAT     6   // changed from 5

那怎么样     我可以构建一些东西,这样每次我想在中间添加一些东西,我     不必返回并手动更改每个项目的定义值?

2 个答案:

答案 0 :(得分:5)

您正在寻找enum

enum {CREAM, SALT, BUTTER, LARD, SUGAR};

要添加其他元素,只需添加它:

enum {CREAM, SALT, BUTTER, LARD, BACON, SUGAR};

你甚至可以像伪迭代器一样使用它:

enum {FIRST_ONE, CREAM=0, SALT, BUTTER, LARD, BACON, SUGAR, LAST_ONE};

void healthyDiet()
{
    int length = 10;
    int menu[500];
    void consume(int, int);

    int x;
    for(x=FIRST_ONE; x<LAST_ONE; x++)
        consume( menu[ x ],  length);
}

答案 1 :(得分:3)

查看枚举: http://crasseux.com/books/ctutorial/enum.html

enum {CREAM, SALT, BUTTER, LARD, BACON, SUGAR};