我有时会看到在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的原因。