gcc - 奇怪的编译错误

标签 gcc compiler-errors compilation anaconda

使用gcc 7.3时出现此错误。 gcc 7.3来自Ubuntu 18.04和在RedHat 6.9上编译的gcc 7.3。但是它从Anaconda2的gcc 4.8.5中消失了。

我知道没有源代码,人们将很难提供帮助。但我无权发布所有帖子。我将不胜感激任何可以帮助我确定为什么gcc 7.3和4.8.5之间的行为不同的建议。 。

该程序是由我不熟悉的Scons构建的。我很乐意提供更多信息,但我不知道如何。

错误是:

 [ TRACING]  -> X86/debug/DiskImageWrite.hh
 [SO PARAM] CowDiskImage -> X86/params/CowDiskImage.hh
 [SO PARAM] DiskImage -> X86/params/DiskImage.hh
 [SO PARAM] RawDiskImage -> X86/params/RawDiskImage.hh
 [     CXX] X86/dev/disk_image.cc -> .o
build/X86/dev/copy_engine.cc: In member function 'void CopyEngine::CopyEngineChannel::channelRead(Packet*, Addr, int)':
build/X86/dev/copy_engine.cc:249:43: error: '~' on an expression of type bool [-Werror=bool-operation]
         pkt->set<uint64_t>(cr.status() | ~busy);
                                           ^~~~
build/X86/dev/copy_engine.cc:249:43: note: did you mean to use logical not ('!')?

我可以用“〜”来判断它不是C语法,很可能是Python代码。但是为什么它对Anaconda gcc有用呢?

最佳答案

~是C和C++中的bitwise negation operator

在其中引发诊断的源文件X86/dev/disk_image.cc是这样编译的C++源文件([ CXX])。
~不是 bool(boolean) 操作。如~所示,将bool应用于~busy表达式可能是一种
程序员方面的错误,实际上可能对程序有害,也可能不会有害。正如gcc 7.3所建议的,它们可能是逻辑上的
否定!busy

当诊断选项gcc 7.3为时,-Wall通过警告诊断此可能的错误。
实际上,并添加了-Werror选项(=将警告视为错误),
诊断变为错误。 See here

较旧的gcc 4.8.5不能诊断此可能的错误(使用相同的诊断选项,
或任何其他)。 See here

这种差异就是您正在观察的。

关于gcc - 奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51414464/

相关文章:

c++ - 共享对象文件中的版本号

C 编译错误指针

c++ - 如何修复 GCC 编译中的 const char * 构造函数转换链错误

java - 在Android中编译并执行任意Java字符串

c++ - 我应该如何正确使用 g++ 的 -finput-charset 编译器选项来编译非 UTF-8 源文件?

c - -Werror 导致编译器在#warning 处停止。我能做些什么来防止这种情况发生?

c - 是否可以将编译期间发出的某些内置函数列入黑名单?

C++ 错误 : forward declaration of 'struct. ..?

c++ - poco Lib 无法在 vs express 9 中编译

c - 通过在编译时替换静态符号来测试嵌入式代码