gperfが生成するCコードの出力形式標準出力に生成するCコードの形式を制御するオプションがいくつかあります。2つのC関数が生成されます。名前はhashとin_word_setですが、コマンドラインオプションで変更できます。どちらの関数にも、文字列char * strと、長さのパラメーターint lenの2つの引数が必要です。デフォルトの関数プロトタイプは次のとおりです。
hash関数は、利用者が指定するstr内の複数のバイト位置を使って関連値テーブルを参照し、その値とlenを加算して得られる整数値を返します。関連値テーブルはローカルな静的配列に格納されます。このテーブルはgperf内部で構築され、後で‘hash_table’という名前の静的なローカルC配列として出力されます。使用する位置、つまりstrへのインデックスは、gperfの実行時に‘-k’オプションで指定します。詳細は後述のオプションの節(5 gperfの実行)を参照してください。
NULLを返します。
‘-c’オプション、または同じ働きをする‘%compare-strncmp’宣言を使わない場合、strは長さがちょうどlenのNUL終端文字列でなければなりません。‘-c’、または同じ働きをする‘%compare-strncmp’を使う場合は、strは単にlenバイトの配列であればよく、NUL終端は不要です。
この2つの関数の生成コードには、次のオプションが影響します。
structを使います。
switch文を生成します。実行時間と記憶領域の節約量はCコンパイラの最適化の程度によって異なりますが、この方法ではコードが小さくなり、速くなることがよくあります。
‘-t’と‘-S’のオプション、または同じ働きをする‘%struct-type’と‘%switch’の宣言を省略すると、デフォルトでは、キーワードを格納するchar *配列と、その配列の空きを埋める追加の空文字列が生成されます。さまざまな入力・出力オプションを試し、生成されたCコードの実行時間を測定することで、キーワード集合の特性に応じた最適なオプションの選び方を判断できます。