GCC 7.3 - 7. Pragmas

7 प्राग्म




gcc

7 प्राग्म

' #Pragma ' निर्देश संकलक द्वारा अतिरिक्त जानकारी प्रदान करने के लिए C मानक द्वारा निर्दिष्ट विधि है, जो भाषा में स्वयं को व्यक्त करने से परे है। सी मानक द्वारा निर्दिष्ट इस निर्देश के रूपों (आमतौर पर प्रैग्मस के रूप में जाना जाता है) को एसटीडीसी के साथ उपसर्ग किया STDC । एसी कंपाइलर किसी भी अर्थ को संलग्न करने के लिए स्वतंत्र है जो इसे अन्य प्रागमस को पसंद करता है। सभी जीएनयू-परिभाषित, समर्थित प्रागमस को GCC उपसर्ग दिया गया है।

C99 ने _Pragma ऑपरेटर को पेश किया। यह सुविधा ' #pragma ' के साथ एक बड़ी समस्या को संबोधित करती है: एक निर्देश होने के नाते, यह मैक्रो विस्तार के परिणाम के रूप में उत्पादित नहीं किया जा सकता है। _Pragma एक ऑपरेटर है, _Pragma sizeof बहुत अधिक है या defined , और इसे मैक्रो में एम्बेड किया जा सकता है।

इसका वाक्य _Pragma ( string-literal ) विन्यास _Pragma ( string-literal ) , जहाँ स्ट्रिंग-शाब्दिक या तो एक सामान्य या विस्तृत-वर्ण स्ट्रिंग शाब्दिक हो सकता है। यह एक '' '' और ' ' '' ' ' ' ' '' के साथ सभी '' \ _ '' की जगह ले लेता है। इसके बाद परिणाम को संसाधित किया जाता है जैसे कि यह ' #pragma ' निर्देश के दाहिने हाथ के रूप में प्रकट हुआ था। उदाहरण के लिए,

_Pragma ("GCC dependency \"parse.y\"")

#pragma GCC dependency "parse.y" के समान प्रभाव है। उदाहरण के लिए मैक्रो का उपयोग करके एक ही प्रभाव प्राप्त किया जा सकता है

#define DO_PRAGMA(x) _Pragma (#x)
DO_PRAGMA (GCC dependency "parse.y")

मानक स्पष्ट नहीं है कि कोई _Pragma ऑपरेटर कहाँ दिखाई दे सकता है। प्रीप्रोसेसर इसे ' # एफ़ ' जैसे प्रीप्रोसेसिंग सशर्त निर्देश के भीतर स्वीकार नहीं करता है। सुरक्षित होने के लिए, आप शायद इसे ' #define ' के अलावा अन्य निर्देशों से बाहर रख रहे हैं, और इसे स्वयं की एक पंक्ति में रख रहे हैं।

यह मैनुअल प्रागैमस का दस्तावेज है जो प्रीप्रोसेसर के लिए सार्थक है। अन्य व्यावहारिक सी या सी ++ संकलक के लिए सार्थक हैं। वे जीसीसी मैनुअल में प्रलेखित हैं।

जीसीसी प्लगइन्स अपने स्वयं के प्रचार प्रदान कर सकते हैं।

#pragma GCC dependency

#pragma GCC dependency आपको वर्तमान फ़ाइल और किसी अन्य फ़ाइल की सापेक्ष तिथियों की जांच करने की अनुमति देती है। यदि अन्य फ़ाइल वर्तमान फ़ाइल से अधिक हाल ही में है, तो एक चेतावनी जारी की जाती है। यह उपयोगी है यदि वर्तमान फ़ाइल दूसरी फ़ाइल से ली गई है, और पुनर्जीवित होनी चाहिए। अन्य फ़ाइल को सामान्य शामिल खोज पथ का उपयोग करने के लिए खोजा गया है। चेतावनी संदेश में अधिक जानकारी देने के लिए वैकल्पिक अनुगामी पाठ का उपयोग किया जा सकता है।

#pragma GCC dependency "parse.y"
#pragma GCC dependency "/usr/include/time.h" rerun fixincludes
#pragma GCC poison

कभी-कभी, एक पहचानकर्ता होता है जिसे आप अपने कार्यक्रम से पूरी तरह से हटाना चाहते हैं, और सुनिश्चित करें कि यह कभी भी वापस नहीं आता। #pragma GCC poison के बाद #pragma GCC poison की पहचान करने वालों की एक सूची है। यदि निर्देश के बाद उनमें से कोई भी पहचानकर्ता स्रोत में कहीं भी दिखाई देता है, तो यह एक कठिन त्रुटि है। उदाहरण के लिए,

#pragma GCC poison printf sprintf fprintf
sprintf(some_string, "hello");

एक त्रुटि पैदा करेगा।

यदि एक जहर पहचानकर्ता एक मैक्रो के विस्तार के हिस्से के रूप में प्रकट होता है जिसे पहचानकर्ता को जहर देने से पहले परिभाषित किया गया था, तो यह एक त्रुटि का कारण नहीं होगा। यह आपको एक पहचानकर्ता को मैक्रो को परिभाषित करने वाले सिस्टम हेडर के बारे में चिंता किए बिना जहर देता है जो इसका उपयोग करते हैं।

उदाहरण के लिए,

#define strrchr rindex
#pragma GCC poison rindex
strrchr(some_string, 'h');

कोई त्रुटि उत्पन्न नहीं करेगा।

#pragma GCC system_header

यह तर्क कोई तर्क नहीं लेता है। यह वर्तमान फ़ाइल के बाकी कोड को इस तरह से व्यवहार करता है जैसे कि वह सिस्टम हेडर से आया हो। सिस्टम हेडर देखें।

#pragma GCC warning
#pragma GCC error

#pragma GCC warning "message" प्रीप्रोसेसर को पाठ ' संदेश ' के साथ चेतावनी निदान जारी करने का कारण बनता है। प्रज्ञा में निहित संदेश एक एकल स्ट्रिंग शाब्दिक होना चाहिए। इसी तरह, #pragma GCC error "message" एक त्रुटि संदेश जारी करता है। ' #Warning ' और ' #error ' निर्देशों के विपरीत, ये प्रैग्मेंट्स ' _Pragma ' का उपयोग करके प्रीप्रोसेसर macros में एम्बेड किए जा सकते हैं।

अगला: अन्य निर्देश , पिछला: लाइन नियंत्रण , ऊपर: Top [ Contents ] [ Index ]