我怎樣組織一些Ç代碼,這樣我就不必費力回去 重新定義(即#define
)的事情,當我需要在添加新項中間。 下面是一個代碼示例(在真正的代碼,大約有200個不同的 定義):替代#定義靈活使用C
#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
所以 哪能構建東西,所以,我想在中間添加的東西每一次,我 沒有回去手動更改定義每個項目的價值?
那麼FIRST_ONE會等於0(CREAM)?這說得通。 – perreal 2012-02-01 18:18:10
@perreal:它在gcc中,但我不確定那是否定義了行爲。 – cha0site 2012-02-01 18:21:06
對於最大的hackery,'#define iterenum(name,...)enum name {__VA_ARGS__,name ## _ LAST,name ## _ FIRST = 0}' – 2012-02-01 18:22:17