传递给没有参数声明的函数时参数的位置

时间:2013-03-10 20:48:56

标签: c

代码:

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打印为零,为什么?


  4. 现在,考虑一下:

    foo()
    {
    }
    int main()
    {
       int a=20;
       a = foo(a);
       printf("\n\n\t A : %d",a); // It'll print 20. 
    }
    
    • 现在printf打印20为什么不像之前的那样0?

1 个答案:

答案 0 :(得分:2)

  1. 根据我的理解,这是原始C规范中的历史事物。如果您没有声明返回类型,那么它仍然在规范中,那么它是int。这并不意味着你应该利用它。这是我书中不好的风格。

  2. 请阅读:Is it better to use C void arguments "void foo(void)" or not "void foo()"?

  3. 您所观察到的是未定义的行为,这是您对不返回任何内容的函数使用返回值时所获得的行为。