目錄
創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,包括成都做網(wǎng)站、成都網(wǎng)站制作、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營銷策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)建站為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)建站核心團(tuán)隊(duì)10年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹立了良好口碑。1、學(xué)習(xí)C語言
2、學(xué)習(xí)C++
3、了解基礎(chǔ)的網(wǎng)絡(luò)知識(shí)
4、Linux相關(guān)知識(shí)
5、數(shù)據(jù)庫知識(shí)
6、數(shù)據(jù)結(jié)構(gòu)與算法
7、需要重點(diǎn)關(guān)注的編程技術(shù)
7.1、socket網(wǎng)絡(luò)編程
7.2、多線程與多線程編程
7.3、多進(jìn)程及多進(jìn)程通信
7.4、動(dòng)態(tài)鏈接庫編程
7.5、數(shù)據(jù)庫編程
7.6、設(shè)計(jì)模式
7.7、學(xué)習(xí)一些C/C++開源代碼
8、學(xué)習(xí)過程中要多動(dòng)手敲代碼、多實(shí)踐
9、熟悉IDE開發(fā)環(huán)境,掌握一些常用的調(diào)試方法和技巧
9.1、C/C++ IDE開發(fā)工具選擇
9.2、開源代碼查看工具的選擇
9.3、掌握一些常用的調(diào)試方法和技巧
9.4、了解引發(fā)C++軟件異常的常見原因,掌握排查C++軟件異常的常用方法
10、C++客戶端開發(fā)
10.1、客戶端UI開發(fā)技術(shù)與IDE工具
10.2、UI界面庫介紹
11、最后
VC++常用功能開發(fā)匯總(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++軟件異常排查從入門到精通系列教程(專欄文章列表,歡迎訂閱,持續(xù)更新...)https://blog.csdn.net/chenlycly/article/details/125529931? ? ? ?在上認(rèn)識(shí)了很多學(xué)習(xí)C/C++在校朋友,他們?cè)诤臀医涣鲿r(shí)時(shí)常會(huì)問有沒有好的C/C++學(xué)習(xí)路線推薦,目前的博客內(nèi)容主要面向有工作經(jīng)驗(yàn)的人,針對(duì)初學(xué)者的文章寫的比較少。因?yàn)榇蠹覇柕谋容^多,最近正好有時(shí)間,就詳細(xì)地思考了一下這個(gè)學(xué)習(xí)路線的問題。作為IT行業(yè)的從業(yè)者,結(jié)合多年的實(shí)戰(zhàn)經(jīng)驗(yàn),給大家大概地總結(jié)一下C/C++學(xué)習(xí)路線方面的內(nèi)容,以供廣大C/C++初學(xué)者借鑒和參考!
?C/C++的知識(shí)點(diǎn)與學(xué)習(xí)路線圖總體如下所示:
1、學(xué)習(xí)C語言?C語言是C++的基礎(chǔ),C++是在C語言的基礎(chǔ)上發(fā)展起來的,要學(xué)C++,必須要先學(xué)好C語言。C語言學(xué)習(xí),推薦使用譚浩強(qiáng)的《C語言程序設(shè)計(jì)》。
?有不少開源庫就是使用C語言實(shí)現(xiàn)的,比如著名的音視頻開源庫ffmpeg、輕量級(jí)數(shù)數(shù)據(jù)庫sqlite、高性能的HTTP和反向代理web服務(wù)器Nginx、輕量級(jí)web服務(wù)器容器Lighttpd等。使用C語言開發(fā)的軟件,一是運(yùn)行效率比較高,二是具有良好的跨平臺(tái)特性。除了開發(fā)一些開源項(xiàng)目,目前C語言主要用于底層軟件的開發(fā),比如與硬件芯片相關(guān)的驅(qū)動(dòng)軟件的開發(fā)。?
2、學(xué)習(xí)C++該部分學(xué)習(xí)需要掌握的內(nèi)容有:
了解C語言的基礎(chǔ)語法,了解結(jié)構(gòu)體、分支與循環(huán),熟悉字符串、操作符和函數(shù),掌握數(shù)組和指針的使用,了解內(nèi)存管理和文件操作,熟練掌握C程序的調(diào)試方法。
? 推薦使用《C++?Primer》這本書進(jìn)行學(xué)習(xí),也可以搭配這《C++?Primer?Plus》這本書一起看,前者更詳細(xì)、系統(tǒng)一些。兩本書可以互補(bǔ)著看,各有特點(diǎn)。C++主要學(xué)習(xí)內(nèi)容有:
(1)學(xué)習(xí)C++基礎(chǔ)語法;
(2)學(xué)習(xí)模板編程:模板類和模板函數(shù);
(3)了解C++11標(biāo)準(zhǔn)引入的部分常用新特性,比如常用的auto、overide、final、mutable、volatile、智能指針(std::unique_ptr、std::shared_ptr和std::weak_ptr)、lamda表達(dá)式、nullptr等。這些新特性在C++開源代碼中會(huì)頻繁的使用,比如WebRTC開源代碼,開源代碼比較喜歡使用C++新標(biāo)準(zhǔn)的東西。我們?cè)谌粘>幋a的過程中,也會(huì)使用到C++11的部分新關(guān)鍵字和新特性。所以,不管是日常編碼工作,還是學(xué)習(xí)開源代碼,學(xué)習(xí)并掌握C++11的新特性都很有必要!此外,C++開發(fā)崗位的面試都會(huì)涉及C++11相關(guān)的內(nèi)容!《C++?Primer》和《C++?Primer?Plus》這兩本書的新版本,都有詳細(xì)講到C++11的新特性。
C++新標(biāo)準(zhǔn)引入了很多新特性,解決了部分語言上的缺陷,使得C++變得更加高效靈活!但同時(shí)也讓C++變得更加臃腫復(fù)雜,讓原本就有學(xué)習(xí)難度的C++變的更加讓人難以駕馭!
該部分學(xué)習(xí)需要掌握的內(nèi)容有:
了解C++的基礎(chǔ)語法,理解C++面向?qū)ο蠛皖惖乃枷?,了解繼承、虛函數(shù)與多態(tài),理解動(dòng)態(tài)內(nèi)存管理,了解深拷貝與淺拷貝,了解函數(shù)重載與函數(shù)重寫,了解智能指針與異常處理,熟練掌握STL標(biāo)準(zhǔn)模板庫中vector、list、map等常用容器的使用,熟悉模板函數(shù)與模板類的模板編程。
?對(duì)于開發(fā)語言的學(xué)習(xí),想通過看幾篇博客文章就能學(xué)好是不可能的,必須要找一本書或者一個(gè)系統(tǒng)的視頻教程靜下心去學(xué),腳踏實(shí)地一步一個(gè)腳印去學(xué),才能學(xué)好,看別人的文章只能起個(gè)輔助的作用!?
3、了解基礎(chǔ)的網(wǎng)絡(luò)知識(shí)? 現(xiàn)在的軟件系統(tǒng)都不再是單機(jī)版的了,都是基于網(wǎng)絡(luò)的,基本都是客戶端與服務(wù)器的模式,客戶端需要通過網(wǎng)絡(luò)和遠(yuǎn)端的服務(wù)器進(jìn)行通信,在使用過程中會(huì)出現(xiàn)這樣那樣的網(wǎng)絡(luò)問題。所以網(wǎng)絡(luò)知識(shí)是少不了的,無論是從事哪個(gè)IT技術(shù)崗位,都需要用到一些常用的網(wǎng)絡(luò)知識(shí)。特別是開發(fā)和測試崗位,要分析網(wǎng)絡(luò)通信中遇到的通信故障,排查網(wǎng)絡(luò)數(shù)據(jù)傳輸過程中的數(shù)據(jù)異常問題等。
?網(wǎng)絡(luò)基礎(chǔ)知識(shí),筆試時(shí)會(huì)有涉及,面試的時(shí)候也會(huì)問到。比如OSI的七層分層、TCPIP四層分層、TCP與UDP的區(qū)別,建立TCP連接的三次握手等等。這方面的內(nèi)容,可以參看我之前寫的文章:
【網(wǎng)絡(luò)入門】詳解常用的基礎(chǔ)網(wǎng)絡(luò)知識(shí)(面試筆試常考內(nèi)容)https://blog.csdn.net/chenlycly/article/details/124433936掌握上述文章的內(nèi)容,基本可以應(yīng)付日常的筆試面試,這部分內(nèi)容可以在面試前的一兩個(gè)月看看,搞不懂的地方可以硬背下來。此外,如果要深層次了解TCPIP網(wǎng)絡(luò)知識(shí),可以參看TCPIP詳解相關(guān)的書籍。
?做服務(wù)器軟件開發(fā)或測試的崗位,會(huì)對(duì)Linux方面的知識(shí)有一定的要求,因?yàn)楹笈_(tái)服務(wù)器中使用的操作系統(tǒng)就是Linux的?,F(xiàn)在大部分IT公司產(chǎn)品的后臺(tái)服務(wù)器使用的都是Linux系統(tǒng),有少部分根據(jù)客戶要求需要會(huì)使用Windows?Server服務(wù)器系統(tǒng)。
?之前大家主要使用免費(fèi)開源的CentOS版本的Linux系統(tǒng),但現(xiàn)在RedHat公司已不再維護(hù)CentOS系統(tǒng)了,這意味著一旦系統(tǒng)內(nèi)核發(fā)現(xiàn)bug,將沒人負(fù)責(zé)去修改更新了。為了應(yīng)對(duì)CentOS停止維護(hù),國內(nèi)幾大重量級(jí)IT廠商紛紛推出了基于開源Linux系統(tǒng)的服務(wù)器專用操作系統(tǒng),比如華為的歐拉系統(tǒng)、騰訊的tencentos系統(tǒng)以及阿里的龍蜥系統(tǒng),實(shí)現(xiàn)對(duì)CentOS的替代!并且這些國內(nèi)的服務(wù)器系統(tǒng)已陸續(xù)宣布開源,并建立了相應(yīng)的開源社區(qū),以推進(jìn)這些系統(tǒng)的廣泛應(yīng)用與普及!這些國產(chǎn)服務(wù)器系統(tǒng),不僅這些頭部廠商會(huì)自己使用,其他廠商也可以免費(fèi)使用,這對(duì)系統(tǒng)的普及及生態(tài)的發(fā)展有著強(qiáng)有力的推進(jìn)作用!
?這部分內(nèi)容,需要了解Linux文件系統(tǒng),了解常用的Linux命令。
5、數(shù)據(jù)庫知識(shí)?很多IT崗位對(duì)數(shù)據(jù)庫也有一定的要求,并不是說工作中肯定會(huì)直接涉及到數(shù)據(jù)庫的操作與查詢,數(shù)據(jù)庫已經(jīng)是個(gè)基本的技能要求了。部分崗位可能會(huì)直接操作數(shù)據(jù)庫,去讀寫數(shù)據(jù)庫,需要對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢。一般要了解數(shù)據(jù)庫表的創(chuàng)建、修改、刪除;了解數(shù)據(jù)庫表中的數(shù)據(jù)的增刪改查(查詢);了解索引、視圖、事務(wù)、觸發(fā)器、存儲(chǔ)過程等概念。
?當(dāng)前常用的數(shù)據(jù)庫有甲骨文公司商業(yè)收費(fèi)版的Oracle數(shù)據(jù)庫、免費(fèi)開源的MySQL數(shù)據(jù)庫以及微軟的SQL?Server數(shù)據(jù)庫。除了這些國外的數(shù)據(jù)庫,近幾年國內(nèi)一些公司在開源數(shù)據(jù)庫的基礎(chǔ)上也陸續(xù)開發(fā)了自己的數(shù)據(jù)庫產(chǎn)品,比如阿里的OceanBase數(shù)據(jù)庫、華為的高斯數(shù)據(jù)庫、騰訊的TBase數(shù)據(jù)庫等,都達(dá)到了業(yè)界的頂尖水平!
?本部分隨便找一本數(shù)據(jù)庫的教材學(xué)習(xí)一下即可,SQL?Server或者M(jìn)ySql都可以。不同的數(shù)據(jù)庫在SQL語義上是類似的或者是相通的,可能在具體的細(xì)節(jié)上會(huì)有所差別,一般我們只要選一種數(shù)據(jù)庫學(xué)習(xí)即可。
6、數(shù)據(jù)結(jié)構(gòu)與算法一般服務(wù)器側(cè)需要存儲(chǔ)大量的數(shù)據(jù)到數(shù)據(jù)庫中,在大型的互聯(lián)網(wǎng)公司的大型系統(tǒng)中要存儲(chǔ)海量的數(shù)據(jù),這對(duì)數(shù)據(jù)的存儲(chǔ)與查詢性能有著很高的要求,所以在這些公司會(huì)有專門的數(shù)據(jù)庫工程師來負(fù)責(zé)這部分的業(yè)務(wù)!此外,在一些客戶端軟件或者嵌入式終端軟件中,也會(huì)使用到數(shù)據(jù)庫,一般數(shù)據(jù)量較小,會(huì)選用輕量級(jí)的sqlite數(shù)據(jù)庫。
?找一本數(shù)據(jù)結(jié)構(gòu)與算法的書學(xué)習(xí)一下。要了解單鏈表、雙鏈表、雙向循環(huán)鏈表的實(shí)現(xiàn),熟悉八大排序算法(了解算法實(shí)現(xiàn)的時(shí)間復(fù)雜度與空間復(fù)雜度),了解B樹、紅黑樹、動(dòng)態(tài)規(guī)劃、背包等經(jīng)典算法問題。算法是互聯(lián)網(wǎng)大廠的必考題,要面試大廠必須要提前準(zhǔn)備的,中小型公司可能對(duì)這一塊沒有大多的要求。
7、需要重點(diǎn)關(guān)注的編程技術(shù)?編程語言最終是為實(shí)現(xiàn)目標(biāo)業(yè)務(wù)系統(tǒng)服務(wù)的,我們要使用編程語言去編寫業(yè)務(wù)實(shí)現(xiàn)代碼的。所以,除了系統(tǒng)地學(xué)習(xí)C與C++這兩門開發(fā)語言,我們還需要重點(diǎn)學(xué)習(xí)以下具體的編程技術(shù),這些技術(shù)在以后的工作基本都會(huì)涉及到。
7.1、socket網(wǎng)絡(luò)編程?首先要系統(tǒng)地學(xué)習(xí)一下socket套接字網(wǎng)絡(luò)編程,熟悉常用的socket編程接口,了解Windows下的select模型、IOCP完成端口模型、Linux下的epoll模型等。雖然工作后不一定從事網(wǎng)絡(luò)通信模塊的開發(fā),但是這些基本的網(wǎng)絡(luò)編程知識(shí)比較重要,對(duì)于理解和分析開發(fā)過程中遇到的網(wǎng)絡(luò)問題時(shí)是很有幫助的。
?此外,作為技術(shù)進(jìn)階,也可以去了解一下開源的libevent網(wǎng)絡(luò)庫和大型開源項(xiàng)目boost中的asio網(wǎng)絡(luò)庫,這兩個(gè)開源庫在很多公司都有使用到。
7.2、多線程與多線程編程在軟件程序中,僅有一個(gè)主線程是遠(yuǎn)遠(yuǎn)不夠的,為了處理一些并發(fā)的任務(wù),必須要使用到多線程技術(shù)。我們將一些任務(wù)放到新建的線程中去做,并且線程之間需要進(jìn)行通信,這就需要了解線程間通信的常用方法(面試常問問題)。
? 此外,多個(gè)線程可能要訪問共享的資源(比如內(nèi)存資源),需要做好多線程之間的同步。我們通過鎖實(shí)現(xiàn)多線程之間的同步,這個(gè)鎖的實(shí)現(xiàn)也有多個(gè)方式(面試常問問題)。
7.3、多進(jìn)程及多進(jìn)程通信這里面還有一個(gè)比較高端的線程池技術(shù)。因?yàn)榫€程創(chuàng)建與銷毀是有一定開銷的,所以為了較少這部分開銷,提高軟件的運(yùn)行效率,我們會(huì)創(chuàng)建一定數(shù)量的空閑線程放置到線程池中,需要使用時(shí)從池中取出一個(gè)空閑的線程,使用完成后再將線程歸還給線程池。
?有時(shí)為了提升軟件的執(zhí)行性能和效率,我們?cè)趩?dòng)軟件時(shí)可能需要啟動(dòng)多個(gè)進(jìn)程,不同的進(jìn)程負(fù)責(zé)做不同的事務(wù)。比如我們常用的chrome瀏覽器,在啟動(dòng)時(shí)就會(huì)創(chuàng)建多個(gè)進(jìn)程,不同的進(jìn)程負(fù)責(zé)處理不同的事務(wù)。
?多進(jìn)程之間需要進(jìn)行數(shù)據(jù)共享或數(shù)據(jù)通信,這就會(huì)涉及到多進(jìn)程之間通信方法,這也是面試時(shí)常問的一個(gè)問題。
7.4、動(dòng)態(tài)鏈接庫編程?自從微軟推出第一個(gè)版本的Windows操作系統(tǒng)以來,dll動(dòng)態(tài)鏈接庫一直是Windows操作系統(tǒng)的基礎(chǔ)。動(dòng)態(tài)鏈接庫通常不能直接運(yùn)行,它們是獨(dú)立的二進(jìn)制文件,只有在其他模塊調(diào)用dll動(dòng)態(tài)鏈接庫中的函數(shù)時(shí),它才發(fā)揮作用。
?在實(shí)際編程時(shí),我們可以把完成某種功能的函數(shù)放在一個(gè)動(dòng)態(tài)鏈接庫中,然后提供給其他模塊或其他程序調(diào)用。不僅Windows系統(tǒng)中會(huì)使用到dll動(dòng)態(tài)庫,Linux系統(tǒng)也會(huì)頻繁地使用到(linux系統(tǒng)中以.?so結(jié)尾),所以動(dòng)態(tài)庫編程也是一個(gè)要學(xué)習(xí)的技術(shù)點(diǎn)。
?其實(shí)動(dòng)態(tài)庫相對(duì)比較簡單,學(xué)會(huì)動(dòng)態(tài)庫的封裝,保證對(duì)外提供合理的API接口。
7.5、數(shù)據(jù)庫編程?在很多軟件中需要將數(shù)據(jù)保存到數(shù)據(jù)庫中,并對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢操作,這就會(huì)涉及到操作數(shù)據(jù)庫的編程技術(shù)。
?常用的數(shù)據(jù)庫有輕量級(jí)的開源數(shù)據(jù)sqlite、大型開源免費(fèi)數(shù)據(jù)庫MySQL、商業(yè)數(shù)據(jù)庫Oracle等。一般先要連接到數(shù)據(jù)庫服務(wù)器上,然后通過該連接將數(shù)據(jù)寫入到數(shù)據(jù)庫中以及對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行修改、刪除、查詢等操作。
在一些大型的IT公司,要存儲(chǔ)海量的數(shù)據(jù),對(duì)數(shù)據(jù)庫技術(shù)有著很高的要求,會(huì)有專門的數(shù)據(jù)庫開發(fā)的工程師崗位,由這些人去專門處理數(shù)據(jù)庫開發(fā)的相關(guān)事務(wù)。有些崗位可能不會(huì)涉及到數(shù)據(jù)庫編程,但數(shù)據(jù)庫編程已經(jīng)是開發(fā)人員必須具備的一個(gè)基本技能,所以我們需要學(xué)習(xí)一下。
上述幾個(gè)編程技術(shù)的學(xué)習(xí),推薦大家看孫鑫的《VC++深入詳解》一書,上述技術(shù)在書中都有專門的章節(jié)去講解。
7.6、設(shè)計(jì)模式?在日常的編碼工作中,會(huì)使用到一些常用的軟件設(shè)計(jì)模式,比如單例模式、簡單工廠模式和觀察者模式等。這些設(shè)計(jì)模式可以很好地解決設(shè)計(jì)中的一些問題,不僅工作中會(huì)用到,面試時(shí)也會(huì)涉及到。
? 對(duì)于初學(xué)者來說,有必要學(xué)習(xí)部分常用的設(shè)計(jì)模式,面試時(shí)也是一個(gè)體現(xiàn)優(yōu)勢的加分項(xiàng)!注意,不僅要了解這些常用設(shè)計(jì)模式的實(shí)現(xiàn)思想,還要
7.7、學(xué)習(xí)一些C/C++開源代碼?此部分需要有很好的C/C++基礎(chǔ),屬于C/C++進(jìn)階部分的內(nèi)容,想深入學(xué)習(xí)C/C++的朋友,可以來嘗試學(xué)習(xí)一下。
?可以先看一些輕量級(jí)的開源庫,比如分布式的高速緩存系統(tǒng)memcached、高性能事件通知庫libevent、高性能的HTTP和反向代理web服務(wù)器Nginx、以及輕量級(jí)web服務(wù)器容器Lighttpd,這些開源庫在實(shí)際項(xiàng)目中被廣泛地使用,這些庫都是用C語言開發(fā)的。
? 也可以去學(xué)習(xí)一些著名的C/C++大型開源庫,比如多媒體處理開源庫FFmpeg、實(shí)時(shí)音視頻處理開源庫WebRTC和Chrome瀏覽器內(nèi)核開源庫Chromium等。當(dāng)然這些大型開源庫對(duì)于初學(xué)者來講,是有很大的難度的。關(guān)于這些大型開源庫的說明,可以參看之前寫的文章:
C/C++開發(fā)人員要了解的幾大著名C/C++開源庫https://blog.csdn.net/chenlycly/article/details/125959453
8、學(xué)習(xí)過程中要多動(dòng)手敲代碼、多實(shí)踐? 在學(xué)習(xí)過程中要多動(dòng)手多實(shí)踐,跟著教材在IDE開發(fā)環(huán)境中手動(dòng)敲一些例子中的代碼,把例子代碼運(yùn)行起來。必要時(shí)可以單步調(diào)試代碼,搞清楚代碼的運(yùn)行邏輯,可以加深對(duì)書中知識(shí)點(diǎn)的理解。
? 如果只用眼去看書中的文字描述,不手動(dòng)去敲代碼,學(xué)習(xí)的效果會(huì)比較有限的。此外,有的教材中會(huì)就某一項(xiàng)編程技術(shù)(比如socket套接字編程)給出一個(gè)具體的小項(xiàng)目實(shí)例,這些實(shí)例很有價(jià)值。作為初學(xué)者或者新手,大多都接觸不到實(shí)戰(zhàn)項(xiàng)目,這些實(shí)例可以作為練手的小項(xiàng)目來操練。
? 總之,在學(xué)習(xí)書本理論知識(shí)的同時(shí),也要?jiǎng)邮謱⒋a操練起來。在操練代碼的過程中,也可以將常用的IDE開發(fā)環(huán)境熟悉起來,也能實(shí)戰(zhàn)地調(diào)試代碼,掌握一些常用的調(diào)試方法和技巧。
? 除了書本上的示例代碼和小項(xiàng)目實(shí)例,還可以到網(wǎng)上找一些別人寫的小工具或小項(xiàng)目,學(xué)習(xí)別人的代碼,可以嘗試模仿別人的代碼寫一套屬于自己的代碼。github上有很多開源的小項(xiàng)目,可以去搜一下自己感興趣的代碼。
? 當(dāng)然我們?cè)谟泻芎玫腃/C++基礎(chǔ)之后,可以選擇一些更高階的學(xué)習(xí)方式,可以去學(xué)一學(xué)一些常用的C/C++開源代碼,比如上面講到的一些常見的開源項(xiàng)目??梢韵瓤匆恍┹p量級(jí)的開源庫,比如分布式的高速緩存系統(tǒng)memcached、高性能事件通知庫libevent、高性能的HTTP和反向代理web服務(wù)器Nginx、以及輕量級(jí)web服務(wù)器容器Lighttpd,這些開源庫在實(shí)際項(xiàng)目中被廣泛地使用,這些庫都是用C語言開發(fā)的??梢詫W(xué)習(xí)開源庫中的設(shè)計(jì)思想和實(shí)現(xiàn)思路,學(xué)習(xí)代碼設(shè)計(jì)上的具體細(xì)節(jié),可以借鑒開源庫中的一些巧妙的設(shè)計(jì)。?
9、熟悉IDE開發(fā)環(huán)境,掌握一些常用的調(diào)試方法和技巧?下面我們來大概地講一下C/C++ IDE開發(fā)工具的選擇,以及要掌握的一些常用調(diào)試方法和技巧。
9.1、C/C++ IDE開發(fā)工具選擇9.1.1、推薦使用微軟的Visual Studio
? 對(duì)于日常編寫和調(diào)試C/C++代碼,該選擇哪個(gè)IDE開發(fā)環(huán)境呢?推薦Windows上廣泛使用的微軟Visual Studio。Visual Studio有著強(qiáng)大的代碼編輯功能與調(diào)試功能,很多公司都在使用該IDE進(jìn)行項(xiàng)目開發(fā)。比如大家熟知的PC版微信、阿里釘釘、企業(yè)微信、字節(jié)飛書等客戶端軟件,都是用C/C++開發(fā)出來的,使用的IDE開發(fā)工具都是Visual Studio。
? 在日常學(xué)習(xí)過程中使用Visual Studio,能在參加工作之前提前熟悉Visual Studio的使用,比如如何創(chuàng)建一個(gè)工程,如何配置工程屬性等。在代碼調(diào)試運(yùn)行的過程中也能逐漸掌握一些常用的調(diào)試方法,比如單步調(diào)試、斷點(diǎn)調(diào)試、附加到進(jìn)程調(diào)試等。
9.1.2、Visual Studio版本選擇
?微軟的Visual Studio已經(jīng)更新迭代了很多年,從經(jīng)典古老的Visual Studio 6.0到現(xiàn)在的Visual Studio 2022。Visual Studio 6.0是20世紀(jì)90年代推出的,距今已有20多年歷史了,現(xiàn)在基本不再使用了。推薦大家使用Visual Studio 2010、Visual Studio 2019和Visual Studio 2022這幾個(gè)版本,大家不要使用Visual Studio 2017,2017版本很不好用,運(yùn)行過程中會(huì)時(shí)不時(shí)的卡頓,特別是在調(diào)試代碼的時(shí)候。
? Visual Studio 2010的安裝包較大,可以自行到網(wǎng)上下載,一般大家都使用Visual Studio 2010旗艦版。至于Visual Studio 2019和Visual Studio 2022,可以下載免費(fèi)的社區(qū)版本(Community Version),在百度中搜索一下微軟的官方頁面,到官方鏈接中下載即可。它們的安裝包是很小的在線安裝包,安裝時(shí)是需要聯(lián)網(wǎng)在線下載安裝包進(jìn)行實(shí)時(shí)安裝的。
9.1.3、Visual Studio 2019社區(qū)版的下載和安裝
? 下面我們以下載和安裝Visual Studio 2019社區(qū)版為例,講一下相關(guān)的過程。先在百度中搜索“microsoft ?visual studio 2019”,找到微軟官方的鏈接,如下所示:
打開頁面(頁面的地址為:Visual Studio 2019 版本 16.11 發(fā)行說明 | Microsoft Learn)如下:
點(diǎn)擊“Download Community 2019”按鈕,下載免費(fèi)的社區(qū)版本即可。此時(shí)下載的是在線安裝包,安裝過程中需要聯(lián)網(wǎng),在線實(shí)時(shí)下載安裝包實(shí)時(shí)安裝的。
? 在線安裝包下載完成后,雙擊安裝包,先會(huì)在線下載一些配置文件,如下所示:
然后自動(dòng)跳轉(zhuǎn)到如下的頁面:
為了方便開發(fā)帶UI界面的C++程序,我們選擇如上圖所示的“使用 C++ 的桌面開發(fā)”安裝類型,然后在右側(cè)的列表中記得勾選“適用于最新 v143 生成工具的C++ MFC”選項(xiàng),該選項(xiàng)會(huì)安裝MFC界面庫,然后點(diǎn)擊右下方的“安裝”按鈕即可。
我們可以使用MFC界面庫去創(chuàng)建一些帶UI界面的窗口程序。微軟Visual Studio自帶的MFC界面庫很古老,這么多年基本沒有大的更新,大型軟件現(xiàn)在基本很少使用了,但日常工作中使用MFC去寫一些帶UI的小工具會(huì)比較方便的,MFC構(gòu)建的窗口效果如下所示:
? 至于C/C++常用的IDE開發(fā)環(huán)境介紹,可以參考我之前寫的一篇文章:
C/C++編程工具及實(shí)用小軟件推薦https://blog.csdn.net/chenlycly/article/details/126734902至于如何去使用Visual Studio開發(fā)環(huán)境,比如如何創(chuàng)建工程、如何去調(diào)試代碼,限于篇幅,這里就不再贅述了,可以自行到網(wǎng)上搜索。
9.2、開源代碼查看工具的選擇? 在閱讀C/C++開源代碼時(shí),推薦使用Source Insight工具。很多開源代碼沒有Visual Studio工程文件,沒法使用Visual Studio打開工程的所有文件,如果單個(gè)單個(gè)文件去打開,閱讀起來很不方便。一般我在查看開源代碼時(shí)會(huì)選擇Source Insight工具,該工具小巧輕便,占用很少的CPU和內(nèi)存資源,啟動(dòng)速度快。
? 只需要使用Source Insight創(chuàng)建一個(gè)工程,然后將開源項(xiàng)目的根路徑添加到工程中來即可。比如開源項(xiàng)目libevent存放在磁盤的D:\OpenSrcCode目錄中,則只需要將D:\OpenSrcCode\libevent添加到Source Insight的工程中即可。
? 至于如何使用Source Insight,可以參見之前寫的文章:
使用Source Insight查看編輯源代碼https://blog.csdn.net/chenlycly/article/details/124347857Source Insight是一個(gè)代碼查看和編輯工具,沒有編譯功能,即不能編譯代碼。該工具輕便簡捷,啟動(dòng)速度快,有的人喜歡用該工具去編寫代碼,比如我們這邊搞驅(qū)動(dòng)開發(fā)的同事日常就用該工具去編寫項(xiàng)目代碼。就我個(gè)人而言,我主要使用該工具去查看開源代碼。
? 手動(dòng)編寫的代碼,在編譯時(shí)可能會(huì)報(bào)錯(cuò),一般根據(jù)報(bào)錯(cuò)信息提示做針對(duì)性的修改即可。代碼在運(yùn)行時(shí)也可能出現(xiàn)意外的錯(cuò)誤或異常,這就需要對(duì)代碼進(jìn)行調(diào)試了。為了解決代碼中存在的缺陷或問題,我們需要掌握一定的代碼調(diào)試方法和技巧。
? 常見的調(diào)試方法有單步調(diào)試、斷點(diǎn)調(diào)試(斷點(diǎn)分普通斷點(diǎn)、條件斷點(diǎn)和數(shù)據(jù)斷點(diǎn))、附加到目標(biāo)進(jìn)程調(diào)試等。在調(diào)試過程中可以查看相關(guān)變量的值,查看源代碼對(duì)應(yīng)的匯編代碼,查看各寄存器的值,可以查看中斷時(shí)的函數(shù)調(diào)用堆棧。在調(diào)試過程中需要熟練掌握各個(gè)快捷鍵的使用,比如在Visual Studio中F5開啟調(diào)試,F(xiàn)9設(shè)置斷點(diǎn),F(xiàn)10單步調(diào)試,F(xiàn)11進(jìn)入函數(shù)等。
? 關(guān)于Visual Studio的一些高效調(diào)試手段與技巧,可以參看我之前寫的一篇文章:
【C++進(jìn)階】 Visual Studio高效調(diào)試手段與技巧總結(jié)(經(jīng)驗(yàn)分享)https://blog.csdn.net/chenlycly/article/details/124884225
9.4、了解引發(fā)C++軟件異常的常見原因,掌握排查C++軟件異常的常用方法該部分屬于高階內(nèi)容,對(duì)初學(xué)者不作要求,初學(xué)者在有一定的基礎(chǔ)之后,可以作為進(jìn)階內(nèi)容來學(xué)習(xí),但在缺乏項(xiàng)目實(shí)戰(zhàn)的情況下很難全部掌握。
? C++不是一門安全性語言,動(dòng)態(tài)申請(qǐng)的內(nèi)存是需要程序員去管理的,C++開發(fā)的軟件大部分異常問題都是內(nèi)存異常造成的,這也是Google推出更安全的Rust語言的一個(gè)重要原因,Google打算在部分領(lǐng)域用安全性較高的Rust語言將不太安全的C++替換掉。
? 所以,作為一個(gè)C/C++開發(fā)人員,除了掌握一些常用的調(diào)試方法與技巧,我們還需要了解一些引發(fā)C++軟件異常的常見原因以及排查這些異常的方法,以有效地應(yīng)對(duì)開發(fā)調(diào)試過程中遇到的一些列問題,從而提高處理問題的效率和實(shí)效性。了解這些內(nèi)容以后,在寫代碼時(shí)我們會(huì)下意識(shí)地去思考一些可能存在的問題,能讓我們?cè)诰帉懘a時(shí)考慮的更加全面一點(diǎn),這也能從源頭上避免一些問題的出現(xiàn)。
? 關(guān)于引發(fā)C++軟件異常的常見原因,可以參見之前寫的文章:
【C++進(jìn)階】C++軟件異常的常見原因分析與總結(jié)(實(shí)戰(zhàn)經(jīng)驗(yàn)分享)https://blog.csdn.net/chenlycly/article/details/124996473關(guān)于排查C++軟件異常的常用方法,可以參見之前寫的文章:
【C++進(jìn)階】排查C++軟件異常的常見思路與方法(實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié))https://blog.csdn.net/chenlycly/article/details/120629327上述兩篇文章是通過多年的項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié)出來的,需要通過不斷的項(xiàng)目實(shí)踐才能去有效地消化。對(duì)于初學(xué)者,由于缺乏項(xiàng)目實(shí)戰(zhàn),有些內(nèi)容很難理解,屬于高階的內(nèi)容,不作要求。初學(xué)者在有一定的基礎(chǔ)之后,如果感興趣,可以提前來了解一下,參加工作后可以一邊工作一邊去實(shí)踐。
?我們?nèi)粘V饕褂肳indows桌面操作系統(tǒng),會(huì)頻繁地使用到各式各樣的UI客戶端軟件,所以我們重點(diǎn)介紹一下用C++開發(fā)客戶端軟件的一些內(nèi)容。此外,在日常工作中可能會(huì)需要使用C++去開發(fā)一些帶UI界面的小工具。另外,很多C++初學(xué)者是從客戶端UI界面編程開始學(xué)起的,所以有必要說一下這方面的內(nèi)容。
?在Windows系統(tǒng)中,大多數(shù)客戶端都是用C++開發(fā)的,當(dāng)然也有部分是使用C#等語言實(shí)現(xiàn)的。我們?cè)赪indows系統(tǒng)中常用的PC版QQ、微信、騰訊會(huì)議、企業(yè)微信、字節(jié)飛書、阿里釘釘和百度網(wǎng)盤客戶端等客戶端軟件,都是用C++開發(fā)的。
10.1、客戶端UI開發(fā)技術(shù)與IDE工具?客戶端軟件一方面要將業(yè)務(wù)數(shù)據(jù)弄到UI界面上展現(xiàn)出來,另一方面要提供業(yè)務(wù)操作的入口,所以客戶端軟件在實(shí)現(xiàn)時(shí)主要包含UI界面開發(fā)和軟件業(yè)務(wù)兩大塊。UI界面實(shí)現(xiàn),就是根據(jù)軟件的需求和UI設(shè)計(jì)師的UI設(shè)計(jì)效果去實(shí)現(xiàn)軟件的UI界面,實(shí)現(xiàn)過程中需要要用到一些常用的UI界面庫。
?常用的C++ UI界面庫主要有Visual Studio自帶的MFC庫,開源的基于directui思想的duilib庫,支持跨平臺(tái)的QT庫以及Chromium瀏覽器的UI庫,當(dāng)然還有一些收費(fèi)的界面庫,收費(fèi)的界面庫不在本文的討論之列。其中,MFC庫和duilib庫是基于Windows窗口設(shè)計(jì)的,只能用于Windows C++客戶端軟件的開發(fā);QT是跨平臺(tái)的,既能用于Windnows客戶端開發(fā),也能用于Linux客戶端的開發(fā)。Windows上C++軟件的開發(fā)主要使用Visual Studio開發(fā)環(huán)境,如果用到QT,一般使用專用的QT Creator開發(fā)環(huán)境。
10.2、UI界面庫介紹?下面就來詳細(xì)介紹一下微軟的MFC庫、跨平臺(tái)的QT庫、開源的duilib庫以及Chromium瀏覽器的UI庫。
10.2.1、MFC庫
? MFC是微軟的IDE開發(fā)環(huán)境Visual Studio自帶的界面庫,原生的MFC界面比較簡陋,界面效果很一般。MFC是個(gè)很古老的庫,雖然Visual Studio更新了很多代,但MFC庫始終維持在多年前的效果上,基本沒有做任何升級(jí)和改進(jìn)。
?平時(shí)我們會(huì)使用MFC庫去開發(fā)一些小的工具軟件,工具軟件的界面比較簡單,不用做專門的美化,用MFC即可快速地實(shí)現(xiàn)。但對(duì)于一些商業(yè)軟件,原生的MFC庫是沒法滿足要求,需要繼承MFC庫中的控件類,重寫這些控件類以實(shí)現(xiàn)界面的貼圖美化,但要實(shí)現(xiàn)比較酷炫的界面效果,使用MFC去實(shí)現(xiàn)會(huì)很吃力。
?現(xiàn)在的商業(yè)軟件基本都不再使用MFC了,但有個(gè)行業(yè)除外。很多炒股類軟件的客戶端(比如大智慧客戶端軟件)還在用MFC庫,炒股軟件的界面主要來顯示股票數(shù)據(jù),對(duì)界面的美化效果沒有太大的要求,使用MFC庫做一些基本的美化即可。
10.2.2、duilib庫
?duilib庫是基于directui思想實(shí)現(xiàn)的UI界面庫,相對(duì)于MFC,要好用很多,可以較容易地去實(shí)現(xiàn)一些酷炫的界面效果。很多知名的公司都在使用該庫,比如ZOOM視頻會(huì)議客戶端、PC版微信、愛奇藝PPS客戶端、京東咚咚客戶端、百度網(wǎng)盤客戶端、酷我音樂、酷狗音樂、華為PC版手機(jī)助手等。有些中小型公司也在使用該界面庫,比如2345公司的好壓等產(chǎn)品。
?網(wǎng)易和騰訊都開源了各自基于duilib改進(jìn)而來的界面庫,原生的duilib我們使用過,但騰訊和網(wǎng)易的開源版本沒有研究過,不知道效果如何,不知道相對(duì)于原生的duilib都做了哪些改進(jìn)?;仡^有時(shí)間的時(shí)候可以去研究一下
10.2.3、QT庫
? QT是一套支持跨平臺(tái)的界面庫,既支持Windows平臺(tái),也支持Linux平臺(tái),甚至支持移動(dòng)平臺(tái)。如果要開發(fā)Linux系統(tǒng)中的客戶端軟件,則需要使用QT界面庫。隨著國產(chǎn)化系統(tǒng)的推行與普及,很多軟件既要支持在Windows上運(yùn)行,也要支持在國產(chǎn)化Linux桌面系統(tǒng)上運(yùn)行。
?有些廠商為了實(shí)現(xiàn)對(duì)Windows和Linux雙平臺(tái)的支持,直接使用QT界面開發(fā),而不再選擇Windows用Windows專用界面庫開發(fā)、Linux用QT開發(fā)的方式。比如視頻監(jiān)控大型廠商??低暫痛笕A的視頻監(jiān)控客戶端軟件都是直接采用QT界面庫開發(fā)的。很多做人工智能的公司都選擇QT進(jìn)行應(yīng)用軟件的開發(fā)。
?近年來在國產(chǎn)化大潮的推動(dòng)下,QT的支持者和使用者越來越多,QT開發(fā)也變得越來越火,招聘市場上對(duì)QT開發(fā)人員的需求也越來越大,很多大公司的軟件也在選擇使用QT開發(fā)。QT當(dāng)前的火爆場面,在幾年前是不曾有過的。
10.2.4、Chromium開源瀏覽器的UI庫
? Chromium是Google的一個(gè)久負(fù)盛名的瀏覽器C++開源項(xiàng)目,它是Google的Chrome瀏覽器背后的引擎(幾乎包含了Chrome瀏覽器的所有實(shí)現(xiàn)代碼),其目的是為了創(chuàng)建一個(gè)安全、穩(wěn)定和快速的通用瀏覽器。
Chromium的設(shè)計(jì)思想基于簡單、高速、穩(wěn)定、安全等理念,在架構(gòu)上使用了Apple發(fā)展出來的WebKit渲染引擎,并采用Google獨(dú)家開發(fā)出的用于提升JavaScript解譯效率的V8引擎,以提升JavaScript的效率,而且設(shè)計(jì)了“沙盒”、“黑名單”、“無痕瀏覽”等功能,來實(shí)現(xiàn)穩(wěn)定與安全的網(wǎng)頁瀏覽環(huán)境。
?很多瀏覽器使用的都是Chromium開源內(nèi)核,比如微軟Win10系統(tǒng)中推出的Edge瀏覽器拋棄了IE內(nèi)核,轉(zhuǎn)而使用Chromium內(nèi)核。國內(nèi)知名的360瀏覽器、QQ瀏覽器、傲游瀏覽器,它們用的都是Chromium內(nèi)核,只是開發(fā)了各自的UI皮膚和界面,增加了一些額外的用戶功能。接下來說到的CEF嵌入式瀏覽器框架也是基于Chromium內(nèi)核實(shí)現(xiàn)的。
?除了瀏覽器使用到了開源Chromium的內(nèi)核,很多Windows應(yīng)用軟件也使用到了Chromium中的內(nèi)容,使用到了Chromium中的UI組件。比如字節(jié)的飛書客戶端、阿里的釘釘客戶端、華為的WeLink客戶端、網(wǎng)易云音樂與有道云筆記,均使用了開源Chromium中的UI組件去開發(fā)軟件界面。
? 那如何去判斷一個(gè)客戶端軟件是否使用了Chromium瀏覽器的UI組件了呢?其實(shí)很簡單,可以使用Visual Studio自帶的SPY++工具,去探測一下這些軟件的窗口屬性,如果窗口的標(biāo)題和類名中看到了Chrome的字樣,就基本能確定軟件的界面就是用Chromium的UI組件開發(fā)的。比如下圖中的Chrome Legacy Window和Chrome_RenderWidgetHostHWND字符串:
11、最后?上面大概地介紹了C/C++學(xué)習(xí)路線的主要內(nèi)容,希望能給廣大C/C++初學(xué)者提供有效的借鑒和參考。有些朋友可能想了解搞C/C++開發(fā)都有哪些崗位可供選擇,可以參見之前寫的文章:
C++沒落了?學(xué)習(xí)C++沒有前途了?從業(yè)者給你揭曉答案https://blog.csdn.net/chenlycly/article/details/126881672
? 此外,文章主要給出的是C/C++初學(xué)者的學(xué)習(xí)路線,如果要做進(jìn)一步的技術(shù)進(jìn)階,則需要掌握更多更有深度的內(nèi)容!對(duì)于C/C++從入門到進(jìn)階的一系列書籍,可以參見之前寫的一篇文章:
C++從入門到進(jìn)階的系列書籍推薦https://blog.csdn.net/chenlycly/article/details/121170439
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:C/C++學(xué)習(xí)路線總結(jié)與分享-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://jinyejixie.com/article20/djesco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、虛擬主機(jī)、動(dòng)態(tài)網(wǎng)站、域名注冊(cè)、商城網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容