初始化:静态符号的地址';myStruct';用于符号';otherStruct';
以下代码向我发出警告: 初始化:静态符号“myStruct”的地址用于符号“otherStruct” 警告出现在SomeOtherStruct otherStruct初始化的右括号/分号处初始化:静态符号的地址';myStruct';用于符号';otherStruct';,c,static,warnings,C,Static,Warnings,以下代码向我发出警告: 初始化:静态符号“myStruct”的地址用于符号“otherStruct” 警告出现在SomeOtherStruct otherStruct初始化的右括号/分号处 typedef struct { U32BIT memberA; U32BIT memberB; } MyStruct; typedef struct { U32BIT *memberAPtr; U32BIT *memberBPtr; } SomeOtherStruct;
typedef struct
{
U32BIT memberA;
U32BIT memberB;
} MyStruct;
typedef struct
{
U32BIT *memberAPtr;
U32BIT *memberBPtr;
} SomeOtherStruct;
static MyStruct myStruct;
int main(void)
{
SomeOtherStruct otherStruct =
{
&myStruct.memberA,
&myStruct.memberB
}; // <<-- warning given here.
// doing something with otherStruct
}
typedef结构
{
u32位成员a;
u32位成员b;
}我的结构;
类型定义结构
{
U32位*memberAPtr;
U32位*成员BPTR;
}其他结构;
静态MyStruct MyStruct;
内部主(空)
{
SomeOtherStruct otherStruct=
{
&myStruct.memberA,
&myStruct.memberB
};//如果您在web上搜索:
初始化:静态符号“”的地址用于符号
你会发现:
这显然是你说你正在使用的同一个编译器的手册。相关的段落说:
W1020C %Z: address of static symbol `%D' is used for symbol `%D'
静态变量的地址用作初始值
值。可以将静态变量的值从
编译单元的外部。继续编译,使
初始化无效
这正是你在这里得到的:legal C,但你的编译器正在警告你。我不确定为什么它觉得这个特殊的东西值得警告,但希望从这里你可以找出如何避免警告,或者禁用它。这个警告是为了避免暴露内部链接。Wordstatic
在全局va上变量将使用内部链接生成变量,这意味着编译单元是内部的。仍然无法解释为什么我仍然可以执行MyStruct*myStructptr=&MyStruct;
(在main()中{})因为这不会给出警告。另外,感谢手册的链接,我在谷歌上搜索了上述搜索,但什么都找不到。还有:SomeOtherStruct-otherStruct;otherStruct.memberAPtr=&myStruct.memberA;
也不会给出警告,但看起来是相同的结构。(编辑评论的超时是什么?)。无论如何,通过使otherStruct
变量为静态并将指针传递给所述库,解决了该问题,并将库更改为接受所述指针,而不具有MyOtherStruct
的完整副本,而仅具有指针。