【问题标题】:Check input string match with given macro In C在 C 中检查输入字符串与给定宏的匹配
【发布时间】:2016-02-17 08:38:29
【问题描述】:

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

# 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 方法就不好了。

有人可以支持我吗?

【问题讨论】:

  • 字符串化操作符 (#) 可以帮助您吗? msdn.microsoft.com/en-us/library/7e3a913x.aspx
  • names 在运行时不可用,因此很遗憾这是不可能的。
  • @Ctx:我同意你的看法。我使用了一个表来映射 ID 和宏。谢谢

标签: c macros


【解决方案1】:

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

第 1 步 - 从字符串中提取数字部分(例如 MACRO_ID_48 为 48)

第 2 步 - 返回号码

当然,此解决方案仅适用于“定义”值名称中的数字表示值的幼稚方法。

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

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

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

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

【讨论】:

  • 我的情况定义中的数字值与字符串不匹配。对大量数据(许多定义值)使用数组并不好。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2011-07-12
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 2017-04-08
相关资源
最近更新 更多