14 條件編譯

2021-07-03 19:30:15 字數 2488 閱讀 3994

巨集操作符包括#和##

這兩個操作符都是對巨集不代表數字的引數進行

處理的#操作符可以把乙個引數轉換成字串字面值

(在引數前後各加乙個")

##操作符可以把乙個代表識別符號的引數和其他內容

合併得到乙個新識別符號

條件編譯可以在編譯的時候決定哪些語句需要編譯

哪些語句不需要編譯

條件編譯是使用預處理指令實現的

#ifdef/#ifndef...#else...#endif

以上結構可以在編譯的時候根據乙個巨集是否曾經

被定義過從兩組語句中選擇一組編譯

#ifdef指定如果後面的巨集名稱被定義了則編譯

前一組,否則編譯後一組

#ifndef指定如果後面的巨集名稱沒有被定義則編譯

前一組,否則編譯後一組

#if...#elif(次數任意)...#else....#endif

在#if和#elif後面都要加布林值,當布林值為真

時編譯它下面的那組語句

以上結構可以根據布林值從多組語句中選擇一組

編譯布林值可以使用邏輯表示式計算得到,邏輯表示式

中可以使用所有邏輯操作符

多檔案程式設計中乙個檔案裡可以包含多個函式,

乙個函式必須完整的屬於乙個檔案

多檔案程式設計步驟

1.把多個函式分散在多個原始檔裡(主函式單獨

放在乙個檔案裡)

2.為所有原始檔編寫配對的以.h作為副檔名的

檔案,這種檔案叫標頭檔案。(只包含主函式

的原始檔不需要編寫配對的標頭檔案)

只要不分配記憶體的內容都可以寫在標頭檔案

裡(至少要包含配對原始檔中所有函式的

宣告)3.為每個原始檔使用#include預處理指令把它所

需要的標頭檔案包含進來(必要的標頭檔案

包括配對標頭檔案和包含被使用函式宣告的

標頭檔案)

編譯多檔案程式時需要在gcc命令中包含所有源

檔名稱

標頭檔案內容應該被包含在條件編譯預處理指令

之間,這樣可以避免同樣的內容被多次

重複編譯。

標頭檔案中的巨集名稱應該採用檔案路徑,這樣可以

避免不同標頭檔案中的巨集名稱衝突

如果在乙個原始檔中需要使用另外乙個原始檔

中宣告的全域性變數則需要使用extern關鍵字

在這個檔案中把它再次宣告一下。這種宣告

方式不會分配儲存區只是在這個檔案中引入

變數名稱。

使用extern關鍵字宣告變數的語句應該放在頭

檔案裡結構體可以把多個相關的不同型別的資料合併

成乙個整體

結構體是一種資料型別,它本身不佔儲存區,

它僅僅描述了多種不同型別資料之間的

關係使用結構體作為資料型別宣告的變數叫做結構體

變數,結構體變數裡才真正包含儲存區。

宣告結構體的時候需要使用struct關鍵字

結構體宣告中包含的變數宣告語句不會分配儲存區

因此也不可以初始化

結構體宣告通常寫在標頭檔案裡

在結構體宣告語句後寫乙個變數名稱就可以宣告

結構體變數

這樣宣告結構體變數會導致結構體宣告語句分配

儲存區,所以通常不這麼做

可以把struct關鍵字和結構體名稱合起來作為

資料型別名稱使用宣告結構體變數

c語言裡結構體內部不可以包含函式

typedef關鍵字可以用來給乙個資料型別起別名

絕不可以用巨集給資料型別起別名,這有可能會

造成錯誤

可以把結構體宣告語句和typedef語句合併,這樣

就同時宣告了結構體也給它起了別名

可以在合併後把結構體本身的名稱省略,但是

這樣就不能使用struct關鍵字和結構體名稱

作為資料型別宣告結構體變數了。

結構體變數名稱後加.然後加子部分名稱就可以

表示結構體變數中某一部分的儲存區

結構體變數儲存區也可以和指標**,這種指標

叫結構體指標

結構體指標後加->然後加子部分名稱就可以表示

**結構體儲存區里的某個子部分

結構體可以採用陣列初始化的語法進行初始化

結構體變數不能作為整體參與數學計算,只能

對結構體變數內部某個基本型別的子部分

進行數學計算

練習:宣告乙個結構體,這種結構體應該可以記錄乙個畫素的位置,

宣告結構體,這種結構體的變數應該可以記錄螢幕上乙個長方形的位置(長方形一定是水平的)

結構體變數不能作為整體參與數學計算

只能對結構體變數內部某個基本型別的子部分進行數學計算

練習:編寫程式根據使用者給定的長方形的位置計算出它的面積

預習:1.結構體(結構體作為函式的形式引數和

返回值,資料對齊和補齊)

2.列舉與聯合

3.動態記憶體分配

作業:1.宣告乙個結構體,這個結構體的變數可以

記錄螢幕上一條線段的位置。編寫程式從

鍵盤得到兩條線段的位置,把其中長度

長的那個線段位置列印在螢幕上。

5 4 條件編譯

1 ifndef 含義是 if not define,如果沒有定義 2 ifdef 含義是 if define,如果已經定義 3 if 配合函式 defined 使用,if defined macro ifdef macro,如果已經定義了巨集 macro 三者均要以 endif 進行結尾。標頭檔案...

Python基礎 1 4 條件與迴圈

在應用場景中我們經常需要使用 條件的判斷,來篩選需要的資料,以及通過篩選來完成重複的步驟,也就是所謂的條件和迴圈。1.4.2 while和for迴圈,break 與continue if語句是我們最常用的條件判斷語句 print 請輸入您的年齡 end x input ifint x 18 prin...

C語言 (1) 條件編譯

第一種形式 解釋 如果識別符號被 define語句定義過,則編譯程式段1 否則編譯程式段2 incelud define num ok int main ifdef num printf hello world else printf hello china endif return o 因為已經定...