2010-08-04 3 views
5

나는 clang 컴파일러를 사용하여 windows.h를 포함하는 작은 프로젝트를 컴파일하려고합니다. 불행히도 clang은 내가 해결할 수없는 오류를 생성합니다. 이 오류의 원인은 무엇입니까? clang이 필요한 기능을 모두 지원하지는 않습니까?Windows.h 및 clang (LLVM)

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... 

답변

3

아마도 UNREFERENCED_PARAMETER 매크로의 clang 호환 버전을 정의해야합니다. 이런 식으로 도움이 될 것입니다.

또한 LONGGLONG은 clang에 대해 double로 정의 된 것으로 보이며 float에 대해서는 이진 산술 (및 또는 등)을 수행 할 수 없습니다. 적절한 정수 유형으로 typedefed되었는지 확인해야합니다.

windows.h, winbase.h 및 winnt.h가 어떻게 구조화되어 있는지에 따라이 패스를 만들기 위해 적절한 위치를 정의하는 자체 래퍼를 만들 수 있습니다. 그렇지 않으면 windows.h의 gcc 호환 버전을 찾아 사용하십시오. Clang은 호환 가능해야합니다.

행운을 빈다.

+0

이것은 내 작은 프로젝트에서 성 가시다. 그러나 당신의 도움에 감사드립니다! – mort

관련 문제