程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中函數聲明實現的位置,c語言函數聲明

C語言中函數聲明實現的位置,c語言函數聲明

編輯:關於C語言

C語言中函數聲明實現的位置,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 函數之前。

在這裡我想說,娘啊,我好後悔上學的時候不好好學英語~~

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved