




已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
11.1 編譯預處理 11.1.1 宏替換 11.1.2 文件包含 11.2 動態(tài)存儲分配,第11章 編譯預處理和動態(tài)存儲分配,11.1 編譯預處理 凡是以#開頭的行,稱為“編譯預處理”命令行,作用:對源程序編譯之前做一些處理, 然后將預處理的結果和源程序一起再進行正常的編譯處理以得到目標代碼。 種類 宏定義 #define 文件包含 #include 格式: “#”開頭 占單獨書寫行 語句尾不加分號,如 if(x=YES) printf(“correct!n”); else if (x=NO) printf(“error!n”); 展開后: if(x=1) printf(“correct!n”); else if (x=0) printf(“error!n”);,11.1.1宏替換 不帶參數(shù)宏替換 一般形式: #define 宏名 宏體 功能:用字符序列(宏體)代替指定標識符(宏名),宏展開:預編譯時,用宏體替換宏名-不作語法檢查,如 #define YES 1 #define NO 0 #define PI 3.1415926 #define OUT printf(“Hello,World”);,宏體可缺省,可包含已 定義過的宏名,定義位置:一般在程序開頭 作用域:從定義命令到文件結束 #undef可終止宏名作用域 格式: #undef 宏名,宏定義可嵌套,不能遞歸,例 #define MAX MAX+10 (),引號中的內(nèi)容與宏名相同也不置換,例 #define PI 3.14159 printf(“2*PI=%fn”,PI*2); 宏展開:printf(“2*PI=%fn”,3.14159*2);,宏定義中使用必要的括號(),例 #define WIDTH 80 #define LENGTH WIDTH+40 var=LENGTH*2; 宏展開:var= 80+40 *2;,說明: 宏名一般用大寫字母。這不是語法規(guī)定,只是一種習慣。 可以使用宏名代替一個字符串 當宏定義在一行中寫不下,需要在下一行繼續(xù)時,只需在最后一個字符后緊接一個反斜線“”。例如: #define LEAP_YEAR year % 4=0 & year %100!=0 | year % 400=0 注意在第二行開始不要有空格,否則空格會一起被替換。 宏名的有效范圍為定義命令之后到本源文件結束,除非用#undef命令終止宏名的作用域。 對程序中用雙引號括起來的字符串內(nèi)的子串和用戶標識符中的成分不做替換。 同一個宏名不能重復定義。,帶參數(shù)宏替換 一般形式: #define 宏名(參數(shù)表) 宏體,例 #define S (r) PI*r*r 相當于定義了不帶參宏S,代表字符串“(r) PI*r*r”,宏展開:形參用實參換,其它字符保留 宏體及各形參外一般應加括號(),例 #define S(a,b) a*b area=S(3,2); 宏展開: area=3*2;,不能加空格,例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展開:z=x+y*x+y; 一般寫成: #define POWER(x) (x)*(x) 宏展開: z=(x+y)*(x+y);,帶參的宏與函數(shù)區(qū)別,11.1.2 文件包含 功能:一個源文件可將另一個源文件的內(nèi)容全部包含進來 一般形式: #include “文件名” 或 #include ,處理過程:預編譯時,用被包含文件的內(nèi)容取代該預處理命令,再對“包含”后的文件作一個源文件編譯, 直接按標準目錄搜索 “” 先在當前目錄搜索,再搜索標準目錄 可指定路徑,被包含文件內(nèi)容 源文件(*.c) 頭文件(*.h),宏定義 數(shù)據(jù)結構定義 函數(shù)說明等,文件包含可嵌套,例 文件包含舉例,11.2動態(tài)存儲分配,內(nèi)存空間分配方式:靜態(tài)存儲分配和動態(tài)存儲分配 靜態(tài)存儲分配:c編譯程序根據(jù)他們的大小分配內(nèi)存空間,并且內(nèi)存空間在整個生存期是固定不變的。這種分配方式稱為靜態(tài)存儲分配。 動態(tài)存儲分配:在程序執(zhí)行期間動態(tài)需要空間存儲數(shù)據(jù),當空間不需要時可以隨時釋放分配的空間。這種分配方式稱為動態(tài)存儲分配。 系統(tǒng)提供了4個函數(shù):malloc calloc free realloc 頭文件stdlib.h中,1、malloc函數(shù) void *malloc(unsigned size); 功能:分配size個字節(jié)的存儲空間 返回值:分配內(nèi)存空間的地址,如不成功返回0。 例:int *pi; float *pf; pi=(int *)malloc(2);pf=(float *)malloc(4); pi=(int *)malloc(sizeof(int) /*系統(tǒng)計算指定類型的字節(jié)數(shù)*/ pf=(float *)malloc(sizeof(float) 2、free函數(shù) 函數(shù)的調(diào)用形式 :free(p)/*將指針p所指存儲空間釋放*/,3、calloc函數(shù) void *calloc(unsigned n,unsigned size); 功能:用來給n個同一類型的數(shù)據(jù)項連續(xù)的分配存儲空 間。每個數(shù)據(jù)項長度為size個字節(jié)。 返回值:分配內(nèi)存空間的首地址,如不成功返回0。 例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一級市政試題及答案
- 戶外拓展服務合同協(xié)議書
- 2025年醫(yī)用電子直線加速器合作協(xié)議書
- 2025年智能卡制作發(fā)行機項目合作計劃書
- 網(wǎng)紅餐飲品牌連鎖加盟授權與特色原料供應協(xié)議
- 域名注冊與轉(zhuǎn)讓爭議解決協(xié)議
- 網(wǎng)絡安全前沿介紹
- 藥品進口清關與市場準入代理服務協(xié)議
- 農(nóng)業(yè)設施大棚租賃與農(nóng)業(yè)觀光服務合同
- 貨物運輸途中自然災害賠償合同
- 隧道工程隧道洞口臨建施工方案
- 心理咨詢的面談技術
- DBJ∕T13-374-2021 福建省鋼筋桁架疊合樓板技術標準
- 事故池管理的有關規(guī)定
- (word完整版)污水處理廠安全評價報告
- DB50∕T 867.6-2019 安全生產(chǎn)技術規(guī)范 第6部分:黑色金屬冶煉企業(yè)
- 新產(chǎn)品開發(fā)流程課件
- 高中語文部編版選擇性必修下冊第四單元 單元學習導航 課件 (8張PPT)
- 化妝品原料-PPT課件
- 重慶市參加企業(yè)職工基本養(yǎng)老保險人員退休審批表
- 混凝土結構課程設計244
評論
0/150
提交評論