为什么要在C中声明一个函数?

用户名

我有两个源文件test1.ctest2.c

test1.c

#include <stdio.h>

void main() {
    checks(); }

test2.c

#include <stdio.h>

void checks(){
    printf("This is a sample Text");
    }

在这种情况下,我可以成功构建并运行该程序。

那么我为什么要使用:

void checks();

要声明功能?

现在看来还不错。

我正在使用C99。

恐怖

在您的情况下,该check()函数具有非常简单的原型,C编译器应用的默认原型是接受任何内容作为参数并返回int可能是在这里完成的(除非,因为您不存储函数的结果而没有注意到它就被优化了)。

如果您想验证我的理论,请尝试编写以下内容(它应该工作到到达链接阶段为止):

int result = check();

最后,您的代码可以正常工作,因为链接器最终找到了可以对该check()函数进行插入的东西(但是,int在某个时候它仍然应该期望有一个)。

实际上,函数原型的声明仅在两种情况下有用:

  1. 该函数的代码和该函数的使用位于同一文件中。

    当在声明函数之前使用该函数(代码源)时,则需要告诉编译器在尝试静态键入正在编写的函数时会发生什么(编译器从上至下读取源代码文件)。

    例如:

    int bar (int a, int b, bool c);
    
    int foo (int a, bool b) {
        int result = bar (a, a, c);
        ...
    }
    
    int bar (int a, int b, bool c) {
        ...
     }
    
  2. 该函数的代码与该函数的使用不在同一个文件中。

    然后,通常可以通过头文件获得函数的定义,该头文件收集编译器所需的所有信息,以了解如何静态键入代码。头文件(*.h)包含您正在使用的模块功能的所有原型。功能的实现将在链接时进行。

请注意,我通常尝试避免第一种情况,因为这确实不合逻辑。当您阅读源代码时,就像编译器一样,您从头到尾都在寻找,并且希望在使用函数之前先找到函数定义...因此,以一种可以不需要这样的工件。在我的愚见...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在源文件中定义一个函数,然后在使用其引用之前在另一个文件中对其进行声明?

来自分类Dev

C ++:为什么要在切换的情况下声明一个变量

来自分类Dev

为什么我们需要在React Hook中返回一个函数?

来自分类Dev

为什么clang要求在模板中调用函数之前先声明一个函数?

来自分类Dev

为什么要编译?在另一个函数中声明的函数

来自分类Dev

graphql 为什么我需要在解析器参数中声明一个额外的参数

来自分类Dev

为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

来自分类Dev

C ++:在另一个函数中声明一个函数有什么用?

来自分类Dev

C++:为什么在另一个函数中允许函数声明而不是函数定义?

来自分类Dev

C-在函数中声明一个函数并返回

来自分类Dev

为什么要在C中使用函数声明?

来自分类Dev

在C中多次声明一个函数有什么意义?

来自分类Dev

在C中多次声明一个函数有什么意义?

来自分类Dev

为什么要在 C# UWP 中为一个内容保留两个变量?

来自分类Dev

在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

来自分类Dev

在理解概念方面需要帮助:为什么在标头中声明一个函数而在源文件中定义一个函数?

来自分类Dev

在理解概念方面需要帮助:为什么在标头中声明一个函数而在源文件中定义一个函数?

来自分类Dev

在C ++中声明一个operator +函数

来自分类Dev

在C中声明一个void函数

来自分类Dev

为什么要在函数及其原型上都设置一个属性?

来自分类Dev

为什么我需要在这里显式编写一个构造函数?

来自分类Dev

为什么我需要在这里显式编写一个构造函数?

来自分类Dev

为什么要在函数及其原型上都设置一个属性?

来自分类Dev

为什么在函数声明中的参数名称之前有一个类名称?

来自分类Dev

为什么必须在使用每个函数的每个函数之前声明一个模板?

来自分类Dev

return 停止一个函数并返回一个值。但是为什么要在变量上使用它呢?

来自分类Dev

为什么需要声明一个抽象。我需要在我的主要活动上实现 DirectionFinderListener 的替代方法

来自分类Dev

为什么要声明/创建一个单独的变量以通过引用进行调用,而不只是在函数调用中创建一个自动对象?

来自分类Dev

在ELF中,为什么标题需要在一个段中?

Related 相关文章

  1. 1

    为什么要在源文件中定义一个函数,然后在使用其引用之前在另一个文件中对其进行声明?

  2. 2

    C ++:为什么要在切换的情况下声明一个变量

  3. 3

    为什么我们需要在React Hook中返回一个函数?

  4. 4

    为什么clang要求在模板中调用函数之前先声明一个函数?

  5. 5

    为什么要编译?在另一个函数中声明的函数

  6. 6

    graphql 为什么我需要在解析器参数中声明一个额外的参数

  7. 7

    为什么我不能在 Chrome 中声明一个与函数体同名的 let 变量

  8. 8

    C ++:在另一个函数中声明一个函数有什么用?

  9. 9

    C++:为什么在另一个函数中允许函数声明而不是函数定义?

  10. 10

    C-在函数中声明一个函数并返回

  11. 11

    为什么要在C中使用函数声明?

  12. 12

    在C中多次声明一个函数有什么意义?

  13. 13

    在C中多次声明一个函数有什么意义?

  14. 14

    为什么要在 C# UWP 中为一个内容保留两个变量?

  15. 15

    在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

  16. 16

    在理解概念方面需要帮助:为什么在标头中声明一个函数而在源文件中定义一个函数?

  17. 17

    在理解概念方面需要帮助:为什么在标头中声明一个函数而在源文件中定义一个函数?

  18. 18

    在C ++中声明一个operator +函数

  19. 19

    在C中声明一个void函数

  20. 20

    为什么要在函数及其原型上都设置一个属性?

  21. 21

    为什么我需要在这里显式编写一个构造函数?

  22. 22

    为什么我需要在这里显式编写一个构造函数?

  23. 23

    为什么要在函数及其原型上都设置一个属性?

  24. 24

    为什么在函数声明中的参数名称之前有一个类名称?

  25. 25

    为什么必须在使用每个函数的每个函数之前声明一个模板?

  26. 26

    return 停止一个函数并返回一个值。但是为什么要在变量上使用它呢?

  27. 27

    为什么需要声明一个抽象。我需要在我的主要活动上实现 DirectionFinderListener 的替代方法

  28. 28

    为什么要声明/创建一个单独的变量以通过引用进行调用,而不只是在函数调用中创建一个自动对象?

  29. 29

    在ELF中,为什么标题需要在一个段中?

热门标签

归档