GCC#pragma停止编译

GCC#pragma停止编译,gcc,Gcc,是否有一个GCC pragma指令将停止、停止或中止编译过程 我正在使用gcc 4.1,但希望在gcc 3.x版本上也能使用pragma。我不知道有什么pragma,但是\error应该满足您的要求: #error Failing compilation 将终止编译,并显示错误消息“编译失败”您可能需要\error: edd@ron:/tmp$ g++ -Wall -DGoOn -o stopthis stopthis.cpp edd@ron:/tmp$ ./stopthis Hello, w

是否有一个GCC pragma指令将停止、停止或中止编译过程


我正在使用gcc 4.1,但希望在gcc 3.x版本上也能使用pragma。

我不知道有什么pragma
,但是
\error
应该满足您的要求:

#error Failing compilation
将终止编译,并显示错误消息“编译失败”

您可能需要
\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$
edd@ron:/tmp$g++-Wall-DGoOn-o stopthis stopthis.cpp
edd@ron:/tmp$。/停止此操作
你好,世界
edd@ron:/tmp$g++-Wall-o stopthis stopthis.cpp
停止这个。cpp:7:6:error:#error我受够了
edd@ron:/tmp$cat stopthis.cpp
#包括
内部主(空){
std::cout虽然通常
#error
是足够的(并且是可移植的),但有时您需要使用
pragma
,也就是说,您希望在宏中选择性地导致错误

下面是一个使用示例,它取决于C11的
\u Generic
\u 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)

这项工作:

 #include <stophere>
#包括
gcc在找不到包含文件时停止。我希望gcc在C14不受支持时停止

 #if __cplusplus<201300L
  #error need g++14
  #include <stophere>
#endif 
#如果uu cplusplus您可以使用:

#pragma GCC error "my message"

但是它不是标准的。

如果您告诉我们为什么要停止编译,我们可能会提供更好的答案。GCC 3-4.1的约束仍然相关吗?这里的限制是
#error
不能在宏中使用,尽管问题的目的很模糊。我也认为这一点,但是我的GCC(4.9)它不会因为错误而停止,它会继续,显然它不会编译但不会停止,这是一个bug还是你能确认吗?
#pragma GCC error "my message"