常见 gperf 选项

Gperf 是可以接受不同选项的高度可定制工具。gperf 在线手册(参阅 参考资料小节 中的链接)说明了 gperf 中所有可用的选项,包括:

  • -L _language-name_指示 gperf 使用指定的语言生成输出。目前支持以下几个选项:
    • KR-C这种老式的 K&R C 可以得到新旧 C 编译器的支持,但是新的符合 ANSI C 标准的编译器可能会生成警告,或者,某些情况下甚至会生成标志错误。
    • C:该选项将生成 C 代码,但是如果不对已有源代码进行调整,则可能无法使用某些旧的 C 编译器进行编译。
    • ANSI-C该选项生成符合 ANSI C 标准的代码,只能使用符合 ANSI C 标准的编译器或 C++ 编译器进行编译。
    • C++:该选项生成 C++ 代码。
  • -N该选项允许用户修改查找函数的名称。默认名为 in_word_set()
  • -H该选项允许用户修改散列例程的名称。默认名为 hash()
  • -Z该选项在提供了 -L C++ 选项时使用。它允许用户指定所生成的 C++ 类的名称,该类包含 in_word_set()hash() 函数。默认名为Perfect_Hash
  • -G该选项将生成查找表并将其作为静态全局变量,而不是在查找函数内生成以隐藏该表(默认行为)。
  • -C前面讨论了 Gperf 将生成查找表。-C 选项将创建使用 const 关键字声明的查找表。所有生成的查找表中的内容都是常量 — 即只读形式。很多编译器通过将表放入只读内存中可以生成更高效的代码。
  • -D该选项将处理散列为重复值的关键字。
  • -t该选项允许包含关键字结构。
  • -K该选项允许用户选择关键字结构中的关键字组件的名称。
  • -p该选项可以与较早版本的 gperf 兼容。在早期版本中,它将生成的函数 in_word_set() 返回的默认布尔值(即 0 或 1 )修改为pointer to wordlist array 类型。这个选项非常有用,尤其是在使用 -t(允许使用用户定义的 structs)选项时。在最新版的 gperf 中并不要求使用该选项并且可以将其删除。

转自原文:http://www.ibm.com/developerworks/cn/linux/l-gperf.html