首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化:静态符号myStruct的地址用于符号'otherStruct‘

初始化:静态符号myStruct的地址用于符号'otherStruct‘
EN

Stack Overflow用户
提问于 2013-10-08 10:53:49
回答 2查看 123关注 0票数 3

下面的代码给了我警告:

初始化:静态符号myStruct的地址用于符号'otherStruct‘

在SomeOtherStruct otherStruct初始化的最后括号/分号处发出警告。

代码语言:javascript
复制
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
}

如果我做了SomeOtherStruct otherStruct static,那么问题就解决了。但是我不喜欢这样做,因为我不希望SomeOtherStruct otherStruct总是在内存中,因为它被传递到另一个函数/文件中,在那里它将被存储。

(SomeOtherStruct来自一个库,它要求使用一个指针列表初始化它。)

为什么我的编译器给我这个警告,我能做什么,或者我做错了什么?因为我根本没有看到这个代码有任何问题(QAC/MISRA也没有,因为通常QAC/MISRA是在抱怨)。

而且,我的编译器是富士通软调Fs907s,可能什么都不值钱。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-08 11:09:14

如果您在网上搜索:

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

你会发现:

http://www.fujitsu.com/downloads/MICRO/fma/pdfmcu/softccmp-cm25-00202-2e.pdf

这显然是你说你正在使用的编译器的手册。有关的段落说:

代码语言:javascript
复制
W1020C %Z: address of static symbol `%D' is used for symbol `%D'

静态变量的地址用作初始值。可以从编译单元的外部更改静态变量的值。继续编译,使初始化有效。

这正是我们所得到的: legal C,但是您的编译器警告您。为什么它觉得这个特别的东西是值得警告的,我不确定,但希望从这里你可以找出如何避免警告,或禁用它。

票数 3
EN

Stack Overflow用户

发布于 2013-10-08 11:14:43

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19245783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档