gpt4 book ai didi

c++ - 是否有任何理由在 C 中声明 "volatile const"而在 C++ 中仅声明 "volatile"?

转载 作者:可可西里 更新时间:2023-11-01 17:45:24 25 4
gpt4 key购买 nike

我在我的项目中使用的头文件具有以下定义:

#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 中而不是在 C++ 中成为常量?您仍然可以修改 CR 指向的值,因为您有地址,但我只是好奇为什么 __I 的定义不同。

对于任何对它的用途或来源感兴趣的人,__I 定义来自 IAR Embedded Workbench ARM for Cortex-M4,结构来自德州仪器 LM4F120H5QR CMSIS 文件。

最佳答案

在 C++ 中,文件范围内的 const 变量默认为静态链接,内存映射 GPIO 不需要这种链接。对此的“正确”修复是 extern 关键字,但不能在此处使用,因为显然 __I 也需要与类成员一起使用。因此,根据需要,消除 const 会生成默认链接 extern

关于c++ - 是否有任何理由在 C 中声明 "volatile const"而在 C++ 中仅声明 "volatile"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26455373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com