分析C語(yǔ)言一個(gè)簡(jiǎn)單程序
首先給大家一個(gè)簡(jiǎn)單的例子,讓讀者有個(gè)整體的認(rèn)識(shí),代碼如下:
#include <stdio.h> int main() { puts("我們"); return 0; }
函數(shù)的概念
先來(lái)看第4行代碼,這行代碼會(huì)在顯示器上輸出“我們”。前面我們已經(jīng)講過(guò),puts 后面要帶( ),字符串也要放在( )中。
在C語(yǔ)言中,有的語(yǔ)句使用時(shí)不能帶括號(hào),有的語(yǔ)句必須帶括號(hào)。帶括號(hào)的稱為函數(shù)(Function) 。
C語(yǔ)言提供了很多功能,例如輸入輸出、獲得日期時(shí)間、文件操作等,我們只需要一句簡(jiǎn)單的代碼就能夠使用。但是這些功能的底層都比較復(fù)雜,通常是軟件和硬件的結(jié)合,還要要考慮很多細(xì)節(jié)和邊界,如果將這些功能都交給程序員去完成,那將極大增加程序員的學(xué)習(xí)成本,降低編程效率。
好在C語(yǔ)言的開(kāi)發(fā)者們?yōu)槲覀冏隽艘患檬?,他們已?jīng)編寫了大量代碼,將常見(jiàn)的基本功能都完成了,我們可以直接拿來(lái)使用。但是現(xiàn)在問(wèn)題來(lái)了,那么多代碼,如何從中找到自己需要的呢?一股腦將所有代碼都拿來(lái)顯然是非常不明智的。
這些代碼,早已被分門別類地放在了不同的文件中,并且每一段代碼都有唯一的名字。使用代碼時(shí),只要在對(duì)應(yīng)的名字后面加上( )就可以。這樣的一段代碼能夠獨(dú)立地完成某個(gè)功能,一次編寫完成后可以重復(fù)使用,被稱為函數(shù)(Function)。讀者可以認(rèn)為,函數(shù)就是一段可以重復(fù)使用的代碼。
函數(shù)的一個(gè)明顯特征就是使用時(shí)必須帶括號(hào)( ),必要的話,括號(hào)中還可以包含待處理的數(shù)據(jù)。例如puts("我們")就使用了一段具有輸出功能的代碼,這段代碼的名字是 puts,"我們" 是要交給這段代碼處理的數(shù)據(jù)。使用函數(shù)在編程中有專業(yè)的稱呼,叫做函數(shù)調(diào)用(Function Call)。
如果函數(shù)需要處理多個(gè)數(shù)據(jù),那么它們之間使用逗號(hào),分隔,例如:
pow(10, 2);
該函數(shù)用來(lái)求10的2次方。
需要注意的是,C語(yǔ)言中的函數(shù)和數(shù)學(xué)中的函數(shù)不是同一個(gè)概念,不要拿兩者對(duì)比。函數(shù)的英文名稱是 Function,它還有“功能”的意思。大陸將 Function 翻譯為“函數(shù)”,而臺(tái)灣地區(qū)翻譯為“函式”,讀者要注意區(qū)分。
自定義函數(shù)和main函數(shù)
C語(yǔ)言自帶的函數(shù)稱為庫(kù)函數(shù)(Library Function) 。庫(kù)(Library)是編程中的一個(gè)基本概念,可以簡(jiǎn)單地認(rèn)為它是一些列函數(shù)的集合,在磁盤上往往是一個(gè)文件夾。C語(yǔ)言自帶的庫(kù)稱為標(biāo)準(zhǔn)庫(kù)(Standard Library) ,其他公司或個(gè)人開(kāi)發(fā)的庫(kù)稱為第三方庫(kù)(Third-Party Library) 。
除了庫(kù)函數(shù),我們還可以編寫自己的函數(shù),拓展程序的功能。自己編寫的函數(shù)稱為自定義函數(shù)。自定義函數(shù)和庫(kù)函數(shù)在編寫和使用方式上完全相同,只是由不同的機(jī)構(gòu)來(lái)編寫。
示例中第2~6行代碼就是我們自己編寫的一個(gè)函數(shù)。main 是函數(shù)的名字,( ) 表明這是函數(shù)定義,{ } 之間的代碼是函數(shù)要實(shí)現(xiàn)的功能。
函數(shù)可以接收待處理的數(shù)據(jù),同樣可以將處理結(jié)果告訴我們;使用return可以告知處理結(jié)果。示例中第5行代碼表明,main 函數(shù)的處理結(jié)果是整數(shù) 0。return 可以翻譯為“返回”,所以函數(shù)的處理結(jié)果被稱為返回值(Return Value) 。
第2行代碼中,int 是 integer 的簡(jiǎn)寫,意為“整數(shù)”。它告訴我們,函數(shù)的返回值是整數(shù)。
需要注意的是,示例中的自定義函數(shù)必須命名為 main。C語(yǔ)言規(guī)定,一個(gè)程序必須有且只有一個(gè) main 函數(shù)。main 被稱為主函數(shù),是程序的入口函數(shù),程序運(yùn)行時(shí)從 main 函數(shù)開(kāi)始,直到 main 函數(shù)結(jié)束(遇到 return 或者執(zhí)行到函數(shù)末尾時(shí),函數(shù)才結(jié)束)。
也就是說(shuō),沒(méi)有 main 函數(shù)程序?qū)⒉恢缽哪睦镩_(kāi)始執(zhí)行,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。
綜上所述:第2~6行代碼定義了主函數(shù) main,它的返回值是整數(shù) 0,程序?qū)倪@里開(kāi)始執(zhí)行。main 函數(shù)的返回值在程序運(yùn)行結(jié)束時(shí)由系統(tǒng)接收。
關(guān)于自定義函數(shù)的更多內(nèi)容,我們將在《C語(yǔ)言函數(shù)》一章中詳細(xì)講解,這里不再展開(kāi)討論。
有的教材中將 main 函數(shù)寫作:
void main() { // Some Code... }
這在 VC6.0 下能夠通過(guò)編譯,但在 C-Free、GCC 中卻會(huì)報(bào)錯(cuò),因?yàn)檫@不是標(biāo)準(zhǔn)的 main 函數(shù)的寫法,大家不要被誤導(dǎo),最好按照示例中的格式來(lái)寫。
頭文件的概念
還有最后一個(gè)問(wèn)題,示例中第1行的#include <stdio.h>是什么意思呢?
C語(yǔ)言開(kāi)發(fā)者們編寫了很多常用函數(shù),并分門別類的放在了不同的文件,這些文件就稱為頭文件(header file) 。每個(gè)頭文件中都包含了若干個(gè)功能類似的函數(shù),調(diào)用某個(gè)函數(shù)時(shí),要引入對(duì)應(yīng)的頭文件,否則編譯器找不到函數(shù)。
實(shí)際上,頭文件往往只包含函數(shù)的說(shuō)明,也就是告訴我們函數(shù)怎么用,而函數(shù)本身保存在其他文件中,在鏈接時(shí)才會(huì)找到。對(duì)于初學(xué)者,可以暫時(shí)理解為頭文件中包含了若干函數(shù)。
引入頭文件使用#include命令,并將文件名放在< >中,#include 和 < > 之間可以有空格,也可以沒(méi)有。
頭文件以.h為后綴,而C語(yǔ)言代碼文件以.c為后綴,它們都是文本文件,沒(méi)有本質(zhì)上的區(qū)別,#include 命令的作用也僅僅是將頭文件中的文本復(fù)制到當(dāng)前文件,然后和當(dāng)前文件一起編譯。你可以嘗試將頭文件中的內(nèi)容復(fù)制到當(dāng)前文件,那樣也可以不引入頭文件。
.h中代碼的語(yǔ)法規(guī)則和.c中是一樣的,你也可以#include <xxx.c>,這是完全正確的。不過(guò)實(shí)際開(kāi)發(fā)中沒(méi)有人會(huì)這樣做,這樣看起來(lái)非常不專業(yè),也不規(guī)范。
較早的C語(yǔ)言標(biāo)準(zhǔn)庫(kù)包含了15個(gè)頭文件,stdio.h 和 stdlib.h 是最常用的兩個(gè):
stdio 是 standard input ouput 的縮寫,stdio.h 被稱為“標(biāo)準(zhǔn)輸入輸出文件”,包含的函數(shù)大都和輸入輸出有關(guān),puts() 就是其中之一。
stdlib 是 standard library 的縮寫,stdlib.h 被稱為“標(biāo)準(zhǔn)庫(kù)文件”,包含的函數(shù)比較雜亂,多是一些通用工具型函數(shù),system() 就是其中之一。
最后的總結(jié)
初學(xué)編程,有很多基本概念需要了解,本節(jié)就涉及到很多,建議大家把上面的內(nèi)容多讀幾遍,必將有所收獲。
本節(jié)開(kāi)頭的示例是一個(gè)C語(yǔ)言程序的基本結(jié)構(gòu),我們不妨整理一下思路,從整體上再分析一遍:
1) 第1行引入頭文件 stdio.h,這是編程中最常用的一個(gè)頭文件。頭文件不是必須要引入的,我們用到了 puts 函數(shù),所以才引入 stdio.h。例如下面的代碼完全正確:
int main() { return 0; }
我們沒(méi)有調(diào)用任何函數(shù),所以不必引入頭文件。
2) 第2行開(kāi)始定義主函數(shù) main。main 是程序的入口函數(shù),一個(gè)C程序必須有 main 函數(shù),而且只能有一個(gè)。
3) 第4行調(diào)用 puts 函數(shù)向顯示器輸出字符串。
4) 第5行是 main 函數(shù)的返回值。程序運(yùn)行正確一般返回 0。
以上就是對(duì) C語(yǔ)言簡(jiǎn)單程序的分析,希望能幫到初學(xué)者。
上一篇:詳解數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言實(shí)現(xiàn)之循環(huán)隊(duì)列
欄 目:C語(yǔ)言
下一篇:如何用C語(yǔ)言、Python實(shí)現(xiàn)棧及典型應(yīng)用
本文標(biāo)題:分析C語(yǔ)言一個(gè)簡(jiǎn)單程序
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2132.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-11Mac OSX 打開(kāi)原生自帶讀寫NTFS功能(圖文
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery