ヘッダーファイルには、他のファイルがソースコードを使用するために必要なすべての宣言が含まれている必要があることを繰り返し読みました。次に、他のソースファイルによって直接使用されない関数(つまり、非インターフェイス関数)があるとします。プロトタイプは他のファイルでは使用されないため、.cファイルの先頭に配置する必要がありますか?または、.cファイルに存在する関数を1つの場所に完全に要約するために、他のすべての関数とともにヘッダーファイルに配置する必要がありますか?
5 に答える
ヘッダーにはインターフェース情報が含まれています(外部が「モジュール」の機能を使用するために必要なものは何でも-たとえば.cファイル)。したがって、内部関数(外部からは使用されない)はヘッダーに入らないでください
.cファイルでは、組織によって異なります
- すべての内部関数宣言を一番上にリストするのが好きな人もいるので、それらは1か所にあります。
- 他の関数は順序付けに依存しているため、関数は(別の関数で)使用される時間によって定義されます。必要な場合にのみ前方宣言します(たとえば、相互に呼び出す再帰関数)
はい、プライベート関数のプロトタイプは、関数と同じ.c
ファイルに配置する必要があります。ヘッダーは外部インターフェースを定義します。
一部のプログラマーは、前方宣言ではなく、使用される順序で関数を定義することを好むため、プロトタイプは不要です。もちろん、2つ以上の関数が相互に呼び出す場合、これを行うことはできません。
私の個人的な好みは、最初にすべての関数を宣言することです。これにより、ファイルの概要がわかります。
単一のモジュール内で使用される関数(機能ユニットを一緒に実装するファイルの小さなセット)がある場合は、2番目のモジュール固有のヘッダーファイルを作成するのが完全に合理的です。モジュール内のすべてのファイル(外部ソースファイルは除く)が#include
それを行います。
関数が他の.cファイルで使用されていない場合は、ヘッダーファイルにプロトタイプを含めることはできません。静的な modifilerを指定し、プロトタイプを使用される(唯一の).cファイルの先頭に配置する必要があります。
合理的で可能であれば、関数を呼び出すすべての関数の前に関数を定義するだけでよいので、プロトタイプも必要ありません。
ヘッダーファイルが基本的にCで外部インターフェイスを宣言する唯一の方法であることを考えると、そのインターフェイスの一部ではないものをヘッダーファイルに含めるべきではありません。
Cはそれ自体であり、外部から見える定義の内部ビューがそれを参照する必要があるため、これが実用的でない場合があります。この場合、ヘッダーに配置することもできますが#define
、内部の出所を明確に示すaで保護し、同様#ifdef
に、それを必要とする定義の内部バージョンと外部バージョンを選択するために使用します。(これはシステムヘッダーファイルでよく見られます。)ただし、これは避けたほうがよいでしょう。
.c
私の意見では、すべての関数宣言をプロトタイプ構文のソースファイルの先頭に置くのは良いスタイルです。また、読者のためにソースコードを文書化するのにも役立ちます。
.h
プログラムの内部を不必要に公開するので、ヘッダーファイルに宣言を入れたくありません。
static
ああ、関数宣言に指定子を追加することを忘れないでください。