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,但是当你使用一个对象时,它是没有必要的.