是否有GCC pragma指令可以停止、中断或中止编译过程?
我正在使用GCC 4.1,但我希望该pragma也可在GCC 3.x版本中使用。
是否有GCC pragma指令可以停止、中断或中止编译过程?
我正在使用GCC 4.1,但我希望该pragma也可在GCC 3.x版本中使用。
你可能想要使用#error
:
$ cd /tmp
$ g++ -Wall -DGoOn -o stopthis stopthis.cpp
$ ./stopthis
Hello, world
$ g++ -Wall -o stopthis stopthis.cpp
stopthis.cpp:7:6: error: #error I had enough
#include <iostream>
int main(void) {
std::cout << "Hello, world\n";
#ifndef GoOn
#error I had enough
#endif
return 0;
}
#error
不能在宏内部使用,尽管问题模糊不清。 - ideasman42我不知道#pragma
,但是#error
应该可以实现你需要的功能:
#error Failing compilation
如果出现错误,它将以“编译失败”为错误信息终止编译。
这有效:
#include <stophere>
当 GCC 找不到包含文件时会停止编译。如果不支持 C++14,我希望GCC也停止编译。
#if __cplusplus<201300L
#error need g++14
#include <stophere>
#endif
通常情况下,#error
足以满足需求(而且是可移植的),但有时您需要使用 pragma
,特别是当您想在宏中可选地导致错误时。
以下是一个示例用法,依赖于 C11's 的 _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 "my message"
但这不是标准的。
另一种选择是使用static_assert
:
#if defined(_MSC_VER) && _MSC_VER < 1916
static_assert(false, "MSVC supported versions are 1916 and later");
#endif