Существует ли директива прагмы GCC, которая остановит, остановит или прервет процесс компиляции?
Я использую gcc 4.1, но хочу, чтобы прагма была доступна также в версиях gcc 3.x.
Существует ли директива прагмы GCC, которая остановит, остановит или прервет процесс компиляции?
Я использую gcc 4.1, но хочу, чтобы прагма была доступна также в версиях gcc 3.x.
Вероятно, вы хотите #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$
Я не знаю о #pragma
, но #error
должен делать то, что вы хотите:
#error Failing compilation
Прекратит компиляцию с сообщением об ошибке "Неудачная компиляция"
в то время как обычно #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)
#pragma GCC error "error message"
Это работает:
#include <stophere>
gcc останавливается, когда он не может найти файл include. Я хотел, чтобы gcc остановился, если C14 не поддерживался.
#if __cplusplus<201300L
#error need g++14
#include <stophere>
#endif
Вы можете использовать:
#pragma GCC error "my message"
Но это не стандарт.