【问题标题】:C programming SyntaxC 编程语法
【发布时间】:2014-11-25 05:55:28
【问题描述】:

有可能有这行代码吗?

loops_per_msec = (1000000 * loops_per_msec / run_time ? :
        loops_per_msec);

尽管这行代码是从其他可用的源文件完全复制和粘贴的,但我的编译器给了我错误。

【问题讨论】:

  • 你可以发布错误吗?
  • 什么编译器?它使用 gnu 扩展。
  • 您在 ?和:.如果逻辑表达式的计算结果为真,则取值。
  • @RotemVaron Error is Error: expected an expression

标签: c syntax syntax-error


【解决方案1】:

三元 conditional operator ?: 接受三个操作数。

但 GCC 接受 omit the middle operand 作为扩展

在你的情况下,编码

loops_per_msec = (1000000 * loops_per_msec / run_time ? run_time :
    loops_per_msec);

会让任何编译器都开心。

【讨论】:

  • 你能告诉我这行代码是如何运行的吗? >.
【解决方案2】:

有可能,这取决于您使用的C语言的方言。

 ? :

是 GNU 扩展。

对 C 的 GNU 扩展允许省略第二个操作数,并隐式使用第一个操作数作为第二个操作数 (来源维基百科)

关于这个问题的更多信息:How wide-spread is this GNU extension on ternary operation?

因此,您可以修复您的代码(正如其他用户指出的那样),或更改编译选项,前提是您使用兼容的编译器。

【讨论】:

  • 顺便提一下,在上次 ISO 会议上,它被提议包含在 C++ 中,尽管得到了一些支持,但还是被拒绝了。
  • 是的,但它在 GNU C++ (clang++, g++) 中仍然有效。
【解决方案3】:

没有你的 ?: 运算符的语法是错误的。

应该是这样的,

result = condition ? if success : (else) fail;

你结合了?: 可能在 GCC 中工作(如GCC extension),但我不会在 Visual Studio 中工作。

【讨论】:

  • @Kevin 更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2012-09-11
  • 2017-09-07
  • 2014-03-30
相关资源
最近更新 更多