尽管主程序的返回类型为 int ,但代码仍在编译中,它与返回类型字符串一起使用时不会出错,这是其背后的原因。
#include <stdio.h>
int main()
{
int i=0;
printf("Hello World");
//if(i!=0)
return "hai";
return 0;
}
答案 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 ++不允许这种隐式强制转换,因此无法编译此代码。