Câu trả lời:
_MSC_VER
và có thể _MSC_FULL_VER
là những gì bạn cần. Bạn cũng có thể kiểm tra visualc.hpp trong bất kỳ cài đặt boost nào gần đây cho một số ví dụ sử dụng.
Một số giá trị cho các phiên bản mới hơn của trình biên dịch là:
MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 version 16.0)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
Số phiên bản ở trên tất nhiên đề cập đến phiên bản chính của Visual studio mà bạn nhìn thấy trong hộp giới thiệu, không phải là năm trong tên. Một danh sách kỹ lưỡng có thể được tìm thấy ở đây . Bắt đầu gần đây , Visual Studio sẽ bắt đầu cập nhật các phạm vi của nó một cách đơn điệu, có nghĩa là bạn nên kiểm tra các phạm vi, thay vì các giá trị trình biên dịch chính xác.
cl.exe /?
sẽ đưa ra gợi ý về phiên bản đã sử dụng, ví dụ:
c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
.....
#if defined _MSC_VER # if _MSC_VER >= 1800 # include <inttypes.h>
. inttypes.h không thể được tìm thấy, mặc dù. Rất lạ
_MSC_VER
. Hy vọng điều này sẽ giúp
Yep _MSC_VER là macro sẽ giúp bạn có phiên bản trình biên dịch. Số bản phát hành cuối cùng của Visual C ++ có dạng <compiler-major-version>.00.<build-number>
, trong đó 00 là số phụ. Vậy _MSC_VER
sẽ đánh giá <major-version><minor-version>
.
Bạn có thể sử dụng mã như thế này:
#if (_MSC_VER == 1500)
// ... Do VC9/Visual Studio 2008 specific stuff
#elif (_MSC_VER == 1600)
// ... Do VC10/Visual Studio 2010 specific stuff
#elif (_MSC_VER == 1700)
// ... Do VC11/Visual Studio 2012 specific stuff
#endif
Nó xuất hiện các bản cập nhật giữa các bản phát hành liên tiếp của trình biên dịch, chưa sửa đổi compiler-minor-version
, do đó không cần phải có đoạn mã sau:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
Truy cập vào thông tin phiên bản chi tiết hơn (như số bản dựng trình biên dịch) có thể được tìm thấy bằng cách sử dụng các biến tiền xử lý dựng sẵn khác tại đây .
_MSC_VER_ == 1500
, tuy nhiên nếu MS, đã sửa đổi các _MSC_VER
bản cập nhật trình biên dịch, gói dịch vụ, v.v. (Tôi không nghĩ là chúng có), thì == 1500
kiểm tra có thể bị hỏng. Đó là lý do tại sao tôi đã mã hóa nó theo cách đó.
_MSC_VER phải được xác định theo số phiên bản cụ thể. Bạn có thể #ifdef trên đó hoặc bạn có thể sử dụng định nghĩa thực tế và thực hiện kiểm tra thời gian chạy. (Nếu vì lý do nào đó bạn muốn chạy mã khác nhau dựa trên trình biên dịch được biên dịch với? Yeah, có lẽ bạn đang tìm kiếm #ifdef. :))
Bằng cách sử dụng _MSC_VER
macro.
Là một câu trả lời tổng quát hơn http://sourceforge.net/p/predef/wiki/Home/ duy trì một danh sách các macro để phát hiện các trình biên dịch cụ thể, hệ điều hành, kiến trúc, tiêu chuẩn và hơn thế nữa.
Điều này hơi cũ nhưng sẽ giúp bạn bắt đầu:
//******************************************************************************
// Automated platform detection
//******************************************************************************
// _WIN32 is used by
// Visual C++
#ifdef _WIN32
#define __NT__
#endif
// Define __MAC__ platform indicator
#ifdef macintosh
#define __MAC__
#endif
// Define __OSX__ platform indicator
#ifdef __APPLE__
#define __OSX__
#endif
// Define __WIN16__ platform indicator
#ifdef _Windows_
#ifndef __NT__
#define __WIN16__
#endif
#endif
// Define Windows CE platform indicator
#ifdef WIN32_PLATFORM_HPCPRO
#define __WINCE__
#endif
#if (_WIN32_WCE == 300) // for Pocket PC
#define __POCKETPC__
#define __WINCE__
//#if (_WIN32_WCE == 211) // for Palm-size PC 2.11 (Wyvern)
//#if (_WIN32_WCE == 201) // for Palm-size PC 2.01 (Gryphon)
//#ifdef WIN32_PLATFORM_HPC2000 // for H/PC 2000 (Galileo)
#endif
_MSC_VER
không yêu cầu bạn đưa vào stdio.h
, có thể dễ dàng kiểm traecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
Trong phòng thu trực quan, hãy giúp đỡ | về và xem xét phiên bản Visual Studio mà bạn đang sử dụng để biên dịch ứng dụng của mình.