C 避免为头文件中的弱引用重新定义别名变量
我在头文件中有一个变量: myHeader.hC 避免为头文件中的弱引用重新定义别名变量,c,gcc,attributes,weak-references,C,Gcc,Attributes,Weak References,我在头文件中有一个变量: myHeader.h uint16 dummyVar = 0; extern const uint16 myVar __attribute__((weak,alias("dummyVar"))); 因此,当我不链接定义了myVar的部分时,链接器只会给它符号dummyVar的值 我的问题是,我正在处理一个具有给定体系结构的项目,其中头文件myHeader.h包含在几个C文件中。因此,我得到了dummyVar的多个定义。但是当我在标题之外定义dummyVar时,它对我的
uint16 dummyVar = 0;
extern const uint16 myVar __attribute__((weak,alias("dummyVar")));
因此,当我不链接定义了myVar
的部分时,链接器只会给它符号dummyVar
的值
我的问题是,我正在处理一个具有给定体系结构的项目,其中头文件myHeader.h
包含在几个C文件中。因此,我得到了dummyVar
的多个定义。但是当我在标题之外定义dummyVar
时,它对我的\uuuuu属性\uuuuuu
不再有效,因为当它被指定为别名时需要定义dummyVar
我有没有办法在不改变基本架构的情况下解决这个问题 一个简单的解决方案是如下声明:
static uint16 dummyVar = 0;
myVar
的弱别名似乎没有问题,但是问题是dymmyVar
,因为如果标题包含多次,它会被定义多次。是的,这相当准确地总结了我的问题。由于属性
静态uint16 dummyVar=0,我无法在标题外定义dummyVar
@我的天啊,有时候我真的很想揍自己——其实很简单也很明显。现在可以工作了-谢谢你!将其作为此线程的答案!:)@Toby在大多数情况下都是这样的uint16 dummyVar=0代码>不应出现在头文件中。是否uint16 dummyVar_uuu属性_uuu((弱))代码>满足您的需求?或者您可能希望使用extern uint16 dummyVar标题中的代码>和uint16 dummyVar=0其中一个源文件中的代码>。