【问题标题】:Why use function prototypes?为什么要使用函数原型?
【发布时间】:2014-03-07 09:33:50
【问题描述】:

为什么在 C 中使用函数原型?这似乎有点多余,因为我们已经在定义中声明了函数名、参数类型和返回类型。原型是否必须在函数定义或用于优化之前声明?

【问题讨论】:

  • 在函数之前我认为你应该询问变量,我们首先声明然后使用例如int i; 然后i = 10 !!你知道为什么吗?而在 Python 类型的语言中,i = 10 只是一个没有任何事先声明的有效表达式
  • Do the prototypes have to be declared before the function is defined or used for the optimizations?。不,它只是为了通知编译器使其易于解析。你知道解析技术吗?

标签: c function-prototypes


【解决方案1】:

虽然函数定义指定了函数的作用,但函数原型可以被认为是指定其接口。

创建库接口: 通过将函数原型放在头文件中,可以为库指定接口。

【讨论】:

    【解决方案2】:

    一般来说,您不需要显式声明函数,因为定义它们也会声明它们。以下是您需要的两种情况:

    1. 函数的定义在外部模块中。

      例如,如果函数在definer.c 中定义,但您想从user.c 调用它,则需要在user.c 或其包含的文件中声明该函数(通常为definer.h )。

    2. 函数的定义是在调用它之后。

      例如,如果您有两个相互调用的函数,则需要在定义第一个函数之前声明第二个函数。

    【讨论】:

      【解决方案3】:

      通过函数的声明,编译器可以检查参数和返回值的使用是否一致,即使函数没有在这个模块中实现也可以编译代码。 如果函数仅在相应模块中声明但未实现,则此间隙将由链接器而不是编译器来弥补。

      类似于声明外部变量。如果您定义它们,它们的内存将被分配多次。这就是为什么你永远不应该在 h 文件中定义变量,而是在那里声明它们。包含 h 文件会导致多次分配内存。

      【讨论】:

        猜你喜欢
        • 2018-03-16
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 2017-02-16
        相关资源
        最近更新 更多