アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者です。
ものすごく基本的な質問なんですが、
int main()
のint型は、どういった意味なんでしょうか?
char main()
はだめなんでしょうか?
それと
()内意味はなんでしょうか?
よろしくお願いします。

A 回答 (7件)

int main(...)のintは、


OSに返すエラーレベルです。

プログラムを実行する場合、実行する側(たとえば、WindowsXPでは「コマンドプロンプト」)
に対し、動作の状況を返答したいことがあります。
そのとき、returnの返り値で動作の状況(エラーレベル)を返すことができます。

エラーレベルは、コマンドプロンプトで
>echo %errorlevel%
とすれば確認することができます。
まあ、動作の状況を返したいことはあまりないのですが、
念のためというか、便利のためにそうなっています。

サンプルプログラム
------------------------
int main(int argc, char *argv[]){
return 10;
}
-----------------------
これをコンパイルして、実行した直後、
echo %errorlevel%と入力してください。
「10」と表示されるはずです。
(returnのあとの数を変えれば、1でも20でも返せます)

charではだめです。C言語の規格で、main関数の返り値はintであることが決まっています。
(voidやcharにしても動く場合もあるかもしれませんが、
規格ではそう決まっているということです)

main関数のカッコの中は、規格では
int main(void)

int main(int argc, char *argv[])
となります。(C言語規格 JIS X3010 §5.1.2.2.1より)
前者は、プログラム起動時にオプションを渡さなくていい場合。
後者は、オプションを渡す場合。
オプションは文字列としてプログラムに渡されます。

説明するよりやったほうが早い。以下のプログラムをコンパイルしてみてください。
------------------------------
#include <stdio.h>

int main(int argc, char *argv[]){
int i;

for(i = 0; i < argc; i++){
printf("%d : %s\n", i, argv[i]);
}

return 0;
}
---------------------------
そして、(たとえば、prog.exeという実行ファイルができたとすると)、
コマンドプロンプトから
>prog.exe abc de fg 123 456
のようにオプション付きで起動してください。
argc, argvがどのように使われているかわかると思います。
    • good
    • 1

少々補足です。



C言語では、 仮引数のない () は、「引数をチェックしない」ことを意味します。引数がないことを明示するためには、void を仮引数の型にします。

C++では、仮引数のない () は、「引数がない」ことを明示します。(void でも同じ意味になります)
    • good
    • 0

Cがコンパイルされ、リンクされた実行ファイルはshellから呼ばれたとき、main()から実行されるわけではありません。


初期化された変数に値をセットするC Run Time (crt)というプログラムがリンクされ、crtがmain()を呼び出す形で実行されます。
crtは、main()がintを返す関数であることを想定して、プログラムされていますので、crtを書き換えない限りmain()は、戻り値としてintを返さなければいけません。
Cがmain()から実行されること自体crtがそうプログラムされているからです。
    • good
    • 0

ANSI Cの仕様では、main関数の定義方法として


> int main(void) { /* ... */ }
> int main(int argc, char * argv[]) { /* ... */ }
> 上の二つのいずれかと等価な方法
> 上の三つのいずれでもない処理系定義の方法
の4通りを上げています。

従って No.3 で書かれている
> void main(void)
という書き方は使う処理系で許されていれば間違ってはいませんが移植性の高い書き方ではありません。
また普通は
> char main(void)
を使える処理系はないと思います。
    • good
    • 1

Cではプログラムのメインルーチンである、main()も関数として扱います。



int main()

とは、mainも関数なので返り値がありますので、それがint型である、という定義をしているという意味です。

もちろん、
char main()
でもよいですが、その場合はmain()を終了する際に必ずreturn分でchar型の返り値を返してください。

()の中がないのは、引数がないという意味です。

↓のURLでは、
void main(void)
という書き方を推奨しています。
void は、返り値、引数がないということを明示的に定義するという意味です。

参考URL:http://www9.plala.or.jp/sgwr-t/c/sec11.html
    • good
    • 0

Sorry,


誤:以上終了
正:異常終了
    • good
    • 0

一般的に(?)プログラムは正常終了すると0を、以上終了すると0以外を返します。

そのためのintです。
main関数の引数は、(int argc, char *argv[])です。
argcは実行時の引数の数、argvは引数の文字列だと思っちゃって良いと思います。
ただし、これは必要ないときには省略できるので、int main() と書いても動きます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!