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

标签 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>;
}

对于使用:func_string2macro("MACRO1") 然后它将返回 MACRO_ID_1

我发现 switch/case 可以解决这个问题 但是如果有很多宏(1000),那么 switch/case 方法就不好了。

有人可以支持我吗?

最佳答案

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

第 1 步 - 从字符串中提取数字部分(例如,对于 MACRO_ID_48,它将是 48)

第 2 步 - 返回号码

当然,这个解决方案只适用于“定义”值名称中的数字代表值的朴素方法。

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

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

第 2 步 - 在 init 中,设置数组中的每个值以匹配“定义”初始值

第 3 步 - 从“字符串”解析数字后 - 返回保存在数组中的值

关于检查输入字符串与 C 中给定宏的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451585/

相关文章:

只调用一个函数并让其他函数访问它的返回值?

c - 为什么我的信号量允许 fork 进程中的乱序事件?

c - 消息队列中的多条消息

c++ - 在C++中,是否可以定义一个类用作: SomeObj obj1; SomeObj<4> obj2;

parsing - Julia 的宏可以访问嵌套函数吗?

c - 实例化结构并分配字符串但字符串打印空行?

c - 嵌套结构数组

c - 在 C 中声明后初始化数组

regex - Notepad++ 中的宏可以包含按键吗?

c - 类型重载宏