【问题标题】:Why am I getting 1.#QNB when I do not return a value from a function returning double为什么我没有从返回双精度的函数返回值时得到 1.#QNB
【发布时间】:2015-12-15 08:54:52
【问题描述】:

我正在用 C 语言编写一个菜单驱动程序。所以当我调用一个函数时 我试图了解 return 是如何工作的。所以 我写了一个类似的代码

double function_name(parameters){
    //some code here
if(condition here)
    return (x);
else
    return ;
}

int main( void ){
    //some code here
    double l = function_name(argument);
    printf("returns: %.4lf\n", l);
    return 0;
}

当代码进入 else 时,它​​会打印出来

输出:返回:1.#QNB

具体是什么意思?

【问题讨论】:

  • 你的函数应该返回一个double 而你没有返回任何东西,所以结果当然是未定义的行为。 (你的编译器至少应该警告你,不是吗?)
  • 不,我没有收到任何警告和错误 @Paul R
  • (a) 1.#QNB 只是 1.#QNAN (即“安静”NaN)“四舍五入”到小数点后 4 位 - 不过这几乎无关紧要,因为您的代码正在展示 UB。 (b) 你没有说你正在使用什么编译器,但是gcc -Wall ... 会给你上面代码的一堆警告,最值得注意的是:warning: 'return' with no value, in function returning non-void。
  • 好的 - 阅读手册或在线帮助,看看你是否能弄清楚如何启用警告 - 它会为你省去很多麻烦。
  • 您使用了错误的格式说明符:lf 是在 C99 中添加的(您显然没有使用它,因为在 C99 中省略 main 的返回类型是一个错误)。 %.4f 是正确的。

标签: c function return double return-value


【解决方案1】:

QNaN (is a Quiet Not-a-Number) 是带有分数部分的 MSB 的 NaN。与 SNaN(信号 NaN)相反,QNaN 允许继续进行浮点运算而不会引发异常。在这种情况下,由于我没有找到太多关于它的信息,我猜是相似的。


当我从函数中返回 NOTHING 并存储在一个 浮动类型数字 中,这会产生一个 1.#QNB

【讨论】:

  • 这解释了 您的特定实例 上发生的情况,但通常行为可以是任何情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2010-10-05
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多