標籤:

C++、Visual C++、MFC(編譯和封裝)之間的關係是什麼?

比如windows下的 C/C++是語言 VC++6.0是編譯器,用MFC封裝,是不是這個意思??

那ubuntu 下呢?/QT,GTK,IDE什麼關係啊??好亂

還有就是寫GUI程序的時候那些函數什麼的?大牛們是不是要一個一個查MSDN?那linux下怎麼搞呢?

好亂。。好糾結,,,


你遇到了一個C++初學者大多會遇到或者搞混淆的概念問題

具體到你的疑惑

無論在Windows下還是Linux下,C++都只是語言,更具體一點,就是C++語言標準,這裡又可以細分為不同的版本,比如C++98,C++03以及最新的C++11(2011年在ISO通過,參考C++11 FAQ中文版)

C++只是一套語言規則標準,我們要利用它來編程,還需要具體的實現。而Visual C++(其中的編譯器其實是cl.exe), GCC, Clang, Intel C++, IBM XLC++等等,都是C++標準的具體實現,也就是你所說的編譯器。

而MFC,則是類庫,也就是為了某一特定目的而事先設計好的類的集合。比如,MFC,Qt,WTL等等是為了應用程序界面設計,boost是為了提高C++的開發效率而事先實現的模板庫,OpenGL是為了實現3D渲染而提供的函數庫。如果用蓋房子來做一個比喻的話,C++是最基礎的沙子和水泥,而MFC則是預製板,是事先做好的半成品,從而使得我們可以利用這些預製件更便捷高效地蓋好房子(應用程序) 

以上這些,是我們蓋房子需要的材料,而IDE則是我們用C++寫程序所需要的一套工具(代碼編輯器,調試器等,就像蓋房子需要的起重機,攪拌機,運輸機)。而Visual C++,Eclipse等等,都只是這一套工具的牌子(就像你的起重機是三一重工的,還是徐工的)。

這樣的解釋,這些概念清楚了嗎?

不僅僅是寫GUI用到的函數,其他任何函數庫(OpenGL,boost等)的使用,都需要查閱其文檔,才能知道其中各個函數的使用方法,才能正確有效地使用。這就不僅僅是MSDN了,你使用什麼庫,就在網上找相關的文檔就可以了。關於C++,我最常用的就是Reference - C++ Reference了,就像新華字典一樣子,常備案頭。

別糾結,慢慢一步步來

大年初一還這麼愛學習,精神可嘉!有這種精神,假以時日,必有所成。


C++就是純粹的C++編程語言

Visual C++是微軟開發的集成開發環境,現在叫Visual Studio

同時Visual C++也指微軟自己在ISO C++標準上加以拓展而成的微軟自己的C++標準

至於MFC,全面Microsoft Fundation Class,看見沒它是個class,是微軟為了便於開發win32程序自己用C++寫的一個


RTFM(Read the fucking manual)和STFW(Search the fucking web)是程序員的兩件寶。嗯嗯。

學習編程,並不僅僅是為了學習語法;學習庫,也不僅僅是學習它提供的介面該怎麼用。那些和語言無關(或關係不大)的東西也不能忽視,比如:計算機體系結構、設計模式、網路協議諸如此類等等。

語言和庫都只是工具。一個程序該怎麼組織,怎麼寫,瞭然於胸後,剩餘的就是查文檔了。

單純在Win下做界面,首推C#,其次WTL,再次才是MFC,當然,您要是喜歡原生態的API,也可以。

Qt很優雅,比起MFC那晦澀的幾大技術,Qt簡直就是真愛。


謝謝邀請。

@陳良喬 已經回答了這個問題的大部分,我表示完全同意。

關於大牛是不是一個一個查MSDN的問題,雖然我不是大牛,但也願意分享一下自己的做法,希望能有所幫助。

首先,那麼多函數,雖然不排除有高人能都記住,但我相信大多數人還是邊用邊查的。

但也不是什麼都盲目地去查的。

我的做法是先找一個概要性說明的文章,通常教材或者那些庫本身的說明裡都有,仔細讀一遍,理解清這些庫中函數或者類的組織方式,工作原理。

然後,對一些非常常用的函數,簡單記一下關鍵字,以備今後查找。

再接下來,就是針對你面對的問題,去尋找具體的函數了。但你有了上面學習的基礎,會很快定位到你想要找的內容,從而節省很多時間。

