
No.9ベストアンサー
- 回答日時:
> >まず、返却値の型のintは省略することができません(少なくとも現行規格では)。
> お二方、古い話を書かないでください。
> 現行規格のC99またはJISCのX3010:2003ではintでなくても良くなっています。
それはmain関数が処理系定義の形式でも構わないということであって、返却値の型であるintという記述を省略してよいかどうかとは、まったく別の話です。
> 処理系云々の話や、規格云々はあくまでもCはこうあるべき
> という枠のようなもので、実際に規格に沿ったコンパイラは
> それほど多くないので、厳密にそこまでこだわる必要は
> 無いかもしれませんが。(とくにC99は。。。)
私もこの意見には賛成です。
だからこそ、自分が使っている、あるいは対象としている処理系が何であるかを明確にする必要があります。
回答ありがとうございます。
質問する前にもう少しC言語に対して勉強するべきだったと
反省しています。親切に回答していただいたのに、勉強不足
で申し訳ありませんでした。
回答なんですが、return0;が無いと明確さに欠けるので、
記述したほうがいいということですよね。
見やすく明確に!ですね。
分からないことがあるときはまた質問させていただきます。
ありがとうございました!!
No.8
- 回答日時:
昔のCでは関数に戻り値型を書かない場合int型となります。
同じように引数を書かないと無しと見なされます。
エラーがでるか警告が出るか何もでないかは、
処理系の設定や処理系そのものに依存すると思いますが
少なくともmain()はこの場合だとint型を返す引数を取らない関数
(int main(void))として処理されるのでreturn(0)としているのだと
思います。
ということで、何故必要かというと、
「mainに戻り値があるとしているから必要。」
ということに成ると思います。
処理系云々の話や、規格云々はあくまでもCはこうあるべき
という枠のようなもので、実際に規格に沿ったコンパイラは
それほど多くないので、厳密にそこまでこだわる必要は
無いかもしれませんが。(とくにC99は。。。)
No.6
- 回答日時:
>まず、返却値の型のintは省略することができません(少なくとも現行規格では)。
>その際、main関数の型は以下のどちらかにすることと決められました。
お二方、古い話を書かないでください。
現行規格のC99またはJISCのX3010:2003ではintでなくても良くなっています。
No.5
- 回答日時:
Cが生まれたころまでさかのぼると、「シェルに返すため」であったと思います。
その後、Cがいろいろなプラットフォームに移植され、規格が整備されるにつれて、「シェルに返すため」という理由では処理系依存になってしまうため、main関数の意味についても定義しなおされることとなりました。
その際、main関数の型は以下のどちらかにすることと決められました。
int main(void);
int main(int argc, char *argv[]);
どちらの場合でも、戻り値を持つことになるので、return文は省略できないのです。
なぜ、必ず戻り値を持つように決めたのかは決めた本人に聞かないとわかりません。まあ歴史的しがらみと考えてもいいんじゃないかと思います。
なお、処理系によっては、
void main();
というmain関数を許すものもあります。しかし、これはで処理系依存になってしまいますから、あまりおすすめできる書き方ではありません。
なんとなく無駄っぽくても、
return 0;
と書いておくのが行儀のいいプログラムといえるでしょう。
No.4
- 回答日時:
議論は禁止されているようですが、質問者さんにとっても有益だと思いますので...
> 規格で main() 関数に戻り値が必要だと決められている意図は、プログラムの呼び出し元に結果を通知するためだと私は理解しています。
必ずしもそうではありません。
main関数は再帰的に呼び出すことができますから、その場合には、返却値をどう扱うかは呼出し元の関数が決めることであって、シェルは一切関係ありません。
最初のmain関数の呼出しからの返却値に関しては、呼び出し元で使えるようにすることを想定しているのは確かです。しかし、それがシェルであるとは限りません。プログラムがシェルから呼び出されるかどうか、仮にシェルから呼び出されたとしても、終了コードを利用するかどうかは、完全に環境に依存しています。
質問者さんが環境ないしは処理系を指定していない状況であれば、特定の環境にしか適用できない回答をしても意味をなしません。
No.3
- 回答日時:
ANo.2 氏の回答は要するに「規格で決まっているから必要」ということで、少々味気ないように感ぜられます。
規格で main() 関数に戻り値が必要だと決められている意図は、プログラムの呼び出し元に結果を通知するためだと私は理解しています。
No.2
- 回答日時:
まず、返却値の型のintは省略することができません(少なくとも現行規格では)。
そして、return文が必要な理由ですが、返却値の型がvoidでない関数には、return文を記述するのが原則だからです。
main関数に限り、return文を記述しなければreturn 0;を記述したものとして扱われます(旧規格では異なります)。しかし、単なる書き忘れなのかどうかが分からなくなりますから、作法としてはきちんと記述する方が望ましいのです。
なお、シェル云々の話は処理系を特定しなければ意味をなしません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C++]メンバ関数の仮引数について
-
DWORDの実際の型は何でしょうか
-
関数の呼び出し
-
プログラム、どのように書いて...
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
C++でboolにintの値を代入する...
-
return文について
-
変数の型を定義しなかった場合...
-
VC6でlong longでエラー?
-
構造体のvectorを引数として関...
-
intとINTの違いは?
-
0除算を判定したい
-
2重定義って??
-
main()とint main(void)の違い
-
CStringを含むconst構造体
-
プログラムの中で別のmainを呼...
-
C++のコンストラクタを宣言する...
-
【#define】 defineで定義した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
main.c:7:43: warning: implici...
-
2重定義って??
-
変数の型を定義しなかった場合...
-
C++でboolにintの値を代入する...
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
ハンドルされていない例外が発...
-
void func( void )について
-
C言語のコンパイルエラー
-
enumについて
-
関数の実体定義にヘッダファイ...
-
C言語 宣言した変数になにも代...
-
C++ クラスをメンバにもつクラ...
-
プログラムの中で別のmainを呼...
-
sshdログの意味
おすすめ情報