

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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
typedef enumの使い方を教えて...
-
プログラムの中で別のmainを呼...
-
GCCで暗黙の型変換の警告を出し...
-
C言語 宣言した変数になにも代...
-
0除算を判定したい
-
C言語での方向キー入力判定
-
main.c:7:43: warning: implici...
-
C言語のコンパイルエラー
-
C言語でmain関数でのreturnとexit
-
エラー「invalid conversion fr...
-
gccのエラー "initialization d...
-
unsigned *という宣言について
-
DDVによるメッセージの変更
-
試作クラス使用C++プログラムが...
-
APIENTRY と WINAPI
-
構造体の宣言でエラーが出ます。
-
C++でboolにintの値を代入する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
intとINTの違いは?
-
C++のfor文について
-
2重定義って??
-
void func( void )について
-
変数の型を定義しなかった場合...
-
C言語のコンパイルエラー
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
プログラムの中で別のmainを呼...
-
[C++]メンバ関数の仮引数について
-
0除算を判定したい
-
プログラム、どのように書いて...
-
typedef enumの使い方を教えて...
-
enumについて
おすすめ情報