C如何运行?

J.S*_*him -1 c forward-declaration

我刚刚意识到当我在C中定义一个函数并使用它时,我可以使用它并稍后定义函数或者定义它并在以后使用它.例如,

int mult (int x, int y)
{
  return x * y;
}

int main()
{
  int x;
  int y;
  scanf( "%d", &x );
  scanf( "%d", &y );
  printf( "The product of your two numbers is %d\n", mult( x, y ) );
}
Run Code Online (Sandbox Code Playgroud)

int main()
    {
      int x;
      int y;
      scanf( "%d", &x );
      scanf( "%d", &y );
      printf( "The product of your two numbers is %d\n", mult( x, y ) );
    }   

int mult (int x, int y)
    {
      return x * y;
    }
Run Code Online (Sandbox Code Playgroud)

两者都会运行得很好.但是,在Python中,第二个代码将失败,因为它需要mult(x,y)在您使用它之前定义并且Python从上到下执行(据我所知).显然,在C中不可能是这种情况,因为第二个运行得很好.那么C代码实际上是如何流动的呢?

Sou*_*osh 13

好吧,严格来说,第二个代码无效C.

它使用编译器的灵活性来允许隐式声明函数,这在C标准中是不允许的.

C11标准明确提到"前言" 中的排除,

  1. 第二版的主要变化包括:

...

  • 删除隐式函数声明

你必须要么

  • 转发声明该功能.
  • 在使用之前定义函数(如代码片段1).

在编译器中启用警告,编译器应生成一些警告消息以通知您此问题.

  • 啊,我明白了,所以如果我把int mult(int x,int y); 在第二个代码的开头(并准确定义它后面会做什么)它在C标准中也会没问题,这是正确的吗? (3认同)
  • @ J.Shim是的,这被称为前进减速并且是合法的,并且通常是如何完成的. (2认同)