偷偷告訴你C的有些難題是這樣理解的 2

2022-05-05 22:33:11 字數 1122 閱讀 3361

主要任務

刪除注釋,插入#include指令包含的檔案內容,定義和替換由#define指令定義的符號以及確定**的部分內容是否應該根據一些條件編譯指令進行編譯

1.預定義符號

_file_    「name.c」  進行編譯的源檔名

_line_    25           檔案當前的行號

_date_                  檔案編譯的日期

_time_                   檔案編譯的時間

_stdc_                 如果編譯器遵循ansi c,其值為1,否則未定義

2.巨集和函式的不同之處

巨集和函式的區別

1. 巨集做的是簡單的字串替換(注意是字串的替換,不是其他型別引數的替換),而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別.

2. 巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.

3. 巨集在編譯之前進行,即先用巨集體替換巨集名,然後再編譯的,而函式顯然是編譯之後,在執行時,才呼叫的.因此,巨集占用的是編譯的時間,而函式占用的是執行時的時間.

4. 巨集的引數是不佔記憶體空間的,因為只是做字串的替換,而函式呼叫時的引數傳遞則是具體變數之間的資訊傳遞,形參作為函式的區域性變數,顯然是占用記憶體的.

5. 函式的呼叫是需要付出一定的時空開銷的,因為系統在呼叫函式時,要保留現場,然後轉入被呼叫函式去執行,呼叫完,再返回主調函式,此時再恢復現場,這些操作,顯然在巨集中是沒有的.

現在來看內聯函式:

所謂"內聯函式"就是將很簡單的函式"內嵌"到呼叫他的程式**中,隻樣做的目的是為了避免上面說到的第5點,目的旨在節約下原本函式呼叫時的時空開銷.但必須注意的是:作為內聯函式,函式體必須十分簡單,不能含有迴圈、條件、選擇等複雜的結構,否則就不能做為內聯函式了。事實上,即便你沒有指定函式為內聯函式,有的編譯系統也會自動將很簡單的函式作為內聯函式處理;而對於複雜的函式,即便你指定他為內聯函式,系統也不會理會的。

偷偷告訴你C的有些難題是這樣理解的 0

1.什麼是eof 今天在程式設計的時候碰到eof,好好理解一下 end of file,在電腦的術語縮寫通常為 eof,在作業系統決定資料來源無更多的資料可讀取。資料來源通常稱為檔案或串流。在 c語言,或更精確地說成 c標準函式庫,檔案訪問或其它 i o 功能可能傳回等於象徵符號值 巨集 eof 指...

原來你是這樣的PaaS!

啥叫paas?許多人身處網際網路領域,對paas仍然是霧裡看花。它看似複雜,其實只要用對看法,人人都可以輕鬆的認識它。網路上盛傳著用pizza為例子幫助人們了解什麼是paas,那麼編者今天也不舉栗子了,也舉個pizza得了。pizza 本地部署 就是你準備餐桌 烤箱 麵糰 乳酪等所有物品。在家自己做...

店大欺客?原來你是這樣的亞馬遜

前段時間,在亞馬遜下了個訂單,結果等了乙個多月,商品沒等來,卻遇到了亞馬遜單方面取消訂單。收到退款的我大概就是下面這樣的表情 曾經在國內各大電商買過很多東西,都沒有遇到過這樣的情況,怎麼一到亞馬遜就踩坑了呢,難道是運氣太好中了 大獎 於是我開啟了黑貓投訴進行投訴,發現好像也有其他的使用者遇到了類似的...