在阅读U-Boot
或Linux
内核代码时,经常看到类似return err ? : -EINVAL;
的代码,具体是什么意思呢?
废话不多说,上代码。
#include <stdio.h>
#define __pr(x) printf("%-40s: %d\n", #x, x)
int main(void)
{
int five = 5;
int zero = 0;
__pr(five ? : -1);
__pr(five ? five : -1);
__pr(five > 0 ? : -1);
__pr(five > 0 ? (five > 0) : -1);
__pr(five > 0 ? (five > 0 ? 1 : 0) : -1);
__pr(zero ? : -1);
__pr(zero ? zero : -1);
__pr(zero > 0 ? : -1);
__pr(zero > 0 ? (zero > 0) : -1);
__pr(zero > 0 ? (zero > 0 ? 1 : 0) : -1);
return 0;
}
测试结果
five ? : -1 : 5
five ? five : -1 : 5
five > 0 ? : -1 : 1
five > 0 ? (five > 0) : -1 : 1
five > 0 ? (five > 0 ? 1 : 0) : -1 : 1
zero ? : -1 : -1
zero ? zero : -1 : -1
zero > 0 ? : -1 : -1
zero > 0 ? (zero > 0) : -1 : -1
zero > 0 ? (zero > 0 ? 1 : 0) : -1 : -1
从测试结果来看x ? : -1
等同于x ? x : -1
,其中x
可以是变量,也可以是表达式。