函数原型作用域示例

3 c++ function

有函数原型作用域的定义(3.3.4/1 N3797):

在函数声明中,或在除函数定义 (8.4) 的声明符之外的任何函数声明符中,参数的名称(如果提供)具有函数原型范围,该范围终止于最近的封闭函数声明符的末尾。

我们能得到一个描述该规则的例子吗?

Vla*_*cow 5

这是一个简单的例子

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)

第一个参数名称隐藏了结构名称,因此第二个参数是使用结构的详细名称定义的。