【问题标题】:global constants without using #define不使用 #define 的全局常量
【发布时间】:2012-03-28 22:19:31
【问题描述】:

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

const short int SOME_ADDRESS  =  0x0010

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

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

刚开始的时候看起来很简单,但我没有看到在头文件中定义全局可用的短整型常量的好方法……有人知道这样做的方法吗?

谢谢!

【问题讨论】:

    标签: c variables header constants global


    【解决方案1】:

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

    extern const short int SOME_ADDRESS;
    

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

    const short int SOME_ADDRESS = 0x0010;
    

    【讨论】:

    • 如果我这样做,我不需要知道那个特定的 .c 文件首先被调用吗?或者如果它们是在该 .c 文件中全局定义的,是否会在调用任何函数之前完成定义?
    • 不,没有任何东西可以调用来初始化常量,并且定义将在任何尝试使用它们之前出现。只需确保定义常量的.c 文件的.o(或.obj)文件链接到最终二进制文件。
    【解决方案2】:

    如果您使用 gcc 进行编译,您可以添加 -ggdb3 开关,这将告诉 gcc 存储宏信息(即 #defines),以便它们可以在 gdb 中使用。

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 2011-07-22
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多