सबसे आसान तरीका का उपयोग कर अजगर सी एक्सटेंशन में जीआईएल हेरफेर करने के लिए अजगर सी विस्तार में जीसीसी चेतावनी से बचने के लिए कैसे मैक्रो प्रदान की उपयोग करने के लिए है मेरे कोड का बड़ा हिस्सा, लेकिन कोड की छोटी बिट्स के लिए इसे फिर से पकड़ना जिसकी आवश्यकता है।जब Py_BEGIN_ALLOW_THREADS
समस्या है जब मैं जीसीसी के साथ इस संकलन, मैं मिलता है:
ext/engine.c:548: warning: '_save' might be used uninitialized in this function
क्योंकि Py_BEGIN_ALLOW_THREADS इस तरह परिभाषित किया गया है:
#define Py_BEGIN_ALLOW_THREADS { \
PyThreadState *_save; \
_save = PyEval_SaveThread();
तो, तीन प्रश्न:
- है जीसीसी की चेतावनी को दबाने के लिए संभव है,
- करता है किसी को भी कोई विचार है कि जीसीसी
_save
का उपयोग क्यों नहीं किया जा सकता है, क्योंकि इसे इसकी घोषणा के तुरंत बाद सौंपा गया है, और - समस्या से बचने के लिए मैक्रो को एक कथन में घोषित करने और प्रारंभ करने के लिए क्यों परिभाषित नहीं किया गया है?
(अंतिम दो वास्तव में केवल अपनी जिज्ञासा के लिए हैं)।
मैं मैक्रोज़ का उपयोग न करके और इसे स्वयं कर कर इस मुद्दे से बच सकता हूं, लेकिन मैं नहीं चाहता।
मैं इस लाइन पर केवल एक चेतावनी को अक्षम करने के लिए एक बहुत ही स्थानीय तरीके की उम्मीद कर रहा था। मैं सभी अनियमित चेतावनियों को अक्षम नहीं करना चाहूंगा। –
यदि आप केवल इस चेतावनी को रोकना चाहते हैं, तो '_save' को शून्य सूचक में प्रारंभ करने के लिए 'PyEval_SaveThread()' को कॉल करने से पहले एक पंक्ति जोड़ें (ऊपर अपडेट किए गए उत्तर को देखें) –