可能重复:
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标准强烈反对使用它们。
在第二种形式中,没有提到假定为fgetint参数类型。然后声明另一个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.

10-08 03:54