c - 不使用#define 的全局常量

标签 c variables header constants global

好的,我希望在 .h 文件中定义一组内存地址作为常量,该文件由一堆 .c 文件使用(我们使用的是 C,而不是 C++)。我希望能够看到变量的 name 而不仅仅是在调试器中看到十六进制地址...所以我想将我当前拥有的 #defines 转换为全局范围内的常量.问题是,如果我这样定义它们:

const short int SOME_ADDRESS  =  0x0010

然后我得到了可怕的“多重声明”错误,因为我有多个使用同一个 .h 的 .c 文件。我想使用枚举,但这行不通,因为它默认输入整数(在我的系统上是 16 位...我需要更好地控制类型)。

我考虑过将所有地址放在一个结构中...但我无法(据我所知)在头文件中设置结构实例的默认值(我不想假设一个特定的 .c 文件首先使用该结构并在其他地方填充它。我真的很想在 .h 文件中定义常量)

当我开始时它看起来很简单,但我没有看到在头文件中定义全局可用的 short int 常量的好方法...有人知道这样做的方法吗?

谢谢!

最佳答案

使用extern声明头文件中的常量:

extern const short int SOME_ADDRESS;

然后在任何但只有一个 .c 文件中提供定义:

const short int SOME_ADDRESS = 0x0010;

关于c - 不使用#define 的全局常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668385/

相关文章:

C: 向后读取文件:为什么这种特殊方法被认为不好?

c - PECL 安装失败

c# - WebClient 设置 header

c - 使用中序遍历在二叉树中搜索元素

使用舍入到偶数将整数转换为半精度浮点格式

java - 为什么 Java 允许在其标识符中使用控制字符?

javascript - 使用随机数创建变量

当其中包含的变量增加时,Javascript 值不会改变

c - 如何在c中使用头文件

apache - 如何有条件地修改Apache响应头 'Location'