【问题标题】:Why printf("test"); does not give any error?为什么 printf("test");不给出任何错误?
【发布时间】:2016-10-12 07:39:37
【问题描述】:

如果int x=printf("test"); 安全执行, 中没有错误,因为printf 返回一个int 值(它已打印的数据长度。)但是如果我们不存储该整数值怎么办:

printf("text"); 

为什么我们不会从中得到错误?

【问题讨论】:

  • 为什么会期望它抛出错误?
  • 因为 int x=printf("test");安全执行没有错误。这意味着 printf 返回一些整数值,即它打印的数据的长度。但是如果我们不存储该整数值怎么办。为什么它不会得到任何错误?
  • 仅仅因为有一个返回并不意味着它必须被分配给某个东西。通过不分配它,对函数的调用使其行为类似于 void 函数。
  • 如果您想确保某个特定函数的返回值不会被忽略,请参阅this question,以及this answer 了解适用于 gcc 和 MSVC 的宏。

标签: c c return printf return-value


【解决方案1】:

C 中的许多函数都有返回值。程序员是否决定对那个值做任何事情取决于他们——并且经常忽略返回代码会导致错误......但在printf() 的情况下,返回值很少有用。提供它以允许以下代码:

int width;

width = printf("%d", value); // Find out how wide it was
while (width++<15) printf(" ");
width = printf("%s", name);
while (width++<30) printf(" ");

我并不是说这是好的代码(也有其他方法可以做到这一点!),但它描述了为什么一个函数可以返回一个不经常使用的值。

如果程序员确实决定忽略返回值,则不会出现编译器错误——该值只是被遗忘了。这有点像买东西,拿到收据,然后把它扔到地板上——忽略返回的值。

可以指示最新的编译器标记忽略返回值的代码。但即使是这些编译器也可以被教导哪些函数的返回是重要的,哪些不是。 printf() 属于第二类。

【讨论】:

    【解决方案2】:

    您没有义务存储返回的值,您可以放心地忽略它(当然,只要您确定确实不需要它)。

    在大多数情况下,该值只是存储在 CPU 寄存器中。如果您选择忽略它,一旦该寄存器被覆盖,它就会丢失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-03
      • 2023-01-02
      • 1970-01-01
      • 2013-08-10
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多