【问题标题】:What does a line after function declaration but outside function itself [duplicate]在函数声明之后但在函数本身之外的行是什么[重复]
【发布时间】:2015-06-07 01:06:07
【问题描述】:

如果C代码中出现主函数声明后的两行之类的东西是什么意思?

int main(argc,argv)
  int argc;
  char *argv[];
{
  // main function body
}

我以前从未见过这样的事情。代码工作得很好,但我很想知道这意味着什么。谢谢!

【问题讨论】:

标签: c


【解决方案1】:

这是在 K&R C 中声明参数参数的原始(阅读:古老)风格。在 ANSI C 标准中,您可能熟悉的形式就是标准。

另请参阅:What are the major differences between ANSI C and K&R C?

【讨论】:

    【解决方案2】:

    这只是声明该特定函数的参数数据类型的另一种方式。

    【讨论】:

    • 不,这实际上不是“声明参数数据类型的另一种方式”。这是一种定义函数接收的参数的方法 - 但只有在这些参数经过默认参数提升之后。
    • 是的。你说的对!所以我可以说 - 当我们不确定接收参数的数据类型时,使用默认参数提升。
    • 虽然它是另一种声明函数参数的方式,但它与较新的/ANSI/ISO C 声明和定义完全不兼容。我只是想清楚地指出这一点,所以没有人会认为他们可以做一些事情,比如将新风格的函数声明/原型与旧的 K&R 风格的函数定义混合在一起。
    【解决方案3】:

    那是"K&R" C。它已经过时了。

    不要使用它,即使你的编译器支持它。传递给以这种方式定义的函数的参数将经过参数提升,以便每个参数具有相同的大小(通过在最新 C 代码中提升可变参数的相同机制)。

    此类代码也不支持函数声明/原型。并且永远不要试图通过创建函数原型来“改进”这样的代码——你会破坏函数所期望的参数提升。

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2020-08-10
      • 1970-01-01
      相关资源
      最近更新 更多