GCC #pragma停止编译

时间:2010-01-23 22:15:38

标签: gcc

是否存在将停止,暂停或中止编译过程的GCC编译指示?

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

6 个答案:

答案 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"

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

答案 5 :(得分:1)

您可以使用:

#pragma GCC error "my message"

但这不标准。