#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年代開發的 基於六個核心...