Me pregunto qué hace la -fpermissive
bandera en el compilador g ++. Estoy obteniendo:
error: tomando dirección de temporal [-fpermissive]
que puedo resolver dando la -fpermissive
bandera al compilador.
EDITAR : ¡Acabo de encontrar lo que estaba causando la parte de error de dirección temporal! Voy a arreglar esa parte ahora mismo.
c++
gcc
compiler-options
mmirzadeh
fuente
fuente
La
-fpermissive
bandera hace que el compilador informe algunas cosas que en realidad son errores (pero algunos compiladores lo permiten) como advertencias, para permitir que el código se compile incluso si no se ajusta a las reglas del lenguaje. Realmente debería solucionar el problema subyacente. Publique la muestra de código compilable más pequeña que demuestre el problema.fuente
Cuando ha escrito algo que no está permitido por el estándar del lenguaje (y por lo tanto no puede ser un comportamiento bien definido, lo cual es razón suficiente para no hacerlo) pero sucede que se asigna a algún tipo de ejecutable si se alimenta ingenuamente a el motor de compilación,
-fpermissive
lo hará en lugar de detenerse con este mensaje de error. En algunos casos, el programa se comportará exactamente como lo pretendía originalmente, pero definitivamente no debe confiar en él a menos que tenga alguna razón muy especial para no usar otra solución.fuente
Si desea un caso de uso del mundo real para esto, intente compilar una versión muy antigua de X Windows, digamos, XFree86 o XOrg de aproximadamente 2004, alrededor de la división, usando una versión "moderna" (tos) de gcc , como 4.9.3.
Notará que la compilación CFLAGS especifica tanto "-ansi" como "-pedantic". En teoría, esto significa "explotar si algo, aunque sea levemente, viola las especificaciones del idioma". En la práctica, la serie 3.x de gcc no captó mucho de ese tipo de cosas, y construirlo con 4.9.3 dejará un agujero humeante en el suelo a menos que establezca CFLAGS y BOOTSTRAPCFLAGS en "-fpermissive".
Usando esa bandera, la mayoría de esos archivos C realmente se construirán, dejándolo libre para pasar a los restos dependientes de la versión que generará el lexer. =]
fuente