C语言中灵活性定义的替代方案
如何构造一些C代码,这样我就不必费力地返回 当我需要在中间添加一个新的项目时,重新定义(即,代码>代码定义< /代码>)。 下面是一个代码示例(在实际代码中,大约有200个不同的 定义): 但是现在我需要C语言中灵活性定义的替代方案,c,function,c-preprocessor,C,Function,C Preprocessor,如何构造一些C代码,这样我就不必费力地返回 当我需要在中间添加一个新的项目时,重新定义(即,代码>代码定义< /代码>)。 下面是一个代码示例(在实际代码中,大约有200个不同的 定义): 但是现在我需要#定义并添加猪油,如果序列 这里并不重要。但是猪油必须在糖之前和黄油之后。所以 我现在需要编辑定义: #define CREAM 1 #define SALT 2 #define BUTTER 3 #define LARD 4 #define SUGAR 5 //
#定义
并添加猪油
,如果序列
这里并不重要。但是猪油
必须在糖
之前和黄油
之后。所以
我现在需要编辑定义:
#define CREAM 1
#define SALT 2
#define BUTTER 3
#define LARD 4
#define SUGAR 5 // changed from 4
#define FAT 6 // changed from 5
那怎么办
我可以构造事物,以便每次我想在中间添加一些东西,i
不必返回并手动更改每个项目的定义值?签出枚举:
您正在查找
enum
enum {CREAM, SALT, BUTTER, LARD, SUGAR};
要添加其他元素,只需添加它:
enum {CREAM, SALT, BUTTER, LARD, BACON, SUGAR};
您甚至可以像psudeo迭代器一样使用它:
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);
}
enum{FIRST_ONE,CREAM=0,盐,黄油,猪油,培根,糖,LAST_ONE};
void healthyDiet()
{
整数长度=10;
int菜单[500];
无效消耗(int,int);
int x;
对于(x=FIRST\u ONE;xSo)第一个等于0(CREAM)?这是有意义的。@perreal:在gcc中是这样的,但我不确定这是定义的行为。对于最大程度的黑客行为,#define iterenum(name…)enum name{uu VA_ARGS,name##LAST,name###u FIRST=0}
@Dave。谢谢你……非常节省时间/精力。enum对我来说是新事物(我主修英语,他们在我的文艺复兴诗歌课上根本没有涉及到这一点)。@user994179他定义了一个宏,为你插入第一个和最后一个元素;因此iterenum(FOO,BAR,BAZ,qux);
变成enum FOO{BAR,BAZ,qux,FOO_last,FOO_first=0};
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);
}