为什么在不检查返回值的情况下调用返回值的函数?

use*_*164 2 c function

我的意思是不将其值分配给变量并使用它。

例如:

int foo(void);
void main()
{
    foo();
}
int foo()
{
    return(5);
}
Run Code Online (Sandbox Code Playgroud)

为什么我不能得到任何警告

Bar*_*mar 7

许多函数返回一个值并执行副作用,但是它们通常仅用于副作用。

例如,printf()打印输出并还返回已打印的字符数。但是大多数情况下,返回值并不有趣,因此我们不会在任何地方分配它。fclose()返回一个成功指示符,但是如果程序失败,通常是无能为力的,因此他们不必费心检查结果。

必须编写类似以下内容的工作很繁琐:

(void)printf(...);
(void)fclose(f);
Run Code Online (Sandbox Code Playgroud)

一直以来,编译器通常不会警告不使用结果而调用非void函数。

在某些情况下这可能是个问题。在某些函数中,您确实应该使用返回值,但是不使用它通常是一个错误。例如,realloc()返回新指针,但是许多初学者只是假设它将始终调整旧指针指向的分配大小。

因此,某些IDE可能具有应警告的功能列表。但是编译器通常不那么精确。