¿Existe una directiva de pragma de GCC que detendrá, interrumpirá o abortará el proceso de compilación?GCC#pragma para detener la compilación
Estoy usando gcc 4.1 pero quisiera que el pragma también esté disponible en las versiones de gcc 3.x.
¿Existe una directiva de pragma de GCC que detendrá, interrumpirá o abortará el proceso de compilación?GCC#pragma para detener la compilación
Estoy usando gcc 4.1 pero quisiera que el pragma también esté disponible en las versiones de gcc 3.x.
Es posible que desee #error
:
[email protected]:/tmp$ g++ -Wall -DGoOn -o stopthis stopthis.cpp
[email protected]:/tmp$ ./stopthis
Hello, world
[email protected]:/tmp$ g++ -Wall -o stopthis stopthis.cpp
stopthis.cpp:7:6: error: #error I had enough
[email protected]:/tmp$ cat stopthis.cpp
#include <iostream>
int main(void) {
std::cout << "Hello, world\n";
#ifndef GoOn
#error I had enough
#endif
return 0;
}
[email protected]:/tmp$
Una limitación aquí es '# error' no se puede usar dentro de una macro, aunque la pregunta es vaga en cuanto a la finalidad. – ideasman42
Pensé esto también, sin embargo, mi GCC (4.9) no se detiene con un error, continúa, obviamente no se compila pero no se detiene, ¿es esto un error o se puede confirmar? –
No sé acerca de un #pragma
, pero #error
debería hacer lo que quiera:
#error Failing compilation
terminará compilación con el mensaje de error "A falta de compilación"
mientras que normalmente #error
es suficiente (y portátil), hay momentos cuando desee utilizar un pragma
, es decir, cuando desee ocasionalmente causar un error dentro de una macro.
Aquí es un ejemplo de uso que depende de C11 _Generic
y _Pragma
En este ejemplo se asegura var
no es una int *
o una short *
pero no un const int *
en tiempo de compilación.
Ejemplo:
#define MACRO(var) do { \
(void)_Generic(var, \
int *: 0, \
short *: 0, \
const int *: 0 _Pragma("GCC error \"const not allowed\"")); \
\
MACRO_BODY(var); \
} while (0)
#pragma GCC error "error message"
Esto funciona:
#include <stophere>
gcc se detiene cuando no puede encontrar el archivo de inclusión. Quería que gcc se detuviera si C14 no era compatible.
#if __cplusplus<201300L
#error need g++14
#include <stophere>
#endif
que puede utilizar:
#pragma GCC error "my message"
pero no es estándar.
Es posible que podamos brindarle una mejor respuesta si nos dice por qué desea que se detenga la compilación. – Michael
¿Sigue siendo relevante la restricción en GCC 3-4.1? – ideasman42