这个三元有条件吗?:正确(Objective)C语法?

37 c objective-c ternary-operator conditional-operator

我不认为这是可能的,但显然在Objective C中允许:

int a = b ?: c;
Run Code Online (Sandbox Code Playgroud)

所以你看到他们在这里做的是什么,他们忽略了三元表达式的第二部分,这样如果b非零,则b用作第二部分.

它很聪明但据我所知这是针对K&R C,可能是ANSI C.

如果没有,多年来我一直错过了一个非常聪明的语法技巧......唉!

更新:这是gcc.

Joa*_*son 71

来自http://en.wikipedia.org/wiki/%3F%3A

C的GNU扩展允许省略第二个操作数,并且隐式地使用第一个操作数作为第二个操作数:

a = x ? : y;
Run Code Online (Sandbox Code Playgroud)

表达式相当于

a = x ? x : y;
Run Code Online (Sandbox Code Playgroud)

除了如果x是表达式,它只被评估一次.如果评估表达具有副作用,则差异是显着的.


Ste*_*her 6

此行为是为gcc和两者定义的clang.如果您正在构建Mac OS X或iOS代码,则没有理由不使用它.

但是,我不会在便携式代码中使用它,而不会仔细考虑它.


sid*_*yll 1

这是一个GNU C 扩展。检查编译器设置(寻找 C 风格)。不确定它是否是 Clang 的一部分,我能得到的唯一信息是在此页面中中:

介绍

本文档描述了 Clang 提供的语言扩展。除了此处列出的语言扩展之外,Clang 还旨在支持广泛的 GCC 扩展。有关这些扩展的更多信息,请参阅 GCC 手册。