C中main内部和main外部的函数声明

C中main内部和main外部的函数声明,c,C,第一个程序编译正确。第二个程序出错,表示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 f

第一个程序编译正确。第二个程序出错,表示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();
}

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

我看到你研究了内部声明的具体行为,但为什么不:

#include<stdio.h>

void foo(int);

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

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

void f()
{
   foo(1);
}
#包括
void foo(int);
int main()
{
傅(1),;
返回0;
}
空富(内部一)
{
printf(“2”);
}
void f()
{
傅(1),;
}
甚至:

#include<stdio.h>

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

void f()
{
   foo(1);
}

int main()
{
    foo(1);
    return 0;
}
#包括
空富(内部一)
{
printf(“2”);
}
void f()
{
傅(1),;
}
int main()
{
傅(1),;
返回0;
}

但我想知道内部声明是如何工作的?编译器总是忽略全局的吗?如在f-()函数中,如果它调用FULL(),它为什么不考虑全局声明?@ USE1315833:一个内部声明总是隐藏同一个名称的外部声明,因此编译器甚至不能看到外部声明(如它的隐藏)。