gpt4 book ai didi

c - 使用 memset() 设置为零来初始化静态结构定义是什么意思;?

转载 作者:行者123 更新时间:2023-12-05 08:50:16 25 4
gpt4 key购买 nike

我阅读了安森美半导体的一些 C 语言示例代码。所以我在头文件中看到了这样的结构定义:

typedef struct //that is example structure
{

uint16_t features;

bool blt;

const struct anotherstruct *structinfo;
} name;

所以在 .c 文件上有定义,然后在 foo() 函数中这样使用 memset:

static name lastname;

foo()
{
memset(&lastname,0,sizeof(name ))
lastname.features=23;
lastname.structinfo=info; //there isn't assigned any value for blt.But there will be...(maybe ı am thinking this is the reason...)
}

我在这个站点上进行了一些搜索,我已经知道,静态定义等于零。那么为什么安森美半导体还要将 lastname 设置为 0 呢?

DP:foo() 函数只被设计师调用过一次。所以不能重置函数,因为这个结构定义 lastname 首先在 foo() 函数中使用

最佳答案

仅看您提供的简短代码片段很难说。

  • 静态变量初始化为零是正确的,因此严格来说没有理由在使用它们之前将它们置零。

  • 但是,在真实环境中,最好不要假设事情。这很可能只是“安全胜于遗憾”。

  • 也可以是重置函数。也就是说,它被调用了不止一次。如果不是多次调用,那也可以是初衷。

  • 类似上面的情况可能是写了reset函数是因为之前有一些修改lastname的代码已经被移除了,然后他们忘记移除了foo .

  • 还有一个可能是程序员不知道静态变量在初始化时被归零,或者只是忘记了。不要假设您找到的所有代码都有正当的理由来查看它的方式。

  • 程序员也有可能厌倦了向其他程序员解释静态变量已归零以及全局变量是静态的。

  • 另一个(尽管不太可能)原因是程序员发现了编译器中的错误,这是一种解决方法。

我们不可能弄清楚另一个程序员在编写代码时的想法。特别是如果我们只有一小部分代码库。如果您真的想知道这种特殊情况,请询问代码的作者。

关于c - 使用 memset() 设置为零来初始化静态结构定义是什么意思;?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62383038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com