在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语言将对其进行评估,直到完全确定整个表达式的结果为止。其余操作不评估。
示例:
int x = 0;
if(x && foo()) {}
foo将不会被调用,因为x
为假-然后整个操作为假。
int x = 1;
if(x && foo()) {}
将调用foo,因为x
为true,并且需要表达式的第二部分来获取结果。
被称为Short circuit evaluation,C中的所有逻辑表达式都以此方式求值。