c中的'if'测试条件-是否评估?

问题描述 投票:0回答:1

在c中的if语句的测试部分中调用函数时,它的计算结果是否与您正常调用时所得出的结果完全相同?像这样,除返回值以外的所有影响都会评估并持续吗?

例如,如果我想在调用fseek时包括错误检查,我可以写吗

if( fseek(file, 0, SEEK_END) ) {fprintf(stderr, "File too long")};

并且在功能上与:

long int i = fseek(file, 0, SEEK_END); 
if( i ) {fprintf(stderr, "File too long")};

https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#The-if-Statement

https://www.gnu.org/software/libc/manual/html_node/File-Positioning.html

c function if-statement fseek
1个回答
0
投票

简短的答案是肯定的(例如您的琐碎示例),长的答案也许是。

当逻辑表达式(任意)更复杂时,C语言将对其进行评估,直到完全确定整个表达式的结果为止。其余操作不评估。

示例:

int x = 0;

if(x && foo()) {} 

foo将不会被调用,因为x为假-然后整个操作为假。

int x = 1;

if(x && foo()) {} 

将调用foo,因为x为true,并且需要表达式的第二部分来获取结果。

被称为Short circuit evaluation,C中的所有逻辑表达式都以此方式求值。

© www.soinside.com 2019 - 2024. All rights reserved.