2010-01-23 15 views
25

क्या कोई जीसीसी प्रज्ञा निर्देश है जो संकलन प्रक्रिया को रोक देगा, रोक देगा या रोक देगा?जीसीसी #pragma संकलन को रोकने के लिए

मैं जीसीसी 4.1 का उपयोग कर रहा हूं लेकिन चाहते हैं कि प्रामा जीसीसी 3.x संस्करणों पर भी उपलब्ध हो।

+1

यदि आप हमें बताते हैं कि संकलन रोकने के लिए हम आपको एक बेहतर उत्तर प्रदान करने में सक्षम हो सकते हैं। – Michael

+0

क्या जीसीसी 3-4.1 पर बाधा अभी भी प्रासंगिक है? – ideasman42

उत्तर

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

यहां एक सीमा एक मैक्रो के अंदर '# त्रुटि' का उपयोग नहीं किया जा सकता है, हालांकि सवाल उद्देश्य के लिए अस्पष्ट है। – ideasman42

+3

मैंने यह भी सोचा, हालांकि मेरा जीसीसी (4.9) एक त्रुटि से नहीं रोक रहा है, यह चलता है, जाहिर है कि यह संकलित नहीं होता है लेकिन यह रोक नहीं है, क्या यह एक बग है या आप इसकी पुष्टि कर सकते हैं? –

15

मैं एक #pragma के बारे में पता नहीं है, लेकिन #error आप क्या चाहते हैं करना चाहिए:

#error Failing compilation 

त्रुटि संदेश के साथ संकलन को समाप्त कर देगा "संकलन असफल"

6

जबकि आम तौर पर #error पर्याप्त (और पोर्टेबल) है, कई बार जब आप pragma का उपयोग करना चाहते हैं, अर्थात्, जब आप वैकल्पिक रूप से मैक्रो के भीतर त्रुटि का कारण बनना चाहते हैं।

यहाँ एक उदाहरण उपयोग जो यह सुनिश्चित करता है var सी 11 के _Generic और _Pragma

इस उदाहरण पर निर्भर करता है एक 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> 

जीसीसी बंद हो जाता है जब यह फ़ाइल को शामिल नहीं मिल रहा। अगर सी 14 समर्थित नहीं था तो मैं जीसीसी को रोकना चाहता था।

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

आप उपयोग कर सकते हैं:

#pragma GCC error "my message" 

लेकिन यह मानक नहीं है।

संबंधित मुद्दे