我试图弄清楚我是否有可能做我想用定义完成的事情。我基本上试图创建两组参数定义(在下面我使用高度的示例中),我可以通过索引访问。但是,此索引可能会更改,但参数仍应可访问。
#define INDEX_M 0
#define INDEX_Y 1
#define HEIGHT_MALE 60
#define HEIGHT_FEMALE 50
#define HEIGHT_##INDEX_M HEIGHT_MALE
#define HEIGHT_##INDEX_F HEIGHT_FEMALE
将被用作:
for (int i = 0; i < database_size; i++){
printf("Height requirement for person %d is: %d", i, HEIGHT_(person[i].gender));
}
这样,我们可以更改男性/女性的索引以匹配数据库的定义,并且仍然可以使用此代码。
我尝试过使用宏,但我遇到的问题是它不会让我在定义的前半部分使用##表示法。
答案 0 :(得分:0)
没有。这不行。您正在混合编译时(#define)和运行时(表达式评估)功能。
答案 1 :(得分:0)
我最终得到了这个:
#define __HEIGHT_(X) ((X == INDEX_M) ? HEIGHT_MALE : (X == INDEX_M) ? HEIGHT_FEMALE : 0)
现在我可以这样打电话:
printf("%d", __HEIGHT(INDEX_M));
> 60
这似乎产生了我想要的结果。我有什么遗失的吗?
编辑:改进为通用如下:
#define ATTRIBUTE_GET(param, gender)((gender == INDEX_M) ? param ##_MALE : (gender == INDEX_F) ? param ##_FEMALE : 0)
用作:
printf("%d", ATTRIBUTE_GET(HEIGHT, INDEX_M));