2010-08-04 32 views
5

Tôi đang cố gắng biên dịch một dự án nhỏ bao gồm windows.h bằng trình biên dịch clang. Thật không may, clang sản xuất một số lỗi tôi không thể giải quyết. Điều gì gây ra những lỗi này? Không kêu vang không hỗ trợ tất cả các tính năng cần thiết, tôi thiếu cái gì?Windows.h và 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... 

Trả lời

3

Có thể bạn cần phải xác định phiên bản tương thích bằng tiếng kêu của macro UNREFERENCED_PARAMETER. Một cái gì đó như thế này sẽ giúp bạn trên đường: http://sourcefrog.net/weblog/software/languages/C/unused.html

Ngoài ra, có vẻ như loại LONGLONG được định nghĩa là gấp đôi cho tiếng kêu, và bạn không thể làm số học nhị phân (và, hoặc, không vv) trên phao. Bạn cần phải chắc chắn rằng đây là typedefed như là một loại số nguyên thích hợp.

Tùy thuộc một chút về cách windows.h, winbase.h và winnt.h được cấu trúc bạn có thể tạo trình bao bọc của riêng bạn để có được quyền xác định tại chỗ để thực hiện điều này. Nếu không, hãy thử tìm phiên bản windows.h tương thích với gcc và sử dụng nó. Clang nên tương thích với nó.

Chúc may mắn!

+0

Điều này là cồng kềnh cho dự án nhỏ của tôi. Nhưng cảm ơn sự giúp đỡ của bạn! – mort

Các vấn đề liên quan