我有时会看到在C和C ++程序中NULL
用作返回值的编码器,main()
例如:
#include <stdio.h>
int main()
{
printf("HelloWorld!");
return NULL;
}
当我用gcc编译此代码时,得到以下警告:
警告:return从指针转换为整数而不进行强制转换[-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()
时将它们用作返回值呢?这只是不好的编码风格吗?
- 尽管有警告,仍要使用
NULL
而不是将其0
用作返回值的原因是什么main()
? - 它是否是实现定义的,是否合适?如果是,为什么任何实现都希望返回指针值?
EXIT_FAILURE
为8,由于使用1在某些程序中有时会取得成功,因此使用1似乎对失败没有好处。
NULL
指针定义为0
(不强制转换为void *
)是完全有效的。在这种情况下,该缺陷不会引起注意,并且不会生成警告。仍然不是应该使用NULL的原因。