• ベストアンサー

2つの疑問

1 main関数の最後のreturnは何に用いられているのでしょうか?別にreturn 0;で0以外の値を代入してもプログラムは何の問題もなく動きます。 2 以下のプログラムなのですが、 int main() { void *str[10]; int i; for(i=0;i<10;i++) { str[i] = func; } return 0; } 自分では配列strに関数funcの先頭のアドレスが来ていると解釈しています。ここで、配列strは4バイトづつ並んでますが、関数の領域の大きさが4バイトをこえるとエラーがおきるのではないかと思い、いろいろ関数をいれてみましたが、エラーは起きませんでした。なぜせしょうか?

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>ということは必ずしもいつわけではないと考えてもよいのでしょうか? >じゃあ、今度から書かなくてもよいのですか? 記述しなければ、暗黙で0(EXIT_SUCCESS)が返却されたことになるはずです。 コンパイル時に値を返していない。とワーニングが出るかも知れませんが。 >つまり、関数のアドレスを配置するだけで、関数本体のデータは別の場所に置かれて、そこで処理されているということでしょうか? 関数の先頭アドレスがポインタに代入されています。 処理系にもよりますが、コードの領域/静的変数(や変化しないデータ)の領域/ヒープの領域は分けられている場合が多いです。

szatmari
質問者

お礼

回答ありがとうございます。理解が深まりました。

その他の回答 (1)

回答No.1

main()を呼ぶ(詳しくはちょっと違うのだが)システムがいます たとえばDOSプロンプト それに対し0で戻る、1で戻るとか戻り値で 処理の成功、失敗等を教えるために使います (最近はあんまりつかわれなくなりましたが、私プロンプト好きです) あ、linuxでは頻繁に使います 関数のアドレスは32bitシステムでは4バイトで足ります これは北海道、東京どちらに送るのにも7けたの郵便番号で送れるのと似ています

szatmari
質問者

お礼

回答ありがとうございます。重ねて質問して申し訳ないです。 処理の成功、失敗等を教えるために使います ということは必ずしもいつわけではないと考えてもよいのでしょうか? じゃあ、今度から書かなくてもよいのですか? 関数のアドレスは32bitシステムでは4バイトで足ります つまり、関数のアドレスを配置するだけで、関数本体のデータは別の場所に置かれて、そこで処理されているということでしょうか?

関連するQ&A