【问题标题】:Windows.h and clang (LLVM)Windows.h 和 clang (LLVM)
【发布时间】:2010-08-04 06:26:39
【问题描述】:

我正在尝试使用 clang 编译器编译一个包含 windows.h 的小项目。不幸的是,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...

【问题讨论】:

    标签: c llvm clang


    【解决方案1】:

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

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

    根据 windows.h、winbase.h 和 winnt.h 的结构方式,您可能能够制作自己的包装器,该包装器可以获得正确的定义以通过此操作。否则,请尝试找到与 gcc 兼容的 windows.h 版本,然后使用它。 Clang 应该兼容它。

    祝你好运!

    【讨论】:

    • 这对我的小项目来说太麻烦了。不过感谢您的帮助!
    • @EyadMohammedOsama,谢谢,更新了存档版本的链接。
    猜你喜欢
    • 2014-03-11
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2010-12-05
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多