मेरे पास एक ऐसा फ़ंक्शन है जिसे मुझे मैक्रोज़ करने की आवश्यकता है। फ़ंक्शन में अस्थायी चर शामिल हैं और मैक्रो प्रतिस्थापन में अस्थायी चर के उपयोग के बारे में कोई नियम हैं, तो मुझे याद नहीं है।क्या सी मैक्रो में अस्थायी चर शामिल हो सकते हैं?
long fooAlloc(struct foo *f, long size)
{
long i1, i2;
double *data[7];
/* do something */
return 42;
}
मैक्रो प्रपत्र:
#define ALLOC_FOO(f, size) \
{\
long i1, i2;\
double *data[7];\
\
/* do something */ \
}
यह ठीक है? (यानी कोई बुरा दुष्प्रभाव नहीं - सामान्य लोगों के अलावा: "सुरक्षित टाइप करें" आदि)। बीटीडब्ल्यू, मुझे पता है कि "मैक्रोज़ बुराई हैं" - मुझे बस इस मामले में इसका उपयोग करना होगा - ज्यादा पसंद नहीं।
आप की जरूरत क्यों है इसे मैक्रोराइज करें? यदि आप प्रदर्शन के बारे में चिंतित हैं, तो (ए) संभावना है कि आप अनावश्यक रूप से चिंता कर रहे हैं (जब तक कि आपने वास्तव में इसे माप लिया न हो और निष्कर्ष निकाला कि यह एक महत्वपूर्ण बाधा है) और (बी) आप एक ही प्रकार में एक ही प्रभाव प्राप्त कर सकते हैं -इस तरीके से, फ़ंक्शन 'इनलाइन' बनाकर (कुछ पुराने या माइक्रोसॉफ्ट कंपाइलर्स इसका समर्थन नहीं कर सकते हैं)। –
@ किथहॉम्पसन प्रदर्शन यहां मुद्दा नहीं है। मैं एक विस्तार पुस्तकालय लिख रहा हूं और मुझे कुछ डेटा मार्शलिंग करने के लिए एक रैपर फ़ंक्शन की आवश्यकता है। मैक्रोज़ स्वचालित रूप से बहुत से "गोंद" कोड उत्पन्न करने के लिए एक कम त्रुटि प्रवण तरीका प्रदान करते हैं। –
मैक्रो के अंदर 'वापसी' ऐसा नहीं करता जो आपको लगता है कि ऐसा लगता है। –