虽然 main 的返回类型为 int,但代码正在编译 evan,它使用返回类型字符串,但没有错误,这背后的原因是什么。
#include <stdio.h>
int main()
{
int i=0;
printf("Hello World");
//if(i!=0)
return "hai";
return 0;
}
最佳答案
该程序是一个无效 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 中提到:
[a conforming implementation] may also successfully translate an invalid program.
关于c - 为什么 main 以返回类型字符串运行,即使它是用整数返回类型定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739489/