プロが教える店舗&オフィスのセキュリティ対策術

 以下のプログラムに「int kansuu()」が二つもあるのですが?
 エラーになりそうな気がしますが、ならないです。
 最初のint kansuu();は { } の外にあるので、全体に影響があるみたいですが?
 素人目線なのでよくわかりません!
  ふと疑問に思いました(ふとした疑問が大きな飛躍につながこともありかな^^)
 よろしく願いいたします。
#include <stdio.h>
int kansuu();
int main()
{
int modori;
modori = kansuu();
printf("modori=%d\n", modori);
return 0;
}
int kansuu()
{
printf("kansuu de hyouji\n");
return 100;
}

A 回答 (3件)

基本的な考え方は、



関数を使う前に、それがどんなものかがわかっていないといけない。

main()の中で、関数kansuu()が使われていますが、
コンパイラにとって見れば、
kannsuu()って何者??
となります。

もちろん、最後のほうで何者かは、はっきり書いてあるのですが、
もし、最初の
int kansuu();
がないと、定義されていない言葉を使うなといって、コンパイラが怒り出します。

そこで、main()の前に、
int kansuu();
と書いておいて、
こんな言葉を使うから、許してね。内容は跡で詳しく書くからね。
と言って、コンパイラに事前通告をしているのです。

したがって、

#include <stdio.h>

int kansuu()
{
printf("kansuu de hyouji\n");
return 100;
}

int main()
{
int modori;
modori = kansuu();
printf("modori=%d\n", modori);
return 0;
}

の、順番にすれば、一つで済む。
なぜ、この形にしないのかは、そのうち、分かると思います。

最後の部分を削除し忘れました。
ごめんなさい。
    • good
    • 0

基本的な考え方は、



関数を使う前に、それがどんなものかがわかっていないといけない。

main()の中で、関数kansuu()が使われていますが、
コンパイラにとって見れば、
kannsuu()って何者??
となります。

もちろん、最後のほうで何者かは、はっきり書いてあるのですが、
もし、最初の
int kansuu();
がないと、定義されていない言葉を使うなといって、コンパイラが怒り出します。

そこで、main()の前に、
int kansuu();
と書いておいて、
こんな言葉を使うから、許してね。内容は跡で詳しく書くからね。
と言って、コンパイラに事前通告をしているのです。

したがって、

#include <stdio.h>

int kansuu()
{
printf("kansuu de hyouji\n");
return 100;
}

int main()
{
int modori;
modori = kansuu();
printf("modori=%d\n", modori);
return 0;
}
int kansuu()
{
printf("kansuu de hyouji\n");
return 100;
}

の、順番にすれば、一つで済む。
なぜ、この形にしないのかは、そのうち、分かると思います。
    • good
    • 0
この回答へのお礼

 ご回答誠にありがとうございました。
「プロトタイプ宣言のことか?たぶん」
 以下了解です^^
「int kansuu();
がないと、定義されていない言葉を使うなといって、コンパイラが怒り出します。」

最初のint kansuu; ですが、cher AKB48;としても
 http://codepad.org/oBd3ocHh
以上のURLからも確認できますが!
 ちゃんと同じ結果が得られました。
 納得です。

お礼日時:2015/02/05 05:37

簡単に言ってしまえば


最初のは、関数の名称と型の宣言の為
二番目のは、関数の実体の為

だから二箇所存在する事で正解
    • good
    • 0
この回答へのお礼

「二箇所存在」了解です^^
ご回答ありがとうございました。
 今後ともよろしくお願いいたします。

お礼日時:2015/02/05 05:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!