不使用#define的全局常量

时间:2012-03-12 13:56:47

标签: c variables header constants global

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

const short int SOME_ADDRESS  =  0x0010

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:28)

使用extern

在头文件中声明常量
extern const short int SOME_ADDRESS;

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

const short int SOME_ADDRESS = 0x0010;

答案 1 :(得分:0)

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