上網用問題描述的方法去查找也不失為一個方法,但查完後如果不能做到稍微系統學習一下,知其然而知其所以然,舉一反三的話,就要每次都要勞神查找,而且常常得到不管用的答案了。


比如windows下的 C/C++是語言 VC++6.0是編譯器,用MFC封裝,是不是這個意思??

那ubuntu 下呢?/QT,GTK,IDE什麼關係啊??好亂

還有就是寫GUI程序的時候那些函數什麼的?大牛們是不是要一個一個查MSDN?那linux下怎麼搞呢?

-----------------------------------

這問題問的好亂,編譯怎麼和封裝並列到一起來了,兩個不搭嘎啊。編譯通常和鏈接放一起說。

封裝,用在 MFC 上是這樣的,MFC 是微軟對 win32 api 的 c++ 封裝。

通俗的說,就是給原來的東西,套個外殼,對外介面變成了另一個樣子,可能客戶會感覺更好用了,這就是封裝。

(當然了,得說 MFC 這個封裝,是個不怎麼樣的工作,doc-view framework 今天看來也是 over-design。MFC 在 90 年代和 2000 初,隨著 windows 如日中天而風靡一時,打敗 borland 達到頂峰,而如今, MFC 對微軟來說,也是喜新厭舊,ms 早就移情別戀了。)

linux 下面,本來就是給專業人士搞得,在 linux 下,也是查文檔,查資料,和查 msdn 一樣。只不過 linux 下沒有 windows 的 vs 這麼強大的 IDE。

查 MSDN:肯定要查啊。win32 api 的特點就是繁雜繁多,我想不會有人去刻意去背,這些東西只能是熟能生巧,你用了100次,大概記得它什麼樣子,然而你用到的時候通常還是需要查。各種可以 combine 的 flags,往往一個 api 下面的一個參數的 flag 就得列很長,。某一個參數,某一個結構體,往往點開又是洋洋洒洒一大篇。

比如說 CreateWindowEx 中的 windows styles, RegisterClassEx 中的 class styles,GetOpenFileName 中的結構體, CreateFile 中的參數, WM_KEYDOWN 中的 lParam 的含義等等。

所以,對 win32 api,大部分都是即用即查的形式。尤其是那些 remark 通常都是比較重要的信息,很多關鍵信息甚至隱藏在不太起眼的表格里,這些都需要認真看。(這當然大大的消耗開發時間成本)。

-----------------------------------

C++:編程語言。基本是中性的。和平台什麼的都無關。

VC:是編譯器,和微軟的 IDE(自帶 windows sdk)。它最主要和最重要的功能是開發 (運行於)windows 程序。

MFC:微軟設計的 C++ 類庫,主要是封裝了 windows sdk (windows sdk 可以理解為 windows 系統的 C 語言編程介面)。VC 中也提供了 MFC 的程序框架。在開發 windows 程序的時候你可以選用,也可以不用。隨著 BC 的退出,從 codeproject 這樣的網站來看,MFC 實現代碼某種意義上成了 window 平台的一種「通用語言」。從這個角度來看,你至少能夠閱讀和使用別人的 MFC 開源代碼。

對於最後一點,舉個例子:

windows sdk 的 API ,例如

int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount);

對應於 MFC:

void CWnd::GetWindowText( CString rString
)const;


C++ = 中文

Visual C++ = 在Windows班寫 作文之御用毛筆、宣紙

MFC = Windows班所提供的作文典故素材庫


* C++ 是一門語言,有國際標準

* Visual C++, 是微軟公司實現的是C++編譯器。

* MFC 是微軟公司為Visual C++提供的一套代碼庫,主要為了方便Windows下的界面程序的開發。


C++,僅僅是一種語言

Visual C++,運行於M$平台的開發環境(IDE)

MFC, 封裝了M$平台底層API的類庫。

GTK,GUI庫,提供的是C語言API。Linux下用的多,封裝了底層的XWindow;Win下也有,同樣封裝了M$平台底層API。

QT,同理GTK,只是提供了C++的API。


推薦閱讀:

一個月怎麼寫一個窗口程序?
現在(2013年12月)學習 MFC 的意義是什麼?
做PC的客戶端軟體開發框架選擇,sciter vs QT,用哪個好點?
為什麼微軟不大力支持C ,而重點支持C#,難道今後windows平台開發就告別以前的MFC那一套了?
為什麼微軟不考慮提供一個更好的C++ GUI Framework for Windows?

TAG:C | MFC | VisualC |