天天看點

第8章 函數(八)函數的分級保護

   聲明:文中觀點僅代表個人,其中文字、圖檔未經本人許可,不得部分或全部轉載,違者所造成影響後後果自負!聯系本人方式: [email protected] QQ:80368704

内部函數和外部函數

       在面向過程的程式設計思想中,蘊藏着很多面向對象的程式設計思想的萌芽,除了前面我們看到的對資料的保護思想外,對函數調用的保護也是這些可貴的萌芽之一.

       我一直試圖用最淺顯的語言和最簡單的程式執行個體,說明程式設計的一些原理.不過用簡單的程式執行個體,說明複雜的思想或原理,是一件極難的事情,對于函數調用的說明就是如此.

       我們學習标準c的這些原理時:首要的任務是先了解這些原理的意義,如果可能再在程式中應用這些原理;我們将來是一定要進入c++的,c++是面向對象的,對資料和函數的保護原理有了革命性的變化,在标準c中具體的保護技術在c++中大都過時了,但保護的思想被革命性的繼承了下來.說這些的意思就是告訴你,保護的思想意義比具體保護技術重要的多,你的任務是首先了解函數保護的意義!

       第一點:一個機關的上司,他用誰,誰就有用;如果上司認為你沒用,不用你,你在這個機關就不會發揮任何作用.就像電線杆子戳在那裡,就像聾子的耳朵----配搭.

       第二點:前面我們講到過變量可以定義成全局變量,可以定義為局部變量,我們可以從定義位置上來快速差別它們,如果一個變量定義在所有函數之外,他就是全局變量,所有的工程函數都可以使用它.

       第三點:對于我們本章的例題-----程式4,一切從main()函數開始,而且從main()結束。顧名思義main()----主函數就是這個程式的上司,這應該毫無疑問的,如果main()中不調用max();那麼max();擺在那裡就沒有任何用處;就像電線杆子戳在那裡,就像聾子的耳朵----配搭.同樣min();average();也是為了main()調用它們完成相應的任務而誕生的.當然,子函數不僅能被主函數調用,子函數之間也可以互相調用.

       總而言之一句話:子函數就是要被另外的函數調用的.

       反過來說,如果希望工程的所有函數都可以使用某個變量,那麼你必須把它定義成全局的。

       我們再看一下子函數,既然一個子函數就是要被另外的函數調用的,那麼它天生就應該具有全局性,換句話說,子函數天生就是全局的,對外開放的,或者叫外部的,他必須被其他函數喚醒。我們說子函數天生的作用域是全部工程域。

       第四點:我們有時也限定子函數的作用域,例如,如果你做了大程式,這個程式是一個工程,這個工程有10個C檔案組成,每個C檔案中有10個子函數,假設,有一個檔案的檔案名是prg1.c,其中有一個函數的名字是max(),正常情況下,max()可以被這個工程中所有10個C檔案中的子函數調用,但是,現在,我們可以對max()子函數作一個限制,讓它隻能被prg1.c檔案中的子函數調用,其他的C檔案中的函數不能調用max(),這需要如下的書寫max:

==================援引自譚浩強<C程式設計>P199===========================

       如果定義子函數時在函數名和函數類型的前面加static,例如:

                   static float max(){};

       可以使函數的作用域限制于所在檔案,這種函數隻能被本檔案中的其他函數所調用,它稱為内部函數。

       于是在不同的檔案中有同名的内部函數,互不幹擾。這樣不同的人可以分别編寫不同的函數,而不必擔心所用函數是否會與其它檔案中函數同名,通常把隻能由同一個檔案使用的函數和外部變量放在一個檔案中,在它們前面都冠以static使之局部化,其他檔案不能引用。

================================================================================================

       在你完成一個具有工程規模的程式之前,上面這些内容隻能是霧裡看花,水中望月,于是,我隻能建議你立即行動,去寫個多檔案的工程程式,編譯連接配接運作,測試一下,别無他法。

繼續閱讀