C 的一些模組學習!

2021-07-06 01:23:51 字數 1856 閱讀 4783

乙個模組有兩部分組成:介面和實現。介面指明模組要做什麼,它宣告了使用該模組的**可用的識別符號、型別和例程,實現指明模組是如何完成其介面宣告的目標的,乙個給定的模組通常只有乙個介面,但是可能會有許多種實現能夠提供介面所指定的功能。每個實現可能使用不同的演算法和資料結構,但是它們都必須符合介面所給出的使用說明。客戶呼叫程式是使用某個模組的一段**,客戶呼叫程式匯入介面,而實現匯出介面。由於多個客戶呼叫程式是共享介面和實現的,因此使用實現的目標**避免了不必要的**重複,同時也有助於避免錯誤,因為介面和實現只需一次編寫和除錯就可多次使用。

介面只需要指明客戶呼叫程式可能使用的識別符號即可,應盡可能地隱藏一些無關的表示細節和演算法,這樣客戶呼叫程式可以不必依賴於特定的實現細節。這種客戶呼叫程式和實現之間的依賴--耦合----可能會在實現改變時引起錯誤,當這種依賴性埋藏在一些關於實現隱藏的或是不明確的假設中時,這些錯誤可能很難修復,因此乙個設計良好且描述精確的介面應該儘量減少耦合。

c語言對介面和實現的分離只提供最基本的支援,但是簡單的約定能給介面/實現方**帶來巨大的好處。在c中,介面在標頭檔案宣告,標頭檔案宣告了客戶呼叫程式可以使用的巨集、型別、資料結構、變數以及例程。使用者使用c語言的預處理指令#include匯入介面。

extern int arith_max(int x, int y);

extern int arith_min(int x, int y);

extern int arith_div(int x, int y);

extern int arith_mod(int x, int y);

extern int arith_ceiling(int x, int y);

extern int arith_floor (int x, int y);

arith.h

該介面的名字為arith,介面標頭檔案也相應地命名為arith.h,介面的名字以字首的形式出現在介面的每個識別符號中。模組名不僅提供了合適的字首,而且還有助於整理客戶呼叫程式**。

arith介面還提供了一些標準c函式庫中沒有但是很有用的函式,並為出發和取模提供了良好的定義,而標準c中並沒有給出這些操作的定義和只提供基於實現的定義。

實現乙個實現匯出乙個介面,它定義了必要的變數和函式以提供介面所規定的功能,在c語言中,乙個實現是由乙個或多個.c檔案提供的,乙個實現必須提供其匯出的介面所指定的功能。實現應包含介面的.h檔案,以保證它的定義和介面的宣告時一致的。

arith_min和arith_max返回其整型引數中的最小值和最大值:

int arith_max(int x, int y) {

return x > y ? x : y;

int arith_min(int x, int y) {

return x > y ? y : x;

arith_div返回y除以x得到的商,arith_mod返回相應的餘數。當x與y同號的時候,arith_div(x,y)等價於x/y,arith_mod(x,y)等價於x%y

當x與y的符號不同的時候,c的內嵌操作的返回值就取決於具體的實現:

eg.如果-13/5=2,-13%5=-3,如果-13/5=-3,-13%5=2

標準庫函式總是向零取整,因此div(-13,2)=-2,arith_div和arith_mod的語義同樣定義好了:它們總是趨近數軸的左側取整,因此arith_div(-13,5)=-3,arith_div(x,y)是不超過實數z的最大整數,其中z滿足z*y=x。

arith_mod(x,y)被定義為x-y*arith_div(x,y)。因此arith_mod(-13,5)=-13-5*(-3)=2

函式arith_ceiling和arith_floor遵循類似的約定,arith_ceiling(x,y)返回不小於實數商x/y的最小整數

arith_floor(x,y)返回不超過實數商x/y的最大整數

C 的一些學習技巧!

指標代表的是記憶體單元的編號或位址,通過指標就可以找到對應的記憶體單元。對指標進行初始化或賦值的實質是將乙個位址或同型別 或相相容的型別 的指標賦給它,而不管這個位址是怎麼取得的。1 指標的初始化 指標初始化時,的右運算元必須為記憶體中資料的位址,不可以是變數,也不可以直接用整型位址值 但是int ...

學習C的一些筆記(一)

總結下很早以前的筆記,溫故而知新。printf 2d 2d 3d index i 1,index j 1,index i 1 index j 1 在輸入一長串數,但需要單個讀入的時候,就需要指定寬度 即 1d 如身份證系統scanf 1d a i 其中 代表左對齊,2,3代表顯示幾個字元,不足,用空...

一些python模組的安裝

開始接觸python程式設計,先前一直用的是標準庫,但平常還是要用到很多非標準庫的模組。下面記錄一下安裝一些模組的過程 目前用的是win7x64 beautifulsoup是一款優秀的html xml標籤解析工具,這裡有bs官方中文教程。安裝過程 用cmd切換到解壓檔案目錄 python setup...