5

重複の可能性:
c の main(void) と main() の違い

これは非常に基本的なことであり、他のいくつかのスレッドで同様の質問についてすでに話し合っていることは知っています。しかし、私はすべてのコードが関数 main() 内に書かれている本 (C の絶対初心者ガイド) を持っています。int は常に省略されます。それはどのように実行できますか?おそらく stdio.h の古いバージョンで問題ありませんか?
サンプルコードは次のとおりです。

#include <stdio.h>

main()  // not int main()
{
printf("This is it\n");
return 0;
}
4

3 に答える 3

4

c89 標準ではmain()が許可されると思いますが、c99 以降では許可されません。それ以外の場合はint main()を使用する必要があります。

于 2012-11-24T17:15:15.493 に答える
1

この種の質問は標準バージョンに大きく依存するため、一般的な回答はあまり意味がありません。

C89ドラフトから(公式のC89標準が異なる場合は訂正してください、それは自由に利用できません):

プログラムの起動時に呼び出される関数の名前はmainです。実装は、この関数のプロトタイプを宣言していません。パラメータなしで定義できます。

int main(void) { /*...*/ }

または2つのパラメーターを使用します(ここではargcおよびargvと呼びますが、宣言されている関数に対してローカルであるため、任意の名前を使用できます)。

int main(int argc, char *argv[]) { /*...*/ }

C99とC11の標準は同じことを言っていますが、それらはとに何かを追加します:

[...]

または同等のもの;[9]または他の実装定義の方法。

[9]したがって、intはintとして定義されたtypedef名に置き換えることができます。または、argvのタイプはchar**argvなどと書くことができます。

一般に、標準から定義されていないものは未定義の動作につながるため、コードはC89 / C90ではUBであり、C99およびC11で有効である可能性がありますが、これは実装定義です。

PS:ご覧voidのとおり、パラメータリストに追加する必要があります。追加しないと、動作は上記のように定義されます。

于 2012-11-24T17:35:55.397 に答える
1

main()動作しますが、紛らわしいです。C では、main 関数は終了ステータスを指定するために常に int を返すため、正しい構文は ですint main()が、終了ステータスを設定する必要がない場合main()は十分ですが、優れた C 本には常にint main().

于 2012-11-24T17:10:13.517 に答える