有什么方法可以 "destringify" 输入,这样它就可以像标识符一样使用了吗?

Is there any way to "destringify" input so it can be used like an identifier?

问题

是否可以 "destringify" 文件中的一行输入以使其类似于变量或标识符?一个例子可能有助于说明我的意思:

// A few functions, definitions of these don't matter in this example.
void func1();
void func2();
void func3();

// Main function reading a line in from the user
int main() {
  char input[8];
  fgets( input, 8, stdin );
  /* Pretend the newline has been stripped already */
  void(*fn_ptr)();
  fn_ptr = destringify( input );
  fn_ptr();
  return;
}

基本上,使用上面的示例,我想问我如何 "destringify" 输入以便 fn_ptr 指向正确的函数(func1、func2 或 func3)?这样的函数会很有用,因为它允许我让用户选择使用哪个函数,同时能够使用单个函数指针。

约束

  1. 查找 table 很难实现,因为我计划让用户创建自己的函数,但如果这是唯一的解决方案,那没关系。
  2. 出于同样的原因,我更愿意避免 switch...caseif...else

没有独立于平台的方法可以在 C 中自动执行此操作。不过,您可以使用一些选项。

  1. 许多操作系统支持特定功能来查找给定函数名称的函数地址。例如,在 Windows 中,您可以使用 LoadLibraryGetProcAddress 来执行此操作。这使您的代码更少 portable,但可能正是您正在寻找的。 (这也是一个巨大的安全问题,但这是另一回事。)

  2. 另一种选择是创建某种散列 table 或 BST,将字符串集合与函数指针相关联。然后,您可以通过读取用户的输入、在散列 table/BST 中查找该字符串,然后调用调用的函数指针,让用户指定要调用的函数。您需要确保手动填充散列 table 或 BST,这是额外的工作,但也让您可以控制可以调用的函数。

希望对您有所帮助!