2016-07-28 12 views
6

से पहले मैक्रो मैं हाल ही में कुछ कोड पर देख रहा था और मैं इस पर ठोकर कर दिया है:वर्ग के नाम

#ifndef IDATA_EXPORT 
    #define IDATA_EXPORT 
#endif 

इस मामले में IDATA_EXPORT क्या है:

class IDATA_EXPORT IData { 
    /* .... */ 
} 

कहाँ IDATA_EXPORT की तुलना में अधिक नहीं है? (मेरा मतलब है, यह पूर्णांक की तरह टाइप है, चार आदि ...?)

+1

यह एक मैक्रो कि कुछ भी नहीं करने के लिए फैलता है। तो ऐसा लगता है कि यह कभी अस्तित्व में नहीं था। –

+0

और कक्षा की परिभाषा में इसकी क्या भूमिका है? – SnuKies

+0

[डुप्लिकेट] (http://stackoverflow.com/q/37487907/3233393), लेकिन वह 2 पर है। – Quentin

उत्तर

6

कुछ बिंदु पर सबसे अधिक संभावना समय में, या कुछ परिस्थितियों में यह रूप में (उदाहरण के लिए, MSVC के तहत) परिभाषित किया गया था:

#define IDATA_EXPORT __declspec(dllexport) 

जिसका उपयोग लाइब्रेरी से सार्वजनिक रूप से निर्यात करने के लिए कक्षाओं को इंगित करने के लिए किया गया था।

मैक्रो का उपयोग करना, डेवलपर, कक्षाएं निर्यात और कुछ भी निर्यात नहीं के बीच वैकल्पिक सकता है प्रत्येक व्यक्ति के वर्ग पर जाने के लिए बिना।

इस बार कोई मैक्रो पैटर्न जो आयात और निर्यात कक्षाएं, कोड एक कार्यक्रम पुस्तकालय पर निर्भर है से पुस्तकालय से संकलित किया गया है, या के आधार पर के बीच alternates का हिस्सा है। यह तो कुछ ऐसा दिखाई देगा:

#ifdef IS_LIBRARY // <--this would only be defined when compiling the library! 
    #define IDATA_EXPORT __declspec(dllexport) 
#else 
    #define IDATA_EXPORT __declspec(dllimport) 
#endif 

अधिक जानकारी के लिए, dllexport, dllimport on MSDN

+0

मैं जो कहता हूं उसमें देख रहा हूं, क्योंकि अभी भी कई चीजें हैं जिन्हें मैं नहीं जानता हूं। यह एक अच्छा प्रारंभिक बिंदु होगा। धन्यवाद – SnuKies

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