类似于C枚举的预处理器定义,可以通过点访问“字段”?

问题描述 投票:1回答:1

[我猜,我想要的是类似于C ++ Accessing to enum values by '::' in C++的帖子:

我想:...将颜色值作为Color::Red


在当前的C ++(即C ++ 11及更高版本)中,您已经可以访问像这样的枚举值:

enum Color { Red };
Color c = Color::Red;

所以,我想知道-我可以在C中进行类似级别的访问,但是可以通过一个定义(因此我不必创建额外的变量)吗?例如,说我有以下代码:

#include <stdio.h>

int model_type = 1;
int model_variant = 4;

int main(void) {
  printf("Hello World %d\n", model_variant);
  return 0;
}

我想改写这样的东西:

int model_type = DEFAULT.MODEL_TYPE;
int model_variant = DEFAULT.MODEL_VARIANT;

我知道宏名(通过Can you use a.b notation in a #define macro name?):

它们不能包含点。

...但是我仍然想知道-可能有某种技巧,所以我可以在预处理器级别上实现这样的功能(能够通过DEFAULT.MODEL_TYPE访问数值) C?我想要预处理器,因为它只会在需要的地方插入原始数字-否则,我必须先定义一个结构,然后定义该结构类型的变量,然后填充该变量...

[如果没有,是否还有其他选项可用于类似的键入样式-说直接按名称访问枚举字段? (我尝试过enum DEFAULTS { MODEL_TYPE =1, MODEL_VARIANT = 4 };,但是DEFAULTS然后是“未声明的标识符”,因此DEFAULT.MODEL_TYPE也不起作用-因此,从这个意义上讲,我无法将其用于我的目的)...] >

[我猜,我想要的是类似于C ++的此帖子,它在C ++中通过'::'访问枚举值:我想要:...以Color :: Red的形式访问Color值。在当前的C ++中(即...

c c-preprocessor
1个回答
0
投票

C中的[object . foo意味着(大约)”“在foo上加上一个偏移量(与(char*)&object关联),将结果转换为指向与foo关联的类型的指针,然后取消引用”。

© www.soinside.com 2019 - 2024. All rights reserved.