有时候我会看到一些程序员将NULL
作为C和C++程序中main()
函数的返回值,例如:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
使用gcc编译此代码时,出现以下警告:
warning: return makes integer from pointer without a cast [-Wint-conversion]
这是合理的,因为宏NULL
应该展开为(void*) 0
,而main函数的返回值应该是int
类型。
当我编写一个简短的C++程序时:
#include <iostream>
using namespace std;
int main()
{
cout << "HelloWorld!";
return NULL;
}
我使用g++编译时也收到了等效的警告:
警告:从NULL转换为非指针类型'int'[- Wconversion-null]
但是为什么他们在main()
的返回值上使用NULL
,尽管这会引发警告?这只是坏的编码风格吗?
- 使用
NULL
而不是0
作为main()
的返回值有什么原因,尽管会出现警告? - 如果这样做是否是实现定义的,如果是,为什么任何实现都希望获得指针值?
EXIT_FAILURE
是8,使用1作为失败并不好,因为在某些程序中它有时被用作成功。 - WaelmioNULL
指针定义为0
(无需转换为void *
)是完全有效的。在这种情况下,缺陷不会被注意到,也不会生成警告。但这仍然不是 NULL 应该用于的情况。 - Ctx