2009-09-08 17 views
5

En el siguiente ejemplo:error utilizando restringir la palabra clave

void foo (double *ptr) 
{ 
    const double * restrict const restr_ptr=ptr; 
} 

consigo este error:

error: expected a ";"  const double * restrict const restr_ptr=ptr; 
                ^

compilo con -std = c99, con gcc 3.4

alguna idea?

+0

Compila para mí muy bien. ¿Tienes una versión reciente de GCC? –

+0

Ese código compila para mí en Sun C 5.8 y GCC 3.4.6. Comeau en línea solo se queja de la declaración de variable no utilizada. Proporcione más detalles sobre su entorno. –

+0

... pero Comeau estaba en modo C99. Cuando lo pongo en modo C++, se queja de lo mismo. –

Respuesta

9

En C++, restrict no es una palabra clave (excepto Microsoft extensions). No significa lo que hace en C. Parece que trataste de aplicar el modo C99 a tu compilador C++. Use un compilador de C para compilar el código C y use un compilador de C++ para compilar C++. Ninguno de los dos idiomas es un subconjunto del otro.

+0

Agh, eso explica. No puedo compilar usando el compilador de C ya que utilizo las características de C++ donde se usa restringir. ¿Cuál es la solución, si hay alguna? – vehomzzz

+4

Prueba '__restrict'. Parece que es una extensión de GCC y una extensión de Microsoft. Considere la posibilidad de abstraerlo con una macro para que los compiladores que no son de GCC ni MS no lo ahoguen. –

+0

__restrict hizo el truco .. gracias – vehomzzz

Cuestiones relacionadas