1

そのため、現在私のプログラミングでは、プロジェクト間で非常に頻繁に使用する個別の C ファイルを作成して保存した、かなり広範囲の関数があります。

私の質問は、それらを他のプロジェクトに実装する最も簡単で効果的な方法は何ですか? 現在、使用したいすべてのカスタム関数の関数プロトタイプを持つ新しいプロジェクトごとにヘッダー ファイルを作成するだけです。

次に、プロジェクト内のすべての C ファイルにこの「マスター」ヘッダーを含めます。このヘッダーには、各 C ファイルが使用するヘッダー ファイルも含めます。したがって、すべての C ファイルには 1 つのヘッダーがあります。と呼びましょうmaster.h

私はこれを完全に間違っているように感じます。各 C ファイルのヘッダー ファイルを作成し、それらをマスター ヘッダー ファイルに含める必要がありますか? または、C ファイルごとにヘッダー ファイルを作成し、必要に応じて含める必要がありますか? そうすれば、すべてがどのようにリンクされますか?

プロジェクトでヘッダー ファイルを使用する最良の方法は何ですか?

4

3 に答える 3

5
  1. 他のヘッダーファイルを含むヘッダーファイルはありません。ファイルにそれをさせ.cてください-コンパイルをより速くします。

  2. 前方宣言を使用します。他のファイルを開く必要がないため、再コンパイルが迅速になります。単純な変更を行うと、makeコマンドは多くのものをコンパイルするのに何年も費やします。

  3. .c論理的に一致する場合は、ヘッダーファイルと対応するファイルの両方で関数をグループ化します。静的ライブラリの場合、リンカは適切なビットを選択します。ダイナミックライブラリの場合、現在メモリにない場合は実行時にロードされます(したがって、他のバイナリで使用できます)。

  4. を持っていませんmaster.h。ライブラリに関連する関数(数学関数、入出力関数など)を含めるだけです。さまざまなプロジェクトが「n」を選択して、必要なものを選択できます。

于 2012-08-17T13:12:17.653 に答える
0

すべてのファイルのヘッダーファイルを作成し.cます。同様の機能を.cファイルにグループ化します。各ヘッダーファイルにヘッダーガードを追加することを忘れないでください。

たとえば、ヘッダーファイルについて考えてみます。このファイルone.hには、以下のヘッダーガードが含まれている必要があります。

#ifndef ONE_H
#define ONE_H

//give your function prototypes here.

#endif //ONE_H

ヘッダーガードは、ダブルインクルードを回避するのに役立ちます。

于 2012-08-17T13:20:39.607 に答える
0

master.hプロジェクト全体が結合しすぎてしまうため、ファイルを作成しないことをお勧めします。すべてのソース ファイルを変更するたびmaster.hに再コンパイルする必要があるため、ビルド プロセスが大幅に遅くなります。代わりに、.h関連する関数を含むファイルを作成してみてください。C ライブラリは、このための良いインスピレーションです:stdlib.hなどmath.h

これらのヘッダーを使用するには.c、標準の C ヘッダーの場合と同様に、各 に含める必要があります。

#include <math.h>
#include <stdio.h>

リンクに関しては、これはまったく別の主題です。ほとんどの関数がインライン化されている場合、リンクについて心配する必要はありません。.cそれ以外の場合は、ヘッダーに似た名前のファイルでそれらを定義する必要があります (たとえば、 utils.cforutils.hなど)。

于 2012-08-17T13:08:56.427 に答える