2010-08-04 22 views
5

Próbuję skompilować mały projekt, który zawiera Windows.h za pomocą kompilatora clang. Niestety, clang powoduje błędy, których nie jestem w stanie rozwiązać. Co powoduje te błędy? Czy clang nie obsługuje wszystkich wymaganych funkcji, czy brakuje mi czegoś?Windows.h i 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... 

Odpowiedz

3

Prawdopodobnie trzeba określić brzękiem kompatybilnych wersji makro UNREFERENCED_PARAMETER. Coś jak to powinno pomóc na drodze: http://sourcefrog.net/weblog/software/languages/C/unused.html

Ponadto, wydaje się, że typ longlong jest zdefiniowany jako podwójny dla brzękiem, i nie można zrobić arytmetyki binarnej (i, lub, nie etc) na pływaków. Musisz upewnić się, że jest to typedefed jako właściwy typ liczby całkowitej.

Zależnie od tego, jak zbudowany jest system windows.h, winbase.h i winnt.h, być może uda Ci się stworzyć własne opakowanie, które zostanie zdefiniowane po prawej stronie, aby je przekazać. W przeciwnym razie spróbuj znaleźć wersję windows.h kompatybilną z gcc i użyj tego. Clang powinien być z nim kompatybilny.

Powodzenia!

+0

To jest uciążliwe dla mojego małego projektu. Ale dzięki za pomoc! – mort