मैं अपने प्रोजेक्ट में एक हेडर फाइल का उपयोग कर रहा था कि निम्नलिखित को परिभाषित (ओं):क्या सी में कुछ "अस्थिर स्थिरांक" घोषित करने का कोई कारण है लेकिन सी ++ में केवल "अस्थिर" है?
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
#define __I volatile /*!< Defines 'read only' permissions*/
#else
#define __I volatile const /*!< Defines 'read only' permissions*/
#endif
__I
एक और हेडर फाइल में इस प्रकार प्रयोग किया जाता है:
typedef struct {
// more members before
__I uint32_t CR; /*!< GPIO Commit*/
// more members after
} GPIOA_Type;
#define GPIOF_BASE 0x40025000UL
#define GPIOF ((GPIOA_Type *) GPIOF_BASE)
मेरा प्रश्न क्यों है होगा __I
सी में बनाया गया है लेकिन सी ++ में नहीं? तुम अब भी मूल्य सीआर जब से तुम पता है की ओर इशारा करते है, संशोधित करने, लेकिन हूँ बस curios क्यों __I
की परिभाषा अलग है सकते हैं।
दिलचस्पी लेने वाले किसी क्या इस के लिए या से है के लिए, __I
परिभाषित करता है कॉर्टेक्स- एम 4 के लिए IAR एंबेडेड Workbench एआरएम से हैं, और struct टेक्सास इंस्ट्रूमेंट्स LM4F120H5QR CMSIS फाइलों से है।
सी ++ में 'const' आंतरिक लिंकेज प्रदान करता है। मुझे नहीं पता कि यह सी में करता है, लेकिन मुझे संदेह नहीं है। वैसे भी, ध्यान दें कि '__I' एक नाम है जो कार्यान्वयन के लिए आरक्षित है, और इसका उपयोग उपयोगकर्ता कोड में नहीं किया जाना चाहिए। –
@Mat McNabb मैं मतलब के बाद से मैं सीआर सही पता मैं निम्नलिखित #define GPIO_PORTF_CR_R (* ((वाष्पशील अहस्ताक्षरित लंबे *) 0x40025524)) कर सकते हैं रजिस्टर कि, तो GPIO_PORTF_CR_R = xxxxx, और कहा कि रजिस्टर के मूल्य में परिवर्तन करना । – SoftwareDev
@SoftwareDev ठीक है - 'अस्थिर स्थिरांक CR' मतलब है कि आप रजिस्टर संशोधित करने के लिए' CR' का उपयोग नहीं कर सकते हैं; निश्चित रूप से यह –