CおよびC++プログラムでNULL
をmain()
の戻り値として使用するコーダーを時々見かけます。たとえば、次のようなものです。
_#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]
しかし、警告をスローするときに、なぜNULL
をmain()
の戻り値として使用するのでしょうか。それは単に悪いコーディングスタイルですか?
main()
の戻り値として_0
_ではなくNULL
を使用する理由は何ですか?それは単に悪いコーディングスタイルですか?
さらに悪い。プログラムが正常に終了したことを示す正しい方法は
#include <stdlib.h>
int main (void)
{
return EXIT_SUCCESS;
}
いくつか/多く/すべて? C++実装NULL
は0
に展開されたマクロです。
これを有効に展開すると、return 0
になります。これは有効な戻り値です。
それは単に悪いコーディングスタイルですか?
はい。