CやC ++プログラムでのNULL戻り値として使用するコーダーが時々見られます。main()たとえば、次のようなものです。
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
このコードをgccでコンパイルすると、次の警告が表示されます。
警告:キャストなしでポインタから整数を返す[-Wint-conversion]
これは、マクロNULLが展開され(void*) 0、mainの戻り値がtypeであるため、妥当intです。
私が短いC ++プログラムを作るとき:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
そして、それをg ++でコンパイルすると、同等の警告が表示されます。
警告:NULLから非ポインター型 'int'に変換しています[-Wconversion-null]
しかし、なぜ警告をスローするときのNULL戻り値として使用するのmain()でしょうか。それは単に悪いコーディングスタイルですか?
- 警告にもかかわらず、の戻り値としての
NULL代わりに使用する理由は何ですか?0main() - これが適切であるかどうかは実装定義であり、適切である場合、なぜ実装はポインタ値を取り戻したいのでしょうか?
EXIT_FAILUREありました。
NULLポインタを0(へのキャストなしでvoid *)として定義することは完全に有効です。この場合、欠陥は気付かれず、警告は生成されません。それでも、NULLを使用する必要はありません。