

No.5ベストアンサー
- 回答日時:
考え方としては、main()関数は一番最初に動作する関数(?)ではなく、main()関数を呼び出す関数が存在します。
ですから、returnはあくまで呼び出し元に戻ることになり、逆にexit()関数は呼び出し元には戻らずに、exit()関数内で終了することを意味します。
(※returnは、関数でないことはご存じですよね)
最近の事情にはうといですが、確か
void main( int argc ,char *argv[ ] )
ですよね?
だとすると、main()関数で
return 0
とは、記述できないですから結果的にプログラムの起動元には、値を返すことはできません。
つまり、returnでプログラムを終了した場合の戻り値は、不定となります。
でも、最近のは大丈夫なのかな?
特にMS系のは。
No.10
- 回答日時:
組込みというより、正確にはフリースタンディング環境を同列に議論するのは無意味です。
なぜなら、フリースタンディング環境では、JIS X3010:2003の5.1.2.1 フリースタンディング環境を読めば明らかなように、プログラム開始時に呼び出される関数の型と名前は処理系定義ですし、プログラム終了処理の効果も処理系定義です。
また、ごく一部のヘッダを除き、フリースタンディング環境は標準ライブラリをどう扱うかも処理系定義です。
つまり、フリースタンディング環境では、mainで始まる必要はなく、仮にmainで始まってもそれがどんな型であってもよく、「終了」というのがどんな振舞いであってもよく、exit関数はあってもなくてもよく、仮にexit関数があったとしても、どんな仕様でもかまわないのです。
No.9
- 回答日時:
環境によるでしょうね。
マイクロチップのC30コンパイラで試してみました。
ソースコードは
if( dx==0 ) exit(1);
else return 0 ;
return 先では
ReservedBR
reset
の2命令を実行、
ReservedBR はインストラクションセットに含まれていない命令、調べてみたけど良く分からない。
reset はCPUをリセット状態にする命令
exit() では色々しています。
引数によって異なる関数を呼んでいますが詳細は追い切れませんでした。
まあ、組み込み系ではそもそもmain()がreturn する事を想定しない場合が多いです。
exit()が必要な状況になった場合は自分で必要な処理を書きます。
組み込み開発では main() を呼ぶ前にする為の処理(crt0.o)まで自分で書く事も有りますので、なんでもありでしょう。
実際に書いた事も有りますが、やった事は初期値付き変数の初期化とスタックポインタの初期化ぐらい。
No.6
- 回答日時:
おかしな回答がありますが...
mainの形式は、
int main(void);
または
int main(int argc, char *argv[]);
のどちらか(あるいは、これらのいずれかと等価な形式)でなければなりません。
昔(標準化以前)は、そもそもvoid型というものがなかった(独自の方言として導入されている場合はありましたが...)ので、昔から、
void main(int argc, char *argv[]);
というのは、少なくとも移植性のある形式ではありません。
なお、C99以降は、main関数でreturn文を省略した場合、関数の末尾に return 0; が記述されたものとみなされます。
No.4
- 回答日時:
大抵のCは
exit(main(argc、argv));
または
r=main(argc、argv);
exit(r);
とmain関数を呼び出していると思います。他の方法にする理由が分かりません。
No.2
- 回答日時:
この質問は、私は超難問だと思うのですが…。
規格上”差がない”とされていると記憶しているのですが、この質問に自信をもって
・同じである
・いや、違う(環境を知っている)
・そもそも規格上も差があるでしょ
という人がいらっしゃったら、ぜひ回答をしてもらいたいです。
ただ、メジャー(というか、一般的な)環境なら一緒のはずだと信じています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
visualstudio C# テキストボッ...
-
DWORDの実際の型は何でしょうか
-
C++でboolにintの値を代入する...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
C++のfor文について
-
DLLでLIBファイルが作成されない
-
enumについて
-
直接アドレス指定のポインタの...
-
intとINTの違いは?
-
typedef enumの使い方を教えて...
-
ビット操作について
-
ハンドルされていない例外が発...
-
2重定義って??
-
C言語の課題について
-
変数の型を定義しなかった場合...
-
【#define】 defineで定義した...
-
情報処理技術者試験は本当にC89?
-
C言語ゲーム製作途中(勉強中)
-
テンプレート関数でコンパイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
C++でboolにintの値を代入する...
-
2重定義って??
-
main.c:7:43: warning: implici...
-
typedef enumの使い方を教えて...
-
プログラムの中で別のmainを呼...
-
変数の型を定義しなかった場合...
-
関数の実体定義にヘッダファイ...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
C言語のコンパイルエラー
-
DLLでLIBファイルが作成されない
-
sshdログの意味
-
DLLのLPSTR 項目の戻り値の取得...
-
enumについて
-
VC6でlong longでエラー?
-
【#define】 defineで定義した...
おすすめ情報