Microsoft Visual C++
Microsoft Visual C++ (MSVC) is a compiler for the C, C++ and C++/CX programming languages by Microsoft. MSVC is proprietary software; it was originally a standalone product but later became a part of Visual Studio and made available in both trialware and freeware forms. It features tools for developing and debugging C++ code, especially code written for the Windows API, DirectX and .NET. Many applications require redistributable Visual C++ runtime library packages to function correctly. These packages are often installed independently of applications, allowing multiple applications to make use of the package while only having to install  it once. These Visual C++ redistributable and runtime packages are mostly installed for standard libraries that many applications use. History. The predecessor to Visual C++ was called "Microsoft C/C++". There was also a "Microsoft QuickC" 2.5 and a "Microsoft QuickC for Windows" 1.0. The Visual C++ compiler is still known as "Microsoft C/C++" and as of the release of Visual C++ 2015 Update 2, is on version 14.0.23918.0. Internal version numbering. The predefined macro codice_1 indicates the major and minor version numbers of the Visual C++ compiler. The macro's value is an integer literal in which the  last two digits indicate the minor version number and the preceding digits indicate the major version number. From Visual Studio 2017, codice_1 is incremented monotonically at every Visual C++ toolset update. Thus, for example, the version of | 14.11 that ships with Visual Studio 2017 version 15.3.0 sets codice_1 to codice_4. Microsoft recommends using the codice_5 operator to test the value of codice_1. Here are the values of codice_1 for various versions of Visual C++: These version numbers refer to the major version number of the Visual C++ compilers and libraries, as can be seen from the installation directories. It  does not refer to the year in the name of the Visual Studio release. A thorough list is available. Note that the C++ compiler executable version matches and is different from the version of the Visual C++ product as a whole. For example the cl.exe included in 14.22 (Visual Studio 2019 16.2.5) reports its version as 19.22.27905 if run without arguments. There is also a value, defined since 1200, for extra information about the build number. Compatibility. ABI. The Visual C++ compiler ABI have historically changed between major compiler releases. This is especially the case for STL containers, where container  sizes have varied a lot between compiler releases. Microsoft therefore recommends against using C++ interfaces at module boundaries when one wants to enable client code compiled using a different compiler version. Instead of C++, Microsoft recommends using C or COM interfaces, which are designed to have a stable ABI between compiler releases. All 14.x MSVC releases have a stable ABI, and binaries built with these versions can be mixed in a forwards-compatible manner, noting the following restrictions: C runtime libraries. Visual C++ ships with different versions of C runtime libraries. This means users can compile their code with any  of the available libraries. However, this can cause some problems when using different components (DLLs, EXEs) in the same program. A typical example is a program using different libraries. The user should use the same C Run-Time for all the program's components unless the implications are understood. Microsoft recommends using the multithreaded, dynamic link library (/MD or /MDd compiler option) to avoid possible problems. POSIX. Although Microsoft's CRT implements a large subset of POSIX interfaces, the Visual C++ compiler will emit a warning on "every" use of such functions by default. The rationale is that C and  C++ standards require an underscore prefix before implementation-defined interfaces, so the use of these functions are non-standard. However, systems that are actually POSIX-compliant would not accept these underscored names, and it is more portable to just turn off the warning instead. C. Although the product originated as an IDE for the C programming language, for many years the compiler's support for that language conformed only to the original edition of the C standard, dating from 1989, but not the C99 revision of the standard. There had been no plans to support C99 even in 2011, more  than a decade after its publication. Visual C++ 2013 finally added support for various C99 features in its C mode (including designated initializers, compound literals, and the codice_8 type), though it was still not complete. Visual C++ 2015 further improved the C99 support, with full support of the C99 Standard Library, except for features that require C99 language features not yet supported by the compiler. Most of the changes from the C11 revision of the standard are still not supported by Visual C++ 2017. For example, generic selections via the codice_9 keyword are not supported by the compiler and result  in a syntax error. The preprocessor was overhauled in 2018, with C11 in sight: codice_9 support has been committed to MSVC as of February 2020, not clear on when it will ship.<ref>