有没有办法“解析”输入,所以它可以像标识符一样使用?

时间:2015-01-12 21:42:03

标签: c macros c-preprocessor function-pointers

问题

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

// 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;
}

基本上,使用上面的例子,我问我如何“解串”输入,以便fn_ptr指向正确的函数(func1,func2或func3)?这样的函数很有用,因为它允许我让用户选择在使用单个函数指针时选择使用哪个函数。

约束

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

1 个答案:

答案 0 :(得分:3)

没有与平台无关的方法可以在C中自动执行此操作。但是,您可以使用几种选项。

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

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

  3. 希望这有帮助!