--說說函數:
函數這兩個字相信大家都不會陌生,尤其對于學習理科工科的同學們,函數更是那最不可觸及的痛。英文單詞為:function,所以我們學的數學中的函數關系一般用F(x)表示吧(我個人推測的,因為沒人跟我說過這個貌似無聊的事,不過為什么翻譯成函數呢,真是)。 函數的功能是什么啊?大家學數學時(無論是高中的代數還是大學的微積分)都主要是跟函數打交道,此處刨除定義域值域啊之類不談,函數的功能可以簡單的說成輸入一個數就會有一個唯一的確定的值輸出。 數學中的函數: F(x)=2x+1 C語言里同樣需要函數,而且函數在C語言中扮演這重要的角色。C語言中函數是用于完成特定任務的程序代碼的自包含單元。 C語言中的函數: int main (void) { 函數體; } 為什么C語言要使用函數呢? 第一、使用函數主要是為了調用,在每次使用時調用函數,就不用一遍又一遍的重新編寫代碼。函數可以在任何需要的地方調用,并且同一個函數可以在不同的程序中調用。 第二、使用函數使程序更加模塊化,即使某種功能在程序中只是使用一次,將其以函數的形式實現也是有好處的,程序的模塊化使得程序的閱讀、修改、移植都更加方便。
--函數結構:

拿一個在單片機程序中最常用的函數--延遲函數為大家舉例。
一個完整的C函數可以說是由函數頭和函數體組成的。 #include “stdio.h” 該句的作用相當于你在文件中該行所在的位置鍵入了文件stdio.h(stdio.h是所以C語言編譯包的一個標準部分,這個文件對關鍵字的輸入和顯示輸出提供支持)的完整內容。實際上,它是一種復制和粘貼的操作,這樣可以方便的在多個程序間共享共用的信息。 我在上邊聲明了一個函數如下: void Delay(uint8_t count) void是修飾返回值 Delay是函數名 uint8_t是修飾參數 count是參數名 C程序中包含一個或多個函數,它們是C程序的基本模塊。上面聲明了一個這樣的函數(大家給解釋這個函數的結果,順路和大家一起寫個我們想寫的新的函數):函數名叫作Delay(英文單詞delay就是延遲的意思,這個是可以根據你使用的需求自己決定的,比如我就想寫成Yanchi,拼音更好記),這個函數接受參數叫count(英文單詞count是計數的意思,這個參數的名字你也可以自己決定,比如我就想寫成a,count我記不住)且根據參數名前邊的uint8_t可知道此參數為8位無符號整數型(范圍為0--255的整數,額,這個例子舉的其實有點小了,真正使用時建議使用32位的 那我就改成uint32_t)。而前邊的void修飾的是返回值,void的英文意思是空,什么都沒有,就是不返回任何數。我就想要個返回值,返回個0告訴我延遲已經解釋了。 那么我就可以申明這樣一個函數 int Yanchi(uint32_t a) 而函數體就是大家想讓函數執行的語句,就要靠大家按照自己的想法編寫了。 許多程序員喜歡把函數看成是“黑盒子”,即對應一定的輸入會產生特定的結果和返回某個數值,而黑盒子內部的行為并不需要考慮,這種想法在以后編寫復雜的程序時是很實用的,如STM32基于庫文件編寫程序時大量調用庫函數還有移植嵌入式操作系統時也會調用大量函數。
--C標準庫函數:
ANSIC C標準要求符合該標準的C語言實現必須支持由其定義的標準庫函數。C語言本身的關鍵字只是定義了最基本的語言控制功能,其他的所以功能都是由函數實現。我們可以說C語言是一種基于函數的高級語言,而這其中標準庫函數實現了一些最基礎基本的底層操作和常用工具。 輸入與輸出:stdio.h 頭文件stdio.h中定義了輸出和輸入函數、類型以及宏。用于處理和文件有關的操作、為printf函數提供格式化輸出轉換。 字符串函數:string.h 頭文件string.h定義了兩組字符串函數。 數學函數:math.h
頭文件math.h包含了一些數學函數和宏。 斷言:assert.h assert宏用于為程序增加診斷功能。
有大一學弟們反映說這個每周文章里邊說的C語言知識和學校發的教材不同步,我倒是沒核實因為我手頭上沒有學校的教材,當年是學過但早忘了都講啥了。只想說不同步很正常的,教材里的內容還是比較有限的,咱們課堂好像后幾章也沒講,大家可以自己找幾本書(我前邊C語言開講啦(一)里專門推薦了基本比較好的書),其實主要是多寫程序多讀程序(寫的同時自然就讀了),多多的借鑒精品程序(說白了也就是抄和改別人寫好無誤的程序,并保證你抄改完后還能正常使用)(其實我覺得這個寫程序拷貝別人的參考別人的也不丟人,高考作文大家還借鑒呢是吧,再說誰就敢說我的程序都是自己寫的呢。千古文章一大抄。)在實際中遇到解決不了的問題,就翻書找找知識點。如果一段時間積累了不少問題了,那就靜下心來前期后后的好好學學這部分的知識。
以下是本系列教程文章列表:歡迎大家踴躍討論,有問題可在51黑論壇回帖提出.
C語言基礎教程(1):http://m.zg4o1577.cn/bbs/dpj-41177-1.html C語言教程(2)-關鍵字 變量:http://m.zg4o1577.cn/bbs/dpj-41178-1.html C語言教程(3)-控制語句:http://m.zg4o1577.cn/bbs/dpj-41179-1.html C語言教程(4)-運算符:http://m.zg4o1577.cn/bbs/dpj-41180-1.html C語言教程(5)-函數:http://m.zg4o1577.cn/bbs/dpj-41181-1.html C語言教程(6)-數組與函數指針:http://m.zg4o1577.cn/bbs/dpj-41182-1.html
51單片機教程:http://m.zg4o1577.cn/bbs/mcu-xuexi-1.html STM32教程:http://m.zg4o1577.cn/bbs/dpj-41167-1.html
|