首页 > 解决方案 > 为什么从 main() 返回 NULL?

问题描述

NULL我有时会看到在 C 和 C++ 程序中用作返回值的编码器,main()例如:

#include <stdio.h>

int main()
{
    printf("HelloWorld!");

    return NULL;
} 

当我使用 gcc 编译此代码时,我收到以下警告:

警告:return 从没有强制转换的指针中生成整数 [-Wint-conversion]

这是合理的,因为宏NULL应该被扩展为(void*) 0并且 main 的返回值应该是 type int

当我制作一个简短的 C++ 程序时:

#include <iostream>
using namespace std;

int main()
{
    cout << "HelloWorld!";

    return NULL;
}

并用 g++ 编译它,我确实得到了一个等效的警告:

警告:从 NULL [-Wconversion-null] 转换为非指针类型 'int'

但是,为什么它们会NULL用作引发警告的返回值main()呢?这只是糟糕的编码风格吗?


标签: c++cnullreturnreturn-value

解决方案


这是合理的

是的。

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

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

无论哪种方式,编写这样的代码都会产生误导,因为无论它是如何实现的,它NULL都应该引用空指针常量。用它代替 anint是一个逻辑错误。

  • 尽管有警告,但使用NULL而不是 0 作为返回值的原因是什么?main()

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

  • 如果这合适与否,它是实现定义的吗?如果是,为什么任何实现都想要取回指针值?

不,这永远不合适。编译器是否允许它取决于实现。一个符合标准的 C++ 编译器很可能会在没有警告的情况下允许它。


推荐阅读