在C中,"格式参数也可以表达"是什么意思?

Cof*_*fee 2 c code-analysis

K&R书中,它在指针章节中显示了以下printf语句:

printf((argc > 1) ? "%s " : "%s", *++argv);
Run Code Online (Sandbox Code Playgroud)

我不明白这一行 - 为什么这里有两个%s?

谢谢!

Luc*_*ore 7

这相当于:

if ( argc > 1 )
    printf("%s ", *++argv);
else
    printf("%s", *++argv);
Run Code Online (Sandbox Code Playgroud)

这是三元条件运算符:

(condition) ? (subexpression1) : (subexpression2)
Run Code Online (Sandbox Code Playgroud)

该表达式评估为subexpression1如果conditiontruesubexpression2其他.

  • 你应该写`subexpression1`而不是`statement1`等.所以实际上`条件?subexpression1:subexpression2`,因为括号通常很有用,几乎总是推荐,但标准不要求; 你可以合法地写'x?0:1`. (2认同)