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