我用在我的項目一個頭文件有如下定義(一個或多個):是否有任何理由在C中聲明「volatile const」,但在C++中只聲明「volatile」?
#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
在C中被設爲const,但不在C++中?你仍然可以修改CR所指向的值,因爲你有地址,但只是奇怪爲什麼__I
的定義是不同的。
對於任何有興趣是什麼,這是對或從 的__I
定義是從的IAR Embedded Workbench ARM用於Cortex-M4 和結構是由德州儀器LM4F120H5QR CMSIS文件。
在C++中'const'賦予內部鏈接。我不知道它是否在C中,但我不懷疑。無論如何,請注意'__I'是爲實現保留的名稱,不應在用戶代碼中使用。 – 2014-10-19 21:15:32
@Mat McNabb我的意思是,因爲我有CR寄存器的確切地址,我可以執行以下代碼#define GPIO_PORTF_CR_R(*((volatile unsigned long *)0x40025524)),然後執行GPIO_PORTF_CR_R = xxxxx,並且更改寄存器的值。 – SoftwareDev 2014-10-19 23:49:59
@SoftwareDev OK - 'volatile const CR'表示你不能用'CR'來修改寄存器;當然它可以用其他方式修改 – 2014-10-19 23:53:44