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

#include <stdio.h>
int kansuu(int hikisuu1, int hikisuu2);
int main()
{
int modori;
modori = kansuu(2, 3);
printf("modori = %d\n", modori);
return 0;
}
int kansuu(int hikisuu1, int hikisuu2)
{
printf("kansuu de hyouji\n");
return hikisuu1 * hikisuu2;
}
 以上プログラムですが、
結果は以下です。
kansuu de hyouji
modori = 6

 素人の目からして!
printf("modori = %d\n", modori);が
 最初にあるので
 以下がコンパイル結果になりそうですが!?
modori = 6
kansuu de hyouji

 この場合なぜ!
kansuu de hyouji
 が最初になるのでしょうか!?
 
よろしくお願いします。

A 回答 (7件)

>  以下の使い方がいまいちわかりません?


> printf("kansuu de hyouji\n");
> modori = hikisuu1 * hikisuu2;
> printf("modori = %d\n", modori);

使い方というか、元のコードは関数の作成例だと思いますが、関数を利用しないで使ってる変数は利用するとして同じような流れだと以下のような感じでしょうか。

int main()
{
int modori;
int hikisuu1;
int hikisuu2;

hikisuu1=2;
hikisuu2=3;
printf("kansuu de hyouji\n");
modori = hikisuu1 * hikisuu2;
printf("modori = %d\n", modori);
return 0;
}
    • good
    • 0
この回答へのお礼

毎度ご回答まことにありがとうございます。
 同じ結果が得られました。
すばらしい。
kansuu de hyouji
modori = 6
 
 とても分かりやすいです。
 
  最初のきむずい!プログラムと比較した場合、同じ結果ですが!
 あえて!きむずいプログラムを使用した目的は!
  複雑化していくプログラムの流れの中で、必要だからなのでしょう。
 
 ご紹介していただいた、プログラムと比較しながら勉強したいと思います。
 
 その他のスレッドのご回答いろいろありがとうございます。
今後とももよろしくお願いたいします。
 

お礼日時:2014/11/11 05:48
    • good
    • 0

「コンパイル」と「実行」は区別してください.

    • good
    • 0

>  この場合なぜ!


> kansuu de hyouji
>  が最初になるのでしょうか!?

modori = kansuu(2, 3);
でkansuuを呼び出していますからその中にある
printf("kansuu de hyouji\n");
が実行されて
knnsuuから抜けた後に
printf("modori = %d\n", modori);
が実行されますから

kansuu de hyouji
modori = 6
の順に表示されます。

kansuu(2, 3)のところにint kansuu(int hikisuu1, int hikisuu2)が展開されると考えてください。

printf("kansuu de hyouji\n");
modori = hikisuu1 * hikisuu2;
printf("modori = %d\n", modori);

と書かれているのと同じことになります。

ステップ実行してみるとどの順番で実行されていくか目視できますよ。

この回答への補足

ご回答ありがとうございます。
 以下の使い方がいまいちわかりません?
printf("kansuu de hyouji\n");
modori = hikisuu1 * hikisuu2;
printf("modori = %d\n", modori);
  
 よろしくお願いします。

補足日時:2014/11/08 17:18
    • good
    • 0

では、素人考えなど止めて、正しいプログラミングを勉強しましょう。



分岐、ループ、呼び出し、ジャンプ等、実行順序が「上から順番」でないものが沢山あります。


それと、「コンパイル」は実行できるようにするための準備です。
コンパイルの順序と実行の順序は関係ありません。
    • good
    • 0

それは、このような順番で書かれているからとしか言いようがありません




modori = kansuu(2, 3);
printf("modori = %d\n", modori);




コンパイルの順番とプログラムの実行順は関係ありません。

この質問とは関係ないことですが、Cコンパイラは原則、ワンパスコンパイラですから上から下へ一回のみコンパイルされます。
    • good
    • 0

プログラムの基本がわかってないですね。



例えば、スケジュールで
 9:00から5階で会議。
10:00から3階で仕事。
11:00から7階で撮影。

とかあったら
「ビルは5階と7階の間に3階はない」といいますか?
    • good
    • 0

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