ไมโครซอฟต์ วิชวล ซี++
| วิชวลซี++ | |
|---|---|
| นักพัฒนา | ไมโครซอฟต์ |
| ปล่อย | กุมภาพันธ์ พ.ศ. 2536 [ 1 ] |
| เวอร์ชันเสถียร | |
| เขียนเป็น | C++ [ 3 ] |
| ระบบปฏิบัติการ | วินโดวส์ |
| แพลตฟอร์ม | IA-32 , x86-64และARM |
| มีจำหน่ายใน | ภาษาอังกฤษ, ภาษาจีน (ตัวย่อและตัวเต็ม), ภาษาเช็ก, ภาษาฝรั่งเศส, ภาษาเยอรมัน, ภาษาอิตาลี, ภาษาญี่ปุ่น, ภาษาเกาหลี, ภาษาโปแลนด์, ภาษาโปรตุเกส (บราซิล), ภาษารัสเซีย, ภาษาสเปน, ภาษาตุรกี |
| พิมพ์ | คอมไพเลอร์ |
| ใบอนุญาต | โปรแกรมทดลองใช้และโปรแกรมฟรี |
| เว็บไซต์ | visualstudio.microsoft.com/vs/features/cplusplus/ |
Microsoft Visual C++ ( MSVC ) เป็นคอมไพเลอร์สำหรับภาษาโปรแกรมC , C++ , C++/CLIและC++/CX จากMicrosoft MSVC เป็นซอฟต์แวร์กรรมสิทธิ์เดิมทีเป็นผลิตภัณฑ์แบบสแตนด์อโลน แต่ต่อมาได้รวมเข้ากับVisual Studioและมีให้ใช้งานทั้งใน รูป แบบทดลองใช้และฟรีแวร์มีเครื่องมือสำหรับพัฒนาและดีบักโค้ด C++ โดยเฉพาะโค้ดที่เขียนขึ้นสำหรับWindows API , DirectXและ. NET
แอปพลิเคชันจำนวนมากต้องการแพ็กเกจไลบรารีรันไทม์ Visual C++ ที่แจกจ่ายได้ เพื่อให้ทำงานได้อย่างถูกต้อง แพ็กเกจเหล่านี้มักจะติดตั้งแยกต่างหากจากแอปพลิเคชันที่รองรับ ทำให้แอปพลิเคชันหลายตัวสามารถใช้แพ็กเกจได้ด้วยการติดตั้งเพียงครั้งเดียว แพ็กเกจรันไทม์และแจกจ่ายได้ของ Visual C++ เหล่านี้ส่วนใหญ่ติดตั้งสำหรับ ไลบรารี มาตรฐาน ที่แอปพลิเคชันจำนวนมากใช้[ 4 ]
ประวัติศาสตร์
โปรแกรมคอมไพเลอร์รุ่นก่อนหน้า Visual C++ มีชื่อว่าMicrosoft C/C++นอกจากนี้ยังมีMicrosoft QuickC 2.5 และMicrosoft QuickC for Windows 1.0 ด้วย ปัจจุบัน คอมไพเลอร์ Visual C++ ยังคงใช้ชื่อว่าMicrosoft C/C++และ ณ การเปิดตัว Visual C++ 2015 Update 2 เวอร์ชันปัจจุบันคือ 14.0.23918.0
เวอร์ชัน 16 บิต
- Microsoft C 1.0 ซึ่งพัฒนามาจากLattice Cเป็นผลิตภัณฑ์ภาษา C ตัวแรกของ Microsoft ในปี 1983 และไม่เป็นไปตามมาตรฐานK&R C
- C 2.0 เพิ่มการรองรับโมเดลขนาดใหญ่ ทำให้สามารถรองรับได้ถึง 1 MiB สำหรับทั้ง Code Segment และ Data Segment [ 5 ]
- C 3.0 เป็นเวอร์ชันแรกที่พัฒนาขึ้นภายใน Microsoft [ 6 ]เวอร์ชันนี้มีจุดประสงค์เพื่อให้เข้ากันได้กับ K&R และมาตรฐาน ANSI ในภายหลัง โดยมีการใช้งานภายใน Microsoft (สำหรับ การพัฒนา WindowsและXenix ) ในช่วงต้นปี 1984 และวางจำหน่ายเป็นผลิตภัณฑ์ในปี 1985
- C 4.0 ได้เพิ่มการปรับปรุงประสิทธิภาพและCodeViewซึ่งเป็นเครื่องมือดีบักเกอร์ระดับซอร์สโค้ด
- C 5.0 เพิ่มการเพิ่มประสิทธิภาพลูปและ การรองรับ โมเดลหน่วยความจำขนาดใหญ่ ( อาร์เรย์ที่มีขนาดใหญ่กว่า 64 KB)
- C 5.1 ที่วางจำหน่ายในปี 1988 อนุญาตให้คอมไพล์โปรแกรมสำหรับ OS/2 1.x ได้ เวอร์ชันที่มีดิสก์ขนาด 5.25 นิ้ว จำนวน 14 แผ่น (สองแผ่นมีขนาด 1.2 MB ส่วนที่เหลือมีขนาด 360k) นั้นรวมถึง QuickC ด้วย ส่วนเวอร์ชันที่มีดิสก์ขนาด 3.5 นิ้ว จำนวน 11 แผ่น ขนาด 720k ซึ่งรวมอยู่ในชุดพัฒนาซอฟต์แวร์ OS/2 นั้นรวมถึง MASM 5.1 (ไฟล์ปฏิบัติการเดียวที่ใช้งานได้ทั้งบน MSDOS และ OS/2 1.x)
- C 6.0 ที่วางจำหน่ายในปี 1989 เพิ่มการสนับสนุนสำหรับโมเดลหน่วยความจำขนาดเล็กและการสนับสนุนที่ดีขึ้นสำหรับมาตรฐาน ANSI C89 (เอกสารระบุอย่างชัดเจนว่าไม่เป็นไปตามมาตรฐาน 100% แต่ดูเหมือนว่าจะใกล้เคียงเพียงพอสำหรับการใช้งานจริง) นอกจากนี้ยังเพิ่ม IDE Programmer's Workbench , การวิเคราะห์การไหลของโปรแกรมทั่วโลก, ตัวเรียกดูซอร์สโค้ด และดีบักเกอร์ใหม่ ที่น่าประหลาดใจสำหรับหลายคนคือ C++ ไม่ได้รวมอยู่ด้วย ทั้งๆ ที่คู่แข่งมีผลิตภัณฑ์ของตนอยู่แล้ว[ 7 ]
- C/C++ 7.0 เปิดตัวในปี 1992 ยกเลิกการสนับสนุน OS/2 การคอมไพล์ต้องใช้โปรเซสเซอร์ 386 บวกกับตัวขยาย DOSที่ รวมอยู่ด้วย 386MAX [ 8 ]แม้ว่าผู้ใช้จะสามารถกำหนดเป้าหมายตัวขยาย DOS ในโปรแกรมของตนเองที่เขียนขึ้นได้จำเป็นต้องใช้เครื่องมือของบุคคลที่สาม ที่เปิดตัวในภายหลังหลายตัว [ 9 ] เพิ่ม การสนับสนุนในตัวสำหรับC++และMFC (Microsoft Foundation Class Library) 1.0 [ 10 ]
- Visual C++ 1.0 ซึ่งรวมถึง MFC 2.0 เป็นเวอร์ชันแรกของ "Visual" C++ ที่วางจำหน่ายในเดือนกุมภาพันธ์ พ.ศ. 2536 เป็นไป ตามมาตรฐาน Cfront 2.1 [ 11 ]และมีให้เลือกสองรุ่น: [ 1 ]
- มาตรฐาน: ใช้แทน QuickC สำหรับ Windows
- ระดับมืออาชีพ: แทนที่ C/C++ 7.0 รวมถึงความสามารถในการสร้างแอปพลิเคชันทั้ง DOS และ Windows คอมไพเลอร์ที่ปรับแต่งประสิทธิภาพโปรไฟล์ซอร์สโค้ดและ Windows 3.1 SDK [ 11 ]รวมถึง Phar Lap 286 DOS Extender Lite ด้วย[ 12 ]
- Visual C++ 1.5 เปิดตัวในเดือนธันวาคม พ.ศ. 2536 รวม MFC 2.5 และเพิ่ม การสนับสนุน OLE 2.0 และODBCให้กับ MFC [ 13 ]นับเป็น Visual C++ เวอร์ชันแรกที่วางจำหน่ายเฉพาะใน รูปแบบ ซีดี รอม เท่านั้น
- Visual C++ เวอร์ชัน 1.51 และ 1.52 มีให้บริการในรูปแบบบริการสมัครสมาชิก
- Visual C++ 1.52b มีลักษณะคล้ายกับเวอร์ชัน 1.52 แต่ไม่มี Control Development Kit รวมอยู่ด้วย
- Visual C++ 1.52c เป็นเวอร์ชันที่ได้รับการแก้ไขจากเวอร์ชัน 1.5 เป็นแพลตฟอร์มการพัฒนาตัวสุดท้าย และอาจกล่าวได้ว่าได้รับความนิยมมากที่สุดสำหรับMicrosoft Windows 3.x สามารถดาวน์โหลดได้จากMicrosoft Developer Network
เฉพาะเวอร์ชัน 32 บิตเท่านั้น
- Visual C++ 1.0 (ชื่อเดิม: Visual C++ 32-bit Edition) ที่วางจำหน่ายในปี 1993 เป็นเวอร์ชันแรกสำหรับ การพัฒนา 32 บิต (และต้องใช้ Windows NT 32 บิตเป็นโฮสต์) สำหรับสถาปัตยกรรมIntel 386 [ 14 ]แม้ว่าจะวางจำหน่ายในขณะที่ เวอร์ชัน 16 บิต 1.5 พร้อมใช้งานแล้ว แต่ก็ไม่ได้รวมการสนับสนุน OLE2 และ ODBC ไว้ด้วย นอกจากนี้ยังมีให้ใช้งานในรูปแบบชุดรวมที่เรียกว่า Visual C++ 16/32-bit Suite ซึ่งรวมถึง Visual C++ 1.5 ด้วย[ 15 ]
- Visual C++ 2.0 ซึ่งรวมถึง MFC 3.0 เป็นเวอร์ชันแรกที่เป็นแบบ 32 บิตเท่านั้น ในหลายๆ ด้าน เวอร์ชันนี้ล้ำหน้ากว่ายุคสมัย เนื่องจากWindows 95ซึ่งในขณะนั้นมีชื่อรหัสว่า "Chicago" ยังไม่ได้รับการเผยแพร่ และWindows NTมีส่วนแบ่งการตลาดเพียงเล็กน้อย Microsoft ได้รวมและอัปเดต Visual C++ 1.5 เป็นส่วนหนึ่งของการเผยแพร่เวอร์ชัน 2.x จนถึง 2.1 ซึ่งรวมถึง Visual C++ 1.52 และชุดพัฒนาควบคุม (CDK) ทั้งเวอร์ชัน 16 บิตและ 32 บิต Visual C++ 2.x ยังรองรับ การพัฒนา Win32 ด้วย สามารถดาวน์โหลดได้จากMicrosoft Developer Networkนอกจากนี้ยังมี Visual C++ 2.0 RISC Edition สำหรับ โปรเซสเซอร์ MIPSและAlphaรวมถึงเวอร์ชันข้ามแพลตฟอร์มสำหรับMacintosh ( ชุดคำสั่ง 68000 ) [ 16 ]
- Microsoft Visual C++ Cross-Development Edition สำหรับ Macintosh เป็นส่วนเสริมสำหรับ Visual C++ ที่แนะนำ Windows Portability Library ซึ่งเดิมเรียกว่า Windows Library for Macintosh [ 17 ] : 17 หรือ Windows Layer for the Macintosh (WLM) [ 18 ] : 16 ซึ่งช่วยให้นักพัฒนาสามารถเขียนแอปพลิเคชันโดยใช้ Win32 และ MFC API ที่สามารถคอมไพล์สำหรับคอมพิวเตอร์ Macintosh สถาปัตยกรรม 68000 ได้[ 17 ]
- Visual C++ เวอร์ชัน 2.1 และ 2.2 เป็นเวอร์ชันอัปเดตของ 2.0 ซึ่งสามารถใช้งานได้ผ่านการสมัครสมาชิก
- Visual C++ 4.0 ซึ่งวางจำหน่ายเมื่อวันที่ 11 ธันวาคม 1995 [ 19 ]ได้แนะนำ Developer Studio IDE รูปแบบการจัดวางแผงแบบเรียงต่อกันที่ไม่ทับซ้อนกันซึ่งถือเป็นนวัตกรรมในขณะนั้น ได้แก่ แผงนำทาง แผงตัวแก้ไข/ตัวดีบักเกอร์ระดับซอร์สโค้ด และแผงเอาต์พุตคอนโซล[ 20 ]ซึ่งยังคงมีอยู่ใน ผลิตภัณฑ์ Visual Studio (ณ ปี 2025) Visual C++ 4.0 ประกอบด้วย MFC 4.0 และได้รับการออกแบบมาสำหรับ Windows 95 และ Windows NT เพื่อรองรับโปรเจกต์รุ่นเก่า (Windows 3.x/DOS) เวอร์ชัน 4.0 จึงมาพร้อมกับแผ่นซีดีติดตั้ง Visual C++ 1.52 การอัปเดตที่มีให้ผ่านการสมัครสมาชิก ได้แก่ Visual C++ 4.1 ซึ่งมาพร้อมกับ Microsoft Game SDK (ต่อมาวางจำหน่ายแยกต่างหากในชื่อ DirectX SDK) และ Visual C++ 4.2 ข้ามหมายเลขเวอร์ชัน 3.0 เพื่อให้หมายเลขเวอร์ชันของ Visual C++ 4.0 และ MFC 4.0 เท่ากัน[ 21 ]
- Visual C++ 4.2 ไม่รองรับการพัฒนา Windows 3.x ( Win32s ) [ 22 ]นี่เป็นเวอร์ชันสุดท้ายที่มีเวอร์ชันข้ามแพลตฟอร์มสำหรับMacและแตกต่างจากเวอร์ชัน 2.x ตรงที่อนุญาตให้คอมไพล์สำหรับชุดคำสั่งPowerPC ได้ด้วย
- Visual C++ 5.0 (รวมอยู่ใน Visual Studio 97) ซึ่งรวมถึง MFC 4.21 และวางจำหน่ายเมื่อวันที่ 28 เมษายน 1997 [ 19 ]เป็นการอัปเกรดครั้งใหญ่จากเวอร์ชัน 4.2 [ 23 ]มีให้เลือกสี่รุ่น ได้แก่ รุ่นเรียนรู้[ 24 ]รุ่นมืออาชีพ[ 25 ]รุ่นองค์กร[ 26 ]และรุ่น RISC [ 27 ]
- Visual C++ 6.0 (โดยทั่วไปเรียกว่า VC6 และมีให้เลือกใช้แบบแยกต่างหากในรุ่น Standard, Professional และ Enterprise รวมถึงแบบที่รวมอยู่ใน Visual Studio 6.0) ซึ่งรวมถึง MFC 6.0 ได้รับการเผยแพร่ในปี 1998 [ 28 ] [ 29 ]การเผยแพร่ครั้งนี้ค่อนข้างเป็นที่ถกเถียงกัน เนื่องจากไม่ได้รวมการอัปเดต MFC ตามที่คาดไว้ Visual C++ 6.0 ยังคงได้รับความนิยมและมักใช้ในการบำรุงรักษาโปรเจกต์เก่า อย่างไรก็ตาม มีปัญหาบางประการเกี่ยวกับเวอร์ชันนี้ภายใต้ Windows XP โดยเฉพาะอย่างยิ่งในโหมดดีบัก (ตัวอย่างเช่น ค่าของตัวแปรคงที่จะไม่แสดง) ปัญหาการดีบักสามารถแก้ไขได้ด้วยแพตช์ที่เรียกว่า "Visual C++ 6.0 Processor Pack" [ 30 ]หมายเลขเวอร์ชัน: 12.00.8804
- Visual C++ .NET 2002 (หรือที่รู้จักกันในชื่อ Visual C++ 7.0) ซึ่งรวมถึง MFC 7.0 เปิดตัวในปี 2002 โดยรองรับการสร้างโค้ดในระหว่างการเชื่อมโยงและการตรวจสอบการดีบักในขณะรันไทม์, .NET 1.0, Visual C#และManaged C++ส่วนติดต่อผู้ใช้ใหม่ใช้ปุ่มลัดและข้อกำหนดต่างๆ ของVisual Basicซึ่งเป็นสาเหตุหนึ่งที่ทำให้ไม่เป็นที่นิยมในหมู่นักพัฒนา C++ หมายเลขเวอร์ชัน: 13.00.9466
- Visual C++ .NET 2003 (หรือที่รู้จักกันในชื่อ Visual C++ 7.1) ซึ่งรวมถึง MFC 7.1 เปิดตัวในปี 2003 พร้อมกับ .NET 1.1 และเป็นการอัปเกรดครั้งใหญ่ของ Visual C++ .NET 2002 และเป็นเวอร์ชันแรกที่รองรับโครงสร้าง C99 "long long" ถือได้ว่าเป็นแพทช์สำหรับ Visual C++ .NET 2002 ดังนั้น เวอร์ชันอัปเกรดภาษาอังกฤษของ Visual Studio .NET 2003 จึงวางจำหน่ายในราคาที่ต่ำมากสำหรับผู้ที่เป็นเจ้าของ Visual Studio .NET 2002 เวอร์ชันภาษาอังกฤษ Windows 98 เป็นเวอร์ชันต่ำสุดที่ได้รับการสนับสนุนอย่างเป็นทางการ แม้ว่าโปรแกรมง่ายๆ จะทำงานบน Windows 95 และ NT 4.0 ได้ แต่โปรแกรมที่ซับซ้อนกว่าอาจทำให้เกิดการอ้างอิงถึงไฟล์ต่างๆ เช่น ws2_32.dll หรือฟังก์ชันบางอย่างหายไปใน kernel32.dll ในเวอร์ชันต่อมา (Visual C++ 2005) ของคอมไพเลอร์ แม้แต่โปรแกรมง่ายๆ ก็จะไม่ทำงาน (เว้นแต่คุณจะเปลี่ยนไลบรารี C) เพราะมีการอ้างอิงถึงฟังก์ชัน IsDebuggerPresent ใน kernel32.dll ซึ่งมีอยู่เฉพาะใน Windows 98 และเวอร์ชันที่ใหม่กว่าเท่านั้น หมายเลขเวอร์ชัน: 13.10.3077
- eMbedded Visual C++ [ 31 ]ในเวอร์ชันต่างๆ ถูกใช้เพื่อพัฒนา ระบบปฏิบัติการ Windows CE บางเวอร์ชัน ในตอนแรกมันเข้ามาแทนที่สภาพแวดล้อมการพัฒนาที่ประกอบด้วยเครื่องมือที่เพิ่มเข้ามาใน Visual C++ 6.0 eMbedded Visual C++ ถูกแทนที่ด้วยสภาพแวดล้อมการพัฒนาแยกต่างหากโดยMicrosoft Visual Studio 2005
เวอร์ชัน 32 บิตและ 64 บิต
- Visual C++ 2005 (หรือที่รู้จักกันในชื่อ Visual C++ 8.0) ซึ่งรวมถึง MFC 8.0 ได้รับการเผยแพร่ในเดือนพฤศจิกายน 2005 เวอร์ชันนี้รองรับ .NET 2.0 และมี C++ เวอร์ชันใหม่ที่กำหนดเป้าหมายไปยังเฟรมเวิร์ก .NET ( C++/CLI ) โดยมีจุดประสงค์เพื่อแทนที่เวอร์ชันก่อนหน้า ( Managed C++ ) อย่างไรก็ตาม Managed C++ สำหรับ CLI ยังคงใช้งานได้ผ่านตัวเลือกคอมไพเลอร์ นอกจากนี้ยังมีการแนะนำOpenMPด้วย Microsoft ยังได้แนะนำTeam Foundation Server ใน Visual C++ 2005 ด้วย Visual C++ 8.0 มีปัญหาในการคอมไพล์โปรเจ็กต์ MFC AppWizard ที่สร้างขึ้นโดยใช้ Visual Studio 6.0 ดังนั้นการบำรุงรักษาโปรเจ็กต์เก่าจึงสามารถดำเนินการต่อได้ด้วย IDE เดิมหากการเขียนใหม่ทำได้ยาก Visual C++ 2005 เป็นเวอร์ชันสุดท้ายที่สามารถกำหนดเป้าหมายไปยังWindows 98และWindows Meได้[ 32 ] [ 33 ]เวอร์ชัน SP1 (14.00.50727.762) ก็มีให้ใช้งานในMicrosoft Windows SDK Update สำหรับ Windows Vistaเช่น กัน
- Visual C++ 2008 (หรือที่รู้จักกันในชื่อ Visual C++ 9.0) เปิดตัวในเดือนพฤศจิกายน พ.ศ. 2550 เวอร์ชันนี้รองรับ .NET 3.5 Managed C++ สำหรับ CLI ยังคงมีให้ใช้งานผ่านตัวเลือกคอมไพเลอร์ โดยค่าเริ่มต้น แอปพลิเคชันทั้งหมดที่คอมไพล์กับ Visual C++ 2008 Runtimes (การเชื่อมโยงแบบคงที่และแบบไดนามิก) จะใช้งานได้เฉพาะบน Windows 2000, Windows XP SP2 และเวอร์ชันที่ใหม่กว่าเท่านั้น[ 34 ] [ 35 ]ชุดฟีเจอร์ที่เปิดตัวสำหรับ VC9 ซึ่งต่อมารวมอยู่ใน SP1 ได้เพิ่มการสนับสนุนสำหรับส่วนขยายไลบรารี C++ TR1เวอร์ชัน SP1 (15.00.30729.01) ยังมีให้ใช้งานในMicrosoft Windows SDK สำหรับ Windows 7ด้วย
- Visual C++ บางเวอร์ชันรองรับโปรเซสเซอร์Itanium 2
- Visual C++ 2010 (หรือที่รู้จักกันในชื่อ Visual C++ 10.0) เปิดตัวเมื่อวันที่ 12 เมษายน 2553 โดยใช้ ฐานข้อมูล SQL Server Compactเพื่อจัดเก็บข้อมูลเกี่ยวกับซอร์สโค้ด รวมถึง ข้อมูล IntelliSenseเพื่อการสนับสนุน IntelliSense และการเติมโค้ดอัตโนมัติที่ดีขึ้น[ 36 ]อย่างไรก็ตาม Visual C++ 2010 ไม่รองรับ IntelliSense สำหรับ C++/CLI [ 37 ] เวอร์ชันนี้เพิ่มไลบรารี การประมวลผลแบบขนาน C++ ที่เรียกว่าParallel Patterns Libraryการสนับสนุนบางส่วนสำหรับC++11ปรับปรุง IntelliSense อย่างมากโดยอิงจากส่วนหน้า ของ Edison Design Group [ 38 ]และปรับปรุงประสิทธิภาพทั้งคอมไพเลอร์และโค้ดที่สร้างขึ้น[ 39 ]เวอร์ชันนี้สร้างขึ้นบน .NET 4.0 แต่รองรับการคอมไพล์เป็นรหัสเครื่องการสนับสนุน C++11 บางส่วนส่วนใหญ่ประกอบด้วยคุณสมบัติคอมไพเลอร์หกประการ ได้แก่[ 40 ]แลมบ์ดา, การอ้างอิง rvalue, auto, decltype, static_assert และ nullptr C++11 ยังรองรับคุณสมบัติไลบรารี (เช่น การย้ายส่วนประกอบ TR1 จากเนมสเปซ std::tr1 ไปยังเนมสเปซ std โดยตรง) เทมเพลตแบบแปรผันก็ได้รับการพิจารณาเช่นกัน แต่ถูกเลื่อนออกไปจนถึงเวอร์ชันในอนาคตเนื่องจากมีลำดับความสำคัญต่ำกว่า ซึ่งเกิดจากข้อเท็จจริงที่ว่า ต่างจากคุณสมบัติอื่นๆ ที่มีต้นทุนในการใช้งานสูง (แลมบ์ดา, การอ้างอิง rvalue) เทมเพลตแบบแปรผันจะให้ประโยชน์แก่ผู้เขียนไลบรารีเพียงส่วนน้อยเท่านั้น ไม่ใช่ผู้ใช้ปลายทางของคอมไพเลอร์ส่วนใหญ่[ 41 ]โดยค่าเริ่มต้น แอปพลิเคชันทั้งหมดที่คอมไพล์กับ Visual C++ 2010 Runtimes จะทำงานบน Windows XP SP2 และเวอร์ชันที่ใหม่กว่าเท่านั้น เวอร์ชัน RTM (16.00.30319) ยังมีให้ใช้งานในWindows SDK สำหรับ Windows 7 และ .NET Framework 4 (WinSDK v7.1) [ 42 ]เวอร์ชัน SP1 (16.00.40219) สามารถใช้งานได้เป็นส่วนหนึ่งของ Visual Studio 2010 Service Pack 1 หรือผ่านทาง Microsoft Visual C++ 2010 Service Pack 1 Compiler Update สำหรับ Windows SDK 7.1 [ 43 ]
- Visual C++ 2012 (หรือที่รู้จักกันในชื่อ Visual C++ 11.0) เปิดตัวเมื่อวันที่ 15 สิงหาคม 2555 โดยมีคุณสมบัติปรับปรุงการสนับสนุน C++11 และการสนับสนุนการพัฒนาWindows Runtime [ 44 ]
- Visual C++ 2013 (หรือที่รู้จักกันในชื่อ Visual C++ 12.0) เปิดตัวเมื่อวันที่ 17 ตุลาคม 2013 โดยมีคุณสมบัติเพิ่มเติมในการรองรับ C++11 และC99และแนะนำREST SDK [ 45 ]
- Visual C++ 2015 (หรือที่รู้จักกันในชื่อ Visual C++ 14.0) เปิดตัวเมื่อวันที่ 20 กรกฎาคม 2015 [ 46 ]มีคุณสมบัติการสนับสนุน C++11/14/17 ที่ได้รับการปรับปรุง[ 47 ]โดยไม่มีการประกาศใดๆ จาก Microsoft Visual Studio 2015 Update 2 เริ่มสร้างการเรียกใช้ telemetry ในไบนารีที่คอมไพล์แล้ว หลังจากที่ผู้ใช้บางรายติดต่อ Microsoft เกี่ยวกับปัญหานี้ Microsoft กล่าวว่าจะลบการเรียกใช้ telemetry เหล่านี้เมื่อคอมไพล์ด้วย Visual Studio 2015 Update 3 ในอนาคต[ 48 ] [ 49 ]ฟังก์ชันดังกล่าวถูกลบออกจากไลบรารีคงที่ Visual C++ CRT ใน Visual Studio 2015 Update 3
- Visual C++ 2017 (หรือที่รู้จักกันในชื่อ Visual C++ 14.10) เปิดตัวเมื่อวันที่ 7 มีนาคม 2017 [ 50 ]
- Visual C++ 2019 (หรือที่รู้จักกันในชื่อ Visual C++ 14.20) เปิดตัวเมื่อวันที่ 2 เมษายน 2562 [ 51 ]
เฉพาะเวอร์ชัน 64 บิตเท่านั้น
- Visual C++ 2022 (หรือที่รู้จักกันในชื่อ Visual C++ 14.30) เปิดตัวเมื่อวันที่ 8 พฤศจิกายน 2021 [ 52 ]
- Visual C++ 2022 (หรือที่รู้จักกันในชื่อ Visual C++ 14.40) เปิดตัวเมื่อวันที่ 21 พฤษภาคม 2024 [ 53 ]
- Visual C++ 2026 (หรือที่รู้จักกันในชื่อ Visual C++ 14.50) เปิดตัวเมื่อวันที่ 11 พฤศจิกายน 2025 [ 54 ]
การกำหนดหมายเลขเวอร์ชันภายใน
เมื่อทำงานกับ Visual C หรือ C++ จะต้องพิจารณาหมายเลขเวอร์ชันหลายแบบ หมายเลขเวอร์ชันที่เก่าแก่ที่สุดและเป็นต้นฉบับที่สุดคือหมายเลขเวอร์ชันของคอมไพเลอร์ ซึ่งเพิ่มขึ้นเรื่อยๆ ตั้งแต่ยุคแรกๆ ของคอมไพเลอร์ C ของ Microsoft นี่คือหมายเลขเวอร์ชันที่ได้จากการรันคำสั่งcl.exeโดยไม่มีตัวเลือกใดๆ โดยการนำตัวเลขสองหลักหลังจุดทศนิยมมาตัดทิ้ง จะได้ค่าของมาโครพรีโปรเซสเซอร์ C คือ `<command>` _MSC_VERและตัวแปร CMake คือ `<command> MSVC_VERSION` มาโคร C เวอร์ชันที่ยาวกว่าคือ `<command>` _MSC_FULL_VERใช้เพื่อแยกความแตกต่างระหว่างเวอร์ชันต่างๆ ของคอมไพเลอร์อย่างละเอียดมากขึ้น ตัวอย่างเช่น `<command>` _MSC_VERคือ 1933 แทนเวอร์ชัน 19.33 ของคอมไพเลอร์ C/C++ ของ Microsoft และ ` _MSC_FULL_VER<command>` คือ 193331630
เวอร์ชันของผลิตภัณฑ์ Visual เช่น "17.3.4" ระบุเวอร์ชันของ Visual Studio ที่มาพร้อมกับคอมไพเลอร์เวอร์ชัน 19.33 นอกจากนี้ยังมีเวอร์ชันของ Microsoft Visual C/C++ Runtime Library เช่น "14.3" จากนี้เราสามารถอนุมานเวอร์ชันของชุดเครื่องมือได้ โดยนำตัวเลขสามหลักแรกของเวอร์ชันไลบรารีรันไทม์มาตัดจุดทศนิยมทิ้ง เช่น "143" ซึ่งรวมถึงไลบรารีรันไทม์ Visual C/C++ รวมถึงคอมไพเลอร์ ลิงเกอร์ แอสเซมเบลอร์ เครื่องมือสร้างอื่นๆ และไลบรารีและไฟล์เฮดเดอร์ที่เกี่ยวข้อง ต่อไปนี้เป็นตาราง (ที่สามารถดึงข้อมูลได้) ของหมายเลขเวอร์ชันที่สัมพันธ์กันที่ทราบแล้ว
| ชื่อผลิตภัณฑ์ | VC (รหัสเวอร์ชัน) | ปีการตลาด | _MSC_VER | _MSC_FULL_VER | เวอร์ชันไลบรารีรันไทม์ |
|---|---|---|---|---|---|
| ไมโครซอฟต์ ซี 6.0 | 600 | ||||
| ไมโครซอฟต์ ซี/ซี++ 7.0 | 700 | ||||
| วิชวลซี++ 1.0 | 1.0 | 800 | 1 | ||
| วิชวลซี++ 2.0 | 2.0 | 900 | 2 | ||
| วิชวลซี++ 4.0 | 4.0 | 1000 | 4 | ||
| วิชวลซี++ 4.1 | 4.1 | 1010 | 4.1 | ||
| วิชวลซี++ 4.2 | 4.2 | 1020 | 4.2 | ||
| Visual Studio 97 [5.0] | 5.0 | 97 | 1100 | 5 | |
| วิชวล สตูดิโอ 6.0 SP5 | 6.0 | 1200 | 12008804 | 6 | |
| วิชวล สตูดิโอ 6.0 SP6 | 6.0 | 1200 | 12008804 | 6 | |
| Visual Studio .NET 2002 [7.0] | 7.0 | 2002 | 1300 | 13009466 | 7 |
| Visual Studio .NET 2003 Beta [7.1] | 7.1 | 2003 | 1310 | 13102292 | 7.1 |
| Visual Studio Toolkit 2003 [7.1] | 7.1 | 2003 | 1310 | 13103052 | 7.1 |
| Visual Studio .NET 2003 [7.1] | 7.1 | 2003 | 1310 | 13103077 | 7.1 |
| Visual Studio .NET 2003 SP1 [7.1] | 7.1 | 2003 | 1310 | 13106030 | 7.1 |
| Visual Studio 2005 Beta 1 [8.0] | 8.0 | 2548 | 1400 | 140040607 | 8 |
| Visual Studio 2005 Beta 2 [8.0] | 8.0 | 2548 | 1400 | 140050215 | 8 |
| Visual Studio 2005 [8.0] | 8.0 | 2548 | 1400 | 140050320 | 8 |
| Visual Studio 2005 SP1 [8.0] | 8.0 | 2548 | 1400 | 140050727 | 8 |
| Visual Studio 2008 Beta 2 [9.0] | 8.0 | 2008 | 1500 | 150020706 | 9 |
| Visual Studio 2008 [9.0] | 9.0 | 2010 | 1500 | 150021022 | 9 |
| Visual Studio 2008 SP1 [9.0] | 9.0 | 2010 | 1500 | 150030729 | 9 |
| Visual Studio 2010 Beta 1 [10.0] | 10.0 | 2010 | 1600 | 160020506 | 10 |
| Visual Studio 2010 Beta 2 [10.0] | 10.0 | 2010 | 1600 | 160021003 | 10 |
| Visual Studio 2010 [10.0] | 10.0 | 2010 | 1600 | 160030319 | 10 |
| Visual Studio 2010 SP1 [10.0] | 10.0 | 2010 | 1600 | 160040219 | 10 |
| Visual Studio 2012 [11.0] | 11.0 | 2012 | 1700 | 170050727 | 11 |
| Visual Studio 2012 อัปเดต 1 [11.0] | 11.0 | 2012 | 1700 | 170051106 | 11 |
| Visual Studio 2012 อัปเดต 2 [11.0] | 11.0 | 2012 | 1700 | 170060315 | 11 |
| Visual Studio 2012 อัปเดต 3 [11.0] | 11.0 | 2012 | 1700 | 170060610 | 11 |
| Visual Studio 2012 อัปเดต 4 [11.0] | 11.0 | 2012 | 1700 | 170061030 | 11 |
| Visual Studio 2012 November CTP [11.0] | 11.0 | 2012 | 1700 | 170051025 | 11 |
| Visual Studio 2013 Preview [12.0] | 12.0 | 2013 | 1800 | 180020617 | 12 |
| Visual Studio 2013 RC [12.0] | 12.0 | 2013 | 1800 | 180020827 | 12 |
| Visual Studio 2013 [12.0] | 12.0 | 2013 | 1800 | 180021005 | 12 |
| Visual Studio 2013 อัปเดต 1 [12.0] | 12.0 | 2013 | 1800 | 180021005 | 12 |
| Visual Studio 2013 Update2 RC [12.0] | 12.0 | 2013 | 1800 | 180030324 | 12 |
| Visual Studio 2013 อัปเดต 2 [12.0] | 12.0 | 2013 | 1800 | 180030501 | 12 |
| Visual Studio 2013 อัปเดต 3 [12.0] | 12.0 | 2013 | 1800 | 180030723 | 12 |
| Visual Studio 2013 อัปเดต 4 [12.0] | 12.0 | 2013 | 1800 | 180031101 | 12 |
| Visual Studio 2013 อัปเดต 5 [12.0] | 12.0 | 2013 | 1800 | 180040629 | 12 |
| Visual Studio 2013 November CTP [12.0] | 12.0 | 2013 | 1800 | 180021114 | 12 |
| Visual Studio 2015 [14.0] | 14.0 | 2015 | ปี ค.ศ. 1900 | 190023026 | 14 |
| Visual Studio 2015 อัปเดต 1 [14.0] | 14.0 | 2015 | ปี ค.ศ. 1900 | 190023506 | 14 |
| Visual Studio 2015 อัปเดต 2 [14.0] | 14.0 | 2015 | ปี ค.ศ. 1900 | 190023918 | 14 |
| Visual Studio 2015 อัปเดต 3 [14.0] | 14.0 | 2015 | ปี ค.ศ. 1900 | 190024210 | 14 |
| Visual Studio 2017 เวอร์ชัน 15.0 | 15.0 | 2017 | 1910 | 191025017 | 14.1 |
| Visual Studio 2017 เวอร์ชัน 15.1 | 15.1 | 2017 | 1910 | 191025017 | 14.1 |
| Visual Studio 2017 เวอร์ชัน 15.2 | 15.2 | 2017 | 1910 | 191025017 | 14.1 |
| Visual Studio 2017 เวอร์ชัน 15.3.3 | 15.3.3 | 2017 | 1911 | 191125507 | 14.11 |
| Visual Studio 2017 เวอร์ชัน 15.4.4 | 15.4.4 | 2017 | 1911 | 191125542 | 14.11 |
| Visual Studio 2017 เวอร์ชัน 15.4.5 | 15.4.5 | 2017 | 1911 | 191125547 | 14.11 |
| Visual Studio 2017 เวอร์ชัน 15.5.2 | 15.5.2 | 2017 | 1912 | 191225831 | 14.12 |
| Visual Studio 2017 เวอร์ชัน 15.5.3 | 15.5.3 | 2017 | 1912 | 191225834 | 14.12 |
| Visual Studio 2017 เวอร์ชัน 15.5.4 | 15.5.4 | 2017 | 1912 | 191225834 | 14.12 |
| Visual Studio 2017 เวอร์ชัน 15.5.6 | 15.5.6 | 2017 | 1912 | 191225835 | 14.12 |
| Visual Studio 2017 เวอร์ชัน 15.5.7 | 15.5.7 | 2017 | 1912 | 191225835 | 14.12 |
| Visual Studio 2017 เวอร์ชัน 15.6.0 | 15.6.0 | 2017 | 1913 | 191326128 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.6.1 | 15.6.1 | 2017 | 1913 | 191326128 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.6.2 | 15.6.2 | 2017 | 1913 | 191326128 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.6.3 | 15.6.3 | 2017 | 1913 | 191326129 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.6.4 | 15.6.4 | 2017 | 1913 | 191326129 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.6.6 | 15.6.6 | 2017 | 1913 | 191326131 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.6.7 | 15.6.7 | 2017 | 1913 | 191326132 | 14.13 |
| Visual Studio 2017 เวอร์ชัน 15.7.1 | 15.7.1 | 2017 | 1914 | 191426428 | 14.14 |
| Visual Studio 2017 เวอร์ชัน 15.7.2 | 15.7.2 | 2017 | 1914 | 191426429 | 14.14 |
| Visual Studio 2017 เวอร์ชัน 15.7.3 | 15.7.3 | 2017 | 1914 | 191426430 | 14.14 |
| Visual Studio 2017 เวอร์ชัน 15.7.5 | 15.7.5 | 2017 | 1914 | 191426433 | 14.14 |
| Visual Studio 2017 เวอร์ชัน 15.9.1 | 15.9.1 | 2017 | 1916 | 191627023 | 14.16 |
| Visual Studio 2017 เวอร์ชัน 15.9.4 | 15.9.4 | 2017 | 1916 | 191627025 | 14.16 |
| Visual Studio 2017 เวอร์ชัน 15.9.5 | 15.9.5 | 2017 | 1916 | 191627026 | 14.16 |
| Visual Studio 2017 เวอร์ชัน 15.9.7 | 15.9.7 | 2017 | 1916 | 191627027 | 14.16 |
| Visual Studio 2017 เวอร์ชัน 15.9.11 | 15.9.11 | 2017 | 1916 | 191627030 | 14.16 |
| Visual Studio 2019 เวอร์ชัน 16.0.0 | 16.0.0 | 2019 | 1920 | 192027508 | 14.20 |
| Visual Studio 2019 เวอร์ชัน 16.1.2 | 16.1.2 | 2019 | 1921 | 192127702 | 14.21 |
| Visual Studio 2019 เวอร์ชัน 16.2.3 | 16.2.3 | 2019 | 1922 | 192227905 | 14.21 |
| Visual Studio 2019 เวอร์ชัน 16.3.2 | 16.3.2 | 2019 | 1923 | 192328105 | 14.21 |
| Visual Studio 2019 เวอร์ชัน 16.4.0 | 16.4.0 | 2019 | 1924 | 192428314 | 14.24 |
| Visual Studio 2019 เวอร์ชัน 16.5.1 | 16.5.1 | 2019 | 1925 | 192528611 | 14.25 |
| Visual Studio 2019 เวอร์ชัน 16.6.2 | 16.6.2 | 2019 | 1926 | 192628806 | 14.26 |
| Visual Studio 2019 เวอร์ชัน 16.7 | 16.7 | 2019 | 1927 | 192729112 | 14.27 |
| Visual Studio 2019 เวอร์ชัน 16.8.1 | 16.8.1 | 2019 | 1928 | 192829333 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.8.2 | 16.8.2 | 2019 | 1928 | 192829334 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.9.0 | 16.9.0 | 2019 | 1928 | 192829910 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.9.2 | 16.9.2 | 2019 | 1928 | 192829913 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.9.17 | 16.9.17 | 2019 | 1928 | 192829921 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.9.18 | 16.9.18 | 2019 | 1928 | 192829921 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.9.19 | 16.9.19 | 2019 | 1928 | 192829923 | 14.28 |
| Visual Studio 2019 เวอร์ชัน 16.11.2 | 16.11.2 | 2019 | 1929 | 192930133 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.8 | 16.11.8 | 2019 | 1929 | 192930138 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.9 | 16.11.9 | 2019 | 1929 | 192930139 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.10 | 16.11.10 | 2019 | 1929 | 192930140 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.11 | 16.11.11 | 2019 | 1929 | 192930141 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.12 | 16.11.12 | 2019 | 1929 | 192930142 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.16 | 16.11.16 | 2019 | 1929 | 192930145 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.17 | 16.11.17 | 2019 | 1929 | 192930146 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.21 | 16.11.21 | 2019 | 1929 | 192930147 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.24 | 16.11.24 | 2019 | 1929 | 192930148 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.27 | 16.11.27 | 2019 | 1929 | 192930151 | 14.29 |
| Visual Studio 2019 เวอร์ชัน 16.11.35 | 16.11.35 | 2019 | 1929 | 192930154 | 14.29 |
| Visual Studio 2022 เวอร์ชัน 17.0.1 | 17.0.1 | 2022 | 1930 | 193030705 | 14.30 |
| Visual Studio 2022 เวอร์ชัน 17.0.2 | 17.0.2 | 2022 | 1930 | 193030706 | 14.31 |
| Visual Studio 2022 เวอร์ชัน 17.1.3 | 17.1.3 | 2022 | 1931 | 193131105 | 14.31 |
| Visual Studio 2022 เวอร์ชัน 17.2.2 | 17.2.2 | 2022 | 1932 | 193231329 | 14.32 |
| Visual Studio 2022 เวอร์ชัน 17.3.4 | 17.3.4 | 2022 | 1933 | 193331630 | 14.33 |
| Visual Studio 2022 เวอร์ชัน 17.4.0 | 17.4.0 | 2022 | 1934 | 193431933 | 14.34 |
| Visual Studio 2022 เวอร์ชัน 17.5.0 | 17.5.0 | 2022 | 1935 | 193532215 | 14.35 |
| Visual Studio 2022 เวอร์ชัน 17.6.0 | 17.6.0 | 2022 | 1936 | 193632532 | 14.36 |
| Visual Studio 2022 เวอร์ชัน 17.6.2 | 17.6.2 | 2022 | 1936 | 193632532 | 14.36.32532 |
| Visual Studio 2022 เวอร์ชัน 17.6.4 | 17.6.4 | 2022 | 1936 | 193632535 | 14.36.32532 |
| Visual Studio 2022 เวอร์ชัน 17.7.0 | 17.7.0 | 2022 | 1937 | 193732822 | 14.36.32543 |
| Visual Studio 2022 เวอร์ชัน 17.8.0 | 17.8.0 | 2022 | 1938 | 193833130 | 14.38.33135 |
| Visual Studio 2022 เวอร์ชัน 17.9.1 | 17.9.1 | 2022 | 1939 | 193933520 | 14.39.33520 |
| Visual Studio 2022 เวอร์ชัน 17.9.6 | 17.9.6 | 2022 | 1939 | 193933523 | 14.39.33523 |
| Visual Studio 2022 เวอร์ชัน 17.10.1 | 17.10.1 | 2022 | 1940 | 194033811 | 14.40.33811 |
| Visual Studio 2022 เวอร์ชัน 17.10.10 | 17.10.10 | 2022 | 1940 | 194033818 | 14.40.33818 |
| Visual Studio 2022 เวอร์ชัน 17.11.0 | 17.11.0 | 2022 | 1941 | 194134120 | 14.41.34120 |
| Visual Studio 2022 เวอร์ชัน 17.12.4 | 17.12.4 | 2022 | 1942 | 194234436 | 14.42.34436 |
| Visual Studio 2022 เวอร์ชัน 17.13.0 | 17.13.0 | 2022 | พ.ศ. 2486 | 194334808 | 14.43.34808 |
| Visual Studio 2022 เวอร์ชัน 17.13.6 | 17.13.6 | 2022 | พ.ศ. 2486 | 194334810 | 14.43.34810 |
ความเข้ากันได้
เอบีไอ
ABIของคอมไพเลอร์ Visual C++ มีการเปลี่ยนแปลงระหว่างการออกเวอร์ชันคอมไพเลอร์หลักมาโดยตลอด[ 57 ]โดยเฉพาะอย่างยิ่งในกรณีของคอนเทนเนอร์ STL ซึ่งขนาดของคอนเทนเนอร์มีความแตกต่างกันมากระหว่างการออกเวอร์ชันคอมไพเลอร์[ 58 ]ดังนั้น Microsoft จึงแนะนำไม่ให้ใช้อินเทอร์เฟซ C++ ที่ขอบเขตโมดูลเมื่อต้องการเปิดใช้งานโค้ดไคลเอ็นต์ที่คอมไพล์โดยใช้เวอร์ชันคอมไพเลอร์ที่แตกต่างกัน แทนที่จะใช้ C++ Microsoft แนะนำให้ใช้ อินเทอร์เฟซ C [ 59 ]หรือCOM [ 60 ]ซึ่งได้รับการออกแบบให้มี ABI ที่เสถียรระหว่างการออกเวอร์ชันคอมไพเลอร์
MSVC เวอร์ชัน 14.x ทั้งหมดมี ABI ที่เสถียร[ 61 ]และไบนารีที่สร้างด้วยเวอร์ชันเหล่านี้สามารถผสมกันได้ในลักษณะที่เข้ากันได้กับเวอร์ชันก่อนหน้า โดยคำนึงถึงข้อจำกัดต่อไปนี้:
- เวอร์ชันของชุดเครื่องมือที่ใช้ต้องเท่ากับหรือสูงกว่าเวอร์ชันชุดเครื่องมือสูงสุดที่ใช้ในการสร้างไบนารีที่เชื่อมโยงใดๆ
- เวอร์ชันของ MSVC Redistributable ต้องเท่ากับหรือสูงกว่าเวอร์ชันของชุดเครื่องมือที่ใช้โดยส่วนประกอบแอปพลิเคชันใดๆ
- ไลบรารีแบบคงที่หรือไฟล์ออบเจ็กต์ที่คอมไพล์ด้วย /GL (การเพิ่มประสิทธิภาพโปรแกรมทั้งหมด) จะไม่สามารถใช้งานร่วมกันได้ในระดับไบนารีระหว่างเวอร์ชัน และต้องใช้ชุดเครื่องมือเดียวกันอย่างแน่นอน
ไลบรารีรันไทม์ C
Visual C++ มาพร้อมกับไลบรารีรันไทม์ C เวอร์ชันต่างๆ[ 62 ]ซึ่งหมายความว่าผู้ใช้สามารถคอมไพล์โค้ดของตนโดยใช้ไลบรารีใดก็ได้ที่มีอยู่ อย่างไรก็ตาม อาจทำให้เกิดปัญหาบางอย่างเมื่อใช้ส่วนประกอบต่างๆ ( DLL , EXE ) ในโปรแกรมเดียวกัน ตัวอย่างทั่วไปคือโปรแกรมที่ใช้ไลบรารี ที่แตกต่างกัน ผู้ใช้ควรใช้ C Run-Timeเดียวกันสำหรับส่วนประกอบทั้งหมดของโปรแกรม เว้นแต่จะเข้าใจถึงผลกระทบ Microsoft แนะนำให้ใช้ ไลบรารีการเชื่อมโยงแบบไดนามิก แบบมัลติเธรด (/MD หรือ /MDd ตัวเลือกคอมไพเลอร์) เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้น[ 62 ]
โพสิกซ์
แม้ว่า CRT ของ Microsoft จะใช้ชุดย่อยขนาดใหญ่ของ อินเทอร์เฟซ POSIXแต่คอมไพเลอร์ Visual C++ จะแสดงคำเตือนทุกครั้ง ที่ มีการใช้ฟังก์ชันดังกล่าวโดยค่าเริ่มต้น เหตุผลก็คือมาตรฐาน C และ C++ กำหนดให้ต้องมีคำนำหน้าด้วยเครื่องหมายขีดล่างก่อนอินเทอร์เฟซที่กำหนดโดยการใช้งาน ดังนั้นการใช้ฟังก์ชันเหล่านี้จึงไม่เป็นไปตามมาตรฐาน[ 63 ]อย่างไรก็ตาม ระบบที่สอดคล้องกับ POSIX จริงๆ จะไม่ยอมรับชื่อที่มีเครื่องหมายขีดล่างเหล่านี้ และการปิดคำเตือนแทนจะพกพาได้ง่ายกว่า
ซี
แม้ว่าผลิตภัณฑ์จะมีต้นกำเนิดมาจาก IDE สำหรับ ภาษาการเขียนโปรแกรม Cแต่เป็นเวลาหลายปีที่การสนับสนุนคอมไพเลอร์สำหรับภาษานั้นเป็นไปตามมาตรฐาน C ฉบับดั้งเดิมเท่านั้น ซึ่งมีอายุตั้งแต่ปี 1989 แต่ไม่ใช่ มาตรฐาน C99ฉบับปรับปรุง และไม่มีแผนที่จะสนับสนุน C99 แม้กระทั่งในปี 2011 ซึ่งเป็นเวลากว่าสิบปีหลังจากที่ได้มีการเผยแพร่[ 64 ]
Visual C++ 2013 ได้เพิ่มการสนับสนุนคุณสมบัติต่างๆ ของ C99 ในโหมด C (รวมถึงตัวเริ่มต้นที่กำหนด ตัวอักษรผสม และ_Boolประเภท) [ 65 ]แม้ว่าจะยังไม่สมบูรณ์ก็ตาม[ 66 ] Visual C++ 2015 ได้ปรับปรุงการสนับสนุน C99 ให้ดียิ่งขึ้น โดยให้การสนับสนุนไลบรารีมาตรฐาน C99 อย่างเต็มที่ ยกเว้นคุณสมบัติที่ต้องใช้คุณสมบัติภาษา C99 ที่คอมไพเลอร์ยังไม่รองรับ[ 67 ]
การเปลี่ยนแปลงส่วนใหญ่จากการแก้ไขมาตรฐานC11 ยังไม่ได้รับการสนับสนุนโดย Visual C++ 2017 [ 68 ]ตัวอย่างเช่น การเลือกทั่วไปผ่าน_Genericคำหลักไม่ได้รับการสนับสนุนโดยคอมไพเลอร์และส่งผลให้เกิดข้อผิดพลาดทางไวยากรณ์[ 69 ]
ตัวประมวลผลล่วงหน้าได้รับการปรับปรุงใหม่ในปี 2018 โดยมีเป้าหมายคือ C11: [ 70 ]
การปฏิบัติตามมาตรฐาน C11 อย่างสมบูรณ์เป็นส่วนหนึ่งของแผนงานของเรา และการอัปเดตพรีโปรเซสเซอร์เป็นเพียงขั้นตอนแรกในกระบวนการนั้น
_Genericฟีเจอร์ C11 นั้นไม่ได้เป็นส่วนหนึ่งของพรีโปรเซสเซอร์ ดังนั้นจึงยังไม่ได้นำมาใช้งาน เมื่อนำมาใช้งานแล้ว ผมคาดว่าฟีเจอร์นี้จะทำงานได้อย่างอิสระไม่ว่าจะเป็นการใช้ตรรกะพรีโปรเซสเซอร์แบบดั้งเดิมหรือแบบอัปเดตก็ตาม
_Genericการสนับสนุนได้ถูกกำหนดให้กับ MSVC ตั้งแต่เดือนกุมภาพันธ์ พ.ศ. 2563 [ 71 ]
ในเดือนกันยายน พ.ศ. 2563 ไมโครซอฟต์ประกาศว่าการสนับสนุนมาตรฐาน C11 และ C17 ใน MSVC จะมาถึงในเวอร์ชัน 16.8 [ 72 ]ซึ่งไม่ได้รวมถึงคุณสมบัติเสริม แต่ไมโครซอฟต์ระบุว่าพวกเขากำลังวางแผนที่จะเพิ่มการสนับสนุนสำหรับอะตอมิกและเธรดในภายหลัง ในเวอร์ชัน 17.5 ได้มีการเพิ่มการสนับสนุนอะตอมิกบางส่วน (เนื่องจากขาดการล็อกอะตอมิก/experimental:c11atomics ) และแบบทดลอง (หมายความว่าซ่อนอยู่หลังแฟล็กคอมไพเลอ ร์) [ 73 ]และในเวอร์ชัน 17.8 ได้มีการเพิ่มการสนับสนุนเธรด ซึ่งคราวนี้ไม่ได้อยู่หลังแฟล็กคอมไพเลอร์[ 74 ] [ 75 ]
ซี++
ด้วยการตั้งค่าเริ่มต้น MSVC จะไม่ทำการค้นหาชื่อแบบสองเฟส ซึ่งป้องกันไม่ให้ระบุรหัสที่ไม่ถูกต้องจำนวนมาก การตรวจสอบส่วนใหญ่จะถูกเลื่อนไปยังการสร้างอินสแตนซ์เทมเพลต เวอร์ชันล่าสุดแก้ไขพฤติกรรมนี้ แต่จำเป็นต้องเปิดใช้งานโดยใช้ตัวเลือกบรรทัดคำ/permissive-สั่ง[ 76 ]
แผนกต้อนรับ
BYTEในเดือนกุมภาพันธ์ พ.ศ. 2532 ได้กล่าวว่าการสนับสนุน OS/2 ของ Microsoft C 5.1, QuickC สำหรับการพัฒนาแบบโต้ตอบ และดีบักเกอร์ CodeView นั้น"ยอดเยี่ยม" แม้ว่า Watcom Cจะสร้างโค้ดที่เร็วกว่าเล็กน้อย แต่นิตยสารก็กล่าวว่านักพัฒนา "อาจยังคงชอบเครื่องมือที่เป็นมิตรและมีประสิทธิภาพมากกว่าของ Microsoft" [ 77 ]
อ่านเพิ่มเติม
- จอห์นสัน, ไบรอัน (8 สิงหาคม 2547). "การสร้างแอปพลิเคชัน Win32 โดยใช้ Visual C++ 2005 Express" . บล็อก Startup Developer ของไบรอัน จอห์นสัน . ไมโครซอฟต์ – ผ่านทางคลังเอกสารของไมโครซอฟต์
- สปริงฟิลด์, จิม (25 กันยายน 2015). "การฟื้นฟูคอมไพเลอร์ C/C++ ของ Microsoft" . บล็อกทีม C++ . ไมโครซอฟต์.
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการ
- เครื่องมือและคุณสมบัติของ C++ ใน Visual Studio เวอร์ชันต่างๆ
- เครื่องมือสร้าง C++ ของ Microsoft
- C9::GoingNativeบนMicrosoft Channel 9