C编程,用一个宏在两个位置进行更改

Din*_*esh 5 c macros c-preprocessor

struct Error
{
   MACRO(1, Connect);
   MACRO(2, Timeout);
};    
Run Code Online (Sandbox Code Playgroud)

我需要以上述代码生成以下代码的方式定义MACRO().

struct Error
{  
   static const int Connect = 1;
   static const int Timeout = 2;
   const char * const name[] = {"Connect", "Timeout"};
};
Run Code Online (Sandbox Code Playgroud)

这是可能的,或者什么是我想要做的事情的替代方案?

Jon*_*bel 1

您想要的是拥有一个列表,它将自动生成定义和名称列表,对吗?

如果是这样,请在 google 中搜索 X Macros。

例子:

#define EXPAND_AS_DEFINITION(a, b) static const int b = a;
#define EXPAND_AS_ARRAY(a, b) #b,

#define STATE_TABLE(ENTRY)  \
   ENTRY(1, Connect)       \
ENTRY(2, Timeout)   

struct Error
{       
   STATE_TABLE(EXPAND_AS_DEFINITION)
   static const char * const name[];      
};

const char * const Error::name[] = {STATE_TABLE(EXPAND_AS_ARRAY) 0};
Run Code Online (Sandbox Code Playgroud)