是否存在将停止,暂停或中止编译过程的GCC编译指示?
我正在使用gcc 4.1,但希望pragma也可以在gcc 3.x版本上使用。
答案 0 :(得分:46)
您可能需要#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$
答案 1 :(得分:16)
我不知道#pragma
,但#error
应该做你想做的事情:
#error Failing compilation
将使用错误消息“Failing compilation”终止编译
答案 2 :(得分:6)
虽然通常#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)
答案 3 :(得分:6)
This works:
#include <stophere>
gcc stops when it can't find the include file. I wanted gcc to stop if C14 was not supported.
#if __cplusplus<201300L
#error need g++14
#include <stophere>
#endif
答案 4 :(得分:2)
#pragma GCC error "error message"
答案 5 :(得分:1)
您可以使用:
#pragma GCC error "my message"
但这不标准。