GCC #pragma pour arrêter la compilation
Existe-t-il une directive GCC pragma qui arrêtera,arrêtera ou abandonnera le processus de compilation?
J'utilise gcc 4.1 mais je voudrais que le pragma soit disponible sur gcc 3.x versions également.
6 réponses
Vous voulez probablement #error
:
edd@ron:/tmp$ g++ -Wall -DGoOn -o stopthis stopthis.cpp
edd@ron:/tmp$ ./stopthis
Hello, world
edd@ron:/tmp$ g++ -Wall -o stopthis stopthis.cpp
stopthis.cpp:7:6: error: #error I had enough
edd@ron:/tmp$ cat stopthis.cpp
#include <iostream>
int main(void) {
std::cout << "Hello, world\n";
#ifndef GoOn
#error I had enough
#endif
return 0;
}
edd@ron:/tmp$
Je ne connais pas un #pragma
, mais #error
devrait faire ce que vous voulez:
#error Failing compilation
Terminera la compilation avec le message d'erreur "Failing compilation"
Alors que généralement #error
est suffisant (et portable), il y a des moments où vous voulez utiliser un pragma
, à savoir, lorsque vous voulez éventuellement provoquer une erreur dans une macro.
Voici un exemple d'utilisation qui dépend C11 s _Generic
et _Pragma
Cet exemple assure var
n'est pas int *
ou short *
, mais pas un const int *
au moment de la compilation.
Exemple:
#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)
Cela fonctionne:
#include <stophere>
Gcc s'arrête quand il ne trouve pas le fichier include. Je voulais que gcc s'arrête si C14 n'était pas supporté.
#if __cplusplus<201300L
#error need g++14
#include <stophere>
#endif
Vous pouvez utiliser :
#pragma GCC error "my message"
Mais ce n'est pas standard.