web-dev-qa-db-ja.com

Cヘッダーファイル-インクルードする正しい方法

私は自分自身にCプログラミングを教えようとしており、WindowsXPではIDE)にDevC++を使用しています。自分のヘッダーファイルを呼び出す正しい方法について少し混乱しています。

Main.cというメインソースファイルとmyFunctions.cという関数用の別のファイルがあります。これらのファイルはmain.cに'include "myFunctions.h"を使用して含め、すべての関数プロトタイプはこれにあります。ヘッダーファイル。

myFunctions.cには、showDate()と呼ばれる関数とshowScreen()と呼ばれる関数の2つの関数が含まれており、どちらの関数もmain.cから正常に呼び出すことができます。

私の問題は、showScreen()内からshowDate()を呼び出そうとしたときに始まり、コンパイル/リンク中に、showDate()のmyFunctions.c内にプロトタイプがなかったために文句を言いました。

私が知りたいのは、次のうちどれをする必要があるかということです。

  1. myFunctions.c内に「myFunctions.h」を含めます

  2. MyFunctions.hとmyFunctions.cの両方でプロトタイプを宣言します
  3. MyFunctions.cのみでプロトタイプを宣言します

上記のすべてがコンパイラエラーを修正し、main.cからmyFunctions.c内で関数ボットを呼び出すことができるように見えますが、正しい手順である決定的なソースを見つけることができません。

22
Paul Woodward

多くの場所で#1-#includeを使用します。

#2は絶対に使用しないでください。複数回宣言しないでください。

#3を使用することはめったにありません-.cファイルで、再利用しないかのように何かを宣言します。

24
S.Lott

ヘッダーファイルにはプロトタイプが含まれている必要があります。次に、関数定義を含む.cファイルを含め、これらのプロトタイプが使用されるすべての場所にそれを含めます。

ところで、DecC++はもはや積極的に開発されていません-代わりに Code :: Blocks への切り替えを検討する必要があります。

7
anon

間違いなく最初のオプション。

3
Tamás Szelei

オプション1を選択する必要があります。または、myfunctions.cを注文して、呼び出された関数の定義が、それを呼び出す関数の前に発生するようにします。ファイルにヘッダーを含めることにより、コンパイラーが宣言と定義の間の不一致をキャッチできるようにします。

2
William Pursell

他のみんながすでに言ったように、あなたは最初のオプションを使うべきです。原則として、関数プロトタイプは.hファイルにあり、その実装は.cファイルにあります。

1
Barun