Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化:静态符号的地址';myStruct';用于符号';otherStruct';_C_Static_Warnings - Fatal编程技术网

初始化:静态符号的地址';myStruct';用于符号';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;

以下代码向我发出警告:

初始化:静态符号“myStruct”的地址用于符号“otherStruct”

警告出现在SomeOtherStruct otherStruct初始化的右括号/分号处

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,但你的编译器正在警告你。我不确定为什么它觉得这个特殊的东西值得警告,但希望从这里你可以找出如何避免警告,或者禁用它。

这个警告是为了避免暴露内部链接。Word
static
在全局va上变量将使用内部链接生成变量,这意味着编译单元是内部的。

仍然无法解释为什么我仍然可以执行
MyStruct*myStructptr=&MyStruct;
(在main()中{})因为这不会给出警告。另外,感谢手册的链接,我在谷歌上搜索了上述搜索,但什么都找不到。还有:
SomeOtherStruct-otherStruct;otherStruct.memberAPtr=&myStruct.memberA;
也不会给出警告,但看起来是相同的结构。(编辑评论的超时是什么?)。无论如何,通过使
otherStruct
变量为静态并将指针传递给所述库,解决了该问题,并将库更改为接受所述指针,而不具有
MyOtherStruct
的完整副本,而仅具有指针。