A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
( borland C++ としていることからOSは、Windows として)
>「関数は値を返すべき(関数 main)」とでます
これは、エラーではなく「警告」ですよね。
「警告もなくしたい」と考えることは、大事なことだと思います。
ただ、main 関数に関する警告は特殊(?)で、過去にも「質問」が多くあります。
その中から、2件上げてみます。
http://okwave.jp/qa3185703.html
http://okwave.jp/qa3794915.html
「特殊」なことが理解できたかと思います。
(「初心者」にとって、小難しい話で申し訳ない)
------------------------------------------
>本見て試しに書いたのでどこが間違ってるのかわかりません。
お示しのソースの main() に、「型」が付いていません。
Cでは、「型」が無い関数は、自動的に int 型となります(▼)。
int 型の関数は、main 関数であっても「呼出し元」に int 型の値を返さなくてはいけません。
この「int 型の値を返す」return 文がないことから「警告」となりました(「エラー」ではない)。
☆なんか「おおらかな」言語ですよね。「実行文」はできちゃうのだから・・。
------------------------------------------
では、どうやって「警告」をなくすか。
先に示した「質問」のやり取りでお判りと思います。
void main() または、int main() + return( 0 ); とすることで「警告」はなくなります。
なお、int main() の int は、必須ではありません(▲)。
★ void main() は、規格(C99)では「4種類の方法」の内の「処理系定義の方法」で、borland C++ はOKです。
話はそれますが、main() を再帰で使うのは、年寄りにはチンプンカンプンです。
http://okwave.jp/qa4137733.html ←No.3 さんの回答の前段。
------------------------------------------
プログラム(int main())の「呼出し元」は、OSです。
プログラム終了時、OSには「終了コード(0-255)」として渡されます。
渡された終了コードを使うかどうかは、OSではなく、プログラムを「実行する人」が決めます。
OSは、「蛙の面に小便」状態です(終了コード=小便)。
終了コードを(バッチファイル等で)使うことを想定していないのであれば、
★ void main() が return 文1行分、節約できてお勧めです。
++++++++++++++++++++++++++++++++++++++++++
ただし、質問者様が学生で、ソースを提出する場合は、
main 関数は、int 型と明示し、
return( 0 ); で結ぶべきです( () 省略可)。
理由
・先生が、現在の規格(古い規格では、int 型のみ)を知らないことが想定される。
・なんらかの形(例 return( 学籍番号 );と改変)で終了コードを評価に利用?することも考えられる。
No.5
- 回答日時:
言語仕様の話をすると、main関数はちょっと特別で、
もしreturn文がなくてもreturn 0;とみなすことになっているですが、
> ISO/IEC14882:2003 (C++)
> If control reaches the end of main without encountering a return statement,
> the effect is that of executing
> return 0;
> ISO/IEC9899:1999 (C)
> reaching the } that terminates the main function returns a value of 0.
コンパイラがこれに対応してないのでしょう。
例えば、VC7.1や8などはmainのreturn文を省略しても通ります。
(古いのは通らなかったような気もしますが…未確認)
なぜこんなことになっているかというと、むかーし、仕様が固まる前に
returnを省略して書かれた提示のようなコードが残存してるせいです。
古いコードの互換性などのためにあるルールですので、
昨今、このようなルールでコードを書くことはあまり好ましくないと思います。
多分、参考にしている本の内容ベースが古いのではないでしょうか。
既に回答があるように、mainの戻りも含め省略せずに書いた方がいいかと思います。
No.3
- 回答日時:
C言語の規格で、main関数の戻り値はint型であると
決まっているようです。
したがって、
int main(void)
{
/* 何かの処理 */
return 0;
}
とか
int main(int argc, char **argv)
{
/* 何かの処理 */
return 0;
}
のように、型(省略すればintとみなす)とreturn文を書きます。
No.2
- 回答日時:
というより、本来は
int main(void)
{
printf("hello,world\n");
return 0;
}
としないといけません。
一部のコンパイラはこの辺りいろいろ書き方が変わってくる場合もあり
ますがコンパイルできたとしても仕様上は記述が間違っています。
大抵のコンパイラは
void main(void)
{
printf("hello,world\n");
return;
}
もできるようですがこれもやっちゃいけないんですね。
エラーも警告もでないし、ほとんどの場合は正常に動作するので
当たり前のように使用していました。
参考URL:http://www.6809.net/tenk/html/cgokai/int_main.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
関数の実体定義にヘッダファイ...
-
long型の定数の末尾にLを付ける...
-
visualstudio C# テキストボッ...
-
typedef enumの使い方を教えて...
-
2重定義って??
-
C言語 宣言した変数になにも代...
-
intとINTの違いは?
-
構造体を引数とする、クラス間...
-
ハンドルされていない例外が発...
-
変数の型を定義しなかった場合...
-
Arduinoのプログラムについて
-
C++の(左辺値)参照を参照渡し
-
C++/CLIでネイティブの構造体を...
-
C言語での方向キー入力判定
-
警告 ”値が割り当てられていな...
-
main()とint main(void)の違い
-
gccのエラー "initialization d...
-
WinMainの第3引数のl...
-
エラー「invalid conversion fr...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
関数の実体定義にヘッダファイ...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
【#define】 defineで定義した...
-
void func( void )について
-
構造体の要素すべてに対する四...
-
構造体の宣言でエラーが出ます。
-
C++の(左辺値)参照を参照渡し
-
main()とint main(void)の違い
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報