4

*.h ファイルと *.c ファイルで構成されるソフトウェア モジュールがあります。変数と関数の宣言は *.h ファイルにあり、関数の定義は *.c ファイルにあります。モジュール内の 2 つの関数は、モジュールの外部で使用することを意図していないヘルパー関数です。

この意図をモジュールのユーザーに明確にする最善の方法は何ですか?

関数を宣言しようとしましたstaticが、*.h ファイルで宣言すると、GCC コンパイラで、関数が「静的に宣言されているが定義されていない」という警告が表示されます。*.c ファイルが#includeディレクティブを使用して *.h ファイルをインクルードしているにもかかわらず、*.h ファイルと *.c ファイルが異なる翻訳単位として扱われるのはなぜですか?

static*.c ファイルで作成される関数の宣言とその定義を配置することを伴わない、この問題の解決策はありますか? このソリューションは機能しますが、宣言をヘッダー ファイルに保持し、定義を実装ファイルに保持するという、私が考えていたことを破ってしまいます。

4

3 に答える 3

4

static宣言はヘッダー ファイルに表示されるべきではありません (ヘッダー ファイルを除いinlineて、今のところ無視します)。モジュール内にのみ表示される関数が必要な場合は、.hファイルにまったく入れないでください。この.hファイルは外部で使用するためのものです。静的関数を.cファイル内に配置します。必要に応じて、関数を前方宣言できることに注意してください。

于 2013-01-04T01:23:21.333 に答える
1

静的関数は、それらが定義されているソース ファイルで宣言します (プロトタイプも提供してください)。これは、静的関数が表示される唯一のファイルであるためです。

重複:関数は静的に宣言されていますが、定義されていません

于 2016-12-09T22:25:49.060 に答える