2008-11-18 13 views
6

Estoy compilando un código C heredado aquí y hay muchas variables y miembros de estructura llamados "interfaz", pero VC2008 express se queja de esto, ¿sabes cómo desactivar esto?Cómo deshabilitar la palabra clave de la interfaz en Visual C++ Express 2008?

Ya cambié la configuración para compilar el código solo como código C, pero no tiene ningún efecto en esto.

+0

¿Está intentando construir una aplicación nativa o .NET? –

+0

Debe ser nativo. Cambié todas las configuraciones para compilarlo como un nativo, pero no funciona. En realidad, la interfaz no es una palabra clave (es azul en el IDE), pero se define como una estructura de interfaz #define – bcsanches

Respuesta

4

Hacer un

#define interface QQInterface 

antes de su código (por ejemplo. En el archivo de cabecera), de esta manera todos los lugares donde se utiliza la interfaz de palabras clave, los compiladores ve "QQInterface", que no es una palabra clave. Si todo el código incluye esta definición, no obtendrá errores de compilador o enlazador.

+1

En su lugar, es mejor agregar #define a la configuración del proyecto en lugar de un archivo de encabezado. –

+1

Acabo de crear otro encabezado y lo obligué a incluirlo en el proyecto. Pero, descubrí que ms ya hizo esto (#define interface struct).Así que cambié a: interfaz #ifdef interfaz #undef #endif Esto resolvió el problema. – bcsanches

1

"interfaz" a no debe ser una palabra clave en C ni ISO C++. Es es una palabra clave en las Extensiones administradas para C++, así que, supongo, en algún lugar de su configuración todavía le está diciendo que cree código para .NET. Asegúrese de que esté configurado en "Código nativo"

Sin embargo, es muy posible que NO PUEDA configurarlo en la edición Express --- Es solo una suposición, pero es razonable teniendo en cuenta el posicionamiento MS de Express/Standard/Pro ediciones.

ACTUALIZACIÓN: Ignore el último párrafo. MSFT insiste en que puede crear nativa Win32 aplicaciones con VisualC++ Express: http://www.microsoft.com/express/vc/

4

Si usted está tratando de compilar código C razonablemente portátil, podría valer la pena deshabilitar las extensiones de lenguaje Microsoft (/ Za en la línea de comandos, las propiedades de configuración> C/C++> Idioma en VS) y ver si el código se compila en ese momento.

5

El problema es que la interfaz MS #defines a struct para que

interface Name {...} 

se puede utilizar en ++ código COM c. (OBJBASE.H: 199: #define interface __STRUCT__)

Justo después de incluir #undef interface Windows.h ..

0

que se enfrentaron a un problema similar al compilar código C++ que incluye un archivo de cabecera dbus. dado que dbus tiene varias funciones en las que usa "interfaz" como nombre de parámetro I/P, que resulta ser palabra clave C++, recibí el siguiente error: error: expected ',' or '...' before 'struct'.

Cuando probé esto:

#ifdef interface 
#undef interface 
#endif 

se resolvió el problema. No estoy seguro de si usar el enlace dbus C++ hubiera sido mejor. De todos modos, no estaba usando dbus, solo tenía una dependencia remota de uno de los encabezados de dbus, ¡esta solución funcionó bien!

+0

Esto solo funcionará si 'interface' se define como una macro. Si es una palabra clave del compilador, no lo hará. – Mysticial

Cuestiones relacionadas