मेरा सुझाव है कि आप GCC Macros documentation से शुरू करें जो सी प्रीप्रोसेसर के जीसीसी कार्यान्वयन के बारे में काफी रोचक जानकारी प्रदान करता है।
उनके उत्तर में क्ले ब्रिज सी प्रीप्रोसेसर का उपयोग करने के कुछ उदाहरण प्रदान करता है। ऑर्डर भाषा के बारे में एक उदाहरण कई उदाहरणों के साथ दिलचस्प है। ऑर्डर के लेखक ने एक मुद्दा उठाया है जिसमें वह भाग गया है, सी प्रीप्रोसेसर कार्यान्वयन अधिक हाल के मानकों को पूरी तरह कार्यान्वित नहीं कर सकता है।
सामान्य रूप से सी प्रीप्रोसेसर का उपयोग करने के लिए स्टीव बोर्न ने यूनिक्स के लिए बोर्न शैल लिखते समय क्या किया था, यह एक गतिविधि है जिसे मैं कई जल बोर्डिंग सत्रों के बाद प्रस्तुति के लिए उचित आधार पर विचार करता हूं।
सी प्रीप्रोसेसर के बारे में याद रखने की मुख्य बात यह है कि यह टेक्स्ट टोकन में हेरफेर कर रहा है। तो सी प्रीप्रोसेसर सिंटैक्स के साथ थोड़ा सा टिंचरिंग की अनुमति देगा। उदाहरण के लिए, निम्न मैक्रो, जो बिना किसी त्रुटि के विजुअल स्टूडियो 2005 के साथ संकलित करता है, अनजान टेक्स्ट मैनिपुलेशन संभव दिखाता है।
#define TESTOP(a,x,y,op,z) a (x) op (y); z
void f(void)
{
int i = 0, j = 5;
TESTOP(,i,j,+=,);
TESTOP(,i,(j + 2),+=,);
TESTOP({,i,(j + 2),+=,});
}
हालांकि आप समझते हैं और सी प्रीप्रोसेसर की सीमाओं में से कुछ को हल करने के लिए जब सीमाओं धक्का करने की आवश्यकता है। विचार करने के लिए कुछ मुद्दों के लिए GCC topic Macro Pitfalls देखें।
और आप सी प्रीप्रोसेसर को एक सामान्य मैक्रो और टेक्स्ट प्रीप्रोसेसर के रूप में उपयोग कर सकते हैं जो सी कंपाइलर के अलावा कुछ टूल को लक्षित करता है। उदाहरण के लिए पुराने imake utility for build automation ने एक व्यापक मैक्रो सुविधा प्रदान करने के लिए सी प्रीप्रोसेसर का उपयोग किया।
जहां मैंने देखा है कि सी प्रीप्रोसेसर सबसे प्रभावी ढंग से जटिल कोड और घोषणाओं को सरल बनाने में उपयोग किया गया था।
एक मामला जो मैंने देखा है वह एक राज्य मशीन भाषा प्रदान करने के लिए सी प्रीप्रोसेसर का उपयोग कर रहा था जिसका उपयोग राज्य संरचना का वर्णन करने के लिए डेटा संरचनाओं और डेटा को बनाने के लिए किया गया था। परिणामस्वरूप डेटा संरचनाओं को तब राज्य मशीन फ़ंक्शन के लिए तर्क के रूप में उपयोग किया जाता था। इसने एक प्री फ़ंक्शन द्वारा किए गए राज्य मशीन प्रसंस्करण के साथ सी प्रीप्रोसेसर परिभाषित भाषा में कई अलग-अलग राज्य मशीन प्रक्रियाओं को लिखा है।
माइक्रोसॉफ्ट, माइक्रोसॉफ्ट फाउंडेशन क्लासेस (एमएफसी) में, सी प्रीप्रोसेसर का इस्तेमाल एमएफसी के कुछ संदेश विवरण छिपाने के लिए किया था। एक बार जब आप इसे इस्तेमाल करते हैं तो कुछ ऐसा पढ़ना उचित रूप से आसान है। चूंकि विजुअल स्टूडियो आईडीई में मैक्रोज़ का उपयोग करके कोड उत्पन्न करने और संशोधित करने के लिए टूल थे, यह प्रोग्रामर के लिए बहुत सीधे आगे था।
BEGIN_MESSAGE_MAP(CFrameworkWndDoc, CWindowDocument)
//{{AFX_MSG_MAP(CFrameworkWndDoc)
ON_WM_CHAR()
ON_WM_TIMER()
ON_MESSAGE(WU_EVS_DFLT_LOAD, OnDefaultWinLoad)
ON_MESSAGE(WU_EVS_POPUP_WINDOW, OnPopupWindowByName)
ON_MESSAGE(WU_EVS_POPDOWN_WINDOW, OnPopdownWindowByName)
ON_MESSAGE(WM_APP_CONNENGINE_MSG_RCVD, OnConnEngineMsgRcvd)
ON_MESSAGE(WM_APP_XMLMSG_MSG_RCVD, OnXmlMsgRcvd)
ON_MESSAGE(WM_APP_BIOMETRIC_MSG_RCVD, OnBiometricMsgRcvd)
ON_MESSAGE(WM_APP_SHUTDOWN_MSG, OnShutdownMsgRcvd)
ON_MESSAGE(WM_POWERBROADCAST, OnPowerMsgRcvd)
ON_MESSAGE(WM_APP_SHOW_HIDE_GROUP, OnShowHideGroupMsgRcvd)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
विशेष रूप से आप जब देखो क्या मैक्रो की तरह इस्तेमाल किया देखो:
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
PTM_WARNING_DISABLE \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return GetThisMessageMap(); } \
const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \
{ \
typedef theClass ThisClass; \
typedef baseClass TheBaseClass; \
static const AFX_MSGMAP_ENTRY _messageEntries[] = \
{
#define END_MESSAGE_MAP() \
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
}; \
static const AFX_MSGMAP messageMap = \
{ &TheBaseClass::GetThisMessageMap, &_messageEntries[0] }; \
return &messageMap; \
} \
PTM_WARNING_RESTORE
// for Windows messages
#define ON_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_lwl, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
(memberFxn)) },
#define ON_WM_TIMER() \
{ WM_TIMER, 0, 0, 0, AfxSig_vw, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< void (AFX_MSG_CALL CWnd::*)(UINT_PTR) > (&ThisClass :: OnTimer)) },
सी में वस्तु उन्मुख कोड लिखने के बारे में http://stackoverflow.com/questions/351733/ निम्नलिखित प्रश्न पर एक नज़र डालें कैन-यू-राइट-ऑब्जेक्ट-ओरिएंटेड-कोड-इन-सी .... क्योंकि कुछ सीओओ कार्यान्वयन प्रीप्रोसेसर आईआईआरसी का भारी उपयोग करते हैं। –
कक्षाओं के साथ सी एक संकलक लक्ष्य कोड था, जो एक [सामान्य आदत] है (http://programmers.stackexchange.com/a/257873/40065)। सी प्रीप्रोसेसर का उल्लेख भ्रमित है। –