这是一个简单的例子
int a;
void f( int a, int a );
Run Code Online (Sandbox Code Playgroud)
编译器将针对第二个参数 a 发出错误消息,因为它的名称与第一个参数的名称一致。那就是编译器会报告名称 a 的重新定义。同一个名字在同一个作用域中定义了两次。
或者另一个例子
struct A {};
void f( int A, struct A );
Run Code Online (Sandbox Code Playgroud)
第一个参数名称隐藏了结构名称,因此第二个参数是使用结构的详细名称定义的。