代码正在编译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)
该程序是一个无效的 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标准在脚注中提到:
[符合实施]也可以成功翻译无效的程序.