gpt4 book ai didi

c++ - 有人也在使用结构名称作为变量名称。代码真正说的是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:03:59 29 4
gpt4 key购买 nike

今天早上我们发现了导致库调用崩溃的旧代码块。

struct   fred
{
int a;
int b;
int c;
};

fred fred[MAX_SIZE+1];

memset( fred, 0, sizeof(fred) * MAX_SIZE+1 );

看起来 sizeof(fred) 可能是整个数组大小,而不是结构大小,因为它覆盖了大量内存。

它在几个不同的系统上编译时没有警告的事实似乎很奇怪。

对于这种类型和变量名冲突的情况,是否有正确的语义?或者这是某种未定义的行为?或者只是一个缺陷?

最佳答案

第一,不要这样做,因为它会造成混淆 - 但你已经发现了这一点。

变量隐藏了结构的名称,但您仍然可以使用 struct fred 来引用该类型。

例如

fred     fred[MAX_SIZE+1];

memset( fred, 0, sizeof(struct fred) * (MAX_SIZE+1) );

或者,为什么不直接使用完整对象的大小。这样,您的 memset 调用在面对数组大小或类型的更改时是健壮的。你可以这样做:

memset( fred, 0, sizeof fred );

sizeof 中使用类型 ID 时,您必须有括号,但在使用对象时则不需要。

关于c++ - 有人也在使用结构名称作为变量名称。代码真正说的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677221/

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