为什么main使用返回类型字符串运行,即使它是用整数返回类型定义的呢?

时间:2018-10-10 11:43:19

标签: c function

尽管主程序的返回类型为 int ,但代码仍在编译中,它与返回类型字符串一起使用时不会出错,这是其背后的原因。

#include <stdio.h>

int main()
{
    int i=0;
    printf("Hello World");
    //if(i!=0)
       return "hai";
    return 0;
}

2 个答案:

答案 0 :(得分:7)

该程序是无效的C程序。 "hai"的类型为char [4],在return语句的上下文中,它衰减为char *

但是该函数需要返回int。在return的情况下,这是通过分配实现的。

char *可以转换为int,但是需要显式强制转换。在没有显式强制转换的情况下,这是违反约束的,并且编译器必须产生诊断消息,gcc会这样做:

warning: return makes integer from pointer without a cast [-Wint-conversion]
    return "hai";
           ^~~~~

最后:C标准在footnote中提到:

  

[符合标准的实现]也可以成功翻译无效的程序。

答案 1 :(得分:3)

C

您不返回字符串或指针,仅将指针转换为整数。并且编译器会警告您,您已转换了没有显式强制转换的指针。

C ++

由于C ++不允许这种隐式强制转换,因此无法编译此代码。