1

私はメインファイルvector.c、vector.hを使用してかなり単純なCプログラムに取り組んでいますが、次の問題が発生しています。

  • 提供する宣言が両方のcファイルで必要な場合、.hファイルのインクルードはどこに配置しますか?
  • 3つのファイルすべてに必要なtypedefをどこに配置しますか?

私が何をしてもgccは文句を言うようです。

誰かがこれらの質問に答えることができますか、または私が読むことができるリソースに私を向けることができますか?

4

2 に答える 2

2

提供する宣言が両方のcファイルで必要な場合、.hファイルのインクルードはどこに配置しますか?

includeヘッダー定義を必要とする各Cファイル(この場合はmain.c vector.c )にステートメントを配置します。インクルードガードを使用することは常に良い考えであり、コンパイラがシンボルがすでに定義されているか、複数定義されていることについて不平を言っている場合に必要です。

3つのファイルすべてに必要なtypedefをどこに配置しますか?

場合によります:

  • typedefsベクターAPIに必要な場合、またはベクターAPIに固有の場合は、それらをvector.hに配置します。
  • それらがベクトルインターフェイスとは関係がない場合、つまりmain.cに固有である場合は、おそらくそこに属します。
  • ただし、3つのファイルすべてに必要であるとおっしゃっています。したがって、これらtypedefs がベクターインターフェイスの一部でない場合は、おそらくcommon.hのような3番目のヘッダーファイルに属している可能性があります。これは、他のすべてのファイルにも含まれている可能性があります。プロジェクト内のファイル。
于 2012-07-02T15:23:04.060 に答える
2

非常に自然に:

  • 必要な C ファイルのヘッダーをインクルードします。
  • typedefs は宣言であるため、ヘッダー ファイルに入れるのに非常に適しています。

ヘッダーを含むヘッダーがある場合、複数の包含に対する保護が必要になることがありますが、あなたの場合は必要ありません。すべての C ファイルは単独でコンパイルされることに注意してください。#includeもちろん、C ファイルでは絶対に使用しないでください。

于 2012-07-02T15:24:06.243 に答える