2011-09-08 4 views
36

documentation for GCC's __attribute__((...)) syntax इंगित करता है कि विशेषताओं को डबल ब्रांड्स से घिरा होना चाहिए, लेकिन इस डिजाइन निर्णय के लिए तर्क नहीं देता है।जीसीसी का __attribute __ ((...)) वाक्यविन्यास डबल ब्रांड्स का उपयोग क्यों करता है?

जीसीसी के डिजाइनरों को इसकी आवश्यकता के लिए क्या व्यावहारिक कारण होगा? क्या प्रीप्रोसेसर के डबल ब्रांड्स के हैंडलिंग के साथ इसका कोई संबंध नहीं है?

उत्तर

37

विभिन्न कंपाइलर के लिए इसे खत्म करना आसान बनाने के लिए। आप पोर्टेबल कोड है, तो आप अन्य compilers के लिए उन्हें हटाने के लिए है, तो आप

#ifndef __GNUC__ 
#define __attribute__(x) 
#endif 

कर समस्या यह है कि गुण तर्क के विभिन्न संख्या है और आप एक __attribute__ घोषणा में अनेक विशेषताएं गठजोड़ कर सकते हैं, लेकिन सी ही शुरू की है सी 99 में वैराडिक मैक्रोज़। डबल कोष्ठक के साथ उपर्युक्त परिभाषा को वैरैडिक मैक्रोज़ की आवश्यकता नहीं है।

15

शायद यह विचार यह है कि आप एक साधारण मैक्रो घोषित कर सकते हैं जो किसी अन्य सी और सी ++ कंपाइलर में इन सभी को अनदेखा करने में मदद करता है। यदि आपके पास ब्रांड्स की दूसरी जोड़ी नहीं होगी, तो मैक्रो आवश्यक रूप से ... के साथ होगा। तो ऐसे कंपाइलरों के लिए जो इसका समर्थन नहीं करते हैं, आप खराब हो जाएंगे।

संपादित करें: इस वाक्य के साथ यह बस

#ifdef __GNUC__ 
# define attribute(X) __attribute__(X) 
#else 
# define attribute(X) 
#endif 

की तरह लग सकता है और फिर आप अपने समारोह घोषणाओं, उदा attribute का प्रयोग करेंगे

+2

यह दोहरा अंडरस्कोर से शुरू होने वाले मैक्रो नाम को परिभाषित करने के लिए अपरिभाषित व्यवहार है। – dreamlax

+0

@dreamlax, मुझे पता है। मैंने यह नहीं कहा कि किसी को ऐसा करना चाहिए, लेकिन मुझे लगता है कि इसके पीछे विचार क्या था। –

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