- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 プロトタイプ宣言)
C言語 プロトタイプ宣言について質問します
このQ&Aのポイント
- C言語でのプロトタイプ宣言について質問があります。分割コンパイルした場合、プロトタイプ宣言は関数を利用する側と定義側の両方に必要なのでしょうか?
- コンパイルすると、プロトタイプ宣言に関する警告が出ます。具体的には、func1とfunc2の宣言が競合しているという警告です。
- 質問者はプロトタイプ宣言に関して理解がありましたが、警告が出てしまったため、どなたか教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
メッセージを読みましたか?内容を理解しましたか? testKioku.c:9: 警告: conflicting types for 'func1' コンフリクト(衝突) コンピュータ用語としては、二つ以上のものが矛盾したりする状態を示します。 この警告は9行目で出ています。 testKioku.c:3: 警告: previous declaration of 'func1' was here その「衝突相手」である「previous declaration」(以前の宣言)は3行目だ、と言っています。 言われた通りに、この二つを比較します、 9行目は func1() とだけあります。 C言語で、このように宣言すると int func() 引数: 任意(可変長) 戻り値: int だと判断されます。 3行目の宣言では void func1(void); 引数: 無し(void) 戻り値: 無し(void) ですから、「違う」と判断されます。 この func() だけ、という書き方は、あまり推奨できるものではありません。 main関数も、この省略形が使われていますが、古いやり方です。 関数定義部分も、プロトタイプ宣言と同じく、型や引数を書くようにしましょう。
その他の回答 (1)
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.2
func1()とfunc2()のプロトタイプ宣言をtestMain.cとtestKioku.cのそれぞれで行っているのもおすすめしません。 プロトタイプ宣言ではないですけどtestKioku.cのextern int cnt;もかな。
お礼
大変参考になりました。 ありがとうございました。