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

标签 c function

虽然 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/

相关文章:

无法在 getline() while 循环之外打印 char**

C程序只工作一部分

c++ - 使用 std::bind 的功能组合

c# - 如何依次处理两个函数调用之间的数据

c++ - typedef float _Float32的声明说明符中的两个或多个数据类型;

c - 重置链表序号

r - 在R函数中,将数据框对象指定为名称?循环遍历函数

python - 一次性导入所有子模块

c++ - 内联函数和宏哪个更快

c - 为什么我无法使用该程序通过 scanf 获取输入?