Microsoft Visual C++ ( MSVC ) is a compiler for the C , C++ , C++/CLI 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 .
18-434: Many applications require redistributable Visual C++ runtime library packages to function correctly. These packages are frequently installed separately from the applications they support, enabling multiple applications to use the package with only a single installation. These Visual C++ redistributable and runtime packages are mostly installed for standard libraries that many applications use. The predecessor to Visual C++
36-501: A certain feature or not. Some features of C11 are supported by the GCC starting with version 4.6, Clang starting with version 3.1, IBM XL C starting with version 12.1, and Microsoft Visual C++ starting with VS 2019 (16.8) in September 2020. The optional bounds-checking interfaces (Annex K) remain controversial and have not been widely implemented, and their deprecation or removal from
54-610: A detailed memory model to better support multiple threads of execution. Due to delayed availability of conforming C99 implementations, C11 makes certain features optional, to make it easier to comply with the core language standard. The final draft, N1570, was published in April 2011. The new standard passed its final draft review on October 10, 2011 and was officially ratified by ISO and published as ISO/IEC 9899:2011 on December 8, 2011, with no comments requiring resolution by participating national bodies. A standard macro __STDC_VERSION__
72-533: A later date. In version 17.5, partial (since atomic locks are missing) and experimental (meaning hidden behind the compiler flag /experimental:c11atomics ) support for atomics was added and in version 17.8, support for threads was added, this time not behind a compiler flag. With default settings MSVC does not do two-phase name lookup which prevents it from flagging a wide range of invalid code. Most checks are deferred to template instantiation. More recent versions remedy this behavior, but it needs to be enabled by
90-403: A stable ABI, and binaries built with these versions can be mixed in a forwards-compatible manner, noting the following restrictions: 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
108-513: 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. 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
126-466: Is defined with value 201112L to indicate that C11 support is available. The standard includes several changes to the C99 language and library specifications, such as The new revision allows implementations to not support certain parts of the standard — including some that had been mandatory to support in the 1999 revision. Programs can use predefined macros to determine whether an implementation supports
144-437: 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
162-453: 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. 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
180-558: 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 were still not supported by Visual C++ 2017. For example, generic selections via the _Generic keyword are not supported by the compiler and result in a syntax error. The preprocessor
198-670: The Wikimedia System Administrators, please include the details below. Request from 172.68.168.226 via cp1108 cp1108, Varnish XID 825976162 Upstream caches: cp1108 int Error: 429, Too Many Requests at Fri, 29 Nov 2024 08:41:54 GMT C11 (C standard revision) C11 (previously C1X , formally ISO/IEC 9899:2011 ), is a past standard for the C programming language. It replaced C99 (standard ISO/IEC 9899:1999) and has been superseded by C17 (standard ISO/IEC 9899:2018). C11 mainly standardizes features already supported by common contemporary compilers, and includes
SECTION 10
#1732869713898216-487: The command-line option /permissive- . Describing it as "excellent", BYTE in February 1989 approved of Microsoft C 5.1's OS/2 support, QuickC for interactive development, and CodeView debugger. Although Watcom C produced slightly faster code, the magazine said that developers "might still prefer Microsoft's friendlier and more powerful tools". Application software Too Many Requests If you report this error to
234-537: The compiler. An example of _MSC_VER is 1933 to represent version 19.33 of the Microsoft C/C++ compiler, and of _MSC_FULL_VER is 193331630. The Visual product version, such as "17.3.4", designates the version of Visual Studio with which version 19.33 of the compiler was packaged. Then there is the Microsoft Visual C/C++ Runtime Library version, e.g. "14.3". From this, one can also deduce
252-476: The early Microsoft C compiler days. This is the version returned by running the command cl.exe on its own without any options. By taking two digits after the decimal and dropping the decimal point, this also becomes the value of the C pre-processor macro: _MSC_VER , and the CMake variable: MSVC_VERSION . A longer version of the C macro is _MSC_FULL_VER to make more finely-grained distinctions between builds of
270-424: 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 _Bool type), though it was still not complete. Visual C++ 2015 further improved
288-520: The toolset version, which can be obtained by taking the first three digits of the runtime library version and dropping the decimal, e.g. "143". It includes the Visual C/C++ runtime library, as well as compilers, linkers, assemblers, other build tools, and matching libraries and header files. The following is a (scrapeable) table of the known correlated version numbers. The Visual C++ compiler ABI has historically changed between major compiler releases. This
306-462: 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. There are several different version numbers to consider when working with Visual C or C++. The oldest and most original of these is the compiler version number, which has been monotonically increased since
324-737: Was overhauled in 2018, with C11 in sight: Full C11 conformance is on our roadmap, and updating the preprocessor is just the first step in that process. The C11 _Generic feature is not actually part of the preprocessor, so it has not yet been implemented. When implemented I expect the feature to work independently of if the traditional or updated preprocessor logic is used. _Generic support has been committed to MSVC as of February 2020. In September 2020, Microsoft announced C11 and C17 standards support in MSVC would arrive in version 16.8. This did not include optional features but Microsoft indicated that they were planning to add support for atomics and threads at
#897102