假設(shè)把對C/C++的了解程度分為入門,熟悉,精通。「精通」之后再也沒有更的形容詞描述了,那么其實題主只要達(dá)到熟悉C/C++就足夠了。嗯?我并不是指熟悉C/C++的語法。還有,問這個問題的小伙伴說的嵌入式開發(fā)是指單片機(jī)裸機(jī)開發(fā)還是在有底層提供API的單片機(jī)開發(fā)甚至在某些系統(tǒng)上進(jìn)行開發(fā)呢?前兩者重要的是C語言的基礎(chǔ)知識以及其相關(guān)開發(fā)環(huán)境就足夠了,而后者除了需要前者的知識,就可能還需要學(xué)習(xí)面向?qū)ο缶幊痰乃枷爰案鞣NC/C++庫等。正如小編所寫,熟悉C/C++有幾個含義,點(diǎn)是C/C++的基本語法和標(biāo)準(zhǔn)庫的使用,比如數(shù)組、指針、strlib庫(里面有strlen等函數(shù))等;
第二是C/C++的開發(fā)環(huán)境,比如單片機(jī)下有keil環(huán)境和IAR環(huán)境,,以及keil中帶uC/OS系統(tǒng)的開發(fā)環(huán)境,IAR中ZigBee的Z-Stack協(xié)議棧的開發(fā)環(huán)境等,嵌入式Linux下的Linux開發(fā)環(huán)境,更別說Windows下的VS環(huán)境和MFC控件了;
第三是C++的面向?qū)ο缶幊痰乃枷耄热珙惖娜筇匦裕豪^承、封裝和多態(tài)。如果是做單片機(jī)開發(fā),第三點(diǎn)面向?qū)ο缶幊痰膶W(xué)習(xí)可以緩一緩。在代碼存儲空間只有8K、4K甚至2K的單片機(jī)開發(fā)環(huán)境下,根本不可能莫名其妙地繼承一個什么對象。根據(jù)我的經(jīng)驗來看,在低端單片機(jī)開發(fā)中需要寫main+while(主函數(shù)+大循環(huán))的,就不可能用到面向?qū)ο缶幊蹋膊豢赡苡玫紺++的new和delete;在嵌入式用某個框架開發(fā),需要要繼承Button,Window對象什么的,那基本是不用考慮while大循環(huán)的。當(dāng)然,在什么環(huán)境下學(xué)C/C++也很重要,如果為了「精通」C/C++,而熟讀《C程序設(shè)計語言》、《CPrimerPlus》、《征服C指針》、《EffectiveC++》和《C陷阱與缺陷》等這些書籍有什么用?依舊不知道如何使用UART、IIC、SPI等通信方式,不知道如何使用LCD、紅外收發(fā)、藍(lán)牙通信等各種單片機(jī)外設(shè);
依舊不知道如何在Linux下對一個文件進(jìn)行讀寫,不知道如何建立一個TCP客戶端。我專業(yè)是電子信息工程,本身也會學(xué)習(xí)C語言,但是我們專業(yè)更多的是在單片機(jī)上編寫C語言程序。大四的時候我去面試一個iOS開發(fā)助理的崗位,招聘條件上就只寫著熟悉C語言即可,我去了面試之后,面試沒問我一個C語言的問題,指針問題也沒問,就問我有沒有用過什么控件?知不知道數(shù)據(jù)庫?我一臉懵逼,自然也沒有了下文。iOS開發(fā)使用的是Object-C語言,但這更多的是需要iOS開發(fā)環(huán)境Xcode下的知識而非純粹的C語言語法知識。后來也有同學(xué)求職時候找我?guī)兔聪旅嬖囶},我看了一下,這項目依賴是什么鬼?我就直接和他說這不是我們專業(yè)的知識,雖然也是C語言的面試題。
在嵌入式Linux下,除了C/C++語法,還需要掌握Linux命令行的操作,GCC,Makefile等,這里我基本和那位小伙伴是一個意思。只不過如果是在單片機(jī)裸機(jī)開發(fā)下,工作中就很少用到那些,這里更多關(guān)注的是以單片機(jī)為開發(fā)中心的原理圖、PCB圖、外圍電路、電路板等,這已經(jīng)屬于硬件開發(fā)的層次了。有的公司會分工,硬件的做硬件,軟件的寫軟件,也有些公司會讓一個工程師軟硬件全包了。說說點(diǎn)。C/C++的基本語法自然不用說,一定要打好基礎(chǔ)。而標(biāo)準(zhǔn)庫,Linux環(huán)境下自然不用說,肯定有stdio、stdlib等這些標(biāo)準(zhǔn)庫,而這些在keil環(huán)境和IAR環(huán)境也有。標(biāo)準(zhǔn)庫,標(biāo)準(zhǔn)庫,就是說在C語言開發(fā)環(huán)境中必須標(biāo)配的函數(shù)庫。如下圖keil環(huán)境,鏈接過程就有C/C++ Library。<img