我正在尝试使用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...
Run Code Online (Sandbox Code Playgroud)
您可能需要定义 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 的结构,您也许能够制作自己的包装器,以获取正确的定义来完成此传递。否则,尝试找到 Windows.h 的 gcc 兼容版本,并使用它。Clang 应该兼容它。
祝你好运!