c - Windows.h 和 clang (LLVM)

标签 c llvm clang

我正在尝试使用 clang 编译器编译一个包含 windows.h 的小项目。不幸的是,clang 产生了一些我无法解决的错误。是什么导致了这些错误? clang 是否不支持所有必需的功能,我是否遗漏了什么?

In file included from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/wind
ows.h:155:
In file included from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/wind
ef.h:177:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winnt.h(12857) :  warning:

  expression result unused [-Wunused-value]
UNREFERENCED_PARAMETER(CallbackEnviron);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winnt.h:12857:28: note: in
stantiated from:
UNREFERENCED_PARAMETER(CallbackEnviron);
                       ^~~~~~~~~~~~~~~

In file included from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/wind
ows.h:156:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2326) :  error:

  invalid operands to binary expression ('LONGLONG' (aka 'double') and
  'LONGLONG')
                                      Old & Value,
                                      ~~~ ^ ~~~~~
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2327) :  error:

  expected ')'
                                      Old) != Old);
                                           ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2325) :  note:
  to match this '('
} while (InterlockedCompareExchange64(Destination,
        ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2344) :  error:

  invalid operands to binary expression ('LONGLONG' (aka 'double') and
  'LONGLONG')
                                      Old | Value,
                                      ~~~ ^ ~~~~~
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2345) :  error:

  expected ')'
                                      Old) != Old);
                                           ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2343) :  note:
  to match this '('
} while (InterlockedCompareExchange64(Destination,
        ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2362) :  error:

  invalid operands to binary expression ('LONGLONG' (aka 'double') and
  'LONGLONG')
                                      Old ^ Value,
                                      ~~~ ^ ~~~~~
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2363) :  error:

  expected ')'
                                      Old) != Old);
                                           ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2361) :  note:
  to match this '('
} while (InterlockedCompareExchange64(Destination,
        ^

...and a lot more...

最佳答案

您可能需要定义 UNREFERENCED_PARAMETER 宏的 clang 兼容版本。像这样的东西应该对你有帮助:https://web.archive.org/web/20130425151054/http://sourcefrog.net/weblog/software/languages/C/unused.html

此外,似乎 LONGLONG 类型被 clang 定义为 double,并且您不能对 float 进行二进制算术运算(and、or、not 等)。您需要确保将其定义为正确的整数类型。

在一定程度上取决于 windows.h、winbase.h 和 winnt.h 的结构,您可以制作自己的包装器,使其获得正确的定义以完成此过程。否则,尝试找到与 gcc 兼容的 windows.h 版本,并使用它。 Clang 应该与之兼容。

祝你好运!

关于c - Windows.h 和 clang (LLVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3403096/

相关文章:

c - 为什么 Clang 不会针对不兼容的转换生成任何警告?

c - : wasm validation error: at offset 8: binary version 0x1 does not match expected version 0xd index. html:31:24

c - 在 C 项目中共享 "Char * "

c - Intel Phi 上的 MKL 性能

ios - xcode llvm 5.0错误没有这样的文件或目录

ios - .framework 和 .a 中的重复符号

c - 数独检查器 : Accessing 3x3 subgrid in C

iphone - 预编译 prefix.pch 时出现奇怪的编译器警告

ios - 链接器命令失败,退出代码为1

c++ - Clang 如何编译模板实例化?