那麼這是一個相當愚蠢的問題。 Visual C++只是一個IDE?或者它是一個獨立於win32的語言?這兩者之間的區別究竟是什麼?我問這是因爲我在VC++ 2008上嘗試了一些舊的C++代碼,並且無法編譯。Visual C++和C++有什麼區別?
回答
的Visual C++可很多事情,包括:
- 微軟的C++編譯器(cl.exe,LINK.EXE等)
- 的IDE(Visual Studio中的C++模式)
- C運行時(MSVCRT)
- 其他庫(少左右):MFC,ATL
至於編譯舊的C++代碼:現在Visual Studio是一個相當標準的C++編譯器。這並非總是如此,例如使用Visual C++ 6或更早的版本。很可能您的代碼不符合標準或使用不推薦使用的行爲,而這些行爲在新編譯器中無法使用。
不幸的是Visual C++是一個糟糕的C編譯器,因爲它不支持C99(並且永遠不會),除非C++和C99之間的特性重疊。對很多人來說最顯着的問題是缺少stdint.h。
一種VC仍然非常明顯地偏離標準C++的方式是,它不會執行正確的兩階段解析的模板。這可以隱藏模板代碼中令人不快的錯誤,如果您希望代碼在更合適的編譯器上編譯,這會導致令人討厭的意外。 (這可能是VC的未來版本。) – sbi 2010-05-18 20:00:22
我可以證明這一點。我有一些錯誤試圖讓模板元編程在該編譯器中工作,在其他編譯器中工作正常。 – wheaties 2010-05-18 20:09:54
@wheaties:正好相反:其他編譯器,特別是Comeau和gcc,在解析std C++方面更好。然而,缺少兩階段查找的問題是,VC接受錯誤的代碼,這被其他編譯器拒絕(正確)。如果您正在進行跨平臺開發並且代碼是使用VC編寫的,那麼這可能會讓您感到頭疼。 – sbi 2010-05-20 08:18:49
我想Visual C++包括微軟的庫擴展。
多數民衆贊成在??所有的大交易和維加斯爲幾個頭文件發佈? – Laz 2010-05-18 19:54:03
@Ram Bhat:這是IDE,編譯器,不僅僅是一些「少數」頭文件,我認爲* MS VC++引入了一些自己的語法變化。這不是「純粹的」C++。 – FrustratedWithFormsDesigner 2010-05-18 19:54:56
Visual Studio的新版本在他們的努力以及它提供的功能等方面是相當重要的。就C++語言而言,這並不是什麼大不了的事情,具體而言,除非他們繼續完善其標準合規性並開始支持即將推出的C++ 0x標準。 – jwismar 2010-05-18 19:57:07
Visual C++是一個IDE。它編譯標準的C++代碼。但是,每個C++編譯器本質上都會創建它自己的C++版本。很少編譯器完全符合當前的標準,他們可能會也可能不會添加即將到來的標準中的功能。另外,他們有時會添加他們自己的語言擴展。因此,在編譯C++代碼時使用不同的編譯器時總會存在可移植性風險。但是,最近版本的Visual C++與標準兼容,並且大多數與它一起編譯的東西都將與其他流行的編譯器(如gcc/g ++)(和反之亦然)一起編譯。
Visual C++是Microsoft的IDE和C++編程語言編譯器的名稱。但是請注意,與許多C++實現一樣,Visual C++具有某些C++不提供的擴展,以及某些未完全符合ISO C++語言標準的擴展。
VS C++本質上是一種特定類型的C++。
新的VS版本包括更新的功能,兩個擴展(例如CLI),以及更新的標準,例如C++ 0x(類型推斷等)。
某些功能可能會意外導致您的代碼停止工作,或者您可能依賴於同時修復的特定Visual Studio錯誤。
VS2008包含標準C++和Microsoft的託管C++。標準的C++大多符合C++ 03(至少這是意圖)。被管理的(即非標準的)C++是用於開發.NET應用程序的,並且不是(也不打算)符合任何C++標準。
您可能希望確保在移植應用程序時,您並未意外選擇託管C++。
Visual C++包含C++編譯器,它是C++語言標準的一個實現。 Visual C++ 6是不符合規定的實現。 Visual C++ 2008更好。從VC++ 6到VC++ 2008有一些變化,這就是爲什麼你的舊代碼無法編譯。有一些標誌允許在VC++ 2008中編譯VC++ 6代碼。
Here is在SO上已經有一個很好的問題,可能會有所幫助。
- 1. c#和visual c#有什麼區別?
- 2. C#.net和Visual Basic.net有什麼區別?
- 3. Visual C++ 6.0和Visual C++ 2008有什麼區別?
- 4. 什麼區別\\。\ C:和\\。\ C:\
- 5. char [] c和char c []有什麼區別?
- 6. Managed C++和C++/CLI有什麼區別?
- 7. \ c和\\ c有什麼區別?
- 8. printf中%c和%C有什麼區別?
- 9. 託管C++和C#有什麼區別?
- 10. C++和C++ CLI有什麼區別
- 11. visual studio和visual C++ IDE有什麼區別
- 12. Visual Studio C++ - 'CLR'和'General'類別有什麼區別?
- 13. 有什麼區別C#
- 14. SqlCeConnection和SqlConnection C#有什麼區別?
- 15. Objective-C和Cocoa有什麼區別?
- 16. C++中fprintf和vfprintf有什麼區別?
- 17. C++中0x和'\ x'有什麼區別?
- 18. C#中CLR和DLR有什麼區別?
- 19. Lua C API:lua_gettop()和-1有什麼區別?
- 20. jni compile cpp和c有什麼區別?
- 21. 'b'和'c'有什麼區別?
- 22. Ctrl-C和SIGINT有什麼區別?
- 23. C和%之間有什麼區別?
- 24. Ctrl + C和Ctrl + [有什麼區別?
- 25. C#和.NET有什麼區別?
- 26. C++中#import和#include有什麼區別?
- 27. GLSL和c有什麼區別?
- 28. C中#define和'='有什麼區別?
- 29. C#Thread.Sleep()和threadreference.Join()有什麼區別?
- 30. Xcode,Objective-C和Cocoa有什麼區別?
代碼的年齡? – Tom 2010-05-18 19:52:26
喜歡4-5歲。沒有複雜的。 – Laz 2010-05-18 19:54:36
什麼樣的編譯器錯誤?也許你應該發佈它們,我們可以幫助解決它們。沒有看到它,我會猜測它是一個構建/編譯器設置/選項,而不是代碼本身的問題。普通的C++不應該在VC++中編譯和運行時遇到太多麻煩。 – FrustratedWithFormsDesigner 2010-05-18 19:56:36