4

最初のプログラムは正しくコンパイルされました。2番目のプログラムは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);
}

2番目のプログラム:

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

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

void f()
{
   foo();
}
4

2 に答える 2

7

内部宣言は、グローバルスコープでの宣言を非表示にします。void foo(int);宣言がグローバル宣言を非表示にするため、2番目のプログラムは失敗しますvoid foo();fooですから、あなたが内で言うとき、あなたは議論としてmain取っているものを指しているのです。int

于 2012-06-14T15:52:28.123 に答える
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;
}
于 2012-06-14T16:03:36.323 に答える