【问题标题】:Variable name 'xor' results in internal compiler error 'segmentation fault'!变量名“异或”导致内部编译器错误“分段错误”!
【发布时间】:2010-07-03 00:00:24
【问题描述】:

编译这段代码

int main(int argc, char **argv)
{
    int xor = 0;
}

通过

g++ main.cpp 

结果:

internal compiler error: Segmentation fault

i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659).

重命名变量可以消除错误。

问题:苹果的 gcc 是不是垃圾?

【问题讨论】:

  • 似乎是向 gcc 团队报告错误的候选人。
  • 对我来说,在 4.4.1-4ubuntu9 上,它只是给出了一个正常的错误,“在‘^’标记之前预期的 unqualified-id。” (xor 是 ^ 的别名)。没有分段错误。
  • 请注意,除非您独立安装 gcc,否则它是自 OSX 10.9 (Mavericks) 以来的 clang 符号链接。

标签: macos gcc compiler-construction


【解决方案1】:

任何时候你的编译器出现段错误,这都是一个错误。您已经减少的测试用例是报告给GCC 的完美候选。

【讨论】:

  • 应该向 Apple (developer.apple.com/bugreporter) 报告。他们可以最好地确定这是他们引入的错误,还是存在于上游。如果它在上游,他们通常会在那里提交错误。
  • 感谢您的提示。我向 Apple 和 gcc 团队报告了这件事。
【解决方案2】:

and_eq、bitand、bitor、compl、not、not_eq、or、or_eq、xor 和 xor_eq 是通过 -ansi 或 -foperator-names 启用的关键字

您启用了其中一个开关吗?

也请查看:this

【讨论】:

  • @Wolfgang,它并不是真正的 g++ 特定的,也不是隐藏的。 C++ 标准说xor 是保留的,在另一个上下文中使用保留字是未定义的行为。这意味着任何事情都可能发生。当然,编译器最好打印一条清晰的错误消息。
  • @Matthew 我的意思是开玩笑。在条件中使用逻辑运算符是一个很好的特性,它使代码更具可读性(特别是对于习惯于脚本语言的同事),但我怀疑许多 C++ 程序员知道或使用这一点。
猜你喜欢
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多