2 標準庫 自有基礎庫與 delog模組

2021-09-24 04:43:24 字數 1930 閱讀 5162

#include

intmain

(int argc,

char

*ar**)

#define ndebug
int

isalnum

(int c)

;

#include

#include

intmain

(int argc,

char

* ar**)

以統一這類操作的實現和利用方式。

關於通過常量表進行字元類別檢測的具體方法,2.2節展開討論

第一章,討論過帶上下文保護的跳轉。

由於儲存了上下文資訊,我們可以跨越函式進行跳轉,稱為長跳轉。

並不處處要,但有些場合值得一

a,b,c3個函式,呼叫關係為:a調b,b調c。當c中發現資料不需要處理或者給入資料有問題,可跨越b甚至a直接跳出。

沒有這種跨越函式的跳轉,你需要一層層地return。

和goto一樣,這種跳轉的利用,更多情況是為了降低**邏輯複雜度。

恰當使用長跳轉,可以有效提高你所設計的**,特別是中間過程函式**的清晰度。

從而不用增加一堆對子函式某種返回值進行判斷的輔助處理**(輔助邏輯)

另一場景則常見於多程序的模組化處理系統中,用於回到特定(初始狀態)

假設手機維修店只有客戶經理和維修工程師倆人。前者負責和客戶溝通、訂合同、等。後者負責具體維修工作。

工程師收到乙個維修任務,開啟手機外殼一樣,就說沒得搞,然後外殼也不擰上,就扔了,休息休息去忙下乙個任務了。

至於客戶經理怎麼和客戶溝通,那不是工程師的事情,最多拍個**以做證明。

對於模組化的系統,我們假設也有兩個程序,a負責計算,b負責通過socket或其他方式獲取資料及發布計算結果。

兩個程序之間協作,通過任務的方式推動而不是函式的方式呼叫。

b程序,就如同維修工程師,當給入的資料無法計算或計算導致錯誤時候,則直接長跳轉到最初的狀態,繼續等待下乙個任務。

當然人性化一點,多少告知一下程序a,方便它給客戶端乙個交代。

要完成長跳轉工作,需要乙個空間儲存上下文資訊,此空間型別為jmp_buf。

同時還需要場景記錄和恢復場景,分別對應setjmp和longjmp函式。

setjmp是有返回值的,如一章所討論,場景恢復後得根據扔過來的鞋是右腳還是左腳,判斷下面的分支劇情,

只不過記錄場景時還沒有觀眾,更不會有鞋子,所以setjmp在記錄場景時會返回特定的值,且區別於任何通過longjmp跳轉後所得到的返回值。

對於setjmp函式本身的執行(即記錄場景),它始終返回0.

而對於longjmp在恢復場景時,給入longjmp的引數則是setjmp的返回。

但即便你將longjmp的引數設定為0,setjmp也會返回1.

總之通過longjmp恢復現場後,setjmp的返回不會為0

\

#include

#include

#include

#include

static jmp_buf jmp;

floata(

float i,

float j)

return i/j;

}floatb(

float x1,

float x2)

intmain

(int argc,

char

*ar**)

else

return0;

}

上面的目的是計算(x1+x2)/(x1-x2)。

僅僅為了舉例讓main呼叫b,b呼叫a來實現。

你可以編譯鏈結後,嘗試給入兩個相同數值的字串引數,來觀測執行是否除錯。

\

Python基礎 標準庫

1 獲取現在的時間 import time 要使用庫就必須要引入 獲取本地時間,返回的時間的結構體,不是很直觀 t local time.localtime 獲取utc世界統一時間,返回的時間的結構體,不是很直觀 t utc time.gmtime 這個方法返回本地時間的字串,看起來就比較直觀 ti...

Python 基礎 標準庫

python 標準庫 python standrad library 中包含了大量有用的模組,同時也是每個標準的 python 安裝包中的一部分。熟悉 python 標準庫十分重要,因為只要你熟知這些庫可以做到什麼事,許多問題都能夠輕易解決。我們將探索這個庫中的一些常用模組。你能在你的 python...

STL與標準庫

stl與標準庫 摘編自 extended stl 中譯 在c 的世界裡,stl這個術語是有歧義的。有很多c 純化論者會抓住一切機會糾正你對 stl 這個術語的錯用,而告訴你應該使用 標準庫 這樣的稱呼。嚴格來說,stl指的是由stepanov和他的同事們在上世紀80年代到90年代開發的 基於六個核心...