久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

專(zhuān)欄中心

EEPW首頁(yè) > 專(zhuān)欄 > CRT:C運(yùn)行庫(kù)簡(jiǎn)介

CRT:C運(yùn)行庫(kù)簡(jiǎn)介

發(fā)布人:電子禪石 時(shí)間:2020-07-05 來(lái)源:工程師 發(fā)布文章
1)運(yùn)行時(shí)庫(kù)就是 C run-time library,是 C 而非 C++ 語(yǔ)言世界的概念:取這個(gè)名字就是因?yàn)槟愕?C 程序運(yùn)行時(shí)需要這些庫(kù)中的函數(shù)。

 

2)C 語(yǔ)言是所謂的“小內(nèi)核”語(yǔ)言,就其語(yǔ)言本身來(lái)說(shuō)很小(不多的關(guān)鍵字,程序流程控制,數(shù)據(jù)類(lèi)型等);所以,C 語(yǔ)言內(nèi)核開(kāi)發(fā)出來(lái)之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重寫(xiě)了 90% 以上的 UNIX 系統(tǒng)函數(shù),并且把其中最常用的部分獨(dú)立出來(lái),形成頭文件和對(duì)應(yīng)的 LIBRARY,C run-time library 就是這樣形成的。

 

3)隨后,隨著 C 語(yǔ)言的流行,各個(gè) C 編譯器的生產(chǎn)商/個(gè)體/團(tuán)體都遵循老的傳統(tǒng),在不同平臺(tái)上都有相對(duì)應(yīng)的 Standard Library,但大部分實(shí)現(xiàn)都是與各個(gè)平臺(tái)有關(guān)的。由于各個(gè) C 編譯器對(duì) C 的支持和理解有很多分歧和微妙的差別,所以就有了 ANSI C;ANSI C (主觀意圖上)詳細(xì)的規(guī)定了 C 語(yǔ)言各個(gè)要素的具體含義和編譯器實(shí)現(xiàn)要求,引進(jìn)了新的函數(shù)聲明方式,同時(shí)訂立了 Standard Library 的標(biāo)準(zhǔn)形式。所以C運(yùn)行時(shí)庫(kù)由編譯器生產(chǎn)商提供。至于由其他廠商/個(gè)人/團(tuán)體提供的頭文件和庫(kù)函數(shù),應(yīng)當(dāng)稱(chēng)為第三方 C 運(yùn)行庫(kù)(Third party C run-time libraries)。

 

4)C run-time library里面含有初始化代碼,還有錯(cuò)誤處理代碼(例如divide by zero處理)。你寫(xiě)的程序可以沒(méi)有math庫(kù),程序照樣運(yùn)行,只是不能處理復(fù)雜的數(shù)學(xué)運(yùn)算,不過(guò)如果沒(méi)有了C run-time庫(kù),main()就不會(huì)被調(diào)用,exit()也不能被響應(yīng)。因?yàn)镃 run-time library包含了C程序運(yùn)行的最基本和最常用的函數(shù)。

 

5)到了 C++ 世界里,有另外一個(gè)概念:Standard C++ Library,它包括了上面所說(shuō)的 C run-time library 和 STL。包含 C run-time library 的原因很明顯,C++ 是 C 的超集,沒(méi)有理由再重新來(lái)一個(gè) C++ run-time library. VC針對(duì)C++ 加入的Standard C++ Library主要包括:LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB

 

6)Windows環(huán)境下,VC提供的 C run-time library又分為動(dòng)態(tài)運(yùn)行時(shí)庫(kù)和靜態(tài)運(yùn)行時(shí)庫(kù)。

動(dòng)態(tài)運(yùn)行時(shí)庫(kù)主要是DLL庫(kù)文件msvcrt.dll(or MSVCRTD.DLL for debug build),對(duì)應(yīng)的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build)

靜態(tài)運(yùn)行時(shí)庫(kù)(release版)對(duì)應(yīng)的主要文件是:

LIBC.LIB (Single thread static library, retail version)

LIBCMT.LIB (Multithread static library, retail version)

 

msvcrt.dll提供幾千個(gè)C函數(shù),即使是像printf這么低級(jí)的函數(shù)都在msvcrt.dll里。其實(shí)你的程序運(yùn)行時(shí),很大一部分時(shí)間時(shí)在這些運(yùn)行庫(kù)里運(yùn)行。在你的程序(release版)被編譯時(shí),VC會(huì)根據(jù)你的編譯選項(xiàng)(單線程、多線程或DLL)自動(dòng)將相應(yīng)的運(yùn)行時(shí)庫(kù)文件(libc.lib,libcmt.lib或Import library msvcrt.lib)鏈接進(jìn)來(lái)。

 

編譯時(shí)到底哪個(gè)C run-time library聯(lián)入你的程序取決于編譯選項(xiàng):

/MD, /ML, /MT, /LD   (Use Run-Time Library)

你可以VC中通過(guò)以下方法設(shè)置選擇哪個(gè)C run-time library鏈入你的程序:

To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box.

 

從程序可移植性考慮,如果兩函數(shù)都可完成一種功能,選運(yùn)行時(shí)庫(kù)函數(shù)好,因?yàn)楦鱾€(gè) C 編譯器的生產(chǎn)商對(duì)標(biāo)準(zhǔn)C Run-time library提供了統(tǒng)一的支持。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

關(guān)鍵詞:

相關(guān)推薦

特朗普放話:美國(guó)\"家底夠厚\",自己造iPhone沒(méi)問(wèn)題

“捆綁”特斯拉?豐田Mirai發(fā)現(xiàn)加氫新路徑

使用iPhone控制智能車(chē)

HT單片機(jī)選型指南

貿(mào)澤電子推出全新工業(yè)自動(dòng)化在線資源探索預(yù)測(cè)性維護(hù)解決方案

超精密機(jī)器人動(dòng)態(tài)性能躍升的核心密碼:先進(jìn)電流電壓檢測(cè)賦能納米級(jí)運(yùn)動(dòng)控制

碳化硅能效革命核心突破點(diǎn):共源共柵(cascode)結(jié)構(gòu)詳解

IC卡型H8 310系列單片機(jī)

前OpenAI CTO穆拉蒂初創(chuàng)公司再挖來(lái)兩名前東家老將

HT48MCU的WDT使用

ICCAVR 6.23版本正式發(fā)布RTOS已作為系統(tǒng)庫(kù)提供

光導(dǎo)智能車(chē)

如何為特定應(yīng)用選擇溫度傳感器?

中南民族大學(xué)第三屆飛思卡爾智能車(chē)競(jìng)賽預(yù)賽(第一名)

凱越08智能車(chē)展示

二次整流電路設(shè)計(jì)難點(diǎn)解析

ICL8038芯片簡(jiǎn)介及典型應(yīng)用

人形機(jī)器人產(chǎn)業(yè)鏈企業(yè)解讀之 “人形機(jī)器人核心關(guān)節(jié)多面匠 -- 中大力德 “

工業(yè)電源指示用LED驅(qū)動(dòng)器

【長(zhǎng)春大學(xué)】飛思卡爾智能車(chē)

更多 培訓(xùn)課堂
更多 焦點(diǎn)
更多 視頻

技術(shù)專(zhuān)區(qū)