यह मैं कुछ समय के लिए गुस्सा दिलाना किया गया, उदाहरण के लिए, अगर मैं इस कोड लिखने की कोशिश कर रहा हूँ के रूप में शाब्दिक:पासिंग सरणी मैक्रो तर्क
<stdin>:8:31: error: macro "ARRAY" passed 4 arguments, but takes just 2
:
// find the length of an array
#define ARRAY_LENGTH(arr) (sizeof(arr)/sizeof(int))
// declare an array together with a variable containing the array's length
#define ARRAY(name, arr) int name[] = arr; size_t name##_length = ARRAY_LENGTH(name);
int main() {
ARRAY(myarr, {1, 2, 3});
}
कोड इस त्रुटि देता है
क्योंकि यह ARRAY(myarr, {1, 2, 3});
को ARRAY
गुजरने के रूप में myarr
, {1
, 2
, और 3}
देखता है। मैक्रोज़ के लिए सरणी पास करने का कोई तरीका है?
संपादित करें: मुझे आवश्यक कुछ जटिल मैक्रोज़ में, मुझे मैक्रो में दो या दो से अधिक सरणी पारित करने की आवश्यकता हो सकती है, इसलिए वैरिएडिक मैक्रो काम नहीं करता है।
क्या सी 99 varargs के बिना ऐसा करने का कोई तरीका है? – Mehrdad
17 साल, और अभी भी कोई सी 99 अनुपालन प्रीप्रोसेसर नहीं है? आपके पास 'PROTECT0', 'PROTECT1' ... आपके पास मौजूद अल्पमामों की सही मात्रा के लिए मैक्रोज़ हो सकता है। –
मुझे लगता है कि मेरा मतलब कुछ दर्दनाक था, लेकिन ऐसा नहीं लगता है। – Mehrdad