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
代わりに使用する理由は何ですか?0
main()
- これが適切であるかどうかは実装定義であり、適切である場合、なぜ実装はポインタ値を取り戻したいのでしょうか?
EXIT_FAILURE
ありました。
NULL
ポインタを0
(へのキャストなしでvoid *
)として定義することは完全に有効です。この場合、欠陥は気付かれず、警告は生成されません。それでも、NULLを使用する必要はありません。