見出しにあるように、メイン関数がポインターを返すことは可能ですか? はいの場合、どこが役に立ちますか? ありがとう!
3 に答える
のリターンタイプのみint
が標準によって祝福されています:
5.1.2.2.1プログラムの起動
1プログラムの起動時に呼び出される関数の名前はmainです。実装は、この関数のプロトタイプを宣言していません。これは、intの戻り型で、パラメーターなしで定義されるものとします。
int main(void) { /* ... */ }
または2つのパラメーターを使用します(ここではargcおよびargvと呼びますが、宣言されている関数に対してローカルであるため、任意の名前を使用できます)。
int main(int argc, char *argv[]) { /* ... */ }
または同等のもの;10)または他の実装定義の方法で。
C11ドラフト、2011年4月12日
それ以外はすべてコンパイラー次第であるため、Cの質問ではなくなります。
No.は標準Cでをmain()
返しますint
。この戻り値の解釈は、周囲のランタイム環境の問題です。自分が何をしているのかを正確に知っている場合、環境が特定の方法で値を解釈することがわかっているある種の特殊な状況では、intへのポインターをキャストできます。しかし、それは厄介です。
そして、動的に割り当てられたメモリへのポインタは、プログラムが終了した後は(おそらく)無意味であることに注意してください!固定アドレスへのポインタを返すことだけが意味があります。たとえば、一部の組み込み環境のハードウェアレジスタです。
phresnel の回答を完成させ、それが役立つかどうかを回答します。各プロセスには独自のアドレス空間main()
があるため、アドレスとして使用する整数値を返したとしても、返されたポインターは一貫しているだけなので、ポイントは何でしょうか。終了したばかりのプロセスのアドレス空間に...