【问题标题】:C extension: <? and >? operatorsC 扩展名:<?和>?运营商
【发布时间】:2011-03-27 03:06:39
【问题描述】:

我观察到,在 GCC 中,有时会有 &lt;?&gt;? 运算符。如何在 GCC 4.5 下使用这些?它们是否已被删除,如果是,何时删除?

Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token

【问题讨论】:

  • 请注意,这个问题是针对 C 的。
  • 对这个问题的爱从何而来?谢谢!
  • 与 PHP 短格式标签的巧合相似 ... ?>
  • @smci,不,是&lt;?&gt;?,不一样。
  • "请注意,这个问题是特定于 C 的。" -- 请注意,它实际上是特定于 G++...

标签: c gcc max min


【解决方案1】:

近期手册say

G++ 最小和最大运算符(‘&lt;?’和‘&gt;?’)及其复合形式(‘&lt;?=’)和‘&gt;?=’)已被弃用,现在已从 G++ 中删除。使用这些运算符的代码应修改为使用std::minstd::max

快速搜索过去的文档似乎表明它们在 4.0 版左右被删除(3.4.6 包括它们,4.0.4 没有)。

【讨论】:

  • 如果你能提供链接,我想给 +1。
  • @Matt Joiner,SRSLY?谷歌呢?这里:gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc
  • 这并不难过,因为如果他不知道 gnu 扩展,他可能会花很长时间试图理解这段代码到底在做什么。
  • @CarlNorum:首先应该引用链接。
  • @AlexisWilke 但我必须承认,它看起来确实是一个很酷的巧妙技巧,如果它没有被替换/弃用,我肯定会将它用于与 OP 相同的目的。
【解决方案2】:

g++ 的早期迭代(不是 C 编译器)使用这些运算符为您提供最小值或最大值,但它们早已被弃用,取而代之的是 std::minstd::max .

基本上,它们等同于(但没有双重评估ab的可能性):

a <? b       -->       (a < b) ? a : b
a >? b       -->       (a > b) ? a : b

在替换它们方面(你真的应该替换它们),你可以使用类似的东西:

Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;

或使用std::min的等效项。

我不太喜欢使用 C/C++“扩展”(尤其是那些已被弃用和/或删除的扩展),因为它们将我与该语言的特定实现联系在一起。

你永远不应该在有一个完全足够的标准方法可用的地方使用非标准扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多