使用 gperf 实现高效的 C/C++ 命令行处理
0 条评论常见 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