2010-01-23 108 views
25

是否有GCC編譯指示會停止,暫停或中止編譯過程?GCC#pragma停止編譯

我正在使用gcc 4.1,但希望該編譯指示可以在gcc 3.x版本上使用。

+1

如果您告訴我們爲什麼要編譯停止,我們可能會提供更好的答案。 – Michael 2010-01-23 22:22:29

+0

對GCC 3-4.1的約束是否仍然相關? – ideasman42 2016-12-31 02:23:02

回答

38

你可能想#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$ 
+0

這裏的一個限制是'#error'不能在宏內部使用,儘管這個問題在目的上是模糊的。 – ideasman42 2014-08-01 10:03:11

+3

我也這麼認爲,但是我的GCC(4.9)沒有停止出錯,它繼續,顯然它不能編譯,但它不會停止,這是一個錯誤還是可以確認? – 2016-01-15 23:53:45

15

我不知道一個#pragma,但#error應該做你想要什麼:

#error Failing compilation 

將終止與錯誤信息彙編「失敗彙編」

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) 
1

這種工作原理:當它不能找到包含文件

#include <stophere> 

GCC停止。如果C14不受支持,我希望gcc停止。

#if __cplusplus<201300L 
    #error need g++14 
    #include <stophere> 
#endif 
0

您可以使用:

#pragma GCC error "my message" 

但它不是標準。