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ó)\"家底夠厚\",自己造iPhone沒(méi)問(wèn)題
“捆綁”特斯拉?豐田Mirai發(fā)現(xiàn)加氫新路徑
使用iPhone控制智能車(chē)
一個(gè)關(guān)于發(fā)光二極管的問(wèn)題,向您求助,謝謝
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ī)
一個(gè)關(guān)于發(fā)光二極管的問(wèn)題,向您求助,謝謝
電熱毯循環(huán)定時(shí)器電路
前OpenAI CTO穆拉蒂初創(chuàng)公司再挖來(lái)兩名前東家老將
HT48MCU的WDT使用
ICCAVR 6.23版本正式發(fā)布RTOS已作為系統(tǒng)庫(kù)提供
時(shí)間可調(diào)定時(shí)器電路
窗式空調(diào)定時(shí)器電路
9時(shí)段l20秒倒計(jì)時(shí)音樂(lè)提醒器電路
光導(dǎo)智能車(chē)
一個(gè)關(guān)于發(fā)光二極管的問(wèn)題,向您求助,謝謝
如何為特定應(yīng)用選擇溫度傳感器?
中南民族大學(xué)第三屆飛思卡爾智能車(chē)競(jìng)賽預(yù)賽(第一名)
凱越08智能車(chē)展示
二次整流電路設(shè)計(jì)難點(diǎn)解析
家用電器定時(shí)插座電路
ICL8038芯片簡(jiǎn)介及典型應(yīng)用
人形機(jī)器人產(chǎn)業(yè)鏈企業(yè)解讀之 “人形機(jī)器人核心關(guān)節(jié)多面匠 -- 中大力德 “
工業(yè)電源指示用LED驅(qū)動(dòng)器
【長(zhǎng)春大學(xué)】飛思卡爾智能車(chē)
急聘硬件工程師!!!(北京)
[原創(chuàng)]H-JTAG 調(diào)試代理軟件