2009-07-29 4 views
21

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

私は私のmain.cと呼ばれるメインソースファイルと私はを使用してmain.cの中に含まmyFunctions.cと呼ばれる機能のための別のファイルを持っているすべての私の関数のプロトタイプは、このヘッダに存在すると 『myFunctions.h』が含まれますファイル。

myFunctions.cには、showDate()とshowScreen()という2つの関数があり、両方の関数をmain.cからすべてうまく呼び出すことができます。

showScreen()内からshowDate()を呼び出そうとしたところ、showDate()のmyFunctions.c内にプロトタイプがないため、コンパイル/リンク中に問題が発生しました。

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

  1. はちょうどmyFunctions.cのみ

でプロトタイプを宣言myFunctions.hとmyFunctions.c
  • の両方にプロトタイプを宣言
  • myFunctions.c内の "myFunctions.h" が含ま

    上記のすべては、コンパイラのエラーを修正し、main.cとmyFunctions.cの中から関数botを呼び出すことができますが、正しいプロシージャである確定ソースを見つけることができません。

  • 答えて

    24

    #1 - #を使用すると、多くの場所で使用できます。

    決して#2を使用しないでください。決して何度も何も宣言しません。

    ごくまれに#3を使用します。再使用しないかのように.cファイルに何かを宣言します。

    +6

    おそらく#1と#3の間で決定する前に可視性を考慮する。他の.cファイルからこの関数を呼び出す必要がある場合は、#1を使用します。機能がローカルファイルの外側のどこにも必要でない場合は、#3を使用します。 こうすることで、ヘッダーファイルの乱雑さを軽減し、実際にそれらをインターフェイス定義として使用することができます。 –

    +4

    他の場所から呼び出される関数は、.hファイルになければなりません。内部の関数は静的宣言され、.cファイルでプロトタイプ化されます。これによりCは非常に必要なモジュール性を得ることができます。 –

    2

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

    7

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

    BTW DecC++は現在も開発されていません。代わりにCode::Blocksに切り替えることを検討する必要があります。

    +0

    ありがとうNeil、私は少し後でCode :: Blocksを調べます –

    +1

    Code :: Blockは素晴らしいです - 私が気づいた最初のことはDevC++で本当に欲しかったコード折りたたみでした 乾杯Neil! –

    3

    最初のオプションは間違いありません。

    1

    誰もがすでに言っていたように、最初のオプションを使用する必要があります。一般的な規則は、関数プロトタイプが.hファイルにあり、その実装が.cファイルにあるということです。