मैं मैक्रो कि मैं संकलन समय में मूलभूत मूल्यों के साथ सरणियों को भरने के लिए उपयोग करने को दोहराने के लिए एक मैक्रो:सी मैक्रो विस्तार क्रम
const int array [512] =
{
MACRO_REPEAT(512, -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
मैक्रो दोहराने MACRO_REPEAT_512 करने का विस्तार होगा, लेकिन अब मैं अन्य मैक्रो का उपयोग करना चाहता था सरणी आकार, जैसे के रूप में:
#define ARRAY_LENGTH 512
const int array [ARRAY_LENGTH ] =
{
MACRO_REPEAT(ARRAY_LENGTH , -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
लेकिन इस MACRO_REPEAT_ARRAY_LENGTH को विस्तृत करता है तो श्रृंखलाबद्ध से पहले ARRAY_LENGTH
मूल्य का विस्तार नहीं करता है। अन्य उदाहरण बहुआयामी सरणियों, जो विस्तार के अधिक स्तर शामिल है के लिए होगा:
#define X 512
#define Y 512
const int array [X][Y] =
{
MACRO_REPEAT(X*Y , -2) // this repeats -2, 512 times
[4] = 10,
[5] = 2,
...
}
यह MARO_REPEAT_X * Y तक का विस्तार होगा। तो, क्या उन मानों को अन्य मैक्रोज़ को जोड़ने से पहले अंतिम संख्यात्मक मान में विस्तार करने का कोई तरीका है?
क्यों न सिर्फ लूप या 'मेमसेट() 'का उपयोग करें? हां, वे रन टाइम पर काम करते हैं, लेकिन वांछित प्रभाव अपेक्षाकृत आसानी से प्राप्त करते हैं। – Peter
जीसीसी में एक एक्सटेंशन है जो आपको तत्वों की एक श्रृंखला को उसी मान पर प्रारंभ करने की अनुमति देता है, जैसे 'int array [ARRAY_LENGTH] = {[0 ... 3] = -2, [4] = 10, [5] = 2, [6 ... ARRAY_LENGTH - 1] = -2,}; ' –
@ पीटर मुझे पता है कि मैं एक एम्बेडेड सिस्टम में काम कर रहा हूं और मैं इसे फ़्लैश में स्टोर करना चाहता हूं (कॉन्स क्वालीफायर के साथ अद्यतन प्रश्न) – rnunes