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

Siv*_*h B 1 c function

代码正在编译evan,虽然main的返回类型为int,它与返回类型字符串一起使用而没有错误,它背后的原因是什么.

#include <stdio.h>

int main()
{
    int i=0;
    printf("Hello World");
    //if(i!=0)
       return "hai";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ala 7

该程序是一个无效的 C程序."hai"具有类型,char [4]并在return语句的上下文中衰减char *.

但是该功能需要返回int.在return这种情况下,如果通过分配.

A char *可以转换为int但需要显式转换.在没有显式强制转换的情况下,它是违反约束的,并且编译器必须生成诊断消息,其gcc执行:

warning: return makes integer from pointer without a cast [-Wint-conversion]
    return "hai";
           ^~~~~
Run Code Online (Sandbox Code Playgroud)

最后:C标准在脚注中提到:

[符合实施]也可以成功翻译无效的程序.