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.

30
gcc
demandé sur Sean A.O. Harney 2010-01-24 01:15:37

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$
43
répondu Dirk Eddelbuettel 2010-01-23 22:23:57

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"

16
répondu Michael 2014-01-08 00:58:51

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)
6
répondu ideasman42 2014-08-01 10:24:42

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 
4
répondu mosh 2017-08-13 13:58:15
#pragma GCC error "error message"

Https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html

2
répondu Leo 2015-01-10 22:35:47

Vous pouvez utiliser :

#pragma GCC error "my message"

Mais ce n'est pas standard.

1
répondu Klevh 2017-09-10 10:08:53