zoukankan      html  css  js  c++  java
  • C语言中函数声明实现的位置

    在学习C语言的时候我遇到了这么个事情,因为之前先学习的C#,在C#编译器中,函数的声明位置不会影响编译的结果,但是在C语言中却发生了错误

    先看一段代码:

    #include <stdio.h>
    
    int main()
    {
        fun1();
        fun1();
        fun1();
        fun2(); 
        return 0;
    } 
    
    /*方法1.用于输出消息1*/
    void fun1()
    {
        printf("For he's a jolly good fellow!
    ");
    }
    
    /*方法2,用于输出消息2*/ 
    void fun2()
    {
        printf("Which nobody can deny!
    ");
    }

    这时候编译器提示如下

    --------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

    正在编译 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c...
    [Error] C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c:27: error: conflicting types for 'fun1'
    [Error] C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c:10: error: previous implicit declaration of 'fun1' was here
    [Error] C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c:33: error: conflicting types for 'fun2'
    [Error] C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c:13: error: previous implicit declaration of 'fun2' was here
    [Warning] C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c:35:2: warning: no newline at end of file

    编译中止 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c: 4 个错误, 1 个警告

    提示出错,出现这个问题的原因是函数没找到?对于E文不好的我,这下可难坏我了,怎么办...

    那我换个方式试试

    #include <stdio.h>
    
    /*方法1,用于输出消息1*/ void fun1() { printf("For he's a jolly good fellow! "); } /*方法2,用于输出消息2*/ void fun2() { printf("Which nobody can deny! "); } int main() { fun1(); fun1(); fun1(); fun2(); return 0; }

    编译之后结果显示

    --------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

    正在编译 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c...

    完成编译 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c: 0 个错误, 0 个警告
    生成 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.o

    说明,之前的猜测正确,那么我们再想想,C语言学习的时候说过函数声明,那我们要不要再试试把之前编译错误的那段代码在main函数之前声明一次看看能不能编译成功

     1 #include <stdio.h>
     2 
     3 void fun1(void);
     4 void fun2(void);
     5 
     6 int main()
     7 {
     8     fun1();
     9     fun1();
    10     fun1();
    11     fun2(); 
    12     return 0;
    13 } 
    14 
    15 /*方法1,用于输出消息1*/ 
    16 void fun1()
    17 {
    18     printf("For he's a jolly good fellow!
    ");
    19 }
    20 
    21 /*方法2,用于输出消息2*/ 
    22 void fun2()
    23 {
    24     printf("Which nobody can deny!
    ");
    25 }

     编译器编译结果:

    --------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------

    正在编译 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c...

    完成编译 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.c: 0 个错误, 0 个警告
    生成 C:UsersyinheDocumentsC-FreeTempPractice2-12-4.o

     

    编译成功,说明了C和C#的区别之处,所以在以后C编程之旅中我们需要谨记需要使用自定义函数的时候,那么就尽量让自定义函数的声明和实现出现在main 函数之前。

    在这里我想说,娘啊,我好后悔上学的时候不好好学英语~~

  • 相关阅读:
    Swift游戏实战-跑酷熊猫 14 熊猫打滚
    Swift游戏实战-跑酷熊猫 13 二段跳的实现
    Swift游戏实战-跑酷熊猫 12 与平台的碰撞
    Swift游戏实战-跑酷熊猫 11 欢迎进入物理世界
    Swift游戏实战-跑酷熊猫 10 视差滚动背景
    Swift游戏实战-跑酷熊猫 09 移除场景之外的平台
    ANE-调用原生地图注意点
    ANE-如何加入ane,调试时又不报错
    ANE-调用原生组件横屏定位问题
    qrcode.js的识别解析二维码图片和生成二维码图片
  • 原文地址:https://www.cnblogs.com/BBHor/p/4819980.html
Copyright © 2011-2022 走看看