温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c++ - Why returning NULL from main()?

c++ - 为什么要从main()返回NULL?

发布于 2020-03-29 21:51:35

我有时会看到在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()
  • 它是否是实现定义的,是否合适?如果是,为什么任何实现都希望返回一个指针值?

查看更多

提问者
RobertS supports Monica Cellio
被浏览
16
Konrad Rudolph 2020-01-31 22:30

这是合理的

是。

因为宏NULL应扩展为(void*) 0

否。在C ++中,宏NULL 不得扩展为(void*) 0[support.types.nullptr]。它只能在C语言中这样做。

无论哪种方式,编写这样的代码都是令人误解的,因为无论如何实现,NULL都应该引用空指针常量使用它代替an int是一个逻辑错误。

  • 尽管有警告NULLmain()还是使用0而不是0作为返回值的原因是什么

无知。没有充分的理由这样做。

  • 它是否是实现定义的,是否合适?如果是,为什么任何实现都希望返回一个指针值?

不,永远都不适合编译器是否允许取决于实现合格的C ++编译器可能会毫无警告地允许它。

发布
问题

分享
好友

手机
浏览

扫码手机浏览