2010-08-04 2 views
5

Я пытаюсь скомпилировать небольшой проект, который включает windows.h, используя компилятор clang. К сожалению, 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

Возможно, вам необходимо определить совместимую с clang версию макроса UNREFERENCED_PARAMETER. Что-то вроде этого должно помочь вам в пути: http://sourcefrog.net/weblog/software/languages/C/unused.html

Также кажется, что тип LONGLONG определяется как double для clang, и вы не можете выполнять двоичную арифметику (и, или, не и т. Д.) На поплавках. Вы должны убедиться, что это типизировано как правильный целочисленный тип.

В зависимости от того, как windows.h, winbase.h и winnt.h структурированы, вы можете сделать свою собственную оболочку, которая получает правильное определение, чтобы сделать этот пропуск. В противном случае попытайтесь найти gcc-совместимую версию windows.h и используйте это. Кланг должен быть совместим с ним.

Удачи вам!

+0

Это громоздкий для моего маленького проекта. Но спасибо за вашу помощь! – mort

Смежные вопросы