有人也使用struct name作为变量名.代码真的说了什么?

Evi*_*ach 11 c++ naming-conventions

今天早上我们发现了一大堆代码导致库调用崩溃.

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

fred     fred[MAX_SIZE+1];

memset( fred, 0, sizeof(fred) * MAX_SIZE+1 );
Run Code Online (Sandbox Code Playgroud)

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

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

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

CB *_*ley 14

第一,不要这样做,因为它令人困惑 - 但你已经发现了这一点.

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

例如

fred     fred[MAX_SIZE+1];

memset( fred, 0, sizeof(struct fred) * (MAX_SIZE+1) );
Run Code Online (Sandbox Code Playgroud)

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

memset( fred, 0, sizeof fred );
Run Code Online (Sandbox Code Playgroud)

必须使用ID类型时有括号sizeof,但是当你使用一个对象时,它是没有必要的.