標準C學習day11 預處理指令 構建大型程式

2021-09-22 08:09:09 字數 2121 閱讀 5785

#define預處理指令用來定義巨集

巨集可以用來給數字起名字

巨集名稱通常都是由大寫字母構成的

巨集名稱裡不可以包含空格

不要在巨集定義語句裡使用賦值操作符

編譯器會把程式裡的所有巨集名稱替換成

它所代表的數字

可以在編譯時決定巨集名稱所代表的數字

這個時候需要使用-d選項

巨集可以在程式裡代表編譯時才能確定

的數字巨集也可以用來給乙個計算公式起名字

計算公式裡包含未知數字,巨集的引數可以

用來表示這些未知數字

巨集的引數可以代表不是數字的內容,所以

沒有配對的型別名稱

巨集自己的儲存區不能用來和函式之間

進行資料傳遞

如果希望從巨集向函式傳遞數字就應該優先

考慮把巨集編寫成表示式,用表示式的

結果代表要傳遞的數字

巨集的引數可以直接代表函式的儲存區

巨集不能保證優先計算內部的操作符,所以

能當做數字使用的巨集必須寫在

小括號裡

巨集不能保證優先計算引數裡面的操作符,

能當做數字使用的引數也應該寫在

小括號裡

不要把自增或自減的結果作為巨集的引數使用

編寫巨集的時候可以使用巨集操作符

它們可以實現一些特殊的效果

#是乙個巨集操作符,它可以把巨集的引數轉換

成字串字面值(在引數的前後各加

乙個雙引號)

##也是乙個巨集操作符,它可以把乙個代表

識別符號的引數和其它內容連線得到乙個

新的識別符號

條件編譯指編譯時從幾組語句裡選擇一組

進行編譯而忽略其它組

#ifdef/#ifndef…#else…#endif

以上結構可以實現條件編譯的效果

它根據乙個巨集名稱是否存在從兩組語句

裡選擇一組進行編譯

最前面的預處理指令需要從兩個裡選擇

乙個,不論選擇哪個後面都要寫

乙個巨集名稱

如果選擇#ifdef就表示巨集名稱存在的時候

編譯前一組語句,否則編譯後一組語句

如果選擇#ifndef效果剛好相反

#if…#elif(任意多次)…#else…#endif

這個結構也可以實現條件編譯

它可以根據任意邏輯表示式從多組語句中

選擇一組進行編譯

#if和#elif預處理指令後都需要寫上邏輯

表示式這些邏輯表示式裡可以包含任意邏輯操作符,

它們的作用和if分支裡邏輯表示式的作用

類似把程式編寫在多個不同的檔案裡叫多檔案

程式設計多檔案程式設計的時候乙個檔案裡可以包含多個

函式,乙個函式只能屬於乙個檔案

單檔案程式改造成多檔案程式的步驟

1.把所有函式分散在多個不同的原始檔裡.

(通常主函式單獨佔乙個檔案)

2.為每個原始檔編寫以.h作為副檔名的

標頭檔案(主函式所在的原始檔不需要

配合的標頭檔案)只要不分配記憶體的內容都

可以寫在標頭檔案裡.標頭檔案裡至少應該

包含配對原始檔裡所有函式的宣告語句.

3.在所有原始檔裡使用#include預處理指令

包含所有必要的標頭檔案.配對標頭檔案都是

必要標頭檔案.如果原始檔裡使用了某個

標頭檔案裡宣告的函式則這個標頭檔案也是

必要標頭檔案.

在gcc命令後列出所有原始檔的路徑就可以

編譯多檔案方式編寫的程式

可以把多檔案程式的編譯步驟記錄到makefile

檔案裡,然後使用make工具根據makefile

檔案內容自動進行編譯

makefile檔案裡所有編譯命令前應該用

tab鍵而不是空格

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

指令中間,這樣可以避免編譯乙個原始檔

的時候多次編譯同乙個標頭檔案的內容

標頭檔案裡的第乙個預處理指令必須是#ifndef

不同標頭檔案裡的巨集名稱必須不同

巨集名稱應該根據頭檔名稱變化得到

為了使用另外的原始檔裡宣告的全域性變數

就必須在當前檔案裡使用extern關鍵字

再次宣告那個全域性變數

使用extern關鍵字宣告變數的語句通常

放在標頭檔案裡

不可以跨檔案使用靜態全域性變數

MATLAB學習打卡Day11

書寫格式 plot3 x,y,z x,y,z為同維的向量或矩陣,有關線的規範的設定與二維的線性圖完全相同。書寫格式 bar3 y bar3 x,y bar3 width bar3 y 繪製向量y的每乙個元素的條形圖,立體條形的幅值代表元素值,條形圖的下標為向量y的序列。若y為矩陣,則產生代表矩陣每一...

C 基礎程式設計DAY11

求乙個整數各位數之和的函式 include include using namespace std intgetsum int n return sum int main 寫乙個函式,判斷某個數是否素數,以及求1 1000以內的素數 include include include using nam...

機器學習學習筆記 day11

周志華 機器學習 學習筆記 最近開始學習機器學習,參考書籍西瓜書,做點筆記。第十一章 特徵選擇與稀疏學習 11.1 子集搜尋與評價 無關特徵 與訓練任務無關的特徵 冗餘特徵 包含的資訊能從其他特徵中推演出來 子集搜尋 前向 後向 雙向 子集評價 計算子集增益 資訊增益越大意味著特徵自己包含的有助於分...