【问题标题】:Having trouble understanding output of line of code -无法理解代码行的输出 -
【发布时间】:2019-10-17 07:15:03
【问题描述】:

看不懂return 0*语句的用法??

尝试在 Google 上寻找答案

return 0*printf("%d",a[i]);

我不明白结果。

【问题讨论】:

  • 这没有意义。这只是一个糟糕的代码。:)
  • 您将 printf 的返回值乘以零。你期待什么?
  • return 0
  • @Ayxan 不,不一样。
  • 你在哪里找到的代码?提供一些上下文。

标签: c return printf expression


【解决方案1】:

至于我呢

return 0*printf("%d",a[i]);

只是一种糟糕的编程风格。

至少改写会更好

return ( printf("%d",a[i]), 0 );

不说

printf("%d",a[i]);
return 0;

也许这个语句是在递归函数中找到的。

至于你的问题

无法理解代码行的输出 -

那么这行输出整数数组ai-th元素的值,并退出对应的函数。

【讨论】:

  • 读者,请在生产中使用printf调用+return语句。
  • return ( printf("%d",a[i]), 0 ); 为什么?请不要那样做。它不会改善任何东西并且会损害可读性。使用两个单独的语句打印然后返回
  • @Ayxan 似乎原始语句取自一些有意用最少语句编写的程序。所以我展示了如何更清楚地表明没有问题出现。:)
【解决方案2】:

TL/DR - 将a[i] 的值写入标准输出,乘以0 写入的字符数,然后返回结果...始终为0 .

我想查看上下文的其余代码 - 基于这一行代码它没有意义,但也许在上下文中它看起来不那么荒谬。

printf 返回写入输出流的字符(字节)数,因此这是将a[i] 的值写入标准输出,乘以0 写入的字符数,然后返回结果。 .. 总是0,所以再一次,孤立的这条线没有多大意义。

我很难想到这样的用例是合乎逻辑的,但这并不意味着没有。也许作者想确保即使发生错误也能显示a[i] 的值,但为什么不这样做

if ( error_occurred )
{
  printf( "%d", a[i] );
  return 0;
}

在那种情况下?

可能是作者打算在返回的同时执行 print 语句,在这种情况下,他们不了解 C 的工作原理。可能是作者将简洁代码与快速代码混淆了,在这种情况下,他们仍然不了解 C 的工作原理。

或者也许作者是为了狡猾而狡猾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-19
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多