在C语言中,可以在主函数内部和外部进行函数声明。

5
第一个程序编译成功。第二个程序报错,说foo的参数太少了...编译器是否忽略了两个程序中的全局声明? 第一个程序:
#include<stdio.h>
    void foo();
int main()
{
  void foo(int);
  foo(1);
  return 0;
}

void foo(int i)
{
   printf("2 ");
}

void f()
{
   foo(1);
}

第二个程序:

void foo();
int main()
{
  void foo(int);
  foo();
  return 0;
}

void foo()
{
   printf("2 ");
}

void f()
{
   foo();
}
2个回答

7

内部声明隐藏了在全局作用域的声明。第二个程序失败了,因为声明void foo(int);隐藏了全局声明void foo();; 所以当你在main中说foo时,你指的是带一个int参数的那个。


但我想知道内部声明是如何工作的?编译器是否总是忽略全局声明?例如,如果f()函数调用foo(),为什么它不考虑全局声明? - Vindhya G
@user1315833:内部声明总是隐藏同名的外部声明,因此编译器甚至无法看到外部声明(因为它被隐藏了)。 - K-ballo

0

我看到您正在研究内部声明的特定行为,但为什么不尝试:

#include<stdio.h>

void foo(int);

int main()
{
    foo(1);
    return 0;
}

void foo(int i)
{
   printf("2 ");
}

void f()
{
   foo(1);
}

或者甚至:

#include<stdio.h>

void foo(int i)
{
   printf("2 ");
}

void f()
{
   foo(1);
}

int main()
{
    foo(1);
    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接