1.1 這個(gè)函數(shù)等價(jià)于調(diào)用 lu a_yieldk, 不同的是不提供延續(xù)函數(shù)(參見。 因此,當(dāng)線程被延續(xù),線程會(huì)繼續(xù)運(yùn)行調(diào)用 l ua_yield 函數(shù)的函數(shù)。
為法庫等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及法庫網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、法庫網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
讓出協(xié)程(線程)。
1.2 當(dāng) C 函數(shù)調(diào)用了 lu a_yieldk, 當(dāng)前運(yùn)行的協(xié)程會(huì)掛起, 啟動(dòng)這個(gè)線程的 l ua_resume 調(diào)用返回。 參數(shù) nresults 指棧上需返回給 l ua_resume 的返回值的個(gè)數(shù)。
當(dāng)協(xié)程再次被延續(xù)時(shí), L ua 調(diào)用延續(xù)函數(shù) k 繼續(xù)運(yùn)行被掛起(參見)的 C 函數(shù)。 延續(xù)函數(shù)會(huì)從前一個(gè)函數(shù)中接收到相同的棧, 棧中的 n 個(gè)返回值被移除而壓入了從 lu a_resume 傳入的參數(shù)。 此外,延續(xù)函數(shù)還會(huì)收到傳給 lu a_yieldk 的參數(shù) ctx。
1.3 通常,這個(gè)函數(shù)不會(huì)返回; 當(dāng)協(xié)程一次次延續(xù),將從延續(xù)函數(shù)繼續(xù)運(yùn)行。 然而,有一個(gè)例外: 當(dāng)這個(gè)函數(shù)從一個(gè)逐行運(yùn)行的鉤子函數(shù)(參見) 中調(diào)用時(shí),lu a_yieldk 不可以提供延續(xù)函數(shù)。 (也就是類似 l ua_yield 的形式), 而此時(shí),鉤子函數(shù)在調(diào)用完讓出后將立刻返回。 L ua 會(huì)使協(xié)程讓出,一旦協(xié)程再次被延續(xù), 觸發(fā)鉤子的函數(shù)會(huì)繼續(xù)正常運(yùn)行。
1.4 當(dāng)一個(gè)線程處于未提供延續(xù)函數(shù)的 C 調(diào)用中,調(diào)用它會(huì)拋出一個(gè)錯(cuò)誤。 從并非用延續(xù)方式(例如:主線程)啟動(dòng)的線程中調(diào)用它也會(huì)這樣。
l ua_getinfo
int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
返回一個(gè)指定的函數(shù)或函數(shù)調(diào)用的信息。
1.5 當(dāng)用于取得一次函數(shù)調(diào)用的信息時(shí), 參數(shù) ar 必須是一個(gè)有效的活動(dòng)的記錄。 這條記錄可以是前一次調(diào)用 lu a_getstack 得到的, 或是一個(gè)鉤子 (參見 )得到的參數(shù)。
用于獲取一個(gè)函數(shù)的信息時(shí), 可以把這個(gè)函數(shù)壓入堆棧, 然后把 what 字符串以字符 '' 起頭。 (這會(huì)讓 l ua_getinfo 從棧頂上彈出函數(shù)。) 例如,想知道函數(shù) f 是在哪一行定義的, 你可以使用下列代碼:
lu a_getlocal
const char *lu a_getlocal (lua_State *L, const lua_Debug *ar, int n);
1.6 從給定活動(dòng)記錄或從一個(gè)函數(shù)中獲取一個(gè)局部變量的信息。
對(duì)于第一種情況, 參數(shù) ar 必須是一個(gè)有效的活動(dòng)的記錄。 這條記錄可以是前一次調(diào)用 lua_getstack 得到的, 或是一個(gè)鉤子 (參見)的參數(shù)。 索引 n 用于選擇要檢閱哪個(gè)局部變量; 參見 debug.getlocal 中關(guān)于變量的索引和名字的介紹。
lu a_getlocal 將變量的值壓棧,并返回其名字。
1.7 對(duì)于第二種情況,ar 必須填 NULL 。 需要探知的函數(shù)必須放在棧頂。 對(duì)于這種情況,只有 Lua 函數(shù)的形參是可見的 (沒有關(guān)于還有哪些活動(dòng)變量的信息) 也不會(huì)有任何值壓棧。
當(dāng)索引大于活動(dòng)的局部變量的數(shù)量, 返回 NULL (無任何壓棧)
lu a_getstack
int lu a_getstack (lua_State *L, int level, lua_Debug *ar);
獲取解釋器的運(yùn)行時(shí)棧的信息。
1.8 這個(gè)函數(shù)用正在運(yùn)行中的指定層次處函數(shù)的 活動(dòng)記錄 來填寫 lu a_Debug 結(jié)構(gòu)的一部分。 0 層表示當(dāng)前運(yùn)行的函數(shù), n+1 層的函數(shù)就是調(diào)用第 n 層 (尾調(diào)用例外,它不算在棧層次中) 函數(shù)的那一個(gè)。 如果沒有錯(cuò)誤, lua_getstack 返回 1 ; 當(dāng)調(diào)用傳入的層次大于堆棧深度的時(shí)候,返回 0 。
是指同一計(jì)算機(jī)不同功能層之間的通信規(guī)則稱為接口。
java接口作用:
1、利于代碼的規(guī)范。這樣做的目的一方面是為了給開發(fā)人員一個(gè)清晰的指示,告訴他們哪些業(yè)務(wù)需要實(shí)現(xiàn);同時(shí)也能防止由于開發(fā)人員隨意命名而導(dǎo)致的命名不清晰和代碼混亂,影響開發(fā)效率。
2、有利于對(duì)代碼進(jìn)行維護(hù)??梢砸婚_始定義一個(gè)接口,把功能菜單放在接口里,然后定義類時(shí)實(shí)現(xiàn)這個(gè)接口,以后要換的話只不過是引用另一個(gè)類而已,這樣就達(dá)到維護(hù)、拓展的方便性。
3、保證代碼的安全和嚴(yán)密。一個(gè)好的程序一定符合高內(nèi)聚低耦合的特征,能夠讓系統(tǒng)的功能較好地實(shí)現(xiàn),而不涉及任何具體的實(shí)現(xiàn)細(xì)節(jié)。這樣就比較安全、嚴(yán)密一些,這一思想一般在軟件開發(fā)中較為常見。
第一:一組特殊的函數(shù)接口以及鉤子,這組接口可用于構(gòu)建出不同的調(diào)試器、性能剖析器、 或是其它需要從解釋器獲取“內(nèi)部信息”的工具
1.1Lu a 沒有內(nèi)置的調(diào)試機(jī)制。 但是它提供了一組特殊的函數(shù)接口以及 鉤子。 這組接口可用于構(gòu)建出不同的調(diào)試器、性能剖析器、 或是其它需要從解釋器獲取“內(nèi)部信息”的工具。
這是一個(gè)攜帶有有關(guān)函數(shù)或活動(dòng)記錄的各種信息的結(jié)構(gòu)。 lu a_getstack 只會(huì)填充結(jié)構(gòu)的私有部分供后面使用。 調(diào)用 lu a_getinfo 可以在 lu a_Debug 中填充那些可被使用的信息域。
下面對(duì) lu a_Debug 的各個(gè)域做一個(gè)說明:
1.2創(chuàng)建這個(gè)函數(shù)的代碼塊的名字。 如果 source 以 '@' 打頭, 指這個(gè)函數(shù)定義在一個(gè)文件中,而 '@' 之后的部分就是文件名。 若 source 以 '=' 打頭, 剩余的部分由用戶行為來決定如何表示源碼。 其它的情況下,這個(gè)函數(shù)定義在一個(gè)字符串中, 而 source 正是那個(gè)字符串。
short_src: 一個(gè)“可打印版本”的 source ,用于出錯(cuò)信息。
1.3 linedefined: 函數(shù)定義開始處的行號(hào)。
1.4 lastlinedefined: 函數(shù)定義結(jié)束處的行號(hào)。
參數(shù):what: 如果函數(shù)是一個(gè) Lua 函數(shù),則為一個(gè)字符串 "Lua" ; 如果是一個(gè) C 函數(shù),則為 "C"; 如果它是一個(gè)代碼塊的主體部分,則為 "main
currentline: 給定函數(shù)正在執(zhí)行的那一行。 當(dāng)提供不了行號(hào)信息的時(shí)候, currentline 被設(shè)為 -1
1.5 name: 給定函數(shù)的一個(gè)合理的名字。 因?yàn)?Lua 中的函數(shù)是一等公民, 所以它們沒有固定的名字: 一些函數(shù)可能是全局復(fù)合變量的值, 另一些可能僅僅只是被保存在一張表的某個(gè)域中。 lua_getinfo 函數(shù)會(huì)檢查函數(shù)是怎樣被調(diào)用的, 以此來找到一個(gè)適合的名字。 如果它找不到名字, name 就被設(shè)置為 NULL 。
1.6 namewhat: 用于解釋 name 域。 namewhat 的值可以是 "global", "local", "method", "field", "upvalue", 或是 "" (空串)。 這取決于函數(shù)怎樣被調(diào)用。 (Lua 用空串表示其它選項(xiàng)都不符合。)
1.7 istailcall: 如果函數(shù)以尾調(diào)用形式調(diào)用,這個(gè)值就為真。 在這種情況下,當(dāng)層的調(diào)用者不在棧中。
nups: 函數(shù)的上值個(gè)數(shù)。
nparams: 函數(shù)固定形參個(gè)數(shù) (對(duì)于 C 函數(shù)永遠(yuǎn)是 0 )。
isvararg: 如果函數(shù)是一個(gè)可變參數(shù)函數(shù)則為真 (對(duì)于 C 函數(shù)永遠(yuǎn)為真)
C語言庫函數(shù),常用庫函數(shù)有:
1、scanf格式輸入函數(shù)
2、printf格式輸出函數(shù)
3、systemdos命令函數(shù)
4、sort排序
5、main主函數(shù)
6、fgets文件讀取字符串函數(shù)
7、fputs文件寫入字符串函數(shù)
8、fscanf文件格式讀取函數(shù)
9、fprintf文件格式寫入函數(shù)
10、fopen打開文件函數(shù)
11、getchar輸入字符函數(shù)
12、putchar輸出字符函數(shù)
13、malloc動(dòng)態(tài)申請(qǐng)內(nèi)存函數(shù)
14、free釋放內(nèi)存函數(shù)
15、abs求絕對(duì)值數(shù)學(xué)函數(shù)
16、sqrt求平方根數(shù)學(xué)函數(shù)
擴(kuò)展資料
語言組成:
1、數(shù)據(jù)類型
C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
2、常量與變量
常量其值不可改變,符號(hào)常量名通常用大寫。
變量是以某標(biāo)識(shí)符為名字,其值可以改變的量。標(biāo)識(shí)符是以字母或下劃線開頭的一串由字母、數(shù)字或下劃線構(gòu)成的序列,請(qǐng)注意第一個(gè)字符必須為字母或下劃線,否則為不合法的變量名。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。
3、數(shù)組
如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號(hào),這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。它們以ASCII的NULL作為數(shù)組的結(jié)束。要特別注意的是,方括內(nèi)的索引值是從0算起的。
4、指針
如果一個(gè)變量聲明時(shí)在前面使用 * 號(hào),表明這是個(gè)指針型變量。換句話說,該變量存儲(chǔ)一個(gè)地址,而 *(此處特指單目運(yùn)算符 * ,下同。C語言中另有 雙目運(yùn)算符 *) 則是取內(nèi)容操作符,意思是取這個(gè)內(nèi)存地址里存儲(chǔ)的內(nèi)容。指針是 C 語言區(qū)別于其他同時(shí)代高級(jí)語言的主要特征之一。
參考資料來源:百度百科-函數(shù)