アプリ版:「スタンプのみでお礼する」機能のリリースについて

#include <stdio.h>
int kansuu(int hikisuu);
int main()
{
int modori;
modori = kansuu(2);
printf("modori = %d\n", modori);
return 0;
}
int kansuu(int hikisuu)
{
printf("kansuu de hyouji\n");
return hikisuu * 2;
}

 以上のプログラムは参考書の内容ですが、コンパイルした結果が、
kansuu de hyouji
modori = 4
 です。

二行目の
  int kansuu(int hikisuu);がなくても、結果は同じでした。

 参考書の説明では
 「ここでは、関数kansuuの定義とプロトタイプ宣言に 、引数を追加しました。
 引数の名前はhikisuuとして、int型の値を記憶できるようにしました。

 int kansuu(int hikisuu); ←関数に引数を追加」

 以上、

 なぜ!参考書はint kansuu(int hikisuu);があるのかがわかりません!?
 よろしくお願いします。
 

A 回答 (2件)

たとえば、ご質問のコードだと



・プロトタイプを削除して
・関数呼び出しを

modori = kansuu(2.0);

(引数が、2.0 になっている点に注意)

とするだけで、予期しないことが発生します。
(プロトタイプがあれば、とりあえず、思った通りの結果にはなります)

この回答への補足

ご回答ありがとうございます。
 
 参考書には、このプログラムの項目に「引数を取る関数を作る」とあります。

このプログラムの全体的なことを理解しないと、ご回答を理解するには至らないと思います。
 なので暇暇勉強中です。
 ご返事までには、しばらく時間がかかりますのでご了承ください。

補足日時:2014/10/26 07:46
    • good
    • 0
この回答へのお礼

貴重なご回答まことにありがとうございました。
 
小数点になった場合有効になる^^
 なので、
 「int kansuu(int hikisuu);の部分は!省かないほうが無難」だとわかりまし。
 以上
 なぜそうなるのかいまだに理解に苦しんでいるところですが!
 掲示板のご回答など
  現在の私のレベルだと説明されてもまだそれを理解するスキルがないです。
 なので、
 参考書を読んでも、奥が深いので、分からないのが多いです。 
 
  現在、私が有力視しているプログラムのスキルアップは!
 1)掲示板に質問して少しでも何かを得ること
 2)プログラムをいじることにより、コンパイルの結果がどうなるかを、見極めながら、プログラムの構文
   の役割を知る
   以上2件です。

#include <stdio.h>
int A(int B, int C);
int main()
{
int D;
D = A(1.0,2.0);
printf("(1)= %d\n", D);
return 0;
}
int A(int E, int F)
{

return 2 * 3;
}

 結果は
(1)= 6
 
 以上ですが

 printf("kansuu de hyouji\n");
 無くても特に影響がなかったので、「余計」だと思い省きました。

 シンプルにして現在解析中です。 

 頑張りますので今後ともよろしくお願いいたします。

お礼日時:2014/10/31 04:45

C 言語ではプロトタイプ宣言なしに関数を呼び出したとき、その関数は int 値を返すと暗黙的に判断されます。

その暗黙の判断と後の方に出てくる関数の定義とがたまたま一致しているため、たまたま正常に動いているのです。
もし kansuu() の戻り値の型が int 以外ならこのコードはエラーとなっていたでしょう。

じゃあ戻り値が int の場合はプロトタイプ宣言はいらないんだなと思ったら大間違いです。繰り返しますがこのコードが正常に動いていたのはたまたまです。参考 URL のコードのような場合、プロトタイプ宣言がなかったら fac() はとんでもない値を返すことになります。

参考URL:http://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0% …

この回答への補足

ご回答ありがとうございます。
 
 参考書には、このプログラムの項目に「引数を取る関数を作る」とあります。

このプログラムの全体的なことを理解しないと、ご回答を理解するには至らないと思います。
 なので暇暇勉強中です。
 ご返事までには、しばらく時間がかかりますのでご了承ください。

補足日時:2014/10/26 07:46
    • good
    • 0

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