क्या कोई जीसीसी प्रज्ञा निर्देश है जो संकलन प्रक्रिया को रोक देगा, रोक देगा या रोक देगा?जीसीसी #pragma संकलन को रोकने के लिए
मैं जीसीसी 4.1 का उपयोग कर रहा हूं लेकिन चाहते हैं कि प्रामा जीसीसी 3.x संस्करणों पर भी उपलब्ध हो।
क्या कोई जीसीसी प्रज्ञा निर्देश है जो संकलन प्रक्रिया को रोक देगा, रोक देगा या रोक देगा?जीसीसी #pragma संकलन को रोकने के लिए
मैं जीसीसी 4.1 का उपयोग कर रहा हूं लेकिन चाहते हैं कि प्रामा जीसीसी 3.x संस्करणों पर भी उपलब्ध हो।
आप शायद #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$
यहां एक सीमा एक मैक्रो के अंदर '# त्रुटि' का उपयोग नहीं किया जा सकता है, हालांकि सवाल उद्देश्य के लिए अस्पष्ट है। – ideasman42
मैंने यह भी सोचा, हालांकि मेरा जीसीसी (4.9) एक त्रुटि से नहीं रोक रहा है, यह चलता है, जाहिर है कि यह संकलित नहीं होता है लेकिन यह रोक नहीं है, क्या यह एक बग है या आप इसकी पुष्टि कर सकते हैं? –
मैं एक #pragma
के बारे में पता नहीं है, लेकिन #error
आप क्या चाहते हैं करना चाहिए:
#error Failing compilation
त्रुटि संदेश के साथ संकलन को समाप्त कर देगा "संकलन असफल"
जबकि आम तौर पर #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)
#pragma GCC error "error message"
यह काम करता है:
#include <stophere>
जीसीसी बंद हो जाता है जब यह फ़ाइल को शामिल नहीं मिल रहा। अगर सी 14 समर्थित नहीं था तो मैं जीसीसी को रोकना चाहता था।
#if __cplusplus<201300L
#error need g++14
#include <stophere>
#endif
आप उपयोग कर सकते हैं:
#pragma GCC error "my message"
लेकिन यह मानक नहीं है।
यदि आप हमें बताते हैं कि संकलन रोकने के लिए हम आपको एक बेहतर उत्तर प्रदान करने में सक्षम हो सकते हैं। – Michael
क्या जीसीसी 3-4.1 पर बाधा अभी भी प्रासंगिक है? – ideasman42