C语言函数原型作用域中形参的声明点规则咨询
C语言函数原型作用域中形参的声明点规则
在C语言(含C99及后续标准)中,函数原型作用域内的形参声明点严格遵循左至右的顺序:每个形参的名称从其自身的声明位置开始,到整个原型结束前都是可见的,后续的形参声明可以直接引用之前已经声明的形参名,但反之不行。
对应案例分析
案例1(合法):
int sum(int n, int a[n]);第一个形参
n声明后,第二个形参a[n]中的n已经处于可见状态,符合左至右的作用域规则,因此GCC在C99模式下无报错。案例2(非法):
int sum(int a[n], int n);第一个形参
a[n]中的n此时还未被声明(n是第二个形参,在a[n]之后才完成声明),违反了左至右的可见性规则,所以GCC会报错提示‘n’ undeclared here (not in a function)。
标准依据
C99标准的6.2.1节(标识符的作用域)明确规定:函数原型参数列表中的每个标识符,其作用域始于自身的声明点,终止于原型的末尾;参数列表中的声明按顺序处理,后续参数可引用之前已声明的参数标识符,而未声明的标识符无法被前置引用。
内容的提问来源于stack exchange,提问作者Tony L
相关产品推荐
相关产品推荐

