GCC #pragma, чтобы остановить компиляцию - PullRequest
31 голосов
/ 24 января 2010

Существует ли прагма-директива GCC, которая остановит, остановит или прервет процесс компиляции?

Я использую gcc 4.1, но хотел бы, чтобы прагма была доступна и в версиях gcc 3.x.

Ответы [ 6 ]

46 голосов
/ 24 января 2010

Вы, вероятно, хотите #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$
16 голосов
/ 24 января 2010

Я не знаю о #pragma, но #error должен делать то, что вы хотите:

#error Failing compilation

Завершит компиляцию с сообщением об ошибке «Failing compilation»

6 голосов
/ 13 августа 2017

Это работает:

 #include <stophere>

gcc останавливается, когда не может найти включаемый файл. Я хотел, чтобы gcc остановился, если C14 не поддерживается.

 #if __cplusplus<201300L
  #error need g++14
  #include <stophere>
#endif 
6 голосов
/ 01 августа 2014

в то время как обычно #error является достаточным (и переносимым), бывают случаи, когда вы хотите использовать pragma, а именно, когда вы хотите дополнительно вызвать ошибку внутри макроса.

Вот пример использования, который зависит от C11 _Generic и _Pragma

Этот пример гарантирует, что var не является int * или short *, но не const int * во время компиляции.

Пример:

#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)
2 голосов
/ 11 января 2015
#pragma GCC error "error message"

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

1 голос
/ 10 сентября 2017

Вы можете использовать:

#pragma GCC error "my message"

Но это не стандарт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...