blu*_*ift 14 c conditional gcc
在gcc中,我可以写foo ? : bar一下这是一种速记形式,foo ? foo : bar但我看到K&R没有提到它.
这是我应该依赖的东西,在某些标准中定义了吗?或者只是一个(邪恶的)gcc扩展我应该避免?
Alo*_*ave 14
这是一个GCC扩展名,名称为:
Conditionals with Omitted Operands.
它不是标准的c.使用-pedantic标志进行编译会告诉你.
可以省略条件表达式中的中间操作数.然后,如果第一个操作数非零,则其值为条件表达式的值.
因此,表达
x ? : y如果非零,则其值为x; 否则,y的值.
这个例子完全等同于
x ? x : y在这个简单的例子中,省略中间操作数的能力并不是特别有用.当它变得有用时是第一个操作数,或者可能(如果它是一个宏参数),包含副作用.然后在中间重复操作数将执行两次副作用.省略中间操作数使用已经计算的值而没有重新计算它的不良影响.
这是我应该依赖的东西,在某些标准中定义了吗?或者只是一个(邪恶的)gcc扩展我应该避免?
取决于您的要求,如果您的代码不需要在除GCC之外的任何其他编译器实现上运行,那么您可以使用它.但是,如果您的代码是基于不同的其他编译器实现构建的,那么您不应该使用它.
无论如何,我应该尽可能地编写尽可能多的直观和可读的代码,因为我总是建议避免使用这种(丑陋的)构造.