【问题标题】:What happens to return value when its type differs from the declared return type?当返回值的类型与声明的返回类型不同时,返回值会发生什么?
【发布时间】:2015-08-27 11:15:36
【问题描述】:

为什么当我在返回语句旁边给出一个浮点数时,我的简单 C 程序打印“hello world”并且编译时没有错误并且运行良好?这样做不应该是个错误吗?

这是我的代码:

#include<stdio.h>
int main()
{
    printf("hello world");
    return 2.1;
}

【问题讨论】:

标签: c return-value


【解决方案1】:

出于同样的原因

int main(void)
{
    // ...
    int x = 2.1;

    // ...
   return x;
}

这叫implicit conversion

【讨论】:

  • 这个问题是关于C的,所以正确的链接应该是en.cppreference.com/w/c/language/conversion
  • @LưuVĩnhPhúc 谢谢,不是直接从谷歌上找到的。
  • 你可以在每个 C++ 页面的末尾找到 C 版本
【解决方案2】:

当您返回与函数的声明类型不同的类型时,该值会自动转换为声明的类型。所以相当于做:

return (int) 2.1;

【讨论】:

  • 我也想问一下“为什么c语言中的main函数只返回整数而不返回浮点数或字符串”
  • @suryadutt 因为这是返回给操作系统的错误代码,不是浮点数
  • @venki 您链接的答案是指 C++(在这方面与 C 略有不同)。
  • @suryadutt:语言定义要求main 返回int。请注意,main 的返回值通常是运行时环境的状态码,因此它是整数类型是有意义的。根据C language standard 的第 5.1.2.2.1 节,实现可能main 提供替代签名,它必须记录(尽管我已经看到通常将参数的数量更改为main,而不是其返回类型)。
【解决方案3】:

返回代码将在返回时自动转换。 长版是

return (int) 2.1;

【讨论】:

  • Nitpick:返回值会被隐式转换,不会自动转换。
【解决方案4】:

您的代码将返回一个整数,因为编译器会将浮点数转换为整数。

【讨论】:

    【解决方案5】:

    这是正常的,因为值会隐式转换为您声明的类型。编译器不会介意,但您通常会在运行时得到意想不到的结果,在这种特定情况下强制转换为 (int)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 2022-11-27
      相关资源
      最近更新 更多