检查输入字符串是否与C中给定的宏匹配

检查输入字符串是否与C中给定的宏匹配,c,macros,C,Macros,假设在头文件中定义了以下宏: # define MACRO_ID_1 1 # define MACRO_ID_2 2 ... # define MACRO_ID_1000 1000 在main.c中,我将输入一个字符串,如MACRO1、MACRO2。。。 我想写一个函数从输入字符串输出宏 int func_string2macro (char* string) { ... return <macro_similar_to_string>

假设在头文件中定义了以下宏:

# define MACRO_ID_1        1
# define MACRO_ID_2        2
...
# define MACRO_ID_1000     1000
在main.c中,我将输入一个字符串,如MACRO1、MACRO2。。。 我想写一个函数从输入字符串输出宏

int func_string2macro (char* string)
{ 
  ...
  return <macro_similar_to_string>;
}
int func_string2macro(char*string)
{ 
...
返回;
}
如果使用:func_string2macro(“MACRO1”),则它将返回MACRO_ID_1

我发现
switch/case
可以解决这个问题 但对于大量宏(1000),则开关/案例方法并不好


有人能支持我吗?

我想你可以试试以下方法:

步骤1-从字符串中提取数字部分(例如,对于宏\u ID\u 48,它将是48)

  • 这方面有很多参考资料,例如:
第2步-返回号码

当然,这个解决方案只适用于“define”值名称中的数字表示值的简单方法

您的另一个选项(如果“定义”名称中的数字不等于该值-

步骤1-创建与“定义”值大小相同的数组

步骤2-在init中,将数组中的每个值设置为与“define”初始值匹配


步骤3-一旦解析了“string”中的数字-返回保存在数组中的值

字符串化运算符(#)可能会帮助?宏名称在运行时不可用,因此很遗憾这是不可能的。@Ctx:我同意你的看法。我使用了一个表来映射ID和宏。谢谢。我的情况是定义中的数值与字符串不匹配。对大量数据(许多定义值)使用数组是不好的。有什么建议吗?