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!\n");
}

/*方法2,用于输出消息2*/ 
void fun2()
{
    printf("Which nobody can deny!\n");
}

这时候编译器提示如下

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

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

编译中止 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-12-4.c: 4 个错误, 1 个警告

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

那我换个方式试试

#include <stdio.h>

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

编译之后结果显示

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

正在编译 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-12-4.c...

完成编译 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-12-4.c: 0 个错误, 0 个警告
生成 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-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!\n");
19 }
20 
21 /*方法2,用于输出消息2*/ 
22 void fun2()
23 {
24     printf("Which nobody can deny!\n");
25 }

 编译器编译结果:

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

正在编译 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-12-4.c...

完成编译 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-12-4.c: 0 个错误, 0 个警告
生成 C:\Users\yinhe\Documents\C-Free\Temp\Practice2-12-4.o

 

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

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

 

转载于:https://www.cnblogs.com/BBHor/p/4819980.html

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值