1

コード:

foo()
{
}
int main()
{
   int a=20;
   a = foo(20);
   printf("\n\n\t A : %d",a); // will print zero.
}

質問 :

  1. foo()のリターンタイプがないことに気付くかもしれません。そして、それは「int」と見なされます、なぜですか?なぜこの「暗黙のint」ルールなのか?なぜCのデザイナーは「int」をそんなに愛したのですか?

  2. foo()にはパラメーター宣言がなく、可変数の引数を受け入れることができると言っています。では、渡された引数はどこに行きますか?例:foo(20)20はどこに行きましたか?

  3. 上記の例では、printfはゼロを出力します。なぜですか?


今、考えてみましょう:

foo()
{
}
int main()
{
   int a=20;
   a = foo(a);
   printf("\n\n\t A : %d",a); // It'll print 20. 
}
  • さて、printfは20を出力します。なぜ以前のように0ではないのですか?
4

1 に答える 1

2
  1. これは、私が理解している元の C 仕様からの歴史的なものです。戻り値の型を指定しない場合はint. それはあなたがそれを利用すべきだという意味ではありません。それは私の本では悪いスタイルです。

  2. これを読んでください: C void 引数 "void foo(void)" を使用する方が良いですか、それとも "void foo()" を使用しない方が良いですか?

  3. あなたが観察しているのは未定義の動作です。これは、何も返さない関数の戻り値を使用したときに得られるものです。

于 2013-03-10T20:55:25.003 に答える