庫(kù)函數(shù)就是在c語(yǔ)言的內(nèi)部已經(jīng)聲明、定義好了的只用引用一些頭文件即可直接使用而不用自己額外定義的功能函數(shù),如printf,scanf,power,sin,cos等各種類(lèi)型的函數(shù)。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、站前ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的站前網(wǎng)站制作公司
庫(kù)函數(shù):顧名思義是把函數(shù)放到庫(kù)里..是別人把一些常用到的函數(shù)編完放到一個(gè)文件里,供別人用.別人用的時(shí)候把它所在的文件名用#include加到里面就可以了.一般是放到lib文件里的。
一般是指編譯器提供的可在c源程序中調(diào)用的函數(shù)??煞譃閮深?lèi)一類(lèi)是c語(yǔ)言標(biāo)準(zhǔn)規(guī)定的庫(kù)函數(shù)一類(lèi)是編譯器特定的庫(kù)函數(shù)。
由于版權(quán)原因庫(kù)函數(shù)的源代碼一般是不可見(jiàn)的但在頭文件中你可以看到它對(duì)外的接口。什么是庫(kù)函數(shù)語(yǔ)言的語(yǔ)句十分簡(jiǎn)單如果要使用語(yǔ)言的語(yǔ)句直接計(jì)算sin或cos函數(shù)就需要編寫(xiě)頗為復(fù)雜的程序。因?yàn)檎Z(yǔ)言的語(yǔ)句中沒(méi)有提供直接計(jì)算sin或cos函數(shù)的語(yǔ)句。又如為了顯示一段文字我們?cè)谡Z(yǔ)言中也找不到顯示語(yǔ)句只能使用庫(kù)函數(shù)printf。
語(yǔ)言的庫(kù)函數(shù)并不是語(yǔ)言本身的一部分它是由編譯程序根據(jù)一般用戶(hù)的需要編制并提供用戶(hù)使用的一組程序。的庫(kù)函數(shù)極大地方便了用戶(hù)同時(shí)也補(bǔ)充了語(yǔ)言本身的不足。事實(shí)上在編寫(xiě)語(yǔ)言程序時(shí)應(yīng)當(dāng)盡可能多地使用庫(kù)函數(shù)這樣既可以提高程序的運(yùn)行效率又可以提高編程的質(zhì)量。
其實(shí)在C語(yǔ)言編程中,我們所用的在部分函數(shù)就是C語(yǔ)言庫(kù)本身帶的函數(shù),在使用某一個(gè)庫(kù)文件之前,我們先要包含庫(kù)文件所對(duì)應(yīng)的頭文件,再在我們需要的地方調(diào)用庫(kù)函數(shù)就行了.最常用的printf();這就是一個(gè)庫(kù)函數(shù),這個(gè)庫(kù)函數(shù)在頭文件stdio.h中聲明.所以使用前要先#include stdio.h
舉個(gè)例子:
#include stdio.h //一定要先包含庫(kù)函數(shù)聲明的文件
int main()
{
printf("for example!\n"); //在此處調(diào)用庫(kù)函數(shù)
}
如果想要了解更多的庫(kù)函數(shù),可以參考C語(yǔ)言的教材,一般的附錄中會(huì)列出.也可以查看C庫(kù)函數(shù).
str類(lèi)型是rust中最基本的字符串類(lèi)型,聲明一個(gè)str類(lèi)型的變量很簡(jiǎn)單:
我們可以打印出上述定義中變量 s 的類(lèi)型:
在 rust-playground 中使用nightly版本編譯:
關(guān)于 str和str標(biāo)準(zhǔn)庫(kù)文檔是如此說(shuō)明的:
通俗理解, str 類(lèi)型是字符串切片類(lèi)型,是rust中最基本的字符串類(lèi)型,但是我們見(jiàn)的更多的是它的借用類(lèi)型(引用值),也就是 str ,最直觀的例子就是擁有靜態(tài)生命周期 'static 的字符串字面量。
另有 《Why Rust?》中給出的示例:
即:
因此在rust中 str 類(lèi)型為: 靜態(tài)內(nèi)存分配字符串的引用
Rust中切片類(lèi)型表示為 [T] ,它表示無(wú)法在編譯期確定大小的同一種類(lèi)型數(shù)據(jù)的連續(xù)內(nèi)存序列 [T] 的 視圖 ,它在內(nèi)存中的管理是基于 Repr union 來(lái)實(shí)現(xiàn)的, [T] 即指向 [T] 類(lèi)型的指針,這個(gè)指針在最底層是通過(guò)稱(chēng)為胖指針( FatPtr )的結(jié)構(gòu)體來(lái)模擬的:
在內(nèi)存布局(memory layout)上, 切片變量和 FatPtr 類(lèi)型的變量共享同一片內(nèi)存空間,而FatPtr中則保存了"切片"的必要特征:
而借助于Rust類(lèi)型系統(tǒng)的優(yōu)勢(shì),標(biāo)準(zhǔn)庫(kù)在 [T] 類(lèi)型上定義的方法和trait則完全封裝了底層負(fù)責(zé)解釋指針含義的工作(這部分解釋工作需要依賴(lài)unsafe rust來(lái)實(shí)現(xiàn))。
如標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)的len方法:
查看標(biāo)準(zhǔn)庫(kù)對(duì)于 str 類(lèi)型的實(shí)現(xiàn):
我們知道, str 類(lèi)型變量可以通過(guò)調(diào)用 len 方法獲取字符串中的字節(jié)個(gè)數(shù),查看 len 函數(shù)的定義可以發(fā)現(xiàn),其內(nèi)部是調(diào)用了 as_bytes 方法實(shí)現(xiàn)的; as_bytes 方法中定義了一個(gè)union類(lèi)型 Slices ,并且聲明為和C語(yǔ)言的內(nèi)存布局一致( #[repr(C)] ):
熟悉union的同學(xué)不難發(fā)現(xiàn), str 和 [u8] 的內(nèi)存布局是一樣的,從而 str 是 [T] 當(dāng) T=u8 時(shí)的特例!而 len 方法不過(guò)是調(diào)用了 [u8] 的 len 方法而已。
字符串切片類(lèi)型總是合法的 utf-8 字節(jié)序列。
其中 run_utf8_validation(v) 做了必要的utf-8字節(jié)序列的合法性檢測(cè),若不符合utf-8規(guī)范,則拋出Error。
思考下面的例子:
其中 s的類(lèi)型是 str ,那么s是怎么調(diào)用定義在 str 類(lèi)型上的方法 len 的呢?
是因?yàn)闃?biāo)準(zhǔn)庫(kù)已經(jīng)為我們對(duì)任意類(lèi)型 T 實(shí)現(xiàn)了 Deref trait:
而實(shí)現(xiàn)了Deref trait的類(lèi)型,編譯器會(huì)在適當(dāng)?shù)牡胤綄?duì)變量進(jìn)行足夠多的解引用以使變量的類(lèi)型轉(zhuǎn)變?yōu)? T 。
由于 deref 函數(shù)獲取的變量 self 是不可變引用:
因此保證了由編譯器來(lái)進(jìn)行解引用總是安全的。
網(wǎng)頁(yè)題目:rust中c語(yǔ)言庫(kù)函數(shù) rust調(diào)用c++庫(kù)
當(dāng)前地址:http://www.rwnh.cn/article40/ddgoeho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、搜索引擎優(yōu)化、建站公司、小程序開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、用戶(hù)體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)