2010-08-04 33 views
5

Ben clang derleyici kullanarak windows.h içeren küçük bir proje derlemeye çalışıyorum. Ne yazık ki, clang çözemediğim bazı hatalar üretir. Bu hatalara neden olan nedir? Clang gerekli tüm özellikleri desteklemiyor mu, bir şey özlüyor muyum?Windows.h ve 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... 

cevap

3

Büyük olasılıkla, UNREFERENCED_PARAMETER makrosunun bir argo uyumlu sürümünü tanımlamanız gerekir. Böyle bir şey size yardımcı olmalıdır:

Ayrıca, LONGLONG türünün clang için çift olarak tanımlandığı gibi görünmüyor ve floatlarda ikili aritmetik (ve/veya değil) yapamazsınız. Bunun uygun bir tamsayı türü olarak yazıldığından emin olmanız gerekir.

Pencereler.h, winbase.h ve winnt.h'nin nasıl yapılandırıldığına bağlı olarak, bu geçişi gerçekleştirmek için doğru tanımlamaları yapan kendi sarmalayıcılarınızı oluşturabilirsiniz. Aksi takdirde, windows.h'nin gcc uyumlu bir sürümünü bulmaya çalışın ve bunu kullanın. Clang bununla uyumlu olmalıdır.

İyi şanslar!

+0

Bu benim küçük projem için hantal olmaktır. Ama yardımın için teşekkürler! – mort