C语言 晦涩的三元运算符用法



可能的重复项:
为什么要使用三元运算符而不为"true"条件赋值 (x = x ?: 1)

在一本书中,我看到了三元运算符用法的模糊(对我来说)语法:

int nr = nr ? : 1; /* allowed shortcut, same as "nr ? nr : 1" */

这到底是什么意思?在代码中的某个地方声明了"nr"变量,它的初始值基于比较结果,"nr"(里面有一个垃圾,我猜O_o)不等于零......如果是这样,那么它会得到什么价值?

这是对 ternaray 运算符的扩展,允许省略第二个操作数,如注释中所述。

这:

int nr = nr ? : 1;

相当于:

int nr = nr ? nr : 1;

我相信这是一个特定于 GCC 的扩展,这里是它的 GCC 扩展页面。

正如其他人在评论中指出的那样,由于nr正在声明并且声明中使用了它的值,因此这一行的结果是不可预测的。

最新更新