2010-05-18 146 views
11

那麼這是一個相當愚蠢的問題。 Visual C++只是一個IDE?或者它是一個獨立於win32的語言?這兩者之間的區別究竟是什麼?我問這是因爲我在VC++ 2008上嘗試了一些舊的C++代碼,並且無法編譯。Visual C++和C++有什麼區別?

+0

代碼的年齡? – Tom 2010-05-18 19:52:26

+0

喜歡4-5歲。沒有複雜的。 – Laz 2010-05-18 19:54:36

+0

什麼樣的編譯器錯誤?也許你應該發佈它們,我們可以幫助解決它們。沒有看到它,我會猜測它是一個構建/編譯器設置/選項,而不是代碼本身的問題。普通的C++不應該在VC++中編譯和運行時遇到太多麻煩。 – FrustratedWithFormsDesigner 2010-05-18 19:56:36

回答

14

的Visual C++可很多事情,包括:

  1. 微軟的C++編譯器(cl.exe,LINK.EXE等)
  2. 的IDE(Visual Studio中的C++模式)
  3. C運行時(MSVCRT)
  4. 其他庫(少左右):MFC,ATL

至於編譯舊的C++代碼:現在Visual Studio是一個相當標準的C++編譯器。這並非總是如此,例如使用Visual C++ 6或更早的版本。很可能您的代碼不符合標準或使用不推薦使用的行爲,而這些行爲在新編譯器中無法使用。

不幸的是Visual C++是一個糟糕的C編譯器,因爲它不支持C99(並且永遠不會),除非C++和C99之間的特性重疊。對很多人來說最顯着的問題是缺少stdint.h。

+6

一種VC仍然非常明顯地偏離標準C++的方式是,它不會執行正確的兩階段解析的模板。這可以隱藏模板代碼中令人不快的錯誤,如果您希望代碼在更合適的編譯器上編譯,這會導致令人討厭的意外。 (這可能是VC的未來版本。) – sbi 2010-05-18 20:00:22

+0

我可以證明這一點。我有一些錯誤試圖讓模板元編程在該編譯器中工作,在其他編譯器中工作正常。 – wheaties 2010-05-18 20:09:54

+1

@wheaties:正好相反:其他編譯器,特別是Comeau和gcc,在解析std C++方面更好。然而,缺少兩階段查找的問題是,VC接受錯誤的代碼,這被其他編譯器拒絕(正確)。如果您正在進行跨平臺開發並且代碼是使用VC編寫的,那麼這可能會讓您感到頭疼。 – sbi 2010-05-20 08:18:49

0

我想Visual C++包括微軟的庫擴展。

+0

多數民衆贊成在??所有的大交易和維加斯爲幾個頭文件發佈? – Laz 2010-05-18 19:54:03

+1

@Ram Bhat:這是IDE,編譯器,不僅僅是一些「少數」頭文件,我認爲* MS VC++引入了一些自己的語法變化。這不是「純粹的」C++。 – FrustratedWithFormsDesigner 2010-05-18 19:54:56

+0

Visual Studio的新版本在他們的努力以及它提供的功能等方面是相當重要的。就C++語言而言,這並不是什麼大不了的事情,具體而言,除非他們繼續完善其標準合規性並開始支持即將推出的C++ 0x標準。 – jwismar 2010-05-18 19:57:07

3

Visual C++是一個IDE。它編譯標準的C++代碼。但是,每個C++編譯器本質上都會創建它自己的C++版本。很少編譯器完全符合當前的標準,他們可能會也可能不會添加即將到來的標準中的功能。另外,他們有時會添加他們自己的語言擴展。因此,在編譯C++代碼時使用不同的編譯器時總會存在可移植性風險。但是,最近版本的Visual C++與標準兼容,並且大多數與它一起編譯的東西都將與其他流行的編譯器(如gcc/g ++)(和反之亦然)一起編譯。

1

Visual C++是Microsoft的IDE和C++編程語言編譯器的名稱。但是請注意,與許多C++實現一樣,Visual C++具有某些C++不提供的擴展,以及某些未完全符合ISO C++語言標準的擴展。

1

VS C++本質上是一種特定類型的C++。

新的VS版本包括更新的功能,兩個擴展(例如CLI),以及更新的標準,例如C++ 0x(類型推斷等)。

某些功能可能會意外導致您的代碼停止工作,或者您可能依賴於同時修復的特定Visual Studio錯誤。

2

VS2008包含標準C++和Microsoft的託管C++。標準的C++大多符合C++ 03(至少這是意圖)。被管理的(即非標準的)C++是用於開發.NET應用程序的,並且不是(也不打算)符合任何C++標準。

您可能希望確保在移植應用程序時,您並未意外選擇託管C++。

1

Visual C++包含C++編譯器,它是C++語言標準的一個實現。 Visual C++ 6是不符合規定的實現。 Visual C++ 2008更好。從VC++ 6到VC++ 2008有一些變化,這就是爲什麼你的舊代碼無法編譯。有一些標誌允許在VC++ 2008中編譯VC++ 6代碼。

Here is在SO上已經有一個很好的問題,可能會有所幫助。