可能重复:
What is useful about this C syntax?
C variable declarations after function heading in definition
What weird C syntax is this?
我试图理解一些代码,它有如下内容:
int getr(fget)
FILE *fget;
{
/* More declarations and statements here */
return (1);
}
上面和下面有什么区别吗?
int getr(fget)
{
FILE *fget;
/* More declarations and statements here */
return (1);
}
如果是,它们有何不同?
最佳答案
这两个函数都以旧样式(非原型)的形式声明。旧样式的函数声明在当前的c标准中已经过时,c标准强烈反对使用它们。
在第二种形式中,没有提到假定为fget
的int
参数类型。然后声明另一个fget
类型的对象FILE *
,并用相同的名称隐藏参数变量。
使用gcc
时,由于参数的阴影,-Wshadow
警告选项将在第二个示例中为您提供警告:
-Wshadow
Warn whenever a local variable shadows another local variable,
parameter or global variable or whenever a built-in function is shadowed.