C语⾔中函数声明实现的位置
在学习C语⾔的时候我遇到了这么个事情,因为之前先学习的C#,在C#编译器中,函数的声明位置不会影响编译的结果,但是在C语⾔中却发⽣了错误
先看⼀段代码:
#include <stdio.h>
int main()
{
fun1();
fun1();
fun1();
fun2();
return0;
}
/*⽅法1.⽤于输出消息1*/
void fun1()
{
printf("For he's a jolly good fellow!\n");
}
/*⽅法2,⽤于输出消息2*/
void fun2()
{
printf("Which nobody can deny!\n");
}
这时候编译器提⽰如下
printf函数是如何实现的--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------
正在编译 C:\Users\yinhe\Documents\C-Free\
[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();
return0;
}
编译之后结果显⽰
-
-------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------
正在编译 C:\Users\yinhe\Documents\C-Free\
完成编译 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
3void fun1(void);
4void fun2(void);
5
6int main()
7 {
8    fun1();
9    fun1();
10    fun1();
11    fun2();
12return0;
13 }
14
15/*⽅法1,⽤于输出消息1*/
16void fun1()
17 {
18    printf("For he's a jolly good fellow!\n");
19 }
20
21/*⽅法2,⽤于输出消息2*/
22void fun2()
23 {
24    printf("Which nobody can deny!\n");
25 }
编译器编译结果:
--------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW--------------------
正在编译 C:\Users\yinhe\Documents\C-Free\
完成编译 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 函数之前。
在这⾥我想说,娘啊,我好后悔上学的时候不好好学英语~~