2010-02-23 20 views
9

मैंने मैक्रो (सी कोड) का यह टुकड़ा पढ़ा और यह परिभाषित करने में उलझन में था कि यह क्या परिभाषित करता है। यह परिभाषित करता है क्या?यह मैक्रो परिभाषित करता है?

#define sram (*((unsigned char (*)[1]) 0)) 

-AD

+0

बताना मुश्किल है। क्या आप इसका उदाहरण दे सकते हैं कि इसका उपयोग कैसे किया जाता है? –

उत्तर

12

मुझे लगता है कि sram का अर्थ है "राम की शुरुआत"।


unsigned char[1] 

अहस्ताक्षरित वर्ण का आकार 1 की एक सरणी।

unsigned char(*)[1] 

अहस्ताक्षरित वर्ण का आकार 1 का एक pointer to an array

(unsigned char (*)[1]) 0 

हस्ताक्षर किए गए वर्णों के आकार 1 की सरणी में पॉइंटर को 0 कास्ट करें।

*((unsigned char (*)[1]) 0) 

स्थान 0 पर कुछ स्मृति पढ़ें, और परिणाम को हस्ताक्षरित वर्णों के आकार 1 की सरणी के रूप में व्याख्या करें।

(*((unsigned char (*)[1]) 0)) 

बस avoid 1+5*8+1==42 पर।

#define sram (*((unsigned char (*)[1]) 0)) 

स्मृति स्थान 0 पर शुरू करने के लिए चर sram को परिभाषित करें, और अहस्ताक्षरित वर्ण का आकार 1 की एक सरणी के रूप में परिणाम की व्याख्या।

+0

+1 मुझे हिचिकर गाइड पांच-भाग त्रयी में उस कन्डर्रम के बारे में स्पष्टीकरण प्रदान करने के लिए +1। ओह, और मुझे लगता है कि आपका बाकी जवाब भी ठीक था। –

+0

या एक एम्बेडेड सिस्टम पर इसका मतलब सिर्फ "एसआरएएम" (स्टेटिक रैंडम एक्सेस मेमोरी) हो सकता है जो आम तौर पर माइक्रोकंट्रोलर ऑन-चिप रैम से बना होता है। – Clifford

1

मैं लगता यह आधार पते (0) स्मृति (RAM) की लौटा रहा है :)

1

यह शून्य पर शुरू होने वाली स्मृति के लिए सूचक के रूप में "sram" को परिभाषित करता है। आप सूचक के माध्यम से स्मृति का उपयोग कर सकते हैं, उदा। sram [0] पता शून्य है, स्राम [1] पता एक पर सामान है, आदि

विशेष रूप से यह 0 के बिना हस्ताक्षर किए गए चारों ओर एक सूचक होने के लिए कास्टिंग कर रहा है और इसके माध्यम से अप्रत्यक्ष जा रहा है (एक सरणी छोड़कर अचिन्हित वर्ण)।

ऐसा ही एक परिणाम

#define sram ((unsigned char*)0) 

द्वारा प्राप्त किया जा सकता है यह भी मानक सी में पूरी तरह से अपरिभाषित है, लेकिन है कि यह का उपयोग कर और स्वर्गदूतों उनके नाभि के बाहर उड़ होने से लोगों को रोकने नहीं करता है।

+0

+1 - अब मुझे पता है कि स्वर्गदूत कहां से आते हैं। –

संबंधित मुद्दे