इस फॉर्म की एक मैक्रो का सबसे आम मामले में से एक:
#define _M(x) x
पीछे की ओर compilers के लिए संगतता है कि केवल सी के मूल कश्मीर & आर बोली, कि अब हर जगह का एएनएसआई predated समर्थित प्रदान करना है सी बोलीभाषा मूल के & भाषा की बोली में, फ़ंक्शन घोषित करते समय फ़ंक्शन तर्क निर्दिष्ट नहीं किए गए थे। 1 9 8 9 में, एएनएसआई ने भाषा को मानकीकृत किया और कई सुधारों को शामिल किया, जिनमें फंक्शन प्रोटोटाइप शामिल थे, जिन्होंने तर्कों की संख्या घोषित की।
int f(int x, double y); /* ANSI C. K&R compilers would not accept this */
int f(); /* Function declared in the original K&R dialect */
जबकि compilers कि सी के मूल कश्मीर & आर बोली का समर्थन दुर्लभ (या विलुप्त) इन दिनों, जब जरूरत compilers दोनों प्रकार का समर्थन किया जा करने के लिए सॉफ्टवेयर का एक बहुत कुछ लिखा गया था, और मैक्रो लिए एक आसान तरीका प्रदान की हैं दोनों का समर्थन करने के लिए। अभी भी बहुत सारे शीर्षलेख हैं जो इस पीछे की संगतता प्रदान करते हैं।
पीछे की ओर कश्मीर & आर compilers के लिए अनुकूलता प्रदान करने के लिए कई हेडर फाइल निम्नलिखित है:
#if ANSI_PROTOTYPES
# define _P(x) x
#else
# define _P(x)()
#endif
...
int f _P((int x, double y));
ANSI_PROTOTYPES
परिभाषा को सही ढंग से, (या तो उपयोगकर्ता द्वारा या कुछ पूर्व #ifdef
तर्क के आधार पर) स्थापित किया गया है, तो आपको वांछित व्यवहार मिलता है:
- यदि ANSI_PROTOTYPES परिभाषित किया गया है, तो परिभाषा
int f(int x, double y)
तक फैली हुई है।
- ANSI_PROTOTYPES परिभाषित नहीं है, तो परिभाषा मेरे सवाल का
int f()
__SYSCALL मैक्रो केवल कुछ आर्किटेक्चर पर परिभाषित किया गया है। – fuz
कोड को और वर्दी बनाकर आपका क्या मतलब है? – Hogan
@ होगन क्षमा करें मैं वर्दी द्वारा स्पष्ट रूप से व्यक्त नहीं कर सकता हूं मेरा मतलब है ['# कुछ परिभाषित करें << 0'] (http://stackoverflow.com/questions/15095350/define-something-1-0) –