コンパイルの結果を入れ替える方法は?

このQ&Aのポイント
  • コンパイルの結果を上下入れ替える方法について教えてください。元のコードはmodori = 6 kansuu de hyoujiとなっています。
  • コンパイルの結果を入れ替えてmodori = 6 kansuu de hyoujiにする方法を教えてください。
  • コンパイルの結果を入れ替えることは可能でしょうか?具体的な方法を教えてください。
回答を見る
  • ベストアンサー

コンパイルの回答行の上下を入れ替えるには!

#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   ですが!  これを  modori = 6 kansuu de hyouji  にすることは可能でしょうか!?  よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DoubtOwl
  • ベストアンサー率50% (63/124)
回答No.2

kansuu de hyouji modori = 6 上記のメッセージはプログラムで画面上の表示する(printf)という関数を実行することで表示されています。 2つあるprintfが呼ばれた順に実行されています。 #include <stdio.h> int kansuu(int hikisuu1, int hikisuu2); int main() { int modori; //kansuu関数を実行し、結果を受け取ります。 //kansuu関数内でprintfを実行しているのでこの時点で"kansuu de hyouji\n"が表示されます。 modori = kansuu(2, 3); //"modori = ??\n"の結果を表示します。 printf("modori = %d\n", modori); //終了します。 return 0; } int kansuu(int hikisuu1, int hikisuu2) { //"kansuu de hyouji\n"を表示します。 printf("kansuu de hyouji\n"); //引数で受け取ったhikisuu1×hikisuu2の結果を返します。 return hikisuu1 * hikisuu2; } 一つ一つ解説するとこうなります。 kansuu内でprintf("kansuu de hyouji\n");を実行していますが、 kansuu関数は掛け算をしているだけなのでprintfをしなくても良さそうですね。 なので下記のように。 #include <stdio.h> int kansuu(int hikisuu1, int hikisuu2); int main() { int modori; modori = kansuu(2, 3); printf("modori = %d\n", modori); printf("kansuu de hyouji\n"); return 0; } int kansuu(int hikisuu1, int hikisuu2) { return hikisuu1 * hikisuu2; }

Campus2
質問者

お礼

貴重なご回答まことにありがとうございました。     なぜそうなるのか現在解析中です。   掲示板のご回答など   現在の私のレベルだと説明されてもまだそれを理解するスキルがないです。  なので、  参考書を読んでも、奥が深いので、分からないのが多いです。      現在、私が有力視しているプログラムのスキルアップは!  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"); は 削除しまして!  解析中するうえで、シンプル化したほうがわかりやすいので省きました。   頑張りますので今後ともよろしくお願いいたします。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.3

>それを知るために質問しました。 とりあえずいっておくと コンパイラがソースを読む順番と 実際に実行する順番は何の関連もありません。 実行される順番は#2の方が説明されてますので、よく読んで理解しましょう。

Campus2
質問者

お礼

Extra nosy^^.

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

>kansuu de hyouji >modori = 6 なぜ、この順番で出力されるのかは理解されていますか?

Campus2
質問者

補足

それを知るために質問しました。

関連するQ&A

  • プログラムの通常の流れは上~下でコンパイルされる?

    #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  が最初になるのでしょうか!?   よろしくお願いします。

  • modori = 17になる理由を教えてください。

    #include <stdio.h> 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"); }  コンパイラーソフトは  http://codepad.org/KZDkVV1K  のネットで実施していまして!  これしかないです。    結果は kansuu de hyouji modori = 17  となりました。    皆様はコンパイラーソフトはOSにインストールしてお使いだと思います。 その場合も結果は同じでしょうか!?  もし同じでしたら、 modori = 17になる理由を教えてください。  以上よろしくお願いします。

  • 参考書にありますが削除しても結果は同じでした。

    #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);があるのかがわかりません!?  よろしくお願いします。  

  • 正確なあ値でしょうか!?

    http://codepad.org/cBK5A67i を使って以下をコンパイルしたところ! No.1 #include <stdio.h> void kansuu(); int main() { kansuu(); return 0; } void kansuu() { printf("kansuu de hyouji\n"); No.2 }  #include <stdio.h> void kansuu(); int main() { kansuu(); } void kansuu() { printf("kansuu de hyouji\n");   return 0; } 以上の  コンパイルの結果はNo.1、No.2とも  kansuu de hyouji  となりました。    No.2の結果は   正確な値でしょうか  それともバグでしょうか?  よろしくお願いします。

  • 仕組みがいまいちですが!

    #include <stdio.h> int kansuu(int hikisuu1, int hikisuu0); 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  となり成り立ちますが!  int kansuu(int hikisuu0, int hikisuu1);  としても成り立ちます。 int kansuu(int hikisuu1, int hikisuu1);  にすると以下のエラーが出ます。 Line 2: error: redefinition of parameter 'hikisuu1' Line 2: error: previous definition of 'hikisuu1' was here    なぜerrorとなるのでしょうか  よろしくお願いします。

  • 分割コンパイルについて

    現在分割コンパイルが分からずに苦戦しています。 下記のリストは構造体を使わなければコンパイラを通すことができましたが、 使うとなぜか通りません。 あれこれ試しましたがどうしても分かりません。 何がおかしいのでしょうか? *define.hで全てのファイルへの定義や宣言を行わせています。 ////////////// //Main.cpp ////////////// #include <stdio.h> #include <conio.h> #include "define.h" int main( void ){ Tmp[0].c = 15; printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); aaa(); bbb(); getch(); return 0; } ////////////////// // A.cpp ///////////////// #include <stdio.h> #include "define.h" void aaa( void ){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); } ////////////////// // B.cpp ///////////////// #include <stdio.h> #include "define.h" void bbb( void ){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); } ////////////////// // define.cpp ///////////////// #include "define.h" int a = 10; int b = 20; struct Parameter { int c; }; struct Parameter Tmp[NUM]; ////////////////// // define.h ///////////////// #define NUM 100 extern int a; extern int b; extern struct Parameter Tmp[NUM]; void aaa( void ); void bbb( void );

  • コンパイル結果が違う

    コンパイル結果が違う C言語を勉強中の初心者です。 以下のプログラムをVC++6.0のCL.exeでコンパイルするとうまくいくのですが、VC++2010のCL.exeでコンパイルして実行すると、t2の値が0になってしまいます。 また、VC++2010でコンパイルした方が実行結果も遅いです。 #include <stdio.h> #include <time.h> int main(void) { int i = 1; time_t t1, t2; time(&t1); while(i <= 30000) printf("%d,", i++); time(&t2); printf("\ntime1=%ld time2=%ld\n", t1, t2); printf("かかった時間は、%d秒です\n", t2-t1); return 0; } vc++2010でコンパイルした方のt2の値が、0で表示されてしまうのはなぜでしょうか? よろしく、お願いします。

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }

  • C++のコンパイルエラーが

    おこります。 --------------------------------- #include <stdio.h> int main(void) { printf("hello, world\n"); return 0; } -------------------------------------- をコンパイルするのですができません。 以下のエラーが出ます。 --------------------------------------- エラー E2209 sample.c 1: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample.c 5: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** -------------------------------------

  • コンパイルができません。

    #include <stdio.h> main(){ int a = 1; int sum = 0; while( a<16) { sum = sum + a;   a++;  } printf("%d\n",sum); } 1から15まで足した結果を表示するプログラムですが、うまくいきません。教えてください。

専門家に質問してみよう