web-dev-qa-db-ja.com

main()からNULLを返す理由

CおよびC++プログラムでNULLmain()の戻り値として使用するコーダーを時々見かけます。たとえば、次のようなものです。

_#include <stdio.h>

int main()
{
    printf("HelloWorld!");

    return NULL;
} 
_

このコードをgccでコンパイルすると、次の警告が表示されます。

警告:キャストなしでポインタから整数を返す[-Wint-conversion]

マクロNULLは_(void*) 0_に展開され、mainの戻り値はint型になるため、これは妥当です。

私が短いC++プログラムを作るとき:

_#include <iostream>
using namespace std;

int main()
{
    cout << "HelloWorld!";

    return NULL;
}
_

そして、それをg ++でコンパイルすると、同等の警告が表示されます。

警告:NULLから非ポインタ型「int」に変換しています[-Wconversion-null]

しかし、警告をスローするときに、なぜNULLmain()の戻り値として使用するのでしょうか。それは単に悪いコーディングスタイルですか?


  • 警告にもかかわらず、main()の戻り値として_0_ではなくNULLを使用する理由は何ですか?
  • これが適切であるかどうかは実装定義であり、適切である場合、なぜ実装はポインタ値を取得する必要があるのでしょうか?

それは単に悪いコーディングスタイルですか?

さらに悪い。プログラムが正常に終了したことを示す正しい方法は

#include <stdlib.h>

int main (void)
{
    return EXIT_SUCCESS;
}

いくつか/多く/すべて? C++実装NULL0に展開されたマクロです。

これを有効に展開すると、return 0になります。これは有効な戻り値です。

それは単に悪いコーディングスタイルですか?

はい。

1