2010-08-04 11 views
5

Estoy intentando compilar un pequeño proyecto que incluye windows.h usando el compilador clang. Desafortunadamente, clang produce algunos errores que no puedo resolver. ¿Qué está causando estos errores? ¿No resiste el clang todas las funciones requeridas? ¿Me falta algo?Windows.h y 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... 

Respuesta

3

es probable que tenga que definir una versión compatible con sonido metálico de la macro UNREFERENCED_PARAMETER. Algo como esto debería ayudarte en el camino: http://sourcefrog.net/weblog/software/languages/C/unused.html

Además, parece que el tipo LONGLONG se define como doble para clang, y no se puede hacer aritmética binaria (y, o, no, etc.) en los flotadores. Debes asegurarte de que esto se defina como tipo entero correcto.

Dependiendo un poco de cómo se estructuran windows.h, winbase.hy winnt.h, es posible que pueda crear su propio contenedor que tenga la definición correcta en su lugar para poder aprobarlo. De lo contrario, intente encontrar una versión de windows.h compatible con gcc y use eso. Clang debería ser compatible con eso.

¡Buena suerte!

+0

Esto es engorroso para mi pequeño proyecto. ¡De cualquier modo gracias por su ayuda! – mort

Cuestiones relacionadas