From cd52a17a66844330a3fe9e7ed7469df2e3dba1e0 Mon Sep 17 00:00:00 2001 From: Matt Gardner Date: Tue, 27 Jun 2023 16:02:38 -0700 Subject: [PATCH 0001/1239] Update x64-software-conventions.md Add link to `__vectorcall` documentation --- docs/build/x64-software-conventions.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/build/x64-software-conventions.md b/docs/build/x64-software-conventions.md index d1136eff59..959de8539f 100644 --- a/docs/build/x64-software-conventions.md +++ b/docs/build/x64-software-conventions.md @@ -18,6 +18,8 @@ Given the expanded register set, x64 uses the [__fastcall](../cpp/fastcall.md) c The **`__fastcall`** convention uses registers for the first four arguments, and the stack frame to pass more arguments. For details on the x64 calling convention, including register usage, stack parameters, return values, and stack unwinding, see [x64 calling convention](x64-calling-convention.md). +For more information on the `__vectorcall` calling convention, see [__vectorcall](../cpp/vectorcall.md). + ## Enable x64 compiler optimization The following compiler option helps you optimize your application for x64: From b9a44880c782782d63bd7f21288f0b1818872c3a Mon Sep 17 00:00:00 2001 From: Amy Wishnousky Date: Mon, 11 Dec 2023 15:19:29 -0800 Subject: [PATCH 0002/1239] Update asan-known-issues.md Update known issues page to, instead of describe MFC as a one-off incompatibility, describe the heart of the problem that means MFC might miss some errors. --- docs/sanitizers/asan-known-issues.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/sanitizers/asan-known-issues.md b/docs/sanitizers/asan-known-issues.md index cbf822f6b8..7ddd07c512 100644 --- a/docs/sanitizers/asan-known-issues.md +++ b/docs/sanitizers/asan-known-issues.md @@ -23,7 +23,6 @@ These options and functionality are incompatible with [`/fsanitize=address`](../ - [C++ AMP](../parallel/amp/cpp-amp-overview.md) is unsupported, and should be disabled. - [Universal Windows Platform](../cppcx/universal-windows-apps-cpp.md) (UWP) applications are unsupported. - [Special case list](https://clang.llvm.org/docs/SanitizerSpecialCaseList.html) files are unsupported. -- [MFC](../mfc/mfc-concepts.md) using the optional [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md) runtime option is unsupported. ## Standard library support @@ -55,6 +54,12 @@ int main() { } ``` +## Overriding operator new and delete + +AddressSanitizer has a custom version of `operator new` and `operator delete` that are used to provide additional metadata about the allocations to ASan to find more errors, like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). The linker is modified (via [`/INFERASANLIBS`](../build/reference/inferasanlibs.md)) to ensure that ASan's `new`/`delete` override has low precedence, so that any `operator new` or `operator delete` overrides in other libraries will be chosen by the linker over ASan's. When this happens, ASan may not be able to catch some errors that rely on it's custom `operator new` and `operator delete`. + +[MFC](../mfc/mfc-concepts.md) includes custom overrides for `operator new` and `operator delete` and may miss errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). + ## Windows versions As there are dependencies with specific Windows versions, support is focused on Windows 10. MSVC AddressSanitizer was tested on 10.0.14393 (RS1), and 10.0.21323 (prerelease insider build). [Report a bug](https://aka.ms/feedback/report?space=62) if you run into issues. From 6b2fa95a9d3b7114fc8fb071bd6a05600104db27 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Mon, 11 Dec 2023 16:04:06 -0800 Subject: [PATCH 0003/1239] Update asan-known-issues.md little edit pass to hopefully save you some ACROLINX noise. Hopefully doesn't cause new noise... --- docs/sanitizers/asan-known-issues.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sanitizers/asan-known-issues.md b/docs/sanitizers/asan-known-issues.md index 7ddd07c512..7439476cb1 100644 --- a/docs/sanitizers/asan-known-issues.md +++ b/docs/sanitizers/asan-known-issues.md @@ -56,9 +56,9 @@ int main() { ## Overriding operator new and delete -AddressSanitizer has a custom version of `operator new` and `operator delete` that are used to provide additional metadata about the allocations to ASan to find more errors, like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). The linker is modified (via [`/INFERASANLIBS`](../build/reference/inferasanlibs.md)) to ensure that ASan's `new`/`delete` override has low precedence, so that any `operator new` or `operator delete` overrides in other libraries will be chosen by the linker over ASan's. When this happens, ASan may not be able to catch some errors that rely on it's custom `operator new` and `operator delete`. +AddressSanitizer (ASAN) has a custom version of `operator new` and `operator delete` that it uses to help ASAN find more allocation errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). Running the linker with [`/INFERASANLIBS`](../build/reference/inferasanlibs.md) ensures that ASan's `new`/`delete` override has low precedence, so that any `operator new` or `operator delete` overrides in other libraries are chosen by the linker over ASan's. When this happens, ASAN may not be able to catch some errors that rely on its custom `operator new` and `operator delete`. -[MFC](../mfc/mfc-concepts.md) includes custom overrides for `operator new` and `operator delete` and may miss errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). +[MFC](../mfc/mfc-concepts.md) includes custom overrides for `operator new` and `operator delete` and so might miss errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). ## Windows versions From 46fee4d31095d8af2d8c2622374a7c0bf4a46ad2 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Mon, 11 Dec 2023 16:06:54 -0800 Subject: [PATCH 0004/1239] Update asan-known-issues.md A little more acrolinx --- docs/sanitizers/asan-known-issues.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sanitizers/asan-known-issues.md b/docs/sanitizers/asan-known-issues.md index 7439476cb1..162643f22b 100644 --- a/docs/sanitizers/asan-known-issues.md +++ b/docs/sanitizers/asan-known-issues.md @@ -1,7 +1,7 @@ --- title: "AddressSanitizer known issues" description: "Technical description of the AddressSanitizer for Microsoft C/C++ known issues." -ms.date: 12/1/2023 +ms.date: 12/11/2023 helpviewer_keywords: ["AddressSanitizer known issues"] --- @@ -56,7 +56,7 @@ int main() { ## Overriding operator new and delete -AddressSanitizer (ASAN) has a custom version of `operator new` and `operator delete` that it uses to help ASAN find more allocation errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). Running the linker with [`/INFERASANLIBS`](../build/reference/inferasanlibs.md) ensures that ASan's `new`/`delete` override has low precedence, so that any `operator new` or `operator delete` overrides in other libraries are chosen by the linker over ASan's. When this happens, ASAN may not be able to catch some errors that rely on its custom `operator new` and `operator delete`. +AddressSanitizer (ASAN) has a custom version of `operator new` and `operator delete` that it uses to find more allocation errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). Running the linker with [`/INFERASANLIBS`](../build/reference/inferasanlibs.md) ensures that ASAN's `new`/`delete` override has low precedence, so that the linker chooses any `operator new` or `operator delete` overrides in other libraries over ASAN's custom versions. When this happens, ASAN may not be able to catch some errors that rely on its custom `operator new` and `operator delete`. [MFC](../mfc/mfc-concepts.md) includes custom overrides for `operator new` and `operator delete` and so might miss errors like [`alloc_dealloc_mismatch`](error-alloc-dealloc-mismatch.md). From a5929b7cff9eaafe3ba17e15770d1a2ea2a6ecf8 Mon Sep 17 00:00:00 2001 From: Raymond Chen Date: Wed, 10 Jan 2024 14:03:00 -0800 Subject: [PATCH 0005/1239] Use the recommended TRUE value for AfxConnectionAdvise/Unadvise In https://github.com/MicrosoftDocs/cpp-docs-pr/pull/4999 we recommended using TRUE but failed to update the sample to follow the recommendation. --- docs/mfc/codesnippet/CPP/connection-maps_3.cpp | 2 +- docs/mfc/codesnippet/CPP/connection-maps_4.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/mfc/codesnippet/CPP/connection-maps_3.cpp b/docs/mfc/codesnippet/CPP/connection-maps_3.cpp index cffe2a236b..cab527dac6 100644 --- a/docs/mfc/codesnippet/CPP/connection-maps_3.cpp +++ b/docs/mfc/codesnippet/CPP/connection-maps_3.cpp @@ -10,4 +10,4 @@ IUnknown* pUnkSink = mysink.GetInterface(&iid); //pUnkSrc is IUnknown of server obtained by CoCreateInstance(). //dwCookie is a cookie identifying the connection, and is needed //to terminate this connection. -AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie); \ No newline at end of file +AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, TRUE, &dwCookie); \ No newline at end of file diff --git a/docs/mfc/codesnippet/CPP/connection-maps_4.cpp b/docs/mfc/codesnippet/CPP/connection-maps_4.cpp index 7fd1ae018a..8e5eed54a3 100644 --- a/docs/mfc/codesnippet/CPP/connection-maps_4.cpp +++ b/docs/mfc/codesnippet/CPP/connection-maps_4.cpp @@ -6,4 +6,4 @@ IUnknown* pUnkSink = mysink.GetInterface(&iid); //Terminate a connection between source and sink. //pUnkSrc is IUnknown of server obtained by CoCreateInstance(). //dwCookie is a value obtained through AfxConnectionAdvise(). -AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie); \ No newline at end of file +AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, TRUE, dwCookie); \ No newline at end of file From 0353c9a8ecff7ee2a65b0c5da5f8d000ec41e6d5 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 28 Mar 2024 15:49:16 -0700 Subject: [PATCH 0006/1239] Learn Editor: Update compiler-warnings-c4200-through-c4399.md --- .../compiler-warnings-c4200-through-c4399.md | 266 +++++++++--------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 4961aca1fd..8e79309244 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -14,168 +14,168 @@ The articles in this section of the documentation explain a subset of the warnin |Warning|Message| |-------------|-------------| -|[Compiler warning (levels 2 and 4) C4200](../../error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md)|nonstandard extension used: zero-sized array in struct/union| -|[Compiler warning (level 4) C4201](../../error-messages/compiler-warnings/compiler-warning-level-4-c4201.md)|nonstandard extension used: nameless struct/union| -|[Compiler warning (level 4) C4202](../../error-messages/compiler-warnings/compiler-warning-level-4-c4202.md)|nonstandard extension used: '...': prototype parameter in name list illegal| +|[Compiler warning (levels 2 and 4) C4200](compiler-warning-levels-2-and-4-c4200.md)|nonstandard extension used: zero-sized array in struct/union| +|[Compiler warning (level 4) C4201](compiler-warning-level-4-c4201.md)|nonstandard extension used: nameless struct/union| +|[Compiler warning (level 4) C4202](compiler-warning-level-4-c4202.md)|nonstandard extension used: '...': prototype parameter in name list illegal| |Compiler warning C4203|nonstandard extension used: union with static member variable| -|[Compiler warning (level 4) C4204](../../error-messages/compiler-warnings/compiler-warning-level-4-c4204.md)|nonstandard extension used: non-constant aggregate initializer| -|[Compiler warning (level 4) C4205](../../error-messages/compiler-warnings/compiler-warning-level-4-c4205.md)|nonstandard extension used: static function declaration in function scope| -|[Compiler warning (level 4) C4206](../../error-messages/compiler-warnings/compiler-warning-level-4-c4206.md)|nonstandard extension used: translation unit is empty| -|[Compiler warning (level 4) C4207](../../error-messages/compiler-warnings/compiler-warning-level-4-c4207.md)|nonstandard extension used: extended initializer form| -|[Compiler warning (level 4) C4208](../../error-messages/compiler-warnings/compiler-warning-level-4-c4208.md)|nonstandard extension used: delete [exp] - exp evaluated but ignored| -|[Compiler warning (level 4) C4210](../../error-messages/compiler-warnings/compiler-warning-level-4-c4210.md)|nonstandard extension used: function given file scope| -|[Compiler warning (level 4) C4211](../../error-messages/compiler-warnings/compiler-warning-level-4-c4211.md)|nonstandard extension used: redefined extern to static| -|[Compiler warning (level 4) C4212](../../error-messages/compiler-warnings/compiler-warning-level-4-c4212.md)|nonstandard extension used: function declaration used ellipsis| -|[Compiler warning (level 4) C4213](../../error-messages/compiler-warnings/compiler-warning-level-4-c4213.md)|nonstandard extension used: cast on l-value| -|[Compiler warning (level 4) C4214](../../error-messages/compiler-warnings/compiler-warning-level-4-c4214.md)|nonstandard extension used: bit field types other than int| -|[Compiler warning (level 1) C4215](../../error-messages/compiler-warnings/compiler-warning-level-1-c4215.md)|nonstandard extension used: long float| -|[Compiler warning (level 1) C4216](../../error-messages/compiler-warnings/compiler-warning-level-1-c4216.md)|nonstandard extension used: float long| -|[Compiler warning (level 1) C4218](../../error-messages/compiler-warnings/compiler-warning-level-1-c4218.md)|nonstandard extension used: must specify at least a storage class or a type| -|[Compiler warning (level 4) C4220](../../error-messages/compiler-warnings/compiler-warning-level-4-c4220.md)|varargs matches remaining parameters| -|[Compiler warning (level 4) C4221](../../error-messages/compiler-warnings/compiler-warning-level-4-c4221.md)|nonstandard extension used: '*identifier*': cannot be initialized using address of automatic variable '*variable*'| -|[Compiler warning (levels 1 and 4) C4223](../../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md)|nonstandard extension used: non-lvalue array converted to pointer| -|[Compiler warning (level 1) C4224](../../error-messages/compiler-warnings/compiler-warning-level-1-c4224.md)|nonstandard extension used: formal parameter '*identifier*' was previously defined as a type| -|[Compiler warning (level 1, Error) C4226](../../error-messages/compiler-warnings/compiler-warning-level-1-c4226.md)|nonstandard extension used: '*keyword*' is an obsolete keyword| -|[Compiler warning (level 1) C4227](../../error-messages/compiler-warnings/compiler-warning-level-1-c4227.md)|anachronism used: qualifiers on reference are ignored| -|[Compiler warning (level 1) C4228](../../error-messages/compiler-warnings/compiler-warning-level-1-c4228.md)|nonstandard extension used: qualifiers after comma in declarator list are ignored| -|[Compiler warning (level 1) C4229](../../error-messages/compiler-warnings/compiler-warning-level-1-c4229.md)|anachronism used: modifiers on data are ignored| -|[Compiler warning (level 1) C4230](../../error-messages/compiler-warnings/compiler-warning-level-1-c4230.md)|anachronism used: modifiers/qualifiers interspersed; qualifier ignored| -|[Compiler warning (level 4) C4232](../../error-messages/compiler-warnings/compiler-warning-level-4-c4232.md)|nonstandard extension used: '*identifier*': address of dllimport '*dllimport*' is not static, identity not guaranteed| -|[Compiler warning (level 4, Error) C4233](../../error-messages/compiler-warnings/compiler-warning-level-4-c4233.md)|nonstandard extension used: '*keyword*' keyword only supported in C++, not C| -|[Compiler warning (level 4, Error) C4234](../../error-messages/compiler-warnings/compiler-warning-level-4-c4234.md)|nonstandard extension used: '*keyword*' keyword reserved for future use| -|[Compiler warning (level 4, Error) C4235](../../error-messages/compiler-warnings/compiler-warning-level-4-c4235.md)|nonstandard extension used: '*keyword*' keyword not supported on this architecture| -|[Compiler warning (level 1) C4237](../../error-messages/compiler-warnings/compiler-warning-level-1-c4237.md)|'*keyword*' keyword is not yet supported, but reserved for future use| -|[Compiler warning (level 4) C4238](../../error-messages/compiler-warnings/compiler-warning-level-4-c4238.md)|nonstandard extension used: class rvalue used as lvalue| -|[Compiler warning (level 4) C4239](../../error-messages/compiler-warnings/compiler-warning-level-4-c4239.md)|nonstandard extension used: '*token*': conversion from '*type1*' to '*type2*'| -|[Compiler warning (level 3) C4240](../../error-messages/compiler-warnings/compiler-warning-level-3-c4240.md)|nonstandard extension used: access to '*classname*' now defined to be '*access_specifier1*', previously it was defined to be '*access_specifier2*'| -|[Compiler warning (level 4) C4242](../../error-messages/compiler-warnings/compiler-warning-level-4-c4242.md)|'*identifier*': conversion from '*type1*' to '*type2*', possible loss of data| -|[Compiler warning (level 3) C4243](../../error-messages/compiler-warnings/compiler-warning-level-3-c4243.md)|'*conversion_type*' conversion from '*type1*' to '*type2*' exists, but is inaccessible| -|[Compiler warning (level 2) C4244](../../error-messages/compiler-warnings/compiler-warning-level-2-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| -|[Compiler warning (levels 3 and 4) C4244](../../error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| -|[Compiler warning (level 4) C4245](../../error-messages/compiler-warnings/compiler-warning-level-4-c4245.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', signed/unsigned mismatch| -|[Compiler warning (level 2) C4250](../../error-messages/compiler-warnings/compiler-warning-level-2-c4250.md)|'*classname*': inherits '*base_classname*::*member*' via dominance| -|[Compiler warning (level 1) C4251](../../error-messages/compiler-warnings/compiler-warning-level-1-c4251.md)|'*identifier*': '*object_type1*' '*identifier1*' needs to have dll-interface to be used by clients of '*object_type*' '*identfier2*'| -|[Compiler warning (level 4) C4254](../../error-messages/compiler-warnings/compiler-warning-level-4-c4254.md)|'*operator*': conversion from '*type1*:*field_bits*' to '*type2*:*field_bits*', possible loss of data| -|[Compiler warning (level 4) C4255](../../error-messages/compiler-warnings/compiler-warning-level-4-c4255.md)|'*function*': no function prototype given: converting '()' to '(void)'| -|[Compiler warning (level 4) C4256](../../error-messages/compiler-warnings/compiler-warning-level-4-c4256.md)|'*function*': constructor for class with virtual bases has '...'; calls may not be compatible with older versions of Visual C++| -|[Compiler warning (level 1) C4258](../../error-messages/compiler-warnings/compiler-warning-level-1-c4258.md)|'*variable*': definition from the for loop is ignored; the definition from the enclosing scope is used| -|[Compiler warning (level 4) C4263](../../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md)|'*function*': member function does not override any base class virtual member function| -|[Compiler warning (level 1) C4264](../../error-messages/compiler-warnings/compiler-warning-level-1-c4264.md)|'*virtual_function*': no override available for virtual member function from base '*classname*'; function is hidden| -|[Compiler warning (level 3) C4265](../../error-messages/compiler-warnings/compiler-warning-level-3-c4265.md)|'*classname*': class has virtual functions, but destructor is not virtual\n instances of this class may not be destructed correctly| -|[Compiler warning (level 4) C4266](../../error-messages/compiler-warnings/compiler-warning-level-4-c4266.md)|'*virtual_function*': no override available for virtual member function from base '*classname*'; function is hidden| -|[Compiler warning (level 3) C4267](../../error-messages/compiler-warnings/compiler-warning-level-3-c4267.md)|'*variable*': conversion from 'size_t' to '*type*', possible loss of data| -|[Compiler warning (level 4) C4268](../../error-messages/compiler-warnings/compiler-warning-level-4-c4268.md)|'*identifier*': 'const' static/global data initialized with compiler generated default constructor fills the object with zeros| -|[Compiler warning (level 1) C4269](../../error-messages/compiler-warnings/compiler-warning-level-1-c4269.md)|'*identifier*': 'const' automatic data initialized with compiler generated default constructor produces unreliable results| -|[Compiler warning (level 1) C4272](../../error-messages/compiler-warnings/compiler-warning-level-1-c4272.md)|'*function*': is marked __declspec(dllimport); must specify native calling convention when importing a function.| -|[Compiler warning (level 1) C4273](../../error-messages/compiler-warnings/compiler-warning-level-1-c4273.md)|'*function*': inconsistent dll linkage| +|[Compiler warning (level 4) C4204](compiler-warning-level-4-c4204.md)|nonstandard extension used: non-constant aggregate initializer| +|[Compiler warning (level 4) C4205](compiler-warning-level-4-c4205.md)|nonstandard extension used: static function declaration in function scope| +|[Compiler warning (level 4) C4206](compiler-warning-level-4-c4206.md)|nonstandard extension used: translation unit is empty| +|[Compiler warning (level 4) C4207](compiler-warning-level-4-c4207.md)|nonstandard extension used: extended initializer form| +|[Compiler warning (level 4) C4208](compiler-warning-level-4-c4208.md)|nonstandard extension used: delete [exp] - exp evaluated but ignored| +|[Compiler warning (level 4) C4210](compiler-warning-level-4-c4210.md)|nonstandard extension used: function given file scope| +|[Compiler warning (level 4) C4211](compiler-warning-level-4-c4211.md)|nonstandard extension used: redefined extern to static| +|[Compiler warning (level 4) C4212](compiler-warning-level-4-c4212.md)|nonstandard extension used: function declaration used ellipsis| +|[Compiler warning (level 4) C4213](compiler-warning-level-4-c4213.md)|nonstandard extension used: cast on l-value| +|[Compiler warning (level 4) C4214](compiler-warning-level-4-c4214.md)|nonstandard extension used: bit field types other than int| +|[Compiler warning (level 1) C4215](compiler-warning-level-1-c4215.md)|nonstandard extension used: long float| +|[Compiler warning (level 1) C4216](compiler-warning-level-1-c4216.md)|nonstandard extension used: float long| +|[Compiler warning (level 1) C4218](compiler-warning-level-1-c4218.md)|nonstandard extension used: must specify at least a storage class or a type| +|[Compiler warning (level 4) C4220](compiler-warning-level-4-c4220.md)|varargs matches remaining parameters| +|[Compiler warning (level 4) C4221](compiler-warning-level-4-c4221.md)|nonstandard extension used: '*identifier*': cannot be initialized using address of automatic variable '*variable*'| +|[Compiler warning (levels 1 and 4) C4223](compiler-warning-levels-1-and-4-c4223.md)|nonstandard extension used: non-lvalue array converted to pointer| +|[Compiler warning (level 1) C4224](compiler-warning-level-1-c4224.md)|nonstandard extension used: formal parameter '*identifier*' was previously defined as a type| +|[Compiler warning (level 1, Error) C4226](compiler-warning-level-1-c4226.md)|nonstandard extension used: '*keyword*' is an obsolete keyword| +|[Compiler warning (level 1) C4227](compiler-warning-level-1-c4227.md)|anachronism used: qualifiers on reference are ignored| +|[Compiler warning (level 1) C4228](compiler-warning-level-1-c4228.md)|nonstandard extension used: qualifiers after comma in declarator list are ignored| +|[Compiler warning (level 1) C4229](compiler-warning-level-1-c4229.md)|anachronism used: modifiers on data are ignored| +|[Compiler warning (level 1) C4230](compiler-warning-level-1-c4230.md)|anachronism used: modifiers/qualifiers interspersed; qualifier ignored| +|[Compiler warning (level 4) C4232](compiler-warning-level-4-c4232.md)|nonstandard extension used: '*identifier*': address of dllimport '*dllimport*' is not static, identity not guaranteed| +|[Compiler warning (level 4, Error) C4233](compiler-warning-level-4-c4233.md)|nonstandard extension used: '*keyword*' keyword only supported in C++, not C| +|[Compiler warning (level 4, Error) C4234](compiler-warning-level-4-c4234.md)|nonstandard extension used: '*keyword*' keyword reserved for future use| +|[Compiler warning (level 4, Error) C4235](compiler-warning-level-4-c4235.md)|nonstandard extension used: '*keyword*' keyword not supported on this architecture| +|[Compiler warning (level 1) C4237](compiler-warning-level-1-c4237.md)|'*keyword*' keyword is not yet supported, but reserved for future use| +|[Compiler warning (level 4) C4238](compiler-warning-level-4-c4238.md)|nonstandard extension used: class rvalue used as lvalue| +|[Compiler warning (level 4) C4239](compiler-warning-level-4-c4239.md)|nonstandard extension used: '*token*': conversion from '*type1*' to '*type2*'| +|[Compiler warning (level 3) C4240](compiler-warning-level-3-c4240.md)|nonstandard extension used: access to '*classname*' now defined to be '*access_specifier1*', previously it was defined to be '*access_specifier2*'| +|[Compiler warning (level 4) C4242](compiler-warning-level-4-c4242.md)|'*identifier*': conversion from '*type1*' to '*type2*', possible loss of data| +|[Compiler warning (level 3) C4243](compiler-warning-level-3-c4243.md)|'*conversion_type*' conversion from '*type1*' to '*type2*' exists, but is inaccessible| +|[Compiler warning (level 2) C4244](compiler-warning-level-2-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| +|[Compiler warning (levels 3 and 4) C4244](compiler-warning-levels-3-and-4-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| +|[Compiler warning (level 4) C4245](compiler-warning-level-4-c4245.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', signed/unsigned mismatch| +|[Compiler warning (level 2) C4250](compiler-warning-level-2-c4250.md)|'*classname*': inherits '*base_classname*::*member*' via dominance| +|[Compiler warning (level 1) C4251](compiler-warning-level-1-c4251.md)|'*identifier*': '*object_type1*' '*identifier1*' needs to have dll-interface to be used by clients of '*object_type*' '*identfier2*'| +|[Compiler warning (level 4) C4254](compiler-warning-level-4-c4254.md)|'*operator*': conversion from '*type1*:*field_bits*' to '*type2*:*field_bits*', possible loss of data| +|[Compiler warning (level 4, off) C4255](compiler-warning-level-4-c4255.md)|'*function*': no function prototype given: converting '()' to '(void)'| +|[Compiler warning (level 4) C4256](compiler-warning-level-4-c4256.md)|'*function*': constructor for class with virtual bases has '...'; calls may not be compatible with older versions of Visual C++| +|[Compiler warning (level 1) C4258](compiler-warning-level-1-c4258.md)|'*variable*': definition from the for loop is ignored; the definition from the enclosing scope is used| +|[Compiler warning (level 4, off) C4263](compiler-warning-level-4-c4263.md)|'*function*': member function does not override any base class virtual member function| +|[Compiler warning (level 4, off) C4264](compiler-warning-level-1-c4264.md)|'*virtual_function*': no override available for virtual member function from base '*classname*'; function is hidden| +|[Compiler warning (level 3, off) C4265](compiler-warning-level-3-c4265.md)|'*classname*': class has virtual functions, but destructor is not virtual\n instances of this class may not be destructed correctly| +|[Compiler warning (level 4, off) C4266](compiler-warning-level-4-c4266.md)|'*virtual_function*': no override available for virtual member function from base '*classname*'; function is hidden| +|[Compiler warning (level 3) C4267](compiler-warning-level-3-c4267.md)|'*variable*': conversion from 'size_t' to '*type*', possible loss of data| +|[Compiler warning (level 4) C4268](compiler-warning-level-4-c4268.md)|'*identifier*': 'const' static/global data initialized with compiler generated default constructor fills the object with zeros| +|[Compiler warning (level 1) C4269](compiler-warning-level-1-c4269.md)|'*identifier*': 'const' automatic data initialized with compiler generated default constructor produces unreliable results| +|[Compiler warning (level 1) C4272](compiler-warning-level-1-c4272.md)|'*function*': is marked __declspec(dllimport); must specify native calling convention when importing a function.| +|[Compiler warning (level 1) C4273](compiler-warning-level-1-c4273.md)|'*function*': inconsistent dll linkage| |[Compiler warning (level 1) C4274](compiler-warning-level-1-c4274.md)|#ident ignored; see documentation for #pragma comment(exestr, 'string')| -|[Compiler warning (level 2) C4275](../../error-messages/compiler-warnings/compiler-warning-level-2-c4275.md)|non dll-interface '*classkey*' '*identifier1*' used as base for dll-interface '*classkey*' '*identifier2*'| -|[Compiler warning (level 1) C4276](../../error-messages/compiler-warnings/compiler-warning-level-1-c4276.md)|'*function*': no prototype provided; assumed no parameters| +|[Compiler warning (level 2) C4275](compiler-warning-level-2-c4275.md)|non dll-interface '*classkey*' '*identifier1*' used as base for dll-interface '*classkey*' '*identifier2*'| +|[Compiler warning (level 1) C4276](compiler-warning-level-1-c4276.md)|'*function*': no prototype provided; assumed no parameters| |Compiler warning (level 1) C4277|imported item '*classname*::*member*' exists as both data member and function member; data member ignored| -|[Compiler warning (level 3) C4278](../../error-messages/compiler-warnings/compiler-warning-level-3-c4278.md)|'*identifier*': identifier in type library '*library*' is already a macro; use the 'rename' qualifier| +|[Compiler warning (level 3 and level 4) C4278](compiler-warning-level-3-c4278.md)|'*identifier*': identifier in type library '*library*' is already a macro; use the 'rename' qualifier| |Compiler warning (level 3 and level 4) C4279|'*identifier*': identifier in type library '*library*' is a keyword; use the 'rename' qualifier| -|[Compiler warning (level 3) C4280](../../error-messages/compiler-warnings/compiler-warning-level-3-c4280.md)|'operator ->' was self recursive through type '*type*'| -|[Compiler warning (level 3) C4281](../../error-messages/compiler-warnings/compiler-warning-level-3-c4281.md)|'operator ->' recursion occurred through type '*type1*'| -|[Compiler warning (level 3) C4282](../../error-messages/compiler-warnings/compiler-warning-level-3-c4282.md)|then through type '*type2*'| -|[Compiler warning (level 3) C4283](../../error-messages/compiler-warnings/compiler-warning-level-3-c4283.md)|and through type '*typeN*'| -|[Compiler warning (level 2) C4285](../../error-messages/compiler-warnings/compiler-warning-level-2-c4285.md)|return type for '*identifier*::operator ->' is recursive if applied using infix notation| -|[Compiler warning (level 1) C4286](../../error-messages/compiler-warnings/compiler-warning-level-1-c4286.md)|'*derived_type*': is caught by base class ('*base_type*') on line '*line_number*'| -|[Compiler warning (level 3) C4287](../../error-messages/compiler-warnings/compiler-warning-level-3-c4287.md)|'*operator*': unsigned/negative constant mismatch| -|[Compiler warning (level 1) C4288](../../error-messages/compiler-warnings/compiler-warning-level-1-c4288.md)|nonstandard extension used: '*variable*': loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope| -|[Compiler warning (level 4) C4289](../../error-messages/compiler-warnings/compiler-warning-level-4-c4289.md)|nonstandard extension used: '*variable*': loop control variable declared in the for-loop is used outside the for-loop scope| -|[Compiler warning (level 3) C4290](../../error-messages/compiler-warnings/compiler-warning-level-3-c4290.md)|C++ exception specification ignored except to indicate a function is not __declspec(nothrow)| -|[Compiler warning (level 1) C4291](../../error-messages/compiler-warnings/compiler-warning-level-1-c4291.md)|'*declaration*': no matching operator delete found; memory will not be freed if initialization throws an exception| -|[Compiler warning (level 1) C4293](../../error-messages/compiler-warnings/compiler-warning-level-1-c4293.md)|'*shift_operator*': shift count negative or too big, undefined behavior| -|[Compiler warning (level 4) C4295](../../error-messages/compiler-warnings/compiler-warning-level-4-c4295.md)|'*array*': array is too small to include a terminating null character| -|[Compiler warning (level 4) C4296](../../error-messages/compiler-warnings/compiler-warning-level-4-c4296.md)|'*operator*': expression is always '*boolean_value*'| -|[Compiler warning (level 1) C4297](../../error-messages/compiler-warnings/compiler-warning-level-1-c4297.md)|'*function*': function assumed not to throw an exception but does| +|[Compiler warning (level 3) C4280](compiler-warning-level-3-c4280.md)|'operator ->' was self recursive through type '*type*'| +|[Compiler warning (level 3) C4281](compiler-warning-level-3-c4281.md)|'operator ->' recursion occurred through type '*type1*'| +|[Compiler warning (level 3) C4282](compiler-warning-level-3-c4282.md)|then through type '*type2*'| +|[Compiler warning (level 3) C4283](compiler-warning-level-3-c4283.md)|and through type '*typeN*'| +|[Compiler warning (level 2) C4285](compiler-warning-level-2-c4285.md)|return type for '*identifier*::operator ->' is recursive if applied using infix notation| +|[Compiler warning (level 1) C4286](compiler-warning-level-1-c4286.md)|'*derived_type*': is caught by base class ('*base_type*') on line '*line_number*'| +|[Compiler warning (level 3, off) C4287](compiler-warning-level-3-c4287.md)|'*operator*': unsigned/negative constant mismatch| +|[Compiler warning (level 1) C4288](compiler-warning-level-1-c4288.md)|nonstandard extension used: '*variable*': loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope| +|[Compiler warning (level 4, off) C4289](compiler-warning-level-4-c4289.md)|nonstandard extension used: '*variable*': loop control variable declared in the for-loop is used outside the for-loop scope| +|[Compiler warning (level 3) C4290](compiler-warning-level-3-c4290.md)|C++ exception specification ignored except to indicate a function is not __declspec(nothrow)| +|[Compiler warning (level 1) C4291](compiler-warning-level-1-c4291.md)|'*declaration*': no matching operator delete found; memory will not be freed if initialization throws an exception| +|[Compiler warning (level 1) C4293](compiler-warning-level-1-c4293.md)|'*shift_operator*': shift count negative or too big, undefined behavior| +|[Compiler warning (level 4) C4295](compiler-warning-level-4-c4295.md)|'*array*': array is too small to include a terminating null character| +|[Compiler warning (level 4, off) C4296](compiler-warning-level-4-c4296.md)|'*operator*': expression is always '*boolean_value*'| +|[Compiler warning (level 1) C4297](compiler-warning-level-1-c4297.md)|'*function*': function assumed not to throw an exception but does| |Compiler warning (level 4) C4298|'*identifier*': identifier in type library '*library*' is already a macro; renaming to '*__identifier*'| |Compiler warning (level 4) C4299|'*identifier*': identifier in type library '*library*' is a keyword; renaming to '*__identifier*'| |Compiler warning C4301|'*derived_class*::*function*': overriding virtual function only differs from '*base_class*::*function*' by const/volatile qualifier| -|[Compiler warning (level 2) C4302](../../error-messages/compiler-warnings/compiler-warning-level-2-c4302.md)|'*conversion*': truncation from '*type1*' to '*type2*'| +|[Compiler warning (level 2) C4302](compiler-warning-level-2-c4302.md)|'*conversion*': truncation from '*type1*' to '*type2*'| |Compiler warning C4303|C-style cast from '*type1*' to '*type2*' is deprecated, use static\_cast, \_\_try\_cast or dynamic\_cast| -|[Compiler warning (level 1) C4305](../../error-messages/compiler-warnings/compiler-warning-level-1-c4305.md)|'*conversion*': truncation from '*type1*' to '*type2*'| -|[Compiler warning (level 3) C4306](../../error-messages/compiler-warnings/compiler-warning-level-3-c4306.md)|'*conversion*': conversion from '*type1*' to '*type2*' of greater size| -|[Compiler warning (level 2) C4307](../../error-messages/compiler-warnings/compiler-warning-level-2-c4307.md)|'*operator*': integral constant overflow| -|[Compiler warning (level 2) C4308](../../error-messages/compiler-warnings/compiler-warning-level-2-c4308.md)|negative integral constant converted to unsigned type| -|[Compiler warning (level 2) C4309](../../error-messages/compiler-warnings/compiler-warning-level-2-c4309.md)|'*conversion*': truncation of constant value| -|[Compiler warning (level 3) C4310](../../error-messages/compiler-warnings/compiler-warning-level-3-c4310.md)|cast truncates constant value| -|[Compiler warning (level 1) C4311](../../error-messages/compiler-warnings/compiler-warning-level-1-c4311.md)|'*variable*': pointer truncation from '*type1*' to '*type2*'| -|[Compiler warning (level 1) C4312](../../error-messages/compiler-warnings/compiler-warning-level-1-c4312.md)|'*operation*': conversion from '*type1*' to '*type2*' of greater size| -|[Compiler warning (level 1) C4313](../../error-messages/compiler-warnings/compiler-warning-level-1-c4313.md)|'*function*': '*format_specifier*' in format string conflicts with argument '*argument_number*' of type '*type*'| +|[Compiler warning (level 1) C4305](compiler-warning-level-1-c4305.md)|'*conversion*': truncation from '*type1*' to '*type2*'| +|[Compiler warning (level 3) C4306](compiler-warning-level-3-c4306.md)|'*conversion*': conversion from '*type1*' to '*type2*' of greater size| +|[Compiler warning (level 2) C4307](compiler-warning-level-2-c4307.md)|'*operator*': integral constant overflow| +|[Compiler warning (level 2) C4308](compiler-warning-level-2-c4308.md)|negative integral constant converted to unsigned type| +|[Compiler warning (level 2) C4309](compiler-warning-level-2-c4309.md)|'*conversion*': truncation of constant value| +|[Compiler warning (level 3) C4310](compiler-warning-level-3-c4310.md)|cast truncates constant value| +|[Compiler warning (level 1) C4311](compiler-warning-level-1-c4311.md)|'*variable*': pointer truncation from '*type1*' to '*type2*'| +|[Compiler warning (level 1) C4312](compiler-warning-level-1-c4312.md)|'*operation*': conversion from '*type1*' to '*type2*' of greater size| +|[Compiler warning (level 1) C4313](compiler-warning-level-1-c4313.md)|'*function*': '*format_specifier*' in format string conflicts with argument '*argument_number*' of type '*type*'| |Compiler warning C4314|expected pragma parameter to be '32' or '64'| |Compiler warning (level 4) C4315|'*classname*': 'this' pointer for member '*member*' may not be aligned '*alignment*' as expected by the constructor| |[Compiler warning (level 3) C4316](compiler-warning-level-3-c4316.md)|'*identifier*': object allocated on the heap may not be aligned '*alignment*'| |Compiler warning (level 1) C4317|'*printf_family*' : not enough arguments passed for format string| |Compiler warning C4318|passing constant zero as the length to memset| -|[Compiler warning (level 1) C4319](../../error-messages/compiler-warnings/compiler-warning-level-1-c4319.md)|'*operator*': zero extending '*type1*' to '*type2*' of greater size| +|[Compiler warning (level 1) C4319](compiler-warning-level-1-c4319.md)|'*operator*': zero extending '*type1*' to '*type2*' of greater size| |Compiler warning (level 1) C4321|automatically generating an IID for interface '*interface*'| |Compiler warning (level 1) C4322|automatically generating a CLSID for class '*class*'| |Compiler warning (level 1) C4323|re-using registered CLSID for class '*class*'| -|[Compiler warning (level 4) C4324](../../error-messages/compiler-warnings/compiler-warning-level-4-c4324.md)|'*structname*': structure was padded due to __declspec(align())| -|[Compiler warning (level 1) C4325](../../error-messages/compiler-warnings/compiler-warning-level-1-c4325.md)|attributes for standard section '*section*' ignored| -|[Compiler warning (level 1) C4326](../../error-messages/compiler-warnings/compiler-warning-level-1-c4326.md)|return type of '*function*' should be '*type1*' instead of '*type2*'| +|[Compiler warning (level 4) C4324](compiler-warning-level-4-c4324.md)|'*structname*': structure was padded due to __declspec(align())| +|[Compiler warning (level 1) C4325](compiler-warning-level-1-c4325.md)|attributes for standard section '*section*' ignored| +|[Compiler warning (level 1) C4326](compiler-warning-level-1-c4326.md)|return type of '*function*' should be '*type1*' instead of '*type2*'| |Compiler warning C4327|'*assignment*': indirection alignment of LHS ('*alignment1*') is greater than RHS ('*alignment2*')| |Compiler warning C4328|'*function*': indirection alignment of formal parameter *parameter_number* (*parameter_alignment*) is greater than the actual argument alignment (*argument_alignment*)| -|[Compiler warning (level 1) C4329](../../error-messages/compiler-warnings/compiler-warning-level-1-c4329.md)|__declspec(align()) is ignored on enum| +|[Compiler warning (level 1) C4329](compiler-warning-level-1-c4329.md)|__declspec(align()) is ignored on enum| |Compiler warning (level 1) C4330|attribute '*attribute*' for section '*section*' ignored| -|[Compiler warning (level 1) C4333](../../error-messages/compiler-warnings/compiler-warning-level-1-c4333.md)|'*shift_operator*': right shift by too large amount, data loss| -|[Compiler warning (level 3) C4334](../../error-messages/compiler-warnings/compiler-warning-level-3-c4334.md)|'*shift_operator*': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)| -|[Compiler warning C4335](../../error-messages/compiler-warnings/compiler-warning-c4335.md)|Mac file format detected: please convert the source file to either DOS or UNIX format| -|[Compiler warning (level 4) C4336](../../error-messages/compiler-warnings/compiler-warning-level-4-c4336.md)|import cross-referenced type library '*library1*' before importing '*library2*'| -|[Compiler warning (level 4) C4337](../../error-messages/compiler-warnings/compiler-warning-level-4-c4337.md)|cross-referenced type library '*library1*' in '*library2*' is being automatically imported| +|[Compiler warning (level 1) C4333](compiler-warning-level-1-c4333.md)|'*shift_operator*': right shift by too large amount, data loss| +|[Compiler warning (level 3) C4334](compiler-warning-level-3-c4334.md)|'*shift_operator*': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)| +|[Compiler warning (level 1) C4335](compiler-warning-c4335.md)|Mac file format detected: please convert the source file to either DOS or UNIX format| +|[Compiler warning (level 4) C4336](compiler-warning-level-4-c4336.md)|import cross-referenced type library '*library1*' before importing '*library2*'| +|[Compiler warning (level 4) C4337](compiler-warning-level-4-c4337.md)|cross-referenced type library '*library1*' in '*library2*' is being automatically imported| |Compiler warning (level 4) C4338|#pragma *directive*: standard section '*section*' is used| -|[Compiler warning (level 4) C4339](../../error-messages/compiler-warnings/compiler-warning-level-4-c4339.md)|'*type*': use of undefined type detected in 'WinRT\|CLR' meta-data - use of this type may lead to a runtime exception| -|[Compiler warning (level 1) C4340](../../error-messages/compiler-warnings/compiler-warning-level-1-c4340.md)|'*value*': value wrapped from positive to negative value| -|[Compiler warning (level 1) C4342](../../error-messages/compiler-warnings/compiler-warning-level-1-c4342.md)|behavior change: '*function*' called, but a member operator was called in previous versions| +|[Compiler warning (level 4, off) C4339](compiler-warning-level-4-c4339.md)|'*type*': use of undefined type detected in 'WinRT\|CLR' meta-data - use of this type may lead to a runtime exception| +|[Compiler warning (level 1) C4340](compiler-warning-level-1-c4340.md)|'*value*': value wrapped from positive to negative value| +|[Compiler warning (removed) C4342](compiler-warning-level-1-c4342.md)|behavior change: '*function*' called, but a member operator was called in previous versions| |[Compiler warning (level 4) C4343](compiler-warning-level-4-c4343.md)|#pragma optimize("g",off) overrides /Og option| -|[Compiler warning (level 1) C4344](../../error-messages/compiler-warnings/compiler-warning-level-1-c4344.md)|behavior change: use of explicit template arguments results in call to '*function*'| -|[Compiler warning (level 1) C4346](../../error-messages/compiler-warnings/compiler-warning-level-1-c4346.md)|'*name*': dependent name is not a type| -|[Compiler warning (level 1) C4348](../../error-messages/compiler-warnings/compiler-warning-level-1-c4348.md)|'*type*': redefinition of default parameter: parameter '*parameter_number*'| -|[Compiler warning (level 1) C4350](../../error-messages/compiler-warnings/compiler-warning-level-1-c4350.md)|behavior change: '*member1*' called instead of '*member2*'| +|[Compiler warning (level 1) C4344](compiler-warning-level-1-c4344.md)|behavior change: use of explicit template arguments results in call to '*function*'| +|[Compiler warning (level 1) C4346](compiler-warning-level-1-c4346.md)|'*name*': dependent name is not a type| +|[Compiler warning (level 1) C4348](compiler-warning-level-1-c4348.md)|'*type*': redefinition of default parameter: parameter '*parameter_number*'| +|[Compiler warning (removed) C4350](compiler-warning-level-1-c4350.md)|behavior change: '*member1*' called instead of '*member2*'| |Compiler warning (level 1) C4352|'*identifier*': intrinsic function already defined| -|[Compiler warning (level 1) C4353](../../error-messages/compiler-warnings/compiler-warning-level-1-c4353.md)|nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead| -|[Compiler warning C4355](../../error-messages/compiler-warnings/compiler-warning-c4355.md)Compiler warning (level 1 and level 4) C4355|'this': used in base member initializer list| -|[Compiler warning (level 2) C4356](../../error-messages/compiler-warnings/compiler-warning-level-2-c4356.md)|'*member*': static data member cannot be initialized via derived class| -|[Compiler warning (level 3) C4357](../../error-messages/compiler-warnings/compiler-warning-level-3-c4357.md)|param array argument found in formal argument list for delegate '*delegate*' ignored when generating '*function*'| -|[Compiler warning (level 1) C4358](../../error-messages/compiler-warnings/compiler-warning-level-1-c4358.md)|'*operator*': return type of combined delegates is not 'void'; returned value is undefined| -|[Compiler warning (level 3) C4359](../../error-messages/compiler-warnings/compiler-warning-level-3-c4359.md)|'*type*': Alignment specifier is less than actual alignment ('*alignment*'), and will be ignored.| +|[Compiler warning (level 1) C4353](compiler-warning-level-1-c4353.md)|nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead| +|[Compiler warning C4355](compiler-warning-c4355.md)Compiler warning (level 1 and level 4) C4355|'this': used in base member initializer list| +|[Compiler warning (level 2) C4356](compiler-warning-level-2-c4356.md)|'*member*': static data member cannot be initialized via derived class| +|[Compiler warning (level 3) C4357](compiler-warning-level-3-c4357.md)|param array argument found in formal argument list for delegate '*delegate*' ignored when generating '*function*'| +|[Compiler warning (level 1) C4358](compiler-warning-level-1-c4358.md)|'*operator*': return type of combined delegates is not 'void'; returned value is undefined| +|[Compiler warning (level 1 and level 3) C4359](compiler-warning-level-3-c4359.md)|'*type*': Alignment specifier is less than actual alignment ('*alignment*'), and will be ignored.| |Compiler warning (level 2) C4362|'*type*': alignment greater than 8 bytes is not supported by CLR| -|[Compiler warning (level 1) C4364](../../error-messages/compiler-warnings/compiler-warning-level-1-c4364.md)|#using for assembly '*assembly*' previously seen at '*location*'('*line_number*') without as\_friend attribute; as\_friend not applied| -|[Compiler warning (level 4) C4365](../../error-messages/compiler-warnings/compiler-warning-level-4-c4365.md)|'*expression*': conversion from '*type1*' to '*type2*', signed/unsigned mismatch| -|[Compiler warning (level 4) C4366](../../error-messages/compiler-warnings/compiler-warning-level-4-c4366.md)|The result of the unary '*operator*' operator may be unaligned| +|[Compiler warning (level 1) C4364](compiler-warning-level-1-c4364.md)|#using for assembly '*assembly*' previously seen at '*location*'('*line_number*') without as\_friend attribute; as\_friend not applied| +|[Compiler warning (level 4, off) C4365](compiler-warning-level-4-c4365.md)|'*expression*': conversion from '*type1*' to '*type2*', signed/unsigned mismatch| +|[Compiler warning (level 4) C4366](compiler-warning-level-4-c4366.md)|The result of the unary '*operator*' operator may be unaligned| |Compiler warning (level 3) C4367|Conversion from '*type1*' to '*type2*' may cause datatype misalignment exception| -|[Compiler warning (Error) C4368](../../error-messages/compiler-warnings/compiler-warning-c4368.md)|cannot define '*member*' as a member of managed '*type*': mixed types are not supported| -|[Compiler warning (level 1) C4369](../../error-messages/compiler-warnings/compiler-warning-level-1-c4369.md)|'*enumerator*': enumerator value '*value*' cannot be represented as '*type*', value is '*new_value*'| +|[Compiler warning (level 1, Error) C4368](compiler-warning-c4368.md)|cannot define '*member*' as a member of managed '*type*': mixed types are not supported| +|[Compiler warning (level 1) C4369](compiler-warning-level-1-c4369.md)|'*enumerator*': enumerator value '*value*' cannot be represented as '*type*', value is '*new_value*'| |Compiler warning C4370|'*classname*': layout of class has changed from a previous version of the compiler due to better packing| -|[Compiler warning (level 3) C4371](../../error-messages/compiler-warnings/c4371.md)|'*classname*': layout of class may have changed from a previous version of the compiler due to better packing of member '*member*'| -|[Compiler warning (level 3) C4373](compiler-warning-level-3-c4373.md)|'*derived_class*::*function*': virtual function overrides '*base_class*::*function*', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers| -|[Compiler warning (level 1) C4374](../../error-messages/compiler-warnings/compiler-warning-level-1-c4374.md)|'*function1*': interface method will not be implemented by non-virtual method '*function2*'| -|[Compiler warning (level 1) C4375](../../error-messages/compiler-warnings/compiler-warning-level-1-c4375.md)|non-public method '*method2*' does not override '*method2*'| -|[Compiler warning (level 1) C4376](../../error-messages/compiler-warnings/compiler-warning-level-1-c4376.md)|access specifier '*old_specifier*:' is no longer supported: please use '*new_specifier*:' instead| -|[Compiler warning (level 1) C4377](../../error-messages/compiler-warnings/compiler-warning-level-1-c4377.md)|native types are private by default; -d1PrivateNativeTypes is deprecated| -|[Compiler warning (level 1) C4378](../../error-messages/compiler-warnings/compiler-warning-level-1-c4378.md)|Must obtain function pointers to run initializers; consider System::ModuleHandle::ResolveMethodHandle| -|[Compiler warning (level 1) C4379](../../error-messages/compiler-warnings/compiler-warning-level-1-c4379.md)|Version '*version_number*' of the common language runtime is not supported by this compiler. Using this version may cause unexpected results| +|[Compiler warning (level 3, off) C4371](c4371.md)|'*classname*': layout of class may have changed from a previous version of the compiler due to better packing of member '*member*'| +|[Compiler warning (level 4) C4373](compiler-warning-level-3-c4373.md)|'*derived_class*::*function*': virtual function overrides '*base_class*::*function*', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers| +|[Compiler warning (level 1) C4374](compiler-warning-level-1-c4374.md)|'*function1*': interface method will not be implemented by non-virtual method '*function2*'| +|[Compiler warning (level 1) C4375](compiler-warning-level-1-c4375.md)|non-public method '*method2*' does not override '*method2*'| +|[Compiler warning (level 1) C4376](compiler-warning-level-1-c4376.md)|access specifier '*old_specifier*:' is no longer supported: please use '*new_specifier*:' instead| +|[Compiler warning (level 1) C4377](compiler-warning-level-1-c4377.md)|native types are private by default; -d1PrivateNativeTypes is deprecated| +|[Compiler warning (level 1) C4378](compiler-warning-level-1-c4378.md)|Must obtain function pointers to run initializers; consider System::ModuleHandle::ResolveMethodHandle| +|[Compiler warning (level 1) C4379](compiler-warning-level-1-c4379.md)|Version '*version_number*' of the common language runtime is not supported by this compiler. Using this version may cause unexpected results| |Compiler warning (level 1, Error) C4380|'*class*': A default constructor cannot be deprecated| -|[Compiler warning (level 1) C4381](../../error-messages/compiler-warnings/compiler-warning-level-1-c4381.md)|'*function1*': interface method will not be implemented by non-public method '*function2*'| -|[Compiler warning (level 1) C4382](../../error-messages/compiler-warnings/compiler-warning-level-1-c4382.md)|throwing '*type*': a type with __clrcall destructor or copy constructor can only be caught in /clr:pure module| -|[Compiler warning (level 1) C4383](../../error-messages/compiler-warnings/compiler-warning-level-1-c4383.md)|'*instance_dereference_operator*': the meaning of dereferencing a handle can change, when a user-defined '*instance_dereference_operator*' operator exists; write the operator as a static function to be explicit about the operand| -|[Compiler warning (level 1) C4384](../../error-messages/compiler-warnings/compiler-warning-level-1-c4384.md)|#pragma 'make_public' should only be used at global scope| +|[Compiler warning (level 1) C4381](compiler-warning-level-1-c4381.md)|'*function1*': interface method will not be implemented by non-public method '*function2*'| +|[Compiler warning (level 1) C4382](compiler-warning-level-1-c4382.md)|throwing '*type*': a type with __clrcall destructor or copy constructor can only be caught in /clr:pure module| +|[Compiler warning (level 1) C4383](compiler-warning-level-1-c4383.md)|'*instance_dereference_operator*': the meaning of dereferencing a handle can change, when a user-defined '*instance_dereference_operator*' operator exists; write the operator as a static function to be explicit about the operand| +|[Compiler warning (level 1) C4384](compiler-warning-level-1-c4384.md)|#pragma 'make_public' should only be used at global scope| |Compiler warning (level 3) C4387|'*alternative*': was considered| -|[Compiler warning (level 4) C4388](./c4388.md))|'*expression*': signed/unsigned mismatch| -|[Compiler warning (level 4) C4389](../../error-messages/compiler-warnings/compiler-warning-level-4-c4389.md)|'*operator*': signed/unsigned mismatch| -|[Compiler warning (level 3) C4390](../../error-messages/compiler-warnings/compiler-warning-level-3-c4390.md)|';': empty controlled statement found; is this the intent?| -|[Compiler warning (level 1) C4391](../../error-messages/compiler-warnings/compiler-warning-level-1-c4391.md)|'*function_signature*': incorrect return type for intrinsic function, expected '*type*'| -|[Compiler warning (level 1) C4392](../../error-messages/compiler-warnings/compiler-warning-level-1-c4392.md)|'*function_signature*': incorrect number of arguments for intrinsic function, expected '*argument_count*' arguments| -|[Compiler warning (level 1) C4393](../../error-messages/compiler-warnings/compiler-warning-level-1-c4393.md)|'*variable*': const has no effect on '*literal*' data member; ignored| -|[Compiler warning C4394](../../error-messages/compiler-warnings/compiler-warning-c4394.md)|'*function*': per-appdomain symbol should not be marked with __declspec('dllexport')| -|[Compiler warning (level 1) C4395](../../error-messages/compiler-warnings/compiler-warning-level-1-c4395.md)|'*function*': member function will be invoked on a copy of the initonly data member '*member*'| +|[Compiler warning (level 4, off) C4388](./c4388.md))|'*expression*': signed/unsigned mismatch| +|[Compiler warning (level 4) C4389](compiler-warning-level-4-c4389.md)|'*operator*': signed/unsigned mismatch| +|[Compiler warning (level 3) C4390](compiler-warning-level-3-c4390.md)|';': empty controlled statement found; is this the intent?| +|[Compiler warning (level 1) C4391](compiler-warning-level-1-c4391.md)|'*function_signature*': incorrect return type for intrinsic function, expected '*type*'| +|[Compiler warning (level 1, Error) C4392](compiler-warning-level-1-c4392.md)|'*function_signature*': incorrect number of arguments for intrinsic function, expected '*argument_count*' arguments| +|[Compiler warning (level 1) C4393](compiler-warning-level-1-c4393.md)|'*variable*': const has no effect on '*literal*' data member; ignored| +|[Compiler warning (level 1, Error) C4394](compiler-warning-c4394.md)|'*function*': per-appdomain symbol should not be marked with __declspec('dllexport')| +|[Compiler warning (level 1) C4395](compiler-warning-level-1-c4395.md)|'*function*': member function will be invoked on a copy of the initonly data member '*member*'| |[Compiler warning (level 2) C4396](compiler-warning-level-2-c4396.md)|'*function*': the inline specifier cannot be used when a friend declaration refers to a specialization of a function template| -|[Compiler warning (level 1) C4397](../../error-messages/compiler-warnings/compiler-warning-level-1-c4397.md)|DefaultCharSetAttribute is ignored| -|[Compiler warning (level 3) C4398](../../error-messages/compiler-warnings/compiler-warning-level-3-c4398.md)|'*variable*': per-process global object might not work correctly with multiple appdomains; consider using __declspec(appdomain)| -|[Compiler warning (level 1) C4399](../../error-messages/compiler-warnings/compiler-warning-level-1-c4399.md)|'*symbol*': per-process symbol should not be marked with __declspec('dllimport') when compiled with /clr:pure| +|[Compiler warning (level 1) C4397](compiler-warning-level-1-c4397.md)|DefaultCharSetAttribute is ignored| +|[Compiler warning (level 3) C4398](compiler-warning-level-3-c4398.md)|'*variable*': per-process global object might not work correctly with multiple appdomains; consider using __declspec(appdomain)| +|[Compiler warning (level 1, Error) C4399](compiler-warning-level-1-c4399.md)|'*symbol*': per-process symbol should not be marked with __declspec('dllimport') when compiled with /clr:pure| -## See also +# See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ [Compiler warnings C4000 - C5999](compiler-warnings-c4000-c5999.md) From 8f77a96ba13e1a94e2ea3eb8242962ff401c868d Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 28 Mar 2024 15:57:56 -0700 Subject: [PATCH 0007/1239] Learn Editor: Update compiler-warnings-c4200-through-c4399.md --- .../compiler-warnings/compiler-warnings-c4200-through-c4399.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 8e79309244..64e07fd139 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -175,7 +175,7 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (level 3) C4398](compiler-warning-level-3-c4398.md)|'*variable*': per-process global object might not work correctly with multiple appdomains; consider using __declspec(appdomain)| |[Compiler warning (level 1, Error) C4399](compiler-warning-level-1-c4399.md)|'*symbol*': per-process symbol should not be marked with __declspec('dllimport') when compiled with /clr:pure| -# See also +## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ [Compiler warnings C4000 - C5999](compiler-warnings-c4000-c5999.md) From cf0aac71dc0d95ff9a164438294ad1646fac62b0 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 29 Mar 2024 12:06:01 -0700 Subject: [PATCH 0008/1239] Learn Editor: Update compiler-warnings-c4200-through-c4399.md --- .../compiler-warnings-c4200-through-c4399.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 64e07fd139..878223f287 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -127,12 +127,12 @@ The articles in this section of the documentation explain a subset of the warnin |Compiler warning (level 4) C4338|#pragma *directive*: standard section '*section*' is used| |[Compiler warning (level 4, off) C4339](compiler-warning-level-4-c4339.md)|'*type*': use of undefined type detected in 'WinRT\|CLR' meta-data - use of this type may lead to a runtime exception| |[Compiler warning (level 1) C4340](compiler-warning-level-1-c4340.md)|'*value*': value wrapped from positive to negative value| -|[Compiler warning (removed) C4342](compiler-warning-level-1-c4342.md)|behavior change: '*function*' called, but a member operator was called in previous versions| +|[Compiler warning (level 1, off, no longer emitted) C4342](compiler-warning-level-1-c4342.md)|behavior change: '*function*' called, but a member operator was called in previous versions| |[Compiler warning (level 4) C4343](compiler-warning-level-4-c4343.md)|#pragma optimize("g",off) overrides /Og option| |[Compiler warning (level 1) C4344](compiler-warning-level-1-c4344.md)|behavior change: use of explicit template arguments results in call to '*function*'| |[Compiler warning (level 1) C4346](compiler-warning-level-1-c4346.md)|'*name*': dependent name is not a type| |[Compiler warning (level 1) C4348](compiler-warning-level-1-c4348.md)|'*type*': redefinition of default parameter: parameter '*parameter_number*'| -|[Compiler warning (removed) C4350](compiler-warning-level-1-c4350.md)|behavior change: '*member1*' called instead of '*member2*'| +|[Compiler warning (level 1, off, no longer emitted) C4350](compiler-warning-level-1-c4350.md)|behavior change: '*member1*' called instead of '*member2*'| |Compiler warning (level 1) C4352|'*identifier*': intrinsic function already defined| |[Compiler warning (level 1) C4353](compiler-warning-level-1-c4353.md)|nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead| |[Compiler warning C4355](compiler-warning-c4355.md)Compiler warning (level 1 and level 4) C4355|'this': used in base member initializer list| From 495adf5e46c5018cfb4cf57b7ea335e90d476c00 Mon Sep 17 00:00:00 2001 From: Wes <5124946+wesinator@users.noreply.github.com> Date: Sat, 30 Mar 2024 16:31:00 -0400 Subject: [PATCH 0009/1239] Update x64-calling-convention.md syntax highlighting example return values code --- docs/build/x64-calling-convention.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build/x64-calling-convention.md b/docs/build/x64-calling-convention.md index d4fed57b86..54418166c4 100644 --- a/docs/build/x64-calling-convention.md +++ b/docs/build/x64-calling-convention.md @@ -109,7 +109,7 @@ These examples show how parameters and return values are passed for functions wi ### Example of return value 1 - 64-bit result -```Output +```cpp __int64 func1(int a, float b, int c, int d, int e); // Caller passes a in RCX, b in XMM1, c in R8, d in R9, e pushed on stack, // callee returns __int64 result in RAX. @@ -117,7 +117,7 @@ __int64 func1(int a, float b, int c, int d, int e); ### Example of return value 2 - 128-bit result -```Output +```cpp __m128 func2(float a, double b, int c, __m64 d); // Caller passes a in XMM0, b in XMM1, c in R8, d in R9, // callee returns __m128 result in XMM0. @@ -125,7 +125,7 @@ __m128 func2(float a, double b, int c, __m64 d); ### Example of return value 3 - user type result by pointer -```Output +```cpp struct Struct1 { int j, k, l; // Struct1 exceeds 64 bits. }; @@ -137,7 +137,7 @@ Struct1 func3(int a, double b, int c, float d); ### Example of return value 4 - user type result by value -```Output +```cpp struct Struct2 { int j, k; // Struct2 fits in 64 bits, and meets requirements for return by value. }; From b47a7ba427176c3e174fb961db8037213f2321ac Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Sun, 31 Mar 2024 18:24:21 +0800 Subject: [PATCH 0010/1239] Address incorrect placement of period --- docs/build/reference/creating-an-dot-sbr-file.md | 5 ++--- docs/mfc/reference/cinternetsession-class.md | 4 ++-- docs/mfc/reference/cpanecontainer-class.md | 11 +++++------ docs/standard-library/deque-class.md | 6 +++--- docs/standard-library/forward-list-class.md | 4 ++-- docs/standard-library/iterator-functions.md | 4 ++-- docs/standard-library/iterator-operators.md | 4 ++-- docs/standard-library/iterator-traits-struct.md | 5 ++--- docs/standard-library/move-iterator-class.md | 5 ++--- docs/standard-library/range-functions.md | 4 ++-- docs/standard-library/sys-info-struct.md | 6 +++--- docs/standard-library/type-index-class.md | 7 +++---- 12 files changed, 30 insertions(+), 35 deletions(-) diff --git a/docs/build/reference/creating-an-dot-sbr-file.md b/docs/build/reference/creating-an-dot-sbr-file.md index 47312c2da9..37096da3b1 100644 --- a/docs/build/reference/creating-an-dot-sbr-file.md +++ b/docs/build/reference/creating-an-dot-sbr-file.md @@ -1,9 +1,8 @@ --- -description: "Learn more about: Creating an .Sbr File" title: "Creating an .Sbr File" +description: "Learn more about: Creating an .Sbr File" ms.date: "11/04/2016" helpviewer_keywords: ["SBR files", "BSCMAKE, input files", ".sbr files", "source browser files", "local symbols in browse information", "symbols"] -ms.assetid: bdb4b93c-a88a-441a-84fd-01087d03be25 --- # Creating an .Sbr File @@ -14,7 +13,7 @@ The input files for BSCMAKE are .sbr files. The compiler creates an .sbr file fo To create an .sbr file with all possible information, specify [/FR](fr-fr-create-dot-sbr-file.md). -To create an .sbr file that doesn't contain local symbols, specify [/Fr](fr-fr-create-dot-sbr-file.md). If the .sbr files contain local symbols, you can still omit them from the .bsc file by using BSCMAKE's [/El option](bscmake-options.md)`.` +To create an .sbr file that doesn't contain local symbols, specify [/Fr](fr-fr-create-dot-sbr-file.md). If the .sbr files contain local symbols, you can still omit them from the .bsc file by using BSCMAKE's [/El option](bscmake-options.md). You can create an .sbr file without performing a full compile. For example, you can specify the /Zs option to the compiler to perform a syntax check and still generate an .sbr file if you specify /FR or /Fr. diff --git a/docs/mfc/reference/cinternetsession-class.md b/docs/mfc/reference/cinternetsession-class.md index ab6cdd37d1..bc6087fc38 100644 --- a/docs/mfc/reference/cinternetsession-class.md +++ b/docs/mfc/reference/cinternetsession-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: CInternetSession Class" title: "CInternetSession Class" +description: "Learn more about: CInternetSession Class" ms.date: "06/20/2018" f1_keywords: ["CInternetSession", "AFXINET/CInternetSession", "AFXINET/CInternetSession::CInternetSession", "AFXINET/CInternetSession::Close", "AFXINET/CInternetSession::EnableStatusCallback", "AFXINET/CInternetSession::GetContext", "AFXINET/CInternetSession::GetCookie", "AFXINET/CInternetSession::GetCookieLength", "AFXINET/CInternetSession::GetFtpConnection", "AFXINET/CInternetSession::GetGopherConnection", "AFXINET/CInternetSession::GetHttpConnection", "AFXINET/CInternetSession::OnStatusCallback", "AFXINET/CInternetSession::OpenURL", "AFXINET/CInternetSession::SetCookie", "AFXINET/CInternetSession::SetOption"] helpviewer_keywords: ["CInternetSession [MFC], CInternetSession", "CInternetSession [MFC], Close", "CInternetSession [MFC], EnableStatusCallback", "CInternetSession [MFC], GetContext", "CInternetSession [MFC], GetCookie", "CInternetSession [MFC], GetCookieLength", "CInternetSession [MFC], GetFtpConnection", "CInternetSession [MFC], GetGopherConnection", "CInternetSession [MFC], GetHttpConnection", "CInternetSession [MFC], OnStatusCallback", "CInternetSession [MFC], OpenURL", "CInternetSession [MFC], SetCookie", "CInternetSession [MFC], SetOption"] @@ -540,7 +540,7 @@ A pointer to a string containing the actual string data to associate with the UR ### Return Value -Returns `TRUE` if successful, or `FALSE` otherwise. To get the specific error code, call `GetLastError.` +Returns `TRUE` if successful, or `FALSE` otherwise. To get the specific error code, call `GetLastError`. ### Remarks diff --git a/docs/mfc/reference/cpanecontainer-class.md b/docs/mfc/reference/cpanecontainer-class.md index b259352e61..46fbe336ba 100644 --- a/docs/mfc/reference/cpanecontainer-class.md +++ b/docs/mfc/reference/cpanecontainer-class.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: CPaneContainer Class" title: "CPaneContainer Class" +description: "Learn more about: CPaneContainer Class" ms.date: "11/04/2016" f1_keywords: ["CPaneContainer", "AFXPANECONTAINER/CPaneContainer", "AFXPANECONTAINER/CPaneContainer::CPaneContainer", "AFXPANECONTAINER/CPaneContainer::AddPane", "AFXPANECONTAINER/CPaneContainer::AddRef", "AFXPANECONTAINER/CPaneContainer::AddSubPaneContainer", "AFXPANECONTAINER/CPaneContainer::CalcAvailablePaneSpace", "AFXPANECONTAINER/CPaneContainer::CalcAvailableSpace", "AFXPANECONTAINER/CPaneContainer::CalculateRecentSize", "AFXPANECONTAINER/CPaneContainer::CheckPaneDividerVisibility", "AFXPANECONTAINER/CPaneContainer::Copy", "AFXPANECONTAINER/CPaneContainer::DeletePane", "AFXPANECONTAINER/CPaneContainer::FindSubPaneContainer", "AFXPANECONTAINER/CPaneContainer::FindTabbedPane", "AFXPANECONTAINER/CPaneContainer::GetAssociatedSiblingPaneIDs", "AFXPANECONTAINER/CPaneContainer::GetLeftPane", "AFXPANECONTAINER/CPaneContainer::GetLeftPaneContainer", "AFXPANECONTAINER/CPaneContainer::GetMinSize", "AFXPANECONTAINER/CPaneContainer::GetMinSizeLeft", "AFXPANECONTAINER/CPaneContainer::GetMinSizeRight", "AFXPANECONTAINER/CPaneContainer::GetNodeCount", "AFXPANECONTAINER/CPaneContainer::GetPaneDivider", "AFXPANECONTAINER/CPaneContainer::GetParentPaneContainer", "AFXPANECONTAINER/CPaneContainer::GetRecentPaneDividerRect", "AFXPANECONTAINER/CPaneContainer::GetRecentPaneDividerStyle", "AFXPANECONTAINER/CPaneContainer::GetRecentPercent", "AFXPANECONTAINER/CPaneContainer::GetRefCount", "AFXPANECONTAINER/CPaneContainer::GetResizeStep", "AFXPANECONTAINER/CPaneContainer::GetRightPane", "AFXPANECONTAINER/CPaneContainer::GetRightPaneContainer", "AFXPANECONTAINER/CPaneContainer::GetTotalReferenceCount", "AFXPANECONTAINER/CPaneContainer::GetWindowRect", "AFXPANECONTAINER/CPaneContainer::IsDisposed", "AFXPANECONTAINER/CPaneContainer::IsEmpty", "AFXPANECONTAINER/CPaneContainer::IsLeftPane", "AFXPANECONTAINER/CPaneContainer::IsLeftPaneContainer", "AFXPANECONTAINER/CPaneContainer::IsLeftPartEmpty", "AFXPANECONTAINER/CPaneContainer::IsRightPartEmpty", "AFXPANECONTAINER/CPaneContainer::IsVisible", "AFXPANECONTAINER/CPaneContainer::Move", "AFXPANECONTAINER/CPaneContainer::OnDeleteHidePane", "AFXPANECONTAINER/CPaneContainer::OnMoveInternalPaneDivider", "AFXPANECONTAINER/CPaneContainer::OnShowPane", "AFXPANECONTAINER/CPaneContainer::Release", "AFXPANECONTAINER/CPaneContainer::ReleaseEmptyPaneContainer", "AFXPANECONTAINER/CPaneContainer::RemoveNonValidPanes", "AFXPANECONTAINER/CPaneContainer::RemovePane", "AFXPANECONTAINER/CPaneContainer::Resize", "AFXPANECONTAINER/CPaneContainer::ResizePane", "AFXPANECONTAINER/CPaneContainer::ResizePartOfPaneContainer", "AFXPANECONTAINER/CPaneContainer::Serialize", "AFXPANECONTAINER/CPaneContainer::SetPane", "AFXPANECONTAINER/CPaneContainer::SetPaneContainer", "AFXPANECONTAINER/CPaneContainer::SetPaneDivider", "AFXPANECONTAINER/CPaneContainer::SetParentPaneContainer", "AFXPANECONTAINER/CPaneContainer::SetRecentPercent", "AFXPANECONTAINER/CPaneContainer::SetUpByID", "AFXPANECONTAINER/CPaneContainer::StoreRecentDockSiteInfo", "AFXPANECONTAINER/CPaneContainer::StretchPaneContainer"] helpviewer_keywords: ["CPaneContainer [MFC], CPaneContainer", "CPaneContainer [MFC], AddPane", "CPaneContainer [MFC], AddRef", "CPaneContainer [MFC], AddSubPaneContainer", "CPaneContainer [MFC], CalcAvailablePaneSpace", "CPaneContainer [MFC], CalcAvailableSpace", "CPaneContainer [MFC], CalculateRecentSize", "CPaneContainer [MFC], CheckPaneDividerVisibility", "CPaneContainer [MFC], Copy", "CPaneContainer [MFC], DeletePane", "CPaneContainer [MFC], FindSubPaneContainer", "CPaneContainer [MFC], FindTabbedPane", "CPaneContainer [MFC], GetAssociatedSiblingPaneIDs", "CPaneContainer [MFC], GetLeftPane", "CPaneContainer [MFC], GetLeftPaneContainer", "CPaneContainer [MFC], GetMinSize", "CPaneContainer [MFC], GetMinSizeLeft", "CPaneContainer [MFC], GetMinSizeRight", "CPaneContainer [MFC], GetNodeCount", "CPaneContainer [MFC], GetPaneDivider", "CPaneContainer [MFC], GetParentPaneContainer", "CPaneContainer [MFC], GetRecentPaneDividerRect", "CPaneContainer [MFC], GetRecentPaneDividerStyle", "CPaneContainer [MFC], GetRecentPercent", "CPaneContainer [MFC], GetRefCount", "CPaneContainer [MFC], GetResizeStep", "CPaneContainer [MFC], GetRightPane", "CPaneContainer [MFC], GetRightPaneContainer", "CPaneContainer [MFC], GetTotalReferenceCount", "CPaneContainer [MFC], GetWindowRect", "CPaneContainer [MFC], IsDisposed", "CPaneContainer [MFC], IsEmpty", "CPaneContainer [MFC], IsLeftPane", "CPaneContainer [MFC], IsLeftPaneContainer", "CPaneContainer [MFC], IsLeftPartEmpty", "CPaneContainer [MFC], IsRightPartEmpty", "CPaneContainer [MFC], IsVisible", "CPaneContainer [MFC], Move", "CPaneContainer [MFC], OnDeleteHidePane", "CPaneContainer [MFC], OnMoveInternalPaneDivider", "CPaneContainer [MFC], OnShowPane", "CPaneContainer [MFC], Release", "CPaneContainer [MFC], ReleaseEmptyPaneContainer", "CPaneContainer [MFC], RemoveNonValidPanes", "CPaneContainer [MFC], RemovePane", "CPaneContainer [MFC], Resize", "CPaneContainer [MFC], ResizePane", "CPaneContainer [MFC], ResizePartOfPaneContainer", "CPaneContainer [MFC], Serialize", "CPaneContainer [MFC], SetPane", "CPaneContainer [MFC], SetPaneContainer", "CPaneContainer [MFC], SetPaneDivider", "CPaneContainer [MFC], SetParentPaneContainer", "CPaneContainer [MFC], SetRecentPercent", "CPaneContainer [MFC], SetUpByID", "CPaneContainer [MFC], StoreRecentDockSiteInfo", "CPaneContainer [MFC], StretchPaneContainer"] -ms.assetid: beb79e08-f611-4d66-ba04-053baa79bf86 --- # CPaneContainer Class -The `CPaneContainer` class is a basic component of the docking model implemented by MFC. An object of this class stores pointers to two docking panes or to two instances of `CPaneContainer.` It also stores a pointer to the divider that separates the panes (or the containers). By nesting containers inside containers, the framework can build a binary tree that represents complex docking layouts. The root of the binary tree is stored in a [CPaneContainerManager](../../mfc/reference/cpanecontainermanager-class.md) object. +The `CPaneContainer` class is a basic component of the docking model implemented by MFC. An object of this class stores pointers to two docking panes or to two instances of `CPaneContainer`. It also stores a pointer to the divider that separates the panes (or the containers). By nesting containers inside containers, the framework can build a binary tree that represents complex docking layouts. The root of the binary tree is stored in a [CPaneContainerManager](../../mfc/reference/cpanecontainermanager-class.md) object. For more detail see the source code located in the **VC\\atlmfc\\src\\mfc** folder of your Visual Studio installation. @@ -843,7 +842,7 @@ virtual int StretchPaneContainer( ## See also -[Hierarchy Chart](../../mfc/hierarchy-chart.md)
-[Classes](../../mfc/reference/mfc-classes.md)
-[CObject Class](../../mfc/reference/cobject-class.md)
+[Hierarchy Chart](../../mfc/hierarchy-chart.md)\ +[Classes](../../mfc/reference/mfc-classes.md)\ +[CObject Class](../../mfc/reference/cobject-class.md)\ [CPaneContainerManager Class](../../mfc/reference/cpanecontainermanager-class.md) diff --git a/docs/standard-library/deque-class.md b/docs/standard-library/deque-class.md index 62bee49658..ab5e723a02 100644 --- a/docs/standard-library/deque-class.md +++ b/docs/standard-library/deque-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: deque Class" title: "deque Class" +description: "Learn more about: deque Class" ms.date: "11/04/2016" f1_keywords: ["deque/std::deque", "deque/std::deque::allocator_type", "deque/std::deque::const_iterator", "deque/std::deque::const_pointer", "deque/std::deque::const_reference", "deque/std::deque::const_reverse_iterator", "deque/std::deque::difference_type", "deque/std::deque::iterator", "deque/std::deque::pointer", "deque/std::deque::reference", "deque/std::deque::reverse_iterator", "deque/std::deque::size_type", "deque/std::deque::value_type", "deque/std::deque::assign", "deque/std::deque::at", "deque/std::deque::back", "deque/std::deque::begin", "deque/std::deque::cbegin", "deque/std::deque::cend", "deque/std::deque::clear", "deque/std::deque::crbegin", "deque/std::deque::crend", "deque/std::deque::emplace", "deque/std::deque::emplace_back", "deque/std::deque::emplace_front", "deque/std::deque::empty", "deque/std::deque::end", "deque/std::deque::erase", "deque/std::deque::front", "deque/std::deque::get_allocator", "deque/std::deque::insert", "deque/std::deque::max_size", "deque/std::deque::pop_back", "deque/std::deque::pop_front", "deque/std::deque::push_back", "deque/std::deque::push_front", "deque/std::deque::rbegin", "deque/std::deque::rend", "deque/std::deque::resize", "deque/std::deque::shrink_to_fit", "deque/std::deque::size", "deque/std::deque::swap"] helpviewer_keywords: ["std::deque [C++]", "std::deque [C++], allocator_type", "std::deque [C++], const_iterator", "std::deque [C++], const_pointer", "std::deque [C++], const_reference", "std::deque [C++], const_reverse_iterator", "std::deque [C++], difference_type", "std::deque [C++], iterator", "std::deque [C++], pointer", "std::deque [C++], reference", "std::deque [C++], reverse_iterator", "std::deque [C++], size_type", "std::deque [C++], value_type", "std::deque [C++], assign", "std::deque [C++], at", "std::deque [C++], back", "std::deque [C++], begin", "std::deque [C++], cbegin", "std::deque [C++], cend", "std::deque [C++], clear", "std::deque [C++], crbegin", "std::deque [C++], crend", "std::deque [C++], emplace", "std::deque [C++], emplace_back", "std::deque [C++], emplace_front", "std::deque [C++], empty", "std::deque [C++], end", "std::deque [C++], erase", "std::deque [C++], front", "std::deque [C++], get_allocator", "std::deque [C++], insert", "std::deque [C++], max_size", "std::deque [C++], pop_back", "std::deque [C++], pop_front", "std::deque [C++], push_back", "std::deque [C++], push_front", "std::deque [C++], rbegin", "std::deque [C++], rend", "std::deque [C++], resize", "std::deque [C++], shrink_to_fit", "std::deque [C++], size", "std::deque [C++], swap"] @@ -56,8 +56,8 @@ Otherwise, inserting or erasing an element invalidates all iterators and referen |-|-| |[`allocator_type`](#allocator_type)|A type that represents the `allocator` class for the `deque` object.| |[`const_iterator`](#const_iterator)|A type that provides a random-access iterator that can access and read elements in the `deque` as **`const`**| -|[`const_pointer`](#const_pointer)|A type that provides a pointer to an element in a `deque` as a `const.`| -|[`const_reference`](#const_reference)|A type that provides a reference to an element in a `deque` for reading and other operations as a `const.`| +|[`const_pointer`](#const_pointer)|A type that provides a pointer to an element in a `deque` as **`const`**.| +|[`const_reference`](#const_reference)|A type that provides a reference to an element in a `deque` for reading and other operations as **`const`**.| |[`const_reverse_iterator`](#const_reverse_iterator)|A type that provides a random-access iterator that can access and read elements in the `deque` as **`const`**. The `deque` is viewed in reverse. For more information, see [`reverse_iterator` Class](../standard-library/reverse-iterator-class.md)| |[`difference_type`](#difference_type)|A type that provides the difference between two random-access iterators that refer to elements in the same `deque`.| |[`iterator`](#iterator)|A type that provides a random-access iterator that can read or modify any element in a `deque`.| diff --git a/docs/standard-library/forward-list-class.md b/docs/standard-library/forward-list-class.md index 67b197ffe7..ecca392abd 100644 --- a/docs/standard-library/forward-list-class.md +++ b/docs/standard-library/forward-list-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: forward_list Class" title: "forward_list Class" +description: "Learn more about: forward_list Class" ms.date: 06/15/2022 f1_keywords: ["forward_list/std::forward_list", "forward_list/std::forward_list::allocator_type", "forward_list/std::forward_list::const_iterator", "forward_list/std::forward_list::const_pointer", "forward_list/std::forward_list::const_reference", "forward_list/std::forward_list::difference_type", "forward_list/std::forward_list::iterator", "forward_list/std::forward_list::pointer", "forward_list/std::forward_list::reference", "forward_list/std::forward_list::size_type", "forward_list/std::forward_list::value_type", "forward_list/std::forward_list::assign", "forward_list/std::forward_list::before_begin", "forward_list/std::forward_list::begin", "forward_list/std::forward_list::cbefore_begin", "forward_list/std::forward_list::cbegin", "forward_list/std::forward_list::cend", "forward_list/std::forward_list::clear", "forward_list/std::forward_list::emplace_after", "forward_list/std::forward_list::emplace_front", "forward_list/std::forward_list::empty", "forward_list/std::forward_list::end", "forward_list/std::forward_list::erase_after", "forward_list/std::forward_list::front", "forward_list/std::forward_list::get_allocator", "forward_list/std::forward_list::insert_after", "forward_list/std::forward_list::max_size", "forward_list/std::forward_list::merge", "forward_list/std::forward_list::pop_front", "forward_list/std::forward_list::push_front", "forward_list/std::forward_list::remove", "forward_list/std::forward_list::remove_if", "forward_list/std::forward_list::resize", "forward_list/std::forward_list::reverse", "forward_list/std::forward_list::sort", "forward_list/std::forward_list::splice_after", "forward_list/std::forward_list::swap", "forward_list/std::forward_list::unique"] helpviewer_keywords: ["std::forward_list", "std::forward_list::allocator_type", "std::forward_list::const_iterator", "std::forward_list::const_pointer", "std::forward_list::const_reference", "std::forward_list::difference_type", "std::forward_list::iterator", "std::forward_list::pointer", "std::forward_list::reference", "std::forward_list::size_type", "std::forward_list::value_type", "std::forward_list::assign", "std::forward_list::before_begin", "std::forward_list::begin", "std::forward_list::cbefore_begin", "std::forward_list::cbegin", "std::forward_list::cend", "std::forward_list::clear", "std::forward_list::emplace_after", "std::forward_list::emplace_front", "std::forward_list::empty", "std::forward_list::end", "std::forward_list::erase_after", "std::forward_list::front", "std::forward_list::get_allocator", "std::forward_list::insert_after", "std::forward_list::max_size", "std::forward_list::merge", "std::forward_list::pop_front", "std::forward_list::push_front", "std::forward_list::remove", "std::forward_list::remove_if", "std::forward_list::resize", "std::forward_list::reverse", "std::forward_list::sort", "std::forward_list::splice_after", "std::forward_list::swap", "std::forward_list::unique"] @@ -262,7 +262,7 @@ void clear(); ### Remarks -This member function calls `erase_after(before_begin(), end()).` +This member function calls `erase_after(before_begin(), end())`. ## const_iterator diff --git a/docs/standard-library/iterator-functions.md b/docs/standard-library/iterator-functions.md index 31a4c10492..c9046156cd 100644 --- a/docs/standard-library/iterator-functions.md +++ b/docs/standard-library/iterator-functions.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: functions" title: " functions" +description: "Learn more about: functions" ms.date: "11/04/2016" f1_keywords: ["xutility/std::advance", "xutility/std::back_inserter", "xutility/std::begin", "xutility/std::cbegin", "xutility/std::cend", "xutility/std::distance", "xutility/std::end", "xutility/std::front_inserter", "xutility/std::inserter", "xutility/std::make_checked_array_iterator", "xutility/std::make_move_iterator", "xutility/std::make_unchecked_array_iterator", "xutility/std::next", "xutility/std::prev"] helpviewer_keywords: ["std::advance [C++]", "std::back_inserter [C++]", "std::begin [C++]", "std::cbegin [C++]", "std::cend [C++]", "std::distance [C++]", "std::end [C++]", "std::front_inserter [C++]", "std::inserter [C++]", "std::make_checked_array_iterator [C++]", "std::make_move_iterator [C++]", "std::make_unchecked_array_iterator [C++]", "std::next [C++]", "std::prev [C++]"] @@ -570,7 +570,7 @@ The type of the data in the array. ### Return value -Returns `true` if the container has no elements; otherwise `false.` +Returns `true` if the container has no elements; otherwise `false`. ### Example diff --git a/docs/standard-library/iterator-operators.md b/docs/standard-library/iterator-operators.md index 4175c6c299..27086c18f8 100644 --- a/docs/standard-library/iterator-operators.md +++ b/docs/standard-library/iterator-operators.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: operators" title: " operators" +description: "Learn more about: operators" ms.date: 09/30/2022 f1_keywords: ["xutility/std::operator!=", "xutility/std::operator>", "xutility/std::operator>=", "xutility/std::operator<", "xutility/std::operator<=", "xutility/std::operator+", "xutility/std::operator-", "xutility/std::operator=="] helpviewer_keywords: ["std::operator!= (iterator)", "std::operator> (iterator)", "std::operator>= (iterator)", "std::operator< (iterator)", "std::operator<= (iterator), std::operator== (iterator)"] @@ -724,7 +724,7 @@ An iterator. ### Return Value -The difference between two iterators `.` +The difference between two iterators. ### Remarks diff --git a/docs/standard-library/iterator-traits-struct.md b/docs/standard-library/iterator-traits-struct.md index 7e027f479c..4ad621f774 100644 --- a/docs/standard-library/iterator-traits-struct.md +++ b/docs/standard-library/iterator-traits-struct.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: iterator_traits Struct" title: "iterator_traits Struct" +description: "Learn more about: iterator_traits Struct" ms.date: "11/04/2016" f1_keywords: ["xutility/std::iterator_traits"] helpviewer_keywords: ["iterator_traits struct", "iterator_traits class"] -ms.assetid: 8b92c2c5-f658-402f-8ca1-e7ae301b8514 --- # iterator_traits Struct @@ -33,7 +32,7 @@ The template struct defines the member types - `difference_type`: a synonym for `Iterator::difference_type`. -- `distance_type`: a synonym for `Iterator::difference_type.` +- `distance_type`: a synonym for `Iterator::difference_type`. - `pointer`: a synonym for `Iterator::pointer`. diff --git a/docs/standard-library/move-iterator-class.md b/docs/standard-library/move-iterator-class.md index 935f94c5cb..ca1f45c906 100644 --- a/docs/standard-library/move-iterator-class.md +++ b/docs/standard-library/move-iterator-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: move_iterator Class" title: "move_iterator Class" +description: "Learn more about: move_iterator Class" ms.date: 06/17/2022 f1_keywords: ["iterator/std::move_iterator", "iterator/std::move_iterator::iterator_type", "iterator/std::move_iterator::iterator_category", "iterator/std::move_iterator::value_type", "iterator/std::move_iterator::difference_type", "iterator/std::move_iterator::pointer", "iterator/std::move_iterator::reference", "iterator/std::move_iterator::base"] helpviewer_keywords: ["std::move_iterator [C++]", "std::move_iterator [C++], iterator_type", "std::move_iterator [C++], iterator_category", "std::move_iterator [C++], value_type", "std::move_iterator [C++], difference_type", "std::move_iterator [C++], pointer", "std::move_iterator [C++], reference", "std::move_iterator [C++], base"] -ms.assetid: a5e5cdd8-a264-4c6b-9f9c-68b0e8edaab7 ms.custom: devdivchpfy22 --- @@ -51,7 +50,7 @@ A `move_iterator` might be capable of operations that aren't defined by the wrap |Operator|Description| |-|-| -|[move_iterator::operator*](#op_star)|Returns `(reference)*base().`| +|[move_iterator::operator*](#op_star)|Returns `(reference)*base()`.| |[move_iterator::operator++](#op_add_add)|Increments the stored iterator. Exact behavior depends on whether it's a preincrement or a postincrement operation.| |[move_iterator::operator--](#operator--)|Decrements the stored iterator. Exact behavior depends on whether it's a predecrement or a postdecrement operation.| |[`move_iterator::operator->`](#op_arrow)|Returns `&**this`.| diff --git a/docs/standard-library/range-functions.md b/docs/standard-library/range-functions.md index 300fc7c8c9..c24faade65 100644 --- a/docs/standard-library/range-functions.md +++ b/docs/standard-library/range-functions.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: helper functions" title: " helper functions" +description: "Learn more about: helper functions" ms.date: 06/16/2022 f1_keywords: ["ranges/std::ranges::begin", "ranges/std::ranges::end", "ranges/std::ranges::cbegin", "ranges/std::ranges::cend", "ranges/std::ranges::rbegin", "ranges/std::ranges::rend", "ranges/std::ranges::crbegin", "ranges/std::ranges::crend", "ranges/std::ranges::size","ranges/std::ranges::ssize","ranges/std::ranges::empty","ranges/std::ranges::data","ranges/std::ranges::cdata"] helpviewer_keywords: ["std::ranges [C++], ranges::begin", "std::ranges [C++], ranges::end", "std::ranges [C++], ranges::cbegin", "std::ranges [C++], ranges::cend", "std::ranges [C++], ranges::rbegin", "std::ranges [C++], ranges::rend", "std::ranges [C++], ranges::crbegin", "std::ranges [C++], ranges::crend", "std::ranges [C++], ranges::size","std::ranges [C++], ranges::ssize","std::ranges [C++], ranges::empty","std::ranges [C++], ranges::data","std::ranges [C++], ranges::cdata"] @@ -370,7 +370,7 @@ A range. ### Return value -Returns `true` if the range has no elements; otherwise `false.` +Returns `true` if the range has no elements; otherwise `false`. ### Example diff --git a/docs/standard-library/sys-info-struct.md b/docs/standard-library/sys-info-struct.md index d0e6df8da0..761b5e488a 100644 --- a/docs/standard-library/sys-info-struct.md +++ b/docs/standard-library/sys-info-struct.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: sys_info struct" title: "sys_info struct" +description: "Learn more about: sys_info struct" ms.date: 09/08/2021 f1_keywords: ["chrono/std::chrono::sys_info"] helpviewer_keywords: ["std::chrono [C++], sys_info"] @@ -24,9 +24,9 @@ Provides a low-level interface to time zone information about the result of conv |Function|Description| |---------|-------------| -|[`abbrev`](#abbrev)|The abbreviation used for the associated `time_zone` and `time_point.`| +|[`abbrev`](#abbrev)|The abbreviation used for the associated `time_zone` and `time_point`.| |[`begin`, `end`](#beginend)|The range that the `offset` and `abbrev` apply to for the associated time zone.| -|[`offset`](#offset)|The Universal Time Coordinated (UTC) offset in effect for the associated `time_zone` and `time_point.`| +|[`offset`](#offset)|The Universal Time Coordinated (UTC) offset in effect for the associated `time_zone` and `time_point`.| |[`save`](#save)|Daylight savings time adjustment offset.| ## Non-members diff --git a/docs/standard-library/type-index-class.md b/docs/standard-library/type-index-class.md index 330d79df38..1d79412bc5 100644 --- a/docs/standard-library/type-index-class.md +++ b/docs/standard-library/type-index-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: type_index Class" title: "type_index Class" +description: "Learn more about: type_index Class" ms.date: 06/20/2022 f1_keywords: ["typeindex/std::type_index"] helpviewer_keywords: ["type_index class"] -ms.assetid: db366119-74cb-43e8-aacf-9679e561fa2f ms.custom: devdivchpfy22 --- @@ -29,7 +28,7 @@ The constructor initializes `ptr` to `&tinfo`. `name` returns `ptr->name()`. -`hash_code` returns `ptr->hash_code().` +`hash_code` returns `ptr->hash_code()`. `operator==` returns `*ptr == right.ptr`. @@ -37,7 +36,7 @@ The constructor initializes `ptr` to `&tinfo`. `operator<` returns `*ptr->before(*right.ptr)`. -`operator<=` returns `!(right < *this).` +`operator<=` returns `!(right < *this)`. `operator>` returns `right < *this`. From 4d17ad0614cc25bea485df730a2baa6e46340a60 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 1 Apr 2024 17:19:44 -0700 Subject: [PATCH 0011/1239] Add diagrams --- docs/sanitizers/asan-runtime.md | 26 +++++++++++++++--- ...asan-library-linking-previous-versions.png | Bin 0 -> 117151 bytes docs/sanitizers/media/asan-one-dll.png | Bin 0 -> 80149 bytes .../media/runtime-configurations.png | Bin 0 -> 131419 bytes 4 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 docs/sanitizers/media/asan-library-linking-previous-versions.png create mode 100644 docs/sanitizers/media/asan-one-dll.png create mode 100644 docs/sanitizers/media/runtime-configurations.png diff --git a/docs/sanitizers/asan-runtime.md b/docs/sanitizers/asan-runtime.md index 2ec76e2266..c6d5b8f7f0 100644 --- a/docs/sanitizers/asan-runtime.md +++ b/docs/sanitizers/asan-runtime.md @@ -2,29 +2,47 @@ title: "AddressSanitizer runtime" description: "Technical description of the AddressSanitizer runtime for Microsoft C/C++." ms.date: 02/05/2024 -helpviewer_keywords: ["AddressSanitizer runtime", "Address Sanitizer runtime", "clang_rt.asan", "Clang runtime", "Asan runtime"] +helpviewer_keywords: ["AddressSanitizer runtime", "Address Sanitizer runtime", "clang_rt.asan", "Clang runtime", "ASan runtime"] --- # AddressSanitizer runtime The AddressSanitizer runtime library intercepts common memory allocation functions and operations to enable inspection of memory accesses. There are several different runtime libraries that support the various types of executables the compiler may generate. The compiler and linker automatically link the appropriate runtime libraries, as long as you pass the [`/fsanitize=address`](../build/reference/fsanitize.md) option at compile time. You can override the default behavior by using the **`/NODEFAULTLIB`** option at link time. For more information, see the section on [linking](./asan-building.md#linker) in the [AddressSanitizer language, build, and debugging reference](./asan-building.md). -The list of runtime libraries for linking to the AddressSanitizer runtime as of Visual Studio 17.7 Preview 3, follows. For more information about the `/MT` and `/MD` options, see [/MD, /MT, /LD (Use Run-Time Library)](../build/reference/md-mt-ld-use-run-time-library.md). +The list of runtime libraries for linking to the AddressSanitizer runtime as of Visual Studio 17.7 Preview 3, follows. For more information about the `/MT` (statically link the runtime) and `/MD` (dynamically link the redist at runtime) options, see [/MD, /MT, /LD (Use Run-Time Library)](../build/reference/md-mt-ld-use-run-time-library.md). > [!NOTE] > In the following table, *`{arch}`* is either *`i386`* or *`x86_64`*. -> These libraries use Clang conventions for architecture names. MSVC conventions are normally `x86` and `x64` rather than `i386` and `x86_64`. They refer to the same architectures. +> These libraries use Clang conventions for architecture names. MSVC conventions are normally `x86` and `x64` rather than `i386` and `x86_64`, but they refer to the same architectures. | CRT option | AddressSanitizer runtime library (.lib) | Address runtime binary (.dll) |--|--|--| | `/MT` or `/MTd` | *`clang_rt.asan_dynamic-{arch}`*, *`clang_rt.asan_static_runtime_thunk-{arch}`* | *`clang_rt.asan_dynamic-{arch}`* | `/MD` or `/MDd` | *`clang_rt.asan_dynamic-{arch}`*, *`clang_rt.asan_dynamic_runtime_thunk-{arch}`* | *`clang_rt.asan_dynamic-{arch}`* +The following diagram shows how the runtime library is linked given the `/MT`, `/MTd`, `/MD`, and `/MDd` compiler options: + +:::image type="complex" source="runtime-configurations.png" alt-text="Diagram of how the runtime libraries are linked for various compiler options." +The image shows three scenarios for linking the runtime library. The first is /MT or /MTd. My_exe.exe and my_dll.dll are both shown with their own copies of the statically linked VCRuntime, Universal CRT, and STL runtimes. The scenarios show /MD in which both my_exe.exe and my_dll.dll share vcruntime140.dll, ucrtbase.dll, and msvcp140.dll. The last scenario shows /MDd in which both my_exe.exe and my_dll.dll share the debug versions of the runtimes: vcruntime140d.dll, ucrtbased.dll, and msvcp140d.dll +:::image-end::: + When compiling with `cl /fsanitize=address`, the compiler generates instructions to manage and check the [shadow bytes](./asan-shadow-bytes.md). Your program uses this instrumentation to check memory accesses on the stack, in the heap, or in the global scope. The compiler also produces metadata describing stack and global variables. This metadata enables the runtime to generate precise error diagnostics: function names, lines, and columns in your source code. Combined, the compiler checks and runtime libraries can precisely diagnose many types of [memory safety bugs](./asan-error-examples.md) if they're encountered at run-time. +The following diagram shows how the ASan library is linked given various compiler options: + +:::image type="complex" source="asan-one-dll.png" alt-text="Diagram of how the ASan runtime dll is linked." +The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). In all cases, my_exe.exe links and it's associates my_dll.dll link to a single instance of clang-rt.asan-dynamix-x86_64.dll. +:::image-end::: + ### Previous versions -Prior to Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. Also, dynamically linked projects (**`/MD`** or **`/MTd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). +Prior to Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. Also, dynamically linked projects (**`/MD`** or **`/MDd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). + +The following diagram shows how the ASan library was linked prior to VS 2022 17.7 preview 3 for various compiler options: + +:::image type="complex" source="asan-library-linking-previous-versions" alt-text="Diagram of how the ASan runtime dll was linked prior to VS 2022 preview 3." +The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll, links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. +:::image-end::: | CRT option | DLL or EXE | DEBUG? | AddressSanitizer runtime binaries libraries | Address runtime binary (.dll) |--|--|--|--|--| diff --git a/docs/sanitizers/media/asan-library-linking-previous-versions.png b/docs/sanitizers/media/asan-library-linking-previous-versions.png new file mode 100644 index 0000000000000000000000000000000000000000..1186091bbcd2748e244e38064ddae9f13246c13c GIT binary patch literal 117151 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 z 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 D>is_igkC`pA>ZDO>!yK?&K@MG1;4 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 Xva;$h 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 literal 0 HcmV?d00001 diff --git a/docs/sanitizers/media/runtime-configurations.png b/docs/sanitizers/media/runtime-configurations.png new file mode 100644 index 0000000000000000000000000000000000000000..3298a14be9f570e0e042ccd825053e88e84a3cea GIT binary patch literal 131419 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%0A!w!1qawae$}gh+ry-Gw|#WxDCiv4fWT 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

hh!ps2N|bab)`TA%5@8)84w#p~JJw&AB-yOWC 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 Date: Thu, 18 Apr 2024 12:47:07 -0700 Subject: [PATCH 0107/1239] Learn Editor: Update compiler-warnings-c4200-through-c4399.md --- .../compiler-warnings-c4200-through-c4399.md | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 161e23b861..ffc3c65ae7 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -14,9 +14,9 @@ The articles in this section of the documentation explain a subset of the warnin |Warning|Message| |-------------|-------------| -|[Compiler warning (levels 2 and 4) C4200](compiler-warning-levels-2-and-4-c4200.md)|nonstandard extension used: zero-sized array in struct/union| +|[Compiler warning (level 2 and level 4) C4200](compiler-warning-levels-2-and-4-c4200.md)|nonstandard extension used: zero-sized array in struct/union| |[Compiler warning (level 4) C4201](compiler-warning-level-4-c4201.md)|nonstandard extension used: nameless struct/union| -|[Compiler warning (level 4) C4202](compiler-warning-level-4-c4202.md)|nonstandard extension used: '...': prototype parameter in name list illegal| +|[Compiler warning (level 4) C4202](compiler-warning-level-4-c4202.md)|nonstandard extension used: '`...`': prototype parameter in name list illegal| |Compiler warning C4203|nonstandard extension used: union with static member variable| |[Compiler warning (level 4) C4204](compiler-warning-level-4-c4204.md)|nonstandard extension used: non-constant aggregate initializer| |[Compiler warning (level 4) C4205](compiler-warning-level-4-c4205.md)|nonstandard extension used: static function declaration in function scope| @@ -30,94 +30,94 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (level 4) C4214](compiler-warning-level-4-c4214.md)|nonstandard extension used: bit field types other than int| |[Compiler warning (level 1) C4215](compiler-warning-level-1-c4215.md)|nonstandard extension used: long float| |[Compiler warning (level 1) C4216](compiler-warning-level-1-c4216.md)|nonstandard extension used: float long| -|[Compiler warning (level 1) C4218](compiler-warning-level-1-c4218.md)|nonstandard extension used: must specify at least a storage class or a type| +|[Compiler warning (level 4) C4218](compiler-warning-level-1-c4218.md)|nonstandard extension used: must specify at least a storage class or a type| |[Compiler warning (level 4) C4220](compiler-warning-level-4-c4220.md)|varargs matches remaining parameters| |[Compiler warning (level 4) C4221](compiler-warning-level-4-c4221.md)|nonstandard extension used: '*identifier*': cannot be initialized using address of automatic variable '*variable*'| -|[Compiler warning (levels 1 and 4) C4223](compiler-warning-levels-1-and-4-c4223.md)|nonstandard extension used: non-lvalue array converted to pointer| +|[Compiler warning (level 1 and level 4) C4223](compiler-warning-levels-1-and-4-c4223.md)|nonstandard extension used: non-lvalue array converted to pointer| |[Compiler warning (level 1) C4224](compiler-warning-level-1-c4224.md)|nonstandard extension used: formal parameter '*identifier*' was previously defined as a type| |[Compiler warning (level 1, Error) C4226](compiler-warning-level-1-c4226.md)|nonstandard extension used: '*keyword*' is an obsolete keyword| |[Compiler warning (level 1) C4227](compiler-warning-level-1-c4227.md)|anachronism used: qualifiers on reference are ignored| |[Compiler warning (level 1) C4228](compiler-warning-level-1-c4228.md)|nonstandard extension used: qualifiers after comma in declarator list are ignored| -|[Compiler warning (level 1) C4229](compiler-warning-level-1-c4229.md)|anachronism used: modifiers on data are ignored| +|[Compiler warning (level 1, Error) C4229](compiler-warning-level-1-c4229.md)|anachronism used: modifiers on data are ignored| |[Compiler warning (level 1) C4230](compiler-warning-level-1-c4230.md)|anachronism used: modifiers/qualifiers interspersed; qualifier ignored| |[Compiler warning (level 4) C4232](compiler-warning-level-4-c4232.md)|nonstandard extension used: '*identifier*': address of dllimport '*dllimport*' is not static, identity not guaranteed| -|[Compiler warning (level 4, Error) C4233](compiler-warning-level-4-c4233.md)|nonstandard extension used: '*keyword*' keyword only supported in C++, not C| +|[Compiler warning (level 1, Error) C4233](compiler-warning-level-4-c4233.md)|nonstandard extension used: '*keyword*' keyword only supported in C++, not C| |[Compiler warning (level 4, Error) C4234](compiler-warning-level-4-c4234.md)|nonstandard extension used: '*keyword*' keyword reserved for future use| -|[Compiler warning (level 4, Error) C4235](compiler-warning-level-4-c4235.md)|nonstandard extension used: '*keyword*' keyword not supported on this architecture| +|[Compiler warning (level 1, Error) C4235](compiler-warning-level-4-c4235.md)|nonstandard extension used: '*keyword*' keyword not supported on this architecture| |[Compiler warning (level 1) C4237](compiler-warning-level-1-c4237.md)|'*keyword*' keyword is not yet supported, but reserved for future use| |[Compiler warning (level 4) C4238](compiler-warning-level-4-c4238.md)|nonstandard extension used: class rvalue used as lvalue| |[Compiler warning (level 4) C4239](compiler-warning-level-4-c4239.md)|nonstandard extension used: '*token*': conversion from '*type1*' to '*type2*'| |[Compiler warning (level 3) C4240](compiler-warning-level-3-c4240.md)|nonstandard extension used: access to '*classname*' now defined to be '*access_specifier1*', previously it was defined to be '*access_specifier2*'| -|[Compiler warning (level 4) C4242](compiler-warning-level-4-c4242.md)|'*identifier*': conversion from '*type1*' to '*type2*', possible loss of data| -|[Compiler warning (level 3) C4243](compiler-warning-level-3-c4243.md)|'*conversion_type*' conversion from '*type1*' to '*type2*' exists, but is inaccessible| +|[Compiler warning (level 3, off) C4242](compiler-warning-level-4-c4242.md)|'*identifier*': conversion from '*type1*' to '*type2*', possible loss of data| +|[Compiler warning (level 3) C4243](compiler-warning-level-3-c4243.md)|*conversion_type* conversion from '*type1*' to '*type2*' exists, but is inaccessible| |[Compiler warning (level 2) C4244](compiler-warning-level-2-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| -|[Compiler warning (levels 3 and 4) C4244](compiler-warning-levels-3-and-4-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| +|[Compiler warning (level 2 and level 3 and level 4) C4244](compiler-warning-levels-3-and-4-c4244.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', possible loss of data| |[Compiler warning (level 4) C4245](compiler-warning-level-4-c4245.md)|'*conversion_type*': conversion from '*type1*' to '*type2*', signed/unsigned mismatch| |[Compiler warning (level 2) C4250](compiler-warning-level-2-c4250.md)|'*classname*': inherits '*base_classname*::*member*' via dominance| -|[Compiler warning (level 1) C4251](compiler-warning-level-1-c4251.md)|'*identifier*': '*object_type1*' '*identifier1*' needs to have dll-interface to be used by clients of '*object_type*' '*identfier2*'| -|[Compiler warning (level 4) C4254](compiler-warning-level-4-c4254.md)|'*operator*': conversion from '*type1*:*field_bits*' to '*type2*:*field_bits*', possible loss of data| +|[Compiler warning (level 2) C4251](compiler-warning-level-1-c4251.md)|'*object_type1*': '*identifier1*' needs to have dll-interface to be used by clients of '*identfier2*'| +|[Compiler warning (level 4, off) C4254](compiler-warning-level-4-c4254.md)|'*operator*': conversion from '*type1*':'*field_bits*' to '*type2*':'*field_bits*', possible loss of data| |[Compiler warning (level 4, off) C4255](compiler-warning-level-4-c4255.md)|'*function*': no function prototype given: converting '()' to '(void)'| -|[Compiler warning (level 4) C4256](compiler-warning-level-4-c4256.md)|'*function*': constructor for class with virtual bases has '...'; calls may not be compatible with older versions of Visual C++| +|[Compiler warning (level 4) C4256](compiler-warning-level-4-c4256.md)|'*function*': constructor for class with virtual bases has '`...`'; calls may not be compatible with older versions of Visual C++| |[Compiler warning (level 1) C4258](compiler-warning-level-1-c4258.md)|'*variable*': definition from the for loop is ignored; the definition from the enclosing scope is used| |[Compiler warning (level 4, off) C4263](compiler-warning-level-4-c4263.md)|'*function*': member function does not override any base class virtual member function| |[Compiler warning (level 4, off) C4264](compiler-warning-level-1-c4264.md)|'*virtual_function*': no override available for virtual member function from base '*classname*'; function is hidden| -|[Compiler warning (level 3, off) C4265](compiler-warning-level-3-c4265.md)|'*classname*': class has virtual functions, but destructor is not virtual\n instances of this class may not be destructed correctly| +|[Compiler warning (level 3, off) C4265](compiler-warning-level-3-c4265.md)|'*classname*': class has virtual functions, but its non-trivial destructor is not virtual; instances of this class may not be destructed correctly| |[Compiler warning (level 4, off) C4266](compiler-warning-level-4-c4266.md)|'*virtual_function*': no override available for virtual member function from base '*classname*'; function is hidden| |[Compiler warning (level 3) C4267](compiler-warning-level-3-c4267.md)|'*variable*': conversion from 'size_t' to '*type*', possible loss of data| |[Compiler warning (level 4) C4268](compiler-warning-level-4-c4268.md)|'*identifier*': 'const' static/global data initialized with compiler generated default constructor fills the object with zeros| |[Compiler warning (level 1) C4269](compiler-warning-level-1-c4269.md)|'*identifier*': 'const' automatic data initialized with compiler generated default constructor produces unreliable results| |[Compiler warning (level 1) C4272](compiler-warning-level-1-c4272.md)|'*function*': is marked __declspec(dllimport); must specify native calling convention when importing a function.| |[Compiler warning (level 1) C4273](compiler-warning-level-1-c4273.md)|'*function*': inconsistent dll linkage| -|[Compiler warning (level 1) C4274](compiler-warning-level-1-c4274.md)|#ident ignored; see documentation for #pragma comment(exestr, 'string')| -|[Compiler warning (level 2) C4275](compiler-warning-level-2-c4275.md)|non dll-interface '*classkey*' '*identifier1*' used as base for dll-interface '*classkey*' '*identifier2*'| +|[Compiler warning (level 1) C4274](compiler-warning-level-1-c4274.md)|`#ident` ignored; see documentation for `#pragma comment(exestr, 'string')`| +|[Compiler warning (level 2) C4275](compiler-warning-level-2-c4275.md)|non dll-interface *classkey* '*identifier1*' used as base for dll-interface *classkey* '*identifier2*'| |[Compiler warning (level 1) C4276](compiler-warning-level-1-c4276.md)|'*function*': no prototype provided; assumed no parameters| |Compiler warning (level 1) C4277|imported item '*classname*::*member*' exists as both data member and function member; data member ignored| |[Compiler warning (level 3 and level 4) C4278](compiler-warning-level-3-c4278.md)|'*identifier*': identifier in type library '*library*' is already a macro; use the 'rename' qualifier| |Compiler warning (level 3 and level 4) C4279|'*identifier*': identifier in type library '*library*' is a keyword; use the 'rename' qualifier| -|[Compiler warning (level 3) C4280](compiler-warning-level-3-c4280.md)|'operator ->' was self recursive through type '*type*'| -|[Compiler warning (level 3) C4281](compiler-warning-level-3-c4281.md)|'operator ->' recursion occurred through type '*type1*'| +|[Compiler warning (level 3) C4280](compiler-warning-level-3-c4280.md)|'`operator ->`' was self recursive through type '*type*'| +|[Compiler warning (level 3) C4281](compiler-warning-level-3-c4281.md)|'`operator ->`' recursion occurred through type '*type1*'| |[Compiler warning (level 3) C4282](compiler-warning-level-3-c4282.md)|then through type '*type2*'| |[Compiler warning (level 3) C4283](compiler-warning-level-3-c4283.md)|and through type '*typeN*'| -|[Compiler warning (level 2) C4285](compiler-warning-level-2-c4285.md)|return type for '*identifier*::operator ->' is recursive if applied using infix notation| -|[Compiler warning (level 1) C4286](compiler-warning-level-1-c4286.md)|'*derived_type*': is caught by base class ('*base_type*') on line '*line_number*'| +|[Compiler warning (level 2) C4285](compiler-warning-level-2-c4285.md)|return type for '*identifier*`::operator ->`' is recursive if applied using infix notation| +|[Compiler warning (level 1) C4286](compiler-warning-level-1-c4286.md)|'*derived_type*': is caught by base class ('*base_type*') on line *line_number*| |[Compiler warning (level 3, off) C4287](compiler-warning-level-3-c4287.md)|'*operator*': unsigned/negative constant mismatch| |[Compiler warning (level 1) C4288](compiler-warning-level-1-c4288.md)|nonstandard extension used: '*variable*': loop control variable declared in the for-loop is used outside the for-loop scope; it conflicts with the declaration in the outer scope| |[Compiler warning (level 4, off) C4289](compiler-warning-level-4-c4289.md)|nonstandard extension used: '*variable*': loop control variable declared in the for-loop is used outside the for-loop scope| -|[Compiler warning (level 3) C4290](compiler-warning-level-3-c4290.md)|C++ exception specification ignored except to indicate a function is not __declspec(nothrow)| +|[Compiler warning (level 3) C4290](compiler-warning-level-3-c4290.md)|C++ exception specification ignored except to indicate a function is not `__declspec(nothrow)`| |[Compiler warning (level 1) C4291](compiler-warning-level-1-c4291.md)|'*declaration*': no matching operator delete found; memory will not be freed if initialization throws an exception| |[Compiler warning (level 1) C4293](compiler-warning-level-1-c4293.md)|'*shift_operator*': shift count negative or too big, undefined behavior| |[Compiler warning (level 4) C4295](compiler-warning-level-4-c4295.md)|'*array*': array is too small to include a terminating null character| -|[Compiler warning (level 4, off) C4296](compiler-warning-level-4-c4296.md)|'*operator*': expression is always '*boolean_value*'| +|[Compiler warning (level 4, off) C4296](compiler-warning-level-4-c4296.md)|'*operator*': expression is always *boolean_value*| |[Compiler warning (level 1) C4297](compiler-warning-level-1-c4297.md)|'*function*': function assumed not to throw an exception but does| -|Compiler warning (level 4) C4298|'*identifier*': identifier in type library '*library*' is already a macro; renaming to '*__identifier*'| -|Compiler warning (level 4) C4299|'*identifier*': identifier in type library '*library*' is a keyword; renaming to '*__identifier*'| +|Compiler warning (level 4) C4298|'*identifier*': identifier in type library '*library*' is already a macro; renaming to '__*identifier*'| +|Compiler warning (level 4) C4299|'*identifier*': identifier in type library '*library*' is a keyword; renaming to '__*identifier*'| |Compiler warning C4301|'*derived_class*::*function*': overriding virtual function only differs from '*base_class*::*function*' by const/volatile qualifier| |[Compiler warning (level 2) C4302](compiler-warning-level-2-c4302.md)|'*conversion*': truncation from '*type1*' to '*type2*'| -|Compiler warning C4303|C-style cast from '*type1*' to '*type2*' is deprecated, use static\_cast, \_\_try\_cast or dynamic\_cast| -|[Compiler warning (level 1) C4305](compiler-warning-level-1-c4305.md)|'*conversion*': truncation from '*type1*' to '*type2*'| -|[Compiler warning (level 3) C4306](compiler-warning-level-3-c4306.md)|'*conversion*': conversion from '*type1*' to '*type2*' of greater size| -|[Compiler warning (level 2) C4307](compiler-warning-level-2-c4307.md)|'*operator*': integral constant overflow| +|Compiler warning (no longer emitted) C4303|C-style cast from '*type1*' to '*type2*' is deprecated, use `static_cast`, `__try_cast` or `dynamic_cast`| +|[Compiler warning (level 1 and level 2 and level 4) C4305](compiler-warning-level-1-c4305.md)|'*conversion*': truncation from '*type1*' to '*type2*'| +|[Compiler warning (level 4) C4306](compiler-warning-level-3-c4306.md)|'*conversion*': conversion from '*type1*' to '*type2*' of greater size| +|[Compiler warning (level 2) C4307](compiler-warning-level-2-c4307.md)|'*operator*': signed integral constant overflow| |[Compiler warning (level 2) C4308](compiler-warning-level-2-c4308.md)|negative integral constant converted to unsigned type| |[Compiler warning (level 2) C4309](compiler-warning-level-2-c4309.md)|'*conversion*': truncation of constant value| -|[Compiler warning (level 3) C4310](compiler-warning-level-3-c4310.md)|cast truncates constant value| +|[Compiler warning (level 4) C4310](compiler-warning-level-3-c4310.md)|cast truncates constant value| |[Compiler warning (level 1) C4311](compiler-warning-level-1-c4311.md)|'*variable*': pointer truncation from '*type1*' to '*type2*'| |[Compiler warning (level 1) C4312](compiler-warning-level-1-c4312.md)|'*operation*': conversion from '*type1*' to '*type2*' of greater size| -|[Compiler warning (level 1) C4313](compiler-warning-level-1-c4313.md)|'*function*': '*format_specifier*' in format string conflicts with argument '*argument_number*' of type '*type*'| +|[Compiler warning (level 1) C4313](compiler-warning-level-1-c4313.md)|'*function*': '`%`*format_specifier*' in format string conflicts with argument *argument_number* of type '*type*'| |Compiler warning C4314|expected pragma parameter to be '32' or '64'| -|Compiler warning (level 4) C4315|'*classname*': 'this' pointer for member '*member*' may not be aligned '*alignment*' as expected by the constructor| -|[Compiler warning (level 3) C4316](compiler-warning-level-3-c4316.md)|'*identifier*': object allocated on the heap may not be aligned '*alignment*'| +|Compiler warning (level 4) C4315|'*classname*': 'this' pointer for member '*member*' may not be aligned *alignment* as expected by the constructor| +|[Compiler warning (level 3) C4316](compiler-warning-level-3-c4316.md)|'*identifier*': object allocated on the heap may not be aligned *alignment*| |Compiler warning (level 1) C4317|'*printf_family*' : not enough arguments passed for format string| |Compiler warning C4318|passing constant zero as the length to memset| |[Compiler warning (level 1) C4319](compiler-warning-level-1-c4319.md)|'*operator*': zero extending '*type1*' to '*type2*' of greater size| |Compiler warning (level 1) C4321|automatically generating an IID for interface '*interface*'| |Compiler warning (level 1) C4322|automatically generating a CLSID for class '*class*'| |Compiler warning (level 1) C4323|re-using registered CLSID for class '*class*'| -|[Compiler warning (level 4) C4324](compiler-warning-level-4-c4324.md)|'*structname*': structure was padded due to __declspec(align())| +|[Compiler warning (level 4) C4324](compiler-warning-level-4-c4324.md)|'*structname*': structure was padded due to alignment specifier| |[Compiler warning (level 1) C4325](compiler-warning-level-1-c4325.md)|attributes for standard section '*section*' ignored| |[Compiler warning (level 1) C4326](compiler-warning-level-1-c4326.md)|return type of '*function*' should be '*type1*' instead of '*type2*'| |Compiler warning C4327|'*assignment*': indirection alignment of LHS ('*alignment1*') is greater than RHS ('*alignment2*')| |Compiler warning C4328|'*function*': indirection alignment of formal parameter *parameter_number* (*parameter_alignment*) is greater than the actual argument alignment (*argument_alignment*)| -|[Compiler warning (level 1) C4329](compiler-warning-level-1-c4329.md)|__declspec(align()) is ignored on enum| +|[Compiler warning (level 1) C4329](compiler-warning-level-1-c4329.md)|alignment specifier is ignored on enum| |Compiler warning (level 1) C4330|attribute '*attribute*' for section '*section*' ignored| |[Compiler warning (level 1) C4333](compiler-warning-level-1-c4333.md)|'*shift_operator*': right shift by too large amount, data loss| |[Compiler warning (level 3) C4334](compiler-warning-level-3-c4334.md)|'*shift_operator*': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)| @@ -128,52 +128,52 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (level 4, off) C4339](compiler-warning-level-4-c4339.md)|'*type*': use of undefined type detected in 'WinRT\|CLR' meta-data - use of this type may lead to a runtime exception| |[Compiler warning (level 1) C4340](compiler-warning-level-1-c4340.md)|'*value*': value wrapped from positive to negative value| |[Compiler warning (level 1, off, no longer emitted) C4342](compiler-warning-level-1-c4342.md)|behavior change: '*function*' called, but a member operator was called in previous versions| -|[Compiler warning (level 4) C4343](compiler-warning-level-4-c4343.md)|#pragma optimize("g",off) overrides /Og option| +|[Compiler warning (level 4) C4343](compiler-warning-level-4-c4343.md)|`#pragma optimize("g",off)` overrides `/Og` option| |[Compiler warning (level 1) C4344](compiler-warning-level-1-c4344.md)|behavior change: use of explicit template arguments results in call to '*function*'| |[Compiler warning (level 1) C4346](compiler-warning-level-1-c4346.md)|'*name*': dependent name is not a type| -|[Compiler warning (level 1) C4348](compiler-warning-level-1-c4348.md)|'*type*': redefinition of default parameter: parameter '*parameter_number*'| +|[Compiler warning (level 1) C4348](compiler-warning-level-1-c4348.md)|'*type*': redefinition of default parameter: parameter *parameter_number*| |[Compiler warning (level 1, off, no longer emitted) C4350](compiler-warning-level-1-c4350.md)|behavior change: '*member1*' called instead of '*member2*'| |Compiler warning (level 1) C4352|'*identifier*': intrinsic function already defined| |[Compiler warning (level 1) C4353](compiler-warning-level-1-c4353.md)|nonstandard extension used: constant 0 as function expression. Use '__noop' function intrinsic instead| -|[Compiler warning C4355](compiler-warning-c4355.md)Compiler warning (level 1 and level 4) C4355|'this': used in base member initializer list| +|[Compiler warning (level 1 and level 4, off) C4355](compiler-warning-c4355.md)Compiler warning (level 1 and level 4) C4355|'this': used in base member initializer list| |[Compiler warning (level 2) C4356](compiler-warning-level-2-c4356.md)|'*member*': static data member cannot be initialized via derived class| |[Compiler warning (level 3) C4357](compiler-warning-level-3-c4357.md)|param array argument found in formal argument list for delegate '*delegate*' ignored when generating '*function*'| |[Compiler warning (level 1) C4358](compiler-warning-level-1-c4358.md)|'*operator*': return type of combined delegates is not 'void'; returned value is undefined| -|[Compiler warning (level 1 and level 3) C4359](compiler-warning-level-3-c4359.md)|'*type*': Alignment specifier is less than actual alignment ('*alignment*'), and will be ignored.| +|[Compiler warning (level 1 and level 3) C4359](compiler-warning-level-3-c4359.md)|'*type*': Alignment specifier is less than actual alignment (*alignment*), and will be ignored.| |Compiler warning (level 2) C4362|'*type*': alignment greater than 8 bytes is not supported by CLR| -|[Compiler warning (level 1) C4364](compiler-warning-level-1-c4364.md)|#using for assembly '*assembly*' previously seen at '*location*'('*line_number*') without as\_friend attribute; as\_friend not applied| +|[Compiler warning (level 1) C4364](compiler-warning-level-1-c4364.md)|`#using` for assembly '*assembly*' previously seen at *location*(*line_number*) without `as_friend` attribute; `as_friend` not applied| |[Compiler warning (level 4, off) C4365](compiler-warning-level-4-c4365.md)|'*expression*': conversion from '*type1*' to '*type2*', signed/unsigned mismatch| |[Compiler warning (level 4) C4366](compiler-warning-level-4-c4366.md)|The result of the unary '*operator*' operator may be unaligned| |Compiler warning (level 3) C4367|Conversion from '*type1*' to '*type2*' may cause datatype misalignment exception| |[Compiler warning (level 1, Error) C4368](compiler-warning-c4368.md)|cannot define '*member*' as a member of managed '*type*': mixed types are not supported| |[Compiler warning (level 1) C4369](compiler-warning-level-1-c4369.md)|'*enumerator*': enumerator value '*value*' cannot be represented as '*type*', value is '*new_value*'| -|Compiler warning C4370|'*classname*': layout of class has changed from a previous version of the compiler due to better packing| +|Compiler warning (level 4, no longer emitted) C4370|'*classname*': layout of class has changed from a previous version of the compiler due to better packing| |[Compiler warning (level 3, off) C4371](c4371.md)|'*classname*': layout of class may have changed from a previous version of the compiler due to better packing of member '*member*'| -|[Compiler warning (level 4) C4373](compiler-warning-level-3-c4373.md)|'*derived_class*::*function*': virtual function overrides '*base_class*::*function*', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers| +|[Compiler warning (level 4) C4373](compiler-warning-level-3-c4373.md)|'*function*': virtual function overrides '*base_class_function*', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers| |[Compiler warning (level 1) C4374](compiler-warning-level-1-c4374.md)|'*function1*': interface method will not be implemented by non-virtual method '*function2*'| |[Compiler warning (level 1) C4375](compiler-warning-level-1-c4375.md)|non-public method '*method2*' does not override '*method2*'| -|[Compiler warning (level 1) C4376](compiler-warning-level-1-c4376.md)|access specifier '*old_specifier*:' is no longer supported: please use '*new_specifier*:' instead| +|[Compiler warning (level 1) C4376](compiler-warning-level-1-c4376.md)|access specifier '*specifier1* *specifier2*:' is no longer supported: please use '*new_specifier*:' instead| |[Compiler warning (level 1) C4377](compiler-warning-level-1-c4377.md)|native types are private by default; -d1PrivateNativeTypes is deprecated| |[Compiler warning (level 1) C4378](compiler-warning-level-1-c4378.md)|Must obtain function pointers to run initializers; consider System::ModuleHandle::ResolveMethodHandle| |[Compiler warning (level 1) C4379](compiler-warning-level-1-c4379.md)|Version '*version_number*' of the common language runtime is not supported by this compiler. Using this version may cause unexpected results| |Compiler warning (level 1, Error) C4380|'*class*': A default constructor cannot be deprecated| |[Compiler warning (level 1) C4381](compiler-warning-level-1-c4381.md)|'*function1*': interface method will not be implemented by non-public method '*function2*'| -|[Compiler warning (level 1) C4382](compiler-warning-level-1-c4382.md)|throwing '*type*': a type with __clrcall destructor or copy constructor can only be caught in /clr:pure module| +|[Compiler warning (level 1) C4382](compiler-warning-level-1-c4382.md)|throwing '*type*': a type with `__clrcall` destructor or copy constructor can only be caught in `/clr:pure` module| |[Compiler warning (level 1) C4383](compiler-warning-level-1-c4383.md)|'*instance_dereference_operator*': the meaning of dereferencing a handle can change, when a user-defined '*instance_dereference_operator*' operator exists; write the operator as a static function to be explicit about the operand| -|[Compiler warning (level 1) C4384](compiler-warning-level-1-c4384.md)|#pragma 'make_public' should only be used at global scope| +|[Compiler warning (level 1) C4384](compiler-warning-level-1-c4384.md)|`#pragma` '*pragma_name*' should only be used at global scope| |Compiler warning (level 3) C4387|'*alternative*': was considered| |[Compiler warning (level 4, off) C4388](./c4388.md))|'*expression*': signed/unsigned mismatch| |[Compiler warning (level 4) C4389](compiler-warning-level-4-c4389.md)|'*operator*': signed/unsigned mismatch| |[Compiler warning (level 3) C4390](compiler-warning-level-3-c4390.md)|';': empty controlled statement found; is this the intent?| |[Compiler warning (level 1) C4391](compiler-warning-level-1-c4391.md)|'*function_signature*': incorrect return type for intrinsic function, expected '*type*'| |[Compiler warning (level 1, Error) C4392](compiler-warning-level-1-c4392.md)|'*function_signature*': incorrect number of arguments for intrinsic function, expected '*argument_count*' arguments| -|[Compiler warning (level 1) C4393](compiler-warning-level-1-c4393.md)|'*variable*': const has no effect on '*literal*' data member; ignored| -|[Compiler warning (level 1, Error) C4394](compiler-warning-c4394.md)|'*function*': per-appdomain symbol should not be marked with __declspec('dllexport')| +|[Compiler warning (level 1) C4393](compiler-warning-level-1-c4393.md)|'*variable*': const has no effect on *literal* data member; ignored| +|[Compiler warning (level 1, Error) C4394](compiler-warning-c4394.md)|'*function*': per-appdomain symbol should not be marked with `__declspec(`*dllexport*`)`| |[Compiler warning (level 1) C4395](compiler-warning-level-1-c4395.md)|'*function*': member function will be invoked on a copy of the initonly data member '*member*'| |[Compiler warning (level 2) C4396](compiler-warning-level-2-c4396.md)|'*function*': the inline specifier cannot be used when a friend declaration refers to a specialization of a function template| -|[Compiler warning (level 1) C4397](compiler-warning-level-1-c4397.md)|DefaultCharSetAttribute is ignored| -|[Compiler warning (level 3) C4398](compiler-warning-level-3-c4398.md)|'*variable*': per-process global object might not work correctly with multiple appdomains; consider using __declspec(appdomain)| -|[Compiler warning (level 1, Error) C4399](compiler-warning-level-1-c4399.md)|'*symbol*': per-process symbol should not be marked with __declspec('dllimport') when compiled with /clr:pure| +|[Compiler warning (level 1) C4397](compiler-warning-level-1-c4397.md)|`DefaultCharSetAttribute` is ignored| +|[Compiler warning (level 3) C4398](compiler-warning-level-3-c4398.md)|'*variable*': per-process global object might not work correctly with multiple appdomains; consider using `__declspec(appdomain)`| +|[Compiler warning (level 1, Error) C4399](compiler-warning-level-1-c4399.md)|'*symbol*': per-process symbol should not be marked with `__declspec(`*dllimport*`)` when compiled with `/clr:pure`| ## See also From 003bc176c5c37b327c573629c7722add96774bc2 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 14:52:29 -0700 Subject: [PATCH 0108/1239] Learn Editor: Update compiler-warnings-by-compiler-version.md --- .../compiler-warnings-by-compiler-version.md | 55 +++++++++++++++++-- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md b/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md index c7420dccd0..4a1b12bdc6 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md @@ -50,6 +50,10 @@ These versions of the compiler introduced new warnings: | Visual Studio 2022 version 17.5 | 19.35 | | Visual Studio 2022 version 17.6 | 19.36 | | Visual Studio 2022 version 17.7 | 19.37 | +| Visual Studio 2022 version 17.8 | 19.38 | +| Visual Studio 2022 version 17.9 | 19.39 | +| Visual Studio 2022 version 17.10 | 19.40 | + You can specify only the major number, the major and minor numbers, or the major, minor, and build numbers to the **`/Wv`** option. The compiler reports all warnings that match versions that begin with the specified number. It suppresses all warnings for versions greater than the specified number. For example, **`/Wv:17`** reports warnings introduced in or before any version of Visual Studio 2012, and suppresses warnings introduced by any compiler from Visual Studio 2013 (version 18) or later. To suppress warnings introduced in Visual Studio 2015 update 2 and later, you can use **`/Wv:19.00.23506`**. Use **`/Wv:19.11`** to report the warnings introduced in any version of Visual Studio before Visual Studio 2017 version 15.5, but suppress warnings introduced in Visual Studio 2017 version 15.5 and later. @@ -57,13 +61,52 @@ The following sections list the warnings introduced by each version of Visual C+ ::: moniker range=">= msvc-170" +## Warnings introduced in Visual Studio 2022 version 17.10 (compiler version 19.40) + +These warnings, and all warnings in later versions, are suppressed by using the compiler option **`/Wv:19.40`**. + +| Warning | Message | +|--|--| +|C4859 | '*value*' is not a valid argument for '`/presetWarn`': it must be a decimal value > 0. Command-line flag ignored| +|C4860 | '*object name*': compiler zero initialized '*number*' bytes of storage| +|C4861 | compiler zero initialized '*number*' bytes of storage| +|C5273 | behavior change: `_Alignas` on anonymous type no longer ignored (promoted members will align)| +|C5274 | behavior change: `_Alignas` no longer applies to the type '*type*' (only applies to declared data objects)| +|C5275 | facade assembly '*name*' being imported under '`/clr`'; missing option '`/clr:netcore`'?| +|C5304 | a declaration designated by the using-declaration '*name1*' exported from this module has internal linkage and using such a name outside the module is ill-formed; consider declaring '*name2*' '`inline`' to use it outside of this module| +|C5305 | '*name*': an explicit instantiation declaration that follows an explicit instantiation definition is ignored| + +## Warnings introduced in Visual Studio 2022 version 17.9 (compiler version 19.39) + +These warnings, and all warnings in later versions, are suppressed by using the compiler option **`/Wv:19.39`**. + +| Warning | Message | +|--|--| +|C4975 | modopt '[*modifier*]' was ignored for formal parameter '*parameter*'| +|C5272 | throwing an object of non-copyable type '*type*' is non-standard. If a copy is needed at runtime it will be made as if by `memcpy`.| + +## Warnings introduced in Visual Studio 2022 version 17.8 (compiler version 19.38) + +These warnings, and all warnings in later versions, are suppressed by using the compiler option **`/Wv:19.38`**. + +| Warning | Message | +|--|--| +|C5109|`__VA_OPT__` use in macro requires '`/Zc:preprocessor`'| +|C5110|`__VA_OPT__` is an extension prior to C++20 or C23| +|C5271 | previously imported assembly '*assembly1*' has the same name as assembly '*assembly2*' being imported. Is this intentional?| +|C5303 | function marked with `[[msvc::intrinsic]]` did not result in a no-op cast| + ## Warnings introduced in Visual Studio 2022 version 17.7 (compiler version 19.37) These warnings, and all warnings in later versions, are suppressed by using the compiler option **`/Wv:19.36`**. | Warning | Message | |--|--| -| [C5267](c5267.md) | definition of implicit copy constructor/assignment operator for '*type*' is deprecated because it has a user-provided assignment operator/copy constructor | +|C4907|multiple calling conventions cannot be specified; last given will be used| +|[C5267](c5267.md) | definition of implicit copy constructor/assignment operator for '*type*' is deprecated because it has a user-provided assignment operator/copy constructor| +|C5268 | Failed to allocate memory at fixed address 0x*address*. Use `/Yb` to specify a specific address base if bit-identical .pch files are required.| +|C5269 | Failed to allocate PCH memory at fixed address 0x*address*. Use `/Ym` to specify a specific address base if bit-identical .pch files are required.| +|C5270 | '*value*' is not allowed for option '*switch name*'; allowed values are: *value list*| ## Warnings introduced in Visual Studio 2022 version 17.6 (compiler version 19.36) @@ -71,7 +114,7 @@ These warnings, and all warnings in later versions, are suppressed by using the | Warning | Message | |--|--| -| [C5266](compiler-warning-level-4-c5266.md) | 'const' qualifier on return type has no effect | +|[C5266](compiler-warning-level-4-c5266.md) | 'const' qualifier on return type has no effect| ## Warnings introduced in Visual Studio 2022 version 17.5 (compiler version 19.35) @@ -79,8 +122,8 @@ These warnings, and all warnings in later versions, are suppressed by using the | Warning | Message | |--|--| -| C5082 | second argument to '`va_start`' is not the last named parameter | -| C5265 | cannot open search path '*pathname*' | +|C5082|second argument to 'va_start' is not the last named parameter| +|C5265 | cannot open search path '*path*'| ## Warnings introduced in Visual Studio 2022 version 17.4 (compiler version 19.34) @@ -115,8 +158,8 @@ These warnings, and all warnings in later versions, are suppressed by using the | C5257 | '*enumeration*': enumeration was previously declared without a fixed underlying type | | C5258 | explicit capture of '*symbol*' is not required for this use | | C5300 | '#pragma omp atomic': left operand of '*operator*' must match left hand side of assignment-expression | -| [C5301](c5301-c5302.md) | '#pragma omp for': '*symbol*' increases while loop condition uses '*comparison*'; non-terminating loop? | -| [C5302](c5301-c5302.md) | '#pragma omp for': '*symbol*' decreases while loop condition uses '*comparison*'; non-terminating loop? | +|[C5301](c5301-c5302.md) | '#pragma omp for': '*loop-index*' increases while loop condition uses '*comparison*'; non-terminating loop?| +|[C5302](c5301-c5302.md) | '#pragma omp for': '*loop-index*' decreases while loop condition uses '*comparison*'; non-terminating loop?| ## Warnings introduced in Visual Studio 2022 version 17.1 (compiler version 19.31) From 88a2c7a0ed60a0c03bae76b171d8b29f07db9981 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:13:30 -0700 Subject: [PATCH 0109/1239] Update compiler-error-c3859.md --- docs/error-messages/compiler-errors-2/compiler-error-c3859.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index c01ebcdc93..f46601d681 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -25,10 +25,10 @@ The message has one of the following notes: >PCH: Unable to get the requested block of memory\ >Consider using /Fp to allow the compiler to reserve the memory early -There isn't enough virtual memory allocated for your precompiled header. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). +There isn't enough virtual memory allocated for your [precompiled header (PCH)](../../build/creating-precompiled-header-files.md). If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). This diagnostic shows up mostly in two scenarios: The first scenario is that the system is overloaded with multiple `/Yu` compile requests at the same time. Setting the maximum starting virtual memory size typically resolves this issue. -The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory that conflicts with where the PCH must reside. For example, `msbuild.exe` injects `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag ensures that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLL. These failures can be intermittent because Windows ASLR allocates memory at different address across different process invocations. Without `/Fp`, memory for the PCH can't be allocated until the compiler finds the header file `#include` specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it's much more likely that the memory required by the PCH is already reserved. +The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory that conflicts with where the PCH must reside. For example, `msbuild.exe` injects `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag ensures that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLLs try to occupy the address space. These failures can be intermittent because Windows Address Space Layout Randomization (ASLR) allocates memory at different addresses across different process invocations. Without `/Fp`, memory for the PCH can't be allocated until the compiler finds the header file `#include` specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it's much more likely that the memory required by the PCH is already reserved. From def9f9dfe78265ff81b33a0e6ce5f1240b137c9f Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:14:01 -0700 Subject: [PATCH 0110/1239] Update compiler-errors-c3500-through-c3999.md --- .../compiler-errors-2/compiler-errors-c3500-through-c3999.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md index 5fb6456c64..de65aa783f 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md @@ -6,7 +6,7 @@ f1_keywords: ["C3502", "C3503", "C3504", "C3511", "C3512", "C3513", "C3514", "C3 --- # Compiler errors C3500 through C3999 -The articles in this section of the documentation explain a subset of the error messages generated by the compiler. +The articles in this section explain a subset of the error messages generated by the compiler. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] From b53cf586e4ad58c5bddf178a99f8b4bf0788db2f Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:44:47 -0700 Subject: [PATCH 0111/1239] Update compiler-warning-levels-2-and-4-c4200.md --- .../compiler-warning-levels-2-and-4-c4200.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md b/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md index 8a6bd71ddf..068a7587a0 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (levels 2 and 4) C4200" -title: "Compiler Warning (levels 2 and 4) C4200" +description: "Learn more about: Compiler Warning (level 2 and level 4) C4200" +title: "Compiler Warning (level 2 and level 4) C4200" ms.date: "11/04/2016" f1_keywords: ["C4200"] helpviewer_keywords: ["C4200"] -ms.assetid: e44d6073-937f-42b7-acc1-65e802b475c6 --- -# Compiler Warning (levels 2 and 4) C4200 +# Compiler Warning (level 2 and level 4) C4200 -nonstandard extension used : zero-sized array in struct/union +> nonstandard extension used: zero-sized array in struct/union Indicates that a structure or union contains an array that has zero size. From 446b3b78d38e88ff97cf6922a61d52b4337ff3a3 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:46:25 -0700 Subject: [PATCH 0112/1239] Update compiler-warning-level-1-c4218.md --- .../compiler-warning-level-1-c4218.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4218.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4218.md index a93576090b..510c44d4b9 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4218.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4218.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4218" -title: "Compiler Warning (level 1) C4218" +description: "Learn more about: Compiler Warning (level 4) C4218" +title: "Compiler Warning (level 4) C4218" ms.date: "11/04/2016" f1_keywords: ["C4218"] helpviewer_keywords: ["C4218"] -ms.assetid: d6c3cd90-4518-49e9-ae86-4ba9e2761d98 --- -# Compiler Warning (level 1) C4218 +# Compiler Warning (level 4) C4218 -nonstandard extension used : must specify at least a storage class or a type +> nonstandard extension used: must specify at least a storage class or a type -With the default Microsoft extensions (/Ze), you can declare a variable without specifying a type or storage class. The default type is **`int`**. +With the default Microsoft extensions (`/Ze`), you can declare a variable without specifying a type or storage class. The default type is **`int`**. ## Example From 5f125ef8ecccfb699af66c63a1a16a0e9541c5cb Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:48:02 -0700 Subject: [PATCH 0113/1239] Update compiler-warning-levels-1-and-4-c4223.md --- .../compiler-warning-levels-1-and-4-c4223.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md b/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md index 1cd6fb3afc..5053bf18ab 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md @@ -1,13 +1,13 @@ --- -description: "Learn more about: Compiler Warning (levels 1 and 4) C4223" -title: "Compiler Warning (levels 1 and 4) C4223" +description: "Learn more about: Compiler Warning (level 1 and level 4) C4223" +title: "Compiler Warning (level 1 and level 4) C4223" ms.date: "11/04/2016" f1_keywords: ["C4223"] helpviewer_keywords: ["C4223"] ms.assetid: 6fc44336-0250-4432-928b-fc5dbe7b7c1c --- -# Compiler Warning (levels 1 and 4) C4223 +# Compiler Warning (level 1 and level 4) C4223 -nonstandard extension used : non-lvalue array converted to pointer +> nonstandard extension used: non-lvalue array converted to pointer -In standard C, you cannot convert a non-lvalue array to a pointer. With the default Microsoft extensions ([/Ze](../../build/reference/za-ze-disable-language-extensions.md)), you can. +In standard C, you cannot convert a non-lvalue array to a pointer. With the default Microsoft extensions ([`/Ze`](../../build/reference/za-ze-disable-language-extensions.md)), you can. From 895fa91ffc02c74bc749003717f8f144800dc604 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:49:42 -0700 Subject: [PATCH 0114/1239] Update compiler-warning-level-1-c4229.md --- .../compiler-warning-level-1-c4229.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4229.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4229.md index e4be2c9181..d79edef4c8 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4229.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4229.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4229" -title: "Compiler Warning (level 1) C4229" +description: "Learn more about: Compiler Warning (level 1, Error) C4229" +title: "Compiler Warning (level 1, Error) C4229" ms.date: "11/04/2016" f1_keywords: ["C4229"] helpviewer_keywords: ["C4229"] -ms.assetid: aadfc83b-1e5f-4229-bd0a-9c10a5d13182 --- -# Compiler Warning (level 1) C4229 +# Compiler Warning (level 1, Error) C4229 -anachronism used : modifiers on data are ignored +> anachronism used: modifiers on data are ignored Using a Microsoft modifier such as **`__cdecl`** on a data declaration is an outdated practice. @@ -17,5 +16,5 @@ Using a Microsoft modifier such as **`__cdecl`** on a data declaration is an out ```cpp // C4229.cpp // compile with: /W1 /LD -int __cdecl counter; // C4229 cdecl ignored +int __cdecl counter; // C4229 ``` From 26ea44a12368a52a4d6c8006dd0fedac3f4f3933 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:52:17 -0700 Subject: [PATCH 0115/1239] Update compiler-warning-level-4-c4233.md --- .../compiler-warning-level-4-c4233.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md index 92cb29c0fe..4f1e0e93ea 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md @@ -1,19 +1,14 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4233" -title: "Compiler Warning (level 4) C4233" +description: "Learn more about: Compiler Warning (level 1, Error) C4233" +title: "Compiler Warning (level 1, Error) C4233" ms.date: "10/25/2017" f1_keywords: ["C4233"] helpviewer_keywords: ["C4233"] -ms.assetid: 9aa51fc6-8ef3-43b5-bafb-c9333cf60de3 --- -# Compiler Warning (level 4) C4233 +# Compiler Warning (level 1, Error) C4233 -> nonstandard extension used : '*keyword*' keyword only supported in C++, not C +> nonstandard extension used: '*keyword*' keyword only supported in C++, not C The compiler compiled your source code as C rather than C++, and you used a keyword that is only valid in C++. The compiler compiles your source file as C if the extension of the source file is .c or you use [/Tc](../../build/reference/tc-tp-tc-tp-specify-source-file-type.md). -This warning is automatically promoted to an error. If you wish to modify this behavior, use [#pragma warning](../../preprocessor/warning.md). For example, to make C4233 into a level 4 warning issue, add this line to your source code file: - -```cpp -#pragma warning(4:4233) -``` +This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable.: From f0aa85939ac04af0ed05f0cbaa95a85722c2c844 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:53:52 -0700 Subject: [PATCH 0116/1239] Update compiler-warning-level-4-c4235.md --- .../compiler-warning-level-4-c4235.md | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md index 4c75a0cdca..2732db8d53 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md @@ -1,21 +1,14 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4235" -title: "Compiler Warning (level 4) C4235" +description: "Learn more about: Compiler Warning (level 1, Error) C4235" +title: "Compiler Warning (level 1, Error) C4235" ms.date: "11/04/2016" f1_keywords: ["C4235"] helpviewer_keywords: ["C4235"] -ms.assetid: d4214799-d62c-4674-b4e2-9e201c303303 --- -# Compiler Warning (level 4) C4235 +# Compiler Warning (level 1, Error) C4235 -nonstandard extension used : 'keyword' keyword not supported on this architecture +> nonstandard extension used: '*keyword*' keyword not supported on this architecture The compiler does not support the keyword you used. -This warning is automatically promoted to an error. If you wish to modify this behavior, use [#pragma warning](../../preprocessor/warning.md). For example, to make C4235 into a level 2 warning, use the following line of code - -```cpp -#pragma warning(2:4235) -``` - -in your source code file. +This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable. From b687d53126a70b1761511c619a1c17b8065d38b9 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 15:56:04 -0700 Subject: [PATCH 0117/1239] Update compiler-warning-level-4-c4242.md --- .../compiler-warning-level-4-c4242.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md index 2196063782..fbd17fd0cc 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md @@ -1,18 +1,17 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4242" -title: "Compiler Warning (level 4) C4242" +description: "Learn more about: Compiler Warning (level 3, off) C4242" +title: "Compiler Warning (level 3, off) C4242" ms.date: "11/04/2016" f1_keywords: ["C4242"] helpviewer_keywords: ["C4242"] -ms.assetid: 8df742e1-fbf1-42f3-8e93-c0e1c222dc7e --- -# Compiler Warning (level 4) C4242 +# Compiler Warning (level 3, off) C4242 -'identifier' : conversion from 'type1' to 'type2', possible loss of data +> '*identifier*': conversion from '*type1*' to '*type2*', possible loss of data The types are different. Type conversion may result in loss of data. The compiler makes the type conversion. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). For additional information on C4242, see [Common Compiler Errors](/windows/win32/WinProg64/common-compiler-errors). From ecc68e76efb6efb9870a333c98a993162ee11b04 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 16:08:47 -0700 Subject: [PATCH 0118/1239] Update compiler-warning-level-1-c4251.md --- .../compiler-warnings/compiler-warning-level-1-c4251.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4251.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4251.md index 1b8f1fb7e3..5045a15a4c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4251.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4251.md @@ -1,11 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4251" -title: "Compiler Warning (level 1) C4251" +description: "Learn more about: Compiler Warning (level 2) C4251" +title: "Compiler Warning (level 2) C4251" ms.date: 12/01/2023 f1_keywords: ["C4251"] helpviewer_keywords: ["C4251"] --- -# Compiler Warning (level 1) C4251 +# Compiler Warning (level 2) C4251 > '*type*' : class '*type1*' needs to have dll-interface to be used by clients of class '*type2*' From 38060ac90a8101e6886d517e04260237ee1fcdef Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 19 Apr 2024 14:01:25 -0700 Subject: [PATCH 0119/1239] normalize titles and metadata descriptions --- .../compiler-warnings/compiler-warnings-c4000-c5999.md | 10 +++++----- .../compiler-warnings-c4000-through-c4199.md | 8 ++++---- .../compiler-warnings-c4200-through-c4399.md | 8 ++++---- .../compiler-warnings-c4400-through-c4599.md | 8 ++++---- .../compiler-warnings-c4600-through-c4799.md | 8 ++++---- .../compiler-warnings-c4800-through-c4999.md | 6 +++--- .../compiler-warnings-c5000-through-c5199.md | 6 +++--- .../compiler-warnings-c5200-through-c5399.md | 8 ++++---- 8 files changed, 31 insertions(+), 31 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md index 72650a5baa..b3830d3143 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md @@ -1,11 +1,11 @@ --- -title: "Compiler warnings C4000 - C5999" -description: "Learn more about: Compiler warnings C4000 - C5999" -ms.date: "04/17/2024" +title: "Microsoft C/C++ compiler warnings C4000 through C5399" +description: "Table of Microsoft C/C++ compiler warnings." +ms.date: "04/19/2024" --- -# Compiler warnings C4000 - C5999 +# Microsoft C/C++ compiler warnings C4000 through C5399 -The articles in this section of the documentation explain a subset of the warning messages that are generated by the Microsoft C/C++ compiler. +This article links to descriptions of Microsoft C/C++ compiler warnings C4000-C5399. ## In this section diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md index 038b6c7059..31cdd89a89 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md @@ -1,12 +1,12 @@ --- -description: "Learn more about: Compiler warnings C4000 Through C4199" -title: "Compiler warnings C4000 Through C4199" +description: "Table of Microsoft C/C++ compiler warning messages C4000 through C4199" +title: "Microsoft C/C++ compiler warnings C4000 through C4199" ms.date: "04/21/2019" f1_keywords: ["C4000", "C4035", "C4060", "C4063", "C4064", "C4065", "C4069", "C4123", "C4137", "C4181", "C4188", "C4193", "C4194", "C4195", "C4196", "C4199"] --- -# Compiler warnings C4000 Through C4199 +# Microsoft C/C++ compiler warnings C4000 through C4199 -The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. +The articles in this section describe Microsoft C/C++ compiler warning messages C4000 through C4199. [!INCLUDE[error-boilerplate](../includes/error-boilerplate.md)] diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 161e23b861..81eac167b3 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -1,12 +1,12 @@ --- -title: "Compiler warnings C4200 Through C4399" -description: "Table of Microsoft C/C++ compiler warnings C4200 through C4389." +title: "Microsoft C/C++ Compiler warnings C4200 through C4399" +description: "Table of Microsoft C/C++ compiler warnings C4200 through C4399." ms.date: 10/18/2020 f1_keywords: ["C4203", "C4277", "C4279", "C4298", "C4299", "C4301", "C4303", "C4314", "C4315", "C4317", "C4318", "C4321", "C4322", "C4323", "C4327", "C4328", "C4330", "C4338", "C4352", "C4362", "C4367", "C4370", "C4380", "C4387"] --- -# Compiler warnings C4200 through C4399 +# Microsoft C/C++ compiler warnings C4200 through C4399 -The articles in this section of the documentation explain a subset of the warning messages that the compiler generates. +The articles in this section describe Microsoft C/C++ compiler warning messages C4200 through C4399. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md index 59e090b842..6972c34fa0 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md @@ -1,13 +1,13 @@ --- -title: "Compiler warnings C4400 Through C4599" -description: "Learn more about: Compiler warnings C4400 Through C4599" +title: "Microsoft C/C++ compiler warnings C4400 through C4599" +description: "Table of Microsoft C/C++ compiler warnings C4400 through C4599" ms.date: "04/21/2019" f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] --- -# Compiler warnings C4400 Through C4599 +# Microsoft C/C++ compiler warnings C4400 through C4599 -The articles in this section of the documentation explain a subset of the warning messages that are generated by the compiler. +The articles in this section describe Microsoft C/C++ compiler warning messages C4400-C4599. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md index 4b012150a6..ed47ec279b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md @@ -1,13 +1,13 @@ --- -title: "Compiler warnings C4600 Through C4799" -description: "Learn more about: Compiler warnings C4600 Through C4799" +title: "Microsoft C/C++ compiler warnings C4600 through C4799" +description: "Table of Microsoft C/C++ compiler warnings C4600 through C4799" ms.date: 05/03/2021 f1_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] helpviewer_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] --- -# Compiler warnings C4600 Through C4799 +# Microsoft C/C++ compiler warnings C4600 through C4799 -The articles in this section of the documentation explain a subset of the warning messages that are generated by the compiler. +The articles in this section describe Microsoft C/C++ compiler warning messages C4600 through C4799. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index 4b17213058..d669a08d76 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -1,13 +1,13 @@ --- -title: "Compiler warnings C4800 Through C4999" +title: "Microsoft C/C++ compiler warnings C4800 through C4999" description: "Table of Microsoft C/C++ compiler warnings C4800 through C4999." ms.date: 04/17/2024 f1_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] helpviewer_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] --- -# Compiler warnings C4800 through C4999 +# Microsoft C/C++ compiler warnings C4800 through C4999 -The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. +The articles in this section describe Microsoft C/C++ compiler warning messages C4800-C4999. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md index 2440c66dfa..7535fddd0f 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md @@ -1,13 +1,13 @@ --- -title: "Compiler warnings C5000 Through C5199" +title: "Microsoft C/C++ compiler warnings C5000 through C5199" description: "Table of Microsoft C/C++ compiler warnings C5000 through C5199." ms.date: 04/17/2024 f1_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] helpviewer_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] --- -# Compiler warnings C5000 through C5199 +# Microsoft C/C++ compiler warnings C5000 through C5199 -The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. +The articles in this section describe Microsoft C/C++ compiler warning messages C5000 through C5199. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md index c68e4a5f0b..94f2c5aa31 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md @@ -1,13 +1,13 @@ --- -title: "Compiler warnings C5200 Through C5399" +title: "Compiler warnings C5200 through C5399" description: "Table of Microsoft C/C++ compiler warnings C5200 through C5399." -ms.date: 04/17/2024 +ms.date: 04/19/2024 f1_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] helpviewer_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] --- -# Compiler warnings C5200 through C5399 +# Microsoft C/C++ compiler warnings C5200 through C5399 -The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. +The articles in this section describe Microsoft C/C++ compiler warning messages C5200 through C5399. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] From 65111ff46db76d52de96cb23f44c92fb01bd091d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 19 Apr 2024 14:18:02 -0700 Subject: [PATCH 0120/1239] SEO --- .../compiler-warnings-c4000-c5999.md | 6 +- .../compiler-warnings-c4000-through-c4199.md | 6 +- .../compiler-warnings-c4200-through-c4399.md | 6 +- .../compiler-warnings-c4400-through-c4599.md | 6 +- .../compiler-warnings-c4600-through-c4799.md | 6 +- .../compiler-warnings-c4800-through-c4999.md | 6 +- .../compiler-warnings-c5000-through-c5199.md | 6 +- .../compiler-warnings-c5200-through-c5399.md | 6 +- docs/error-messages/toc.yml | 80 +++++++++---------- 9 files changed, 64 insertions(+), 64 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md index b3830d3143..9f571d1648 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md @@ -1,9 +1,9 @@ --- -title: "Microsoft C/C++ compiler warnings C4000 through C5399" -description: "Table of Microsoft C/C++ compiler warnings." +title: "Microsoft C/C++ compiler (MSVC) warnings C4000 through C5399" +description: "Table of Microsoft C/C++ compiler (MSVC) warnings." ms.date: "04/19/2024" --- -# Microsoft C/C++ compiler warnings C4000 through C5399 +# Microsoft C/C++ compiler (MSVC) warnings C4000 through C5399 This article links to descriptions of Microsoft C/C++ compiler warnings C4000-C5399. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md index 31cdd89a89..2baa416ca2 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md @@ -1,10 +1,10 @@ --- -description: "Table of Microsoft C/C++ compiler warning messages C4000 through C4199" -title: "Microsoft C/C++ compiler warnings C4000 through C4199" +description: "Table of Microsoft C/C++ compiler (MSVC) warning messages C4000 through C4199" +title: "Microsoft C/C++ compiler (MSVC) warnings C4000 through C4199" ms.date: "04/21/2019" f1_keywords: ["C4000", "C4035", "C4060", "C4063", "C4064", "C4065", "C4069", "C4123", "C4137", "C4181", "C4188", "C4193", "C4194", "C4195", "C4196", "C4199"] --- -# Microsoft C/C++ compiler warnings C4000 through C4199 +# Microsoft C/C++ compiler (MSVC) warnings C4000 through C4199 The articles in this section describe Microsoft C/C++ compiler warning messages C4000 through C4199. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 81eac167b3..515b709384 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -1,10 +1,10 @@ --- -title: "Microsoft C/C++ Compiler warnings C4200 through C4399" -description: "Table of Microsoft C/C++ compiler warnings C4200 through C4399." +title: "Microsoft C/C++ compiler (MSVC) warnings C4200 through C4399" +description: "Table of Microsoft C/C++ compiler (MSVC) warnings C4200 through C4399." ms.date: 10/18/2020 f1_keywords: ["C4203", "C4277", "C4279", "C4298", "C4299", "C4301", "C4303", "C4314", "C4315", "C4317", "C4318", "C4321", "C4322", "C4323", "C4327", "C4328", "C4330", "C4338", "C4352", "C4362", "C4367", "C4370", "C4380", "C4387"] --- -# Microsoft C/C++ compiler warnings C4200 through C4399 +# Microsoft C/C++ compiler (MSVC) warnings C4200 through C4399 The articles in this section describe Microsoft C/C++ compiler warning messages C4200 through C4399. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md index 6972c34fa0..3c232fad20 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md @@ -1,11 +1,11 @@ --- -title: "Microsoft C/C++ compiler warnings C4400 through C4599" -description: "Table of Microsoft C/C++ compiler warnings C4400 through C4599" +title: "Microsoft C/C++ compiler (MSVC) warnings C4400 through C4599" +description: "Table of Microsoft C/C++ compiler (MSVC) warnings C4400 through C4599" ms.date: "04/21/2019" f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] --- -# Microsoft C/C++ compiler warnings C4400 through C4599 +# Microsoft C/C++ compiler (MSVC) warnings C4400 through C4599 The articles in this section describe Microsoft C/C++ compiler warning messages C4400-C4599. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md index ed47ec279b..2e75eee8cb 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md @@ -1,11 +1,11 @@ --- -title: "Microsoft C/C++ compiler warnings C4600 through C4799" -description: "Table of Microsoft C/C++ compiler warnings C4600 through C4799" +title: "Microsoft C/C++ compiler (MSVC) warnings C4600 through C4799" +description: "Table of Microsoft C/C++ compiler (MSVC) warnings C4600 through C4799" ms.date: 05/03/2021 f1_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] helpviewer_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] --- -# Microsoft C/C++ compiler warnings C4600 through C4799 +# Microsoft C/C++ compiler (MSVC) warnings C4600 through C4799 The articles in this section describe Microsoft C/C++ compiler warning messages C4600 through C4799. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index d669a08d76..2355cf0952 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -1,11 +1,11 @@ --- -title: "Microsoft C/C++ compiler warnings C4800 through C4999" -description: "Table of Microsoft C/C++ compiler warnings C4800 through C4999." +title: "Microsoft C/C++ compiler (MSVC) warnings C4800 through C4999" +description: "Table of Microsoft C/C++ compiler (MSVC) warnings C4800 through C4999." ms.date: 04/17/2024 f1_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] helpviewer_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] --- -# Microsoft C/C++ compiler warnings C4800 through C4999 +# Microsoft C/C++ compiler (MSVC) warnings C4800 through C4999 The articles in this section describe Microsoft C/C++ compiler warning messages C4800-C4999. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md index 7535fddd0f..6be1f1dd8e 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md @@ -1,11 +1,11 @@ --- -title: "Microsoft C/C++ compiler warnings C5000 through C5199" -description: "Table of Microsoft C/C++ compiler warnings C5000 through C5199." +title: "Microsoft C/C++ compiler (MSVC) warnings C5000 through C5199" +description: "Table of Microsoft C/C++ (MSVC) compiler warnings C5000 through C5199." ms.date: 04/17/2024 f1_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] helpviewer_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] --- -# Microsoft C/C++ compiler warnings C5000 through C5199 +# Microsoft C/C++ compiler (MSVC) warnings C5000 through C5199 The articles in this section describe Microsoft C/C++ compiler warning messages C5000 through C5199. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md index 94f2c5aa31..c43c5e1c5e 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md @@ -1,11 +1,11 @@ --- -title: "Compiler warnings C5200 through C5399" -description: "Table of Microsoft C/C++ compiler warnings C5200 through C5399." +title: "Microsoft C/C++ compiler (MSVC) compiler warnings C5200 through C5399" +description: "Table of Microsoft C/C++ compiler (MSVC) warnings C5200 through C5399." ms.date: 04/19/2024 f1_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] helpviewer_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] --- -# Microsoft C/C++ compiler warnings C5200 through C5399 +# Microsoft C/C++ compiler (MSVC) warnings C5200 through C5399 The articles in this section describe Microsoft C/C++ compiler warning messages C5200 through C5399. diff --git a/docs/error-messages/toc.yml b/docs/error-messages/toc.yml index f71f502ecc..3ed9abcb0e 100644 --- a/docs/error-messages/toc.yml +++ b/docs/error-messages/toc.yml @@ -892,10 +892,10 @@ items: href: compiler-errors-1/compiler-error-c2298.md - name: Compiler error C2299 href: compiler-errors-1/compiler-error-c2299.md - - name: Compiler errors C2300 Through C2399 + - name: Compiler errors C2300 through C2399 expanded: false items: - - name: Compiler errors C2300 Through C2399 + - name: Compiler errors C2300 through C2399 href: compiler-errors-1/compiler-errors-c2300-through-c2399.md - name: Compiler error C2300 href: compiler-errors-1/compiler-error-c2300.md @@ -1047,10 +1047,10 @@ items: href: compiler-errors-1/compiler-error-c2396.md - name: Compiler error C2397 href: compiler-errors-1/compiler-error-c2397.md - - name: Compiler errors C2400 Through C2499 + - name: Compiler errors C2400 through C2499 expanded: false items: - - name: Compiler errors C2400 Through C2499 + - name: Compiler errors C2400 through C2499 href: compiler-errors-1/compiler-errors-c2400-through-c2499.md - name: Compiler error C2400 href: compiler-errors-1/compiler-error-c2400.md @@ -1222,10 +1222,10 @@ items: href: compiler-errors-1/compiler-error-c2498.md - name: Compiler error C2499 href: compiler-errors-1/compiler-error-c2499.md - - name: Compiler errors C2500 Through C2599 + - name: Compiler errors C2500 through C2599 expanded: false items: - - name: Compiler errors C2500 Through C2599 + - name: Compiler errors C2500 through C2599 href: compiler-errors-2/compiler-errors-c2500-through-c2599.md - name: Compiler error C2500 href: compiler-errors-2/compiler-error-c2500.md @@ -1377,10 +1377,10 @@ items: href: compiler-errors-2/compiler-error-c2598.md - name: Compiler error C2599 href: compiler-errors-2/compiler-error-c2599.md - - name: Compiler errors C2600 Through C2699 + - name: Compiler errors C2600 through C2699 expanded: false items: - - name: Compiler errors C2600 Through C2699 + - name: Compiler errors C2600 through C2699 href: compiler-errors-2/compiler-errors-c2600-through-c2699.md - name: Compiler error C2600 href: compiler-errors-2/compiler-error-c2600.md @@ -1532,10 +1532,10 @@ items: href: compiler-errors-2/compiler-error-c2696.md - name: Compiler error C2698 href: compiler-errors-2/compiler-error-c2698.md - - name: Compiler errors C2700 Through C2799 + - name: Compiler errors C2700 through C2799 expanded: false items: - - name: Compiler errors C2700 Through C2799 + - name: Compiler errors C2700 through C2799 href: compiler-errors-2/compiler-errors-c2700-through-c2799.md - name: Compiler error C2700 href: compiler-errors-2/compiler-error-c2700.md @@ -1701,10 +1701,10 @@ items: href: compiler-errors-2/compiler-error-c2797.md - name: Compiler error C2798 href: compiler-errors-2/compiler-error-c2798.md - - name: Compiler errors C2800 Through C2899 + - name: Compiler errors C2800 through C2899 expanded: false items: - - name: Compiler errors C2800 Through C2899 + - name: Compiler errors C2800 through C2899 href: compiler-errors-2/compiler-errors-c2800-through-c2899.md - name: Compiler error C2800 href: compiler-errors-2/compiler-error-c2800.md @@ -1868,10 +1868,10 @@ items: href: compiler-errors-2/compiler-error-c2897.md - name: Compiler error C2898 href: compiler-errors-2/compiler-error-c2898.md - - name: Compiler errors C2900 Through C2999 + - name: Compiler errors C2900 through C2999 expanded: false items: - - name: Compiler errors C2900 Through C2999 + - name: Compiler errors C2900 through C2999 href: compiler-errors-2/compiler-errors-c2900-through-c3499.md - name: Compiler error C2902 href: compiler-errors-2/compiler-error-c2902.md @@ -2007,10 +2007,10 @@ items: href: compiler-errors-2/compiler-error-c2996.md - name: Compiler error C2998 href: compiler-errors-2/compiler-error-c2998.md - - name: Compiler errors C3000 Through C3099 + - name: Compiler errors C3000 through C3099 expanded: false items: - - name: Compiler errors C3000 Through C3099 + - name: Compiler errors C3000 through C3099 href: compiler-errors-2/compiler-errors-c3000-through-c3099.md - name: Compiler error C3001 href: compiler-errors-2/compiler-error-c3001.md @@ -2176,10 +2176,10 @@ items: href: compiler-errors-2/compiler-error-c3097.md - name: Compiler error C3099 href: compiler-errors-2/compiler-error-c3099.md - - name: Compiler errors C3100 Through C3199 + - name: Compiler errors C3100 through C3199 expanded: false items: - - name: Compiler errors C3100 Through C3199 + - name: Compiler errors C3100 through C3199 href: compiler-errors-2/compiler-errors-c3100-through-c3199.md - name: Compiler error C3100 href: compiler-errors-2/compiler-error-c3100.md @@ -2317,10 +2317,10 @@ items: href: compiler-errors-2/compiler-error-c3198.md - name: Compiler error C3199 href: compiler-errors-2/compiler-error-c3199.md - - name: Compiler errors C3200 Through C3299 + - name: Compiler errors C3200 through C3299 expanded: false items: - - name: Compiler errors C3200 Through C3299 + - name: Compiler errors C3200 through C3299 href: compiler-errors-2/compiler-errors-c3200-through-c3299.md - name: Compiler error C3200 href: compiler-errors-2/compiler-error-c3200.md @@ -2492,10 +2492,10 @@ items: href: compiler-errors-2/compiler-error-c3298.md - name: Compiler error C3299 href: compiler-errors-2/compiler-error-c3299.md - - name: Compiler errors C3300 Through C3399 + - name: Compiler errors C3300 through C3399 expanded: false items: - - name: Compiler errors C3300 Through C3399 + - name: Compiler errors C3300 through C3399 href: compiler-errors-2/compiler-errors-c3300-through-c3399.md - name: Compiler error C3303 href: compiler-errors-2/compiler-error-c3303.md @@ -2601,10 +2601,10 @@ items: href: compiler-errors-2/compiler-error-c3398.md - name: Compiler error C3399 href: compiler-errors-2/compiler-error-c3399.md - - name: Compiler errors C3400 Through C3499 + - name: Compiler errors C3400 through C3499 expanded: false items: - - name: Compiler errors C3400 Through C3499 + - name: Compiler errors C3400 through C3499 href: compiler-errors-2/compiler-errors-c3400-through-c3499.md - name: Compiler error C3400 href: compiler-errors-2/compiler-error-c3400.md @@ -3171,15 +3171,15 @@ items: href: compiler-errors-2/compiler-error-c7553.md - name: Compiler error C7626 href: compiler-warnings/c5208.md -- name: Compiler warnings C4000 Through C5999 +- name: Compiler warnings C4000 through C5999 expanded: false items: - - name: Compiler warnings C4000 - C5999 + - name: Compiler warnings C4000 through C5999 href: compiler-warnings/compiler-warnings-c4000-c5999.md - - name: Compiler warnings C4000 Through C4199 + - name: Compiler warnings C4000 through C4199 expanded: false items: - - name: Compiler warnings C4000 Through C4199 + - name: Compiler warnings C4000 through C4199 href: compiler-warnings/compiler-warnings-c4000-through-c4199.md - name: Compiler warning (level 4, no longer emitted) C4001 href: compiler-warnings/compiler-warning-level-4-c4001.md @@ -3447,10 +3447,10 @@ items: href: compiler-warnings/compiler-warning-level-3-c4192.md - name: Compiler warning (level 3) C4197 href: compiler-warnings/compiler-warning-level-3-c4197.md - - name: Compiler warnings C4200 Through C4399 + - name: Compiler warnings C4200 through C4399 expanded: false items: - - name: Compiler warnings C4200 Through C4399 + - name: Compiler warnings C4200 through C4399 href: compiler-warnings/compiler-warnings-c4200-through-c4399.md - name: Compiler warning (levels 2 and 4) C4200 href: compiler-warnings/compiler-warning-levels-2-and-4-c4200.md @@ -3724,10 +3724,10 @@ items: href: compiler-warnings/compiler-warning-level-3-c4398.md - name: Compiler warning (level 1, Error) C4399 href: compiler-warnings/compiler-warning-level-1-c4399.md - - name: Compiler warnings C4400 Through C4599 + - name: Compiler warnings C4400 through C4599 expanded: false items: - - name: Compiler warnings C4400 Through C4599 + - name: Compiler warnings C4400 through C4599 href: compiler-warnings/compiler-warnings-c4400-through-c4599.md - name: Compiler warning (level 4) C4400 href: compiler-warnings/compiler-warning-level-4-c4400.md @@ -3939,10 +3939,10 @@ items: href: compiler-warnings/c4596.md - name: Compiler warning (level 4) C4597 href: compiler-warnings/c4597.md - - name: Compiler warnings C4600 Through C4799 + - name: Compiler warnings C4600 through C4799 expanded: false items: - - name: Compiler warnings C4600 Through C4799 + - name: Compiler warnings C4600 through C4799 href: compiler-warnings/compiler-warnings-c4600-through-c4799.md - name: Compiler warning (level 1) C4600 href: compiler-warnings/compiler-warning-level-1-c4600.md @@ -4174,10 +4174,10 @@ items: href: compiler-warnings/compiler-warning-level-1-c4794.md - name: Compiler warning (level 1) C4799 href: compiler-warnings/compiler-warning-level-1-c4799.md - - name: Compiler warnings C4800 Through C4999 + - name: Compiler warnings C4800 through C4999 expanded: false items: - - name: Compiler warnings C4800 Through C4999 + - name: Compiler warnings C4800 through C4999 href: compiler-warnings/compiler-warnings-c4800-through-c4999.md - name: Compiler warning (level 3) C4800 href: compiler-warnings/compiler-warning-level-3-c4800.md @@ -4333,10 +4333,10 @@ items: href: compiler-warnings/compiler-warning-level-1-c4997.md - name: Compiler warning (level 1) C4999 href: compiler-warnings/compiler-warning-level-1-c4999.md - - name: Compiler warnings C5000 Through C5199 + - name: Compiler warnings C5000 through C5199 expanded: false items: - - name: Compiler warnings C5000 Through C5199 + - name: Compiler warnings C5000 through C5199 href: compiler-warnings/compiler-warnings-c5000-through-c5199.md - name: Compiler warning (level 1) C5033 href: compiler-warnings/c5033.md @@ -4360,10 +4360,10 @@ items: href: compiler-warnings/compiler-warning-c5072.md - name: Compiler warning (level 1) C5105 href: compiler-warnings/c5105.md - - name: Compiler warnings C5200 Through C5399 + - name: Compiler warnings C5200 through C5399 expanded: false items: - - name: Compiler warnings C5200 Through C5399 + - name: Compiler warnings C5200 through C5399 href: compiler-warnings/compiler-warnings-c5200-through-c5399.md - name: Compiler warning (level 1) C5208 href: compiler-warnings/c5208.md From 23c92af459e419ce06bf6055bab20ca5a20c98eb Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 19 Apr 2024 14:22:39 -0700 Subject: [PATCH 0121/1239] I didn't like the acronym in the titles --- .../compiler-warnings/compiler-warnings-c4000-c5999.md | 2 +- .../compiler-warnings/compiler-warnings-c4000-through-c4199.md | 2 +- .../compiler-warnings/compiler-warnings-c4200-through-c4399.md | 2 +- .../compiler-warnings/compiler-warnings-c4400-through-c4599.md | 2 +- .../compiler-warnings/compiler-warnings-c4600-through-c4799.md | 2 +- .../compiler-warnings/compiler-warnings-c4800-through-c4999.md | 2 +- .../compiler-warnings/compiler-warnings-c5000-through-c5199.md | 2 +- .../compiler-warnings/compiler-warnings-c5200-through-c5399.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md index 9f571d1648..08f6b5cf34 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md @@ -3,7 +3,7 @@ title: "Microsoft C/C++ compiler (MSVC) warnings C4000 through C5399" description: "Table of Microsoft C/C++ compiler (MSVC) warnings." ms.date: "04/19/2024" --- -# Microsoft C/C++ compiler (MSVC) warnings C4000 through C5399 +# Microsoft C/C++ compiler warnings C4000 through C5399 This article links to descriptions of Microsoft C/C++ compiler warnings C4000-C5399. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md index 2baa416ca2..676f0a60ce 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md @@ -4,7 +4,7 @@ title: "Microsoft C/C++ compiler (MSVC) warnings C4000 through C4199" ms.date: "04/21/2019" f1_keywords: ["C4000", "C4035", "C4060", "C4063", "C4064", "C4065", "C4069", "C4123", "C4137", "C4181", "C4188", "C4193", "C4194", "C4195", "C4196", "C4199"] --- -# Microsoft C/C++ compiler (MSVC) warnings C4000 through C4199 +# Microsoft C/C++ compiler warnings C4000 through C4199 The articles in this section describe Microsoft C/C++ compiler warning messages C4000 through C4199. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 515b709384..b41c5133b1 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -4,7 +4,7 @@ description: "Table of Microsoft C/C++ compiler (MSVC) warnings C4200 through C4 ms.date: 10/18/2020 f1_keywords: ["C4203", "C4277", "C4279", "C4298", "C4299", "C4301", "C4303", "C4314", "C4315", "C4317", "C4318", "C4321", "C4322", "C4323", "C4327", "C4328", "C4330", "C4338", "C4352", "C4362", "C4367", "C4370", "C4380", "C4387"] --- -# Microsoft C/C++ compiler (MSVC) warnings C4200 through C4399 +# Microsoft C/C++ compiler warnings C4200 through C4399 The articles in this section describe Microsoft C/C++ compiler warning messages C4200 through C4399. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md index 3c232fad20..01f55ec356 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md @@ -5,7 +5,7 @@ ms.date: "04/21/2019" f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] --- -# Microsoft C/C++ compiler (MSVC) warnings C4400 through C4599 +# Microsoft C/C++ compiler warnings C4400 through C4599 The articles in this section describe Microsoft C/C++ compiler warning messages C4400-C4599. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md index 2e75eee8cb..3bdb97c94b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md @@ -5,7 +5,7 @@ ms.date: 05/03/2021 f1_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] helpviewer_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] --- -# Microsoft C/C++ compiler (MSVC) warnings C4600 through C4799 +# Microsoft C/C++ compiler warnings C4600 through C4799 The articles in this section describe Microsoft C/C++ compiler warning messages C4600 through C4799. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index 2355cf0952..8d8e2533ee 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -5,7 +5,7 @@ ms.date: 04/17/2024 f1_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] helpviewer_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] --- -# Microsoft C/C++ compiler (MSVC) warnings C4800 through C4999 +# Microsoft C/C++ compiler warnings C4800 through C4999 The articles in this section describe Microsoft C/C++ compiler warning messages C4800-C4999. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md index 6be1f1dd8e..5fd8d8a5fd 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md @@ -5,7 +5,7 @@ ms.date: 04/17/2024 f1_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] helpviewer_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] --- -# Microsoft C/C++ compiler (MSVC) warnings C5000 through C5199 +# Microsoft C/C++ compiler warnings C5000 through C5199 The articles in this section describe Microsoft C/C++ compiler warning messages C5000 through C5199. diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md index c43c5e1c5e..43dea219e0 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md @@ -5,7 +5,7 @@ ms.date: 04/19/2024 f1_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] helpviewer_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] --- -# Microsoft C/C++ compiler (MSVC) warnings C5200 through C5399 +# Microsoft C/C++ compiler warnings C5200 through C5399 The articles in this section describe Microsoft C/C++ compiler warning messages C5200 through C5399. From c22debef9699e7595d3dc4c19933f5f9fb0ad4fd Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:20:25 -0700 Subject: [PATCH 0122/1239] Update compiler-warning-level-4-c4254.md --- .../compiler-warnings/compiler-warning-level-4-c4254.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md index 15698af5dd..b6c36a0a2f 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md @@ -1,13 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4254" -title: "Compiler Warning (level 4) C4254" +description: "Learn more about: Compiler Warning (level 4, off) C4254" +title: "Compiler Warning (level 4, off) C4254" ms.date: "11/04/2016" f1_keywords: ["C4254"] helpviewer_keywords: ["C4254"] --- # Compiler Warning (level 4) C4254 -'operator' : conversion from 'type1' to 'type2', possible loss of data +> '*operator*': conversion from '*type1*':'*field_bits*' to '*type2*':'*field_bits*', possible loss of data A larger bit field was assigned to a smaller bit field. There could be a loss of data. From edd85eb7cead78a13b794e71fcf5bdd7c6ad1704 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:21:06 -0700 Subject: [PATCH 0123/1239] Update compiler-warning-level-1-c4305.md --- .../compiler-warnings/compiler-warning-level-1-c4305.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4305.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4305.md index d7faa04094..ba2979d7c6 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4305.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4305.md @@ -1,13 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4305" -title: "Compiler Warning (level 1) C4305" +description: "Learn more about: Compiler Warning (level 1 and level 2 and level 4) C4305" +title: "Compiler Warning (level 1 and level 2 and level 4) C4305" ms.date: "01/17/2018" f1_keywords: ["C4305"] helpviewer_keywords: ["C4305"] --- # Compiler Warning (level 1) C4305 -> '*context*' : truncation from '*type1*' to '*type2*' +> '*conversion*': truncation from '*type1*' to '*type2*' ## Remarks From ca6775a0ded9c31611ddfb384da88d190d90617a Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:22:07 -0700 Subject: [PATCH 0124/1239] Update compiler-warning-level-3-c4306.md --- .../compiler-warnings/compiler-warning-level-3-c4306.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md index 21157e1bbc..77e749e19b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4306" -title: "Compiler Warning (level 3) C4306" +description: "Learn more about: Compiler Warning (level 4) C4306" +title: "Compiler Warning (level 4) C4306" ms.date: "08/27/2018" f1_keywords: ["C4306"] helpviewer_keywords: ["C4306"] -ms.assetid: 5b2192d7-402d-4b6d-8619-08105e7dcac7 --- -# Compiler Warning (level 3) C4306 +# Compiler Warning (level 4) C4306 -> '*identifier*' : conversion from '*type1*' to '*type2*' of greater size +> '*conversion*': conversion from '*type1*' to '*type2*' of greater size The identifier is type cast to a larger pointer. The unfilled high bits of the new type will be zero-filled. From 71c5f3d9bb4a92841ed505e867911d6e8dab7826 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:22:37 -0700 Subject: [PATCH 0125/1239] Update compiler-warning-level-3-c4310.md --- .../compiler-warnings/compiler-warning-level-3-c4310.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4310.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4310.md index 979f70e2fd..97a146b576 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4310.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4310.md @@ -1,13 +1,13 @@ --- description: "Learn more about: Compiler Warning (level 4) C4310" -title: "Compiler Warning (level 3) C4310" +title: "Compiler Warning (level 4) C4310" ms.date: 10/17/2023 f1_keywords: ["C4310"] helpviewer_keywords: ["C4310"] --- # Compiler Warning (level 4) C4310 -cast truncates constant value +> cast truncates constant value A constant value is cast to a smaller type. The compiler performs the cast, which truncates data. The following sample generates C4310: From d40ca319670657515e681732bbec9815e1bff672 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:23:11 -0700 Subject: [PATCH 0126/1239] Update compiler-warning-c4355.md --- .../compiler-warnings/compiler-warning-c4355.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4355.md b/docs/error-messages/compiler-warnings/compiler-warning-c4355.md index 24633d26bd..88df382c32 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4355.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4355.md @@ -1,20 +1,19 @@ --- -description: "Learn more about: Compiler Warning C4355" -title: "Compiler Warning C4355" +description: "Learn more about: Compiler Warning (level 1 and level 4, off) C4355" +title: "Compiler Warning (level 1 and level 4, off) C4355" ms.date: "11/04/2016" f1_keywords: ["C4355"] helpviewer_keywords: ["C4355"] -ms.assetid: b819ecab-8a07-42d7-8fa4-1180d51626c0 --- -# Compiler Warning C4355 +# Compiler Warning (level 1 and level 4, off) C4355 -'this' : used in base member initializer list +> 'this': used in base member initializer list The **`this`** pointer is valid only within nonstatic member functions. It cannot be used in the initializer list for a base class. The base-class constructors and class member constructors are called before **`this`** constructor. In effect, you've passed a pointer to an unconstructed object to another constructor. If those other constructors access any members or call member functions on this, the result will be undefined. You should not use the **`this`** pointer until all construction has completed. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4355: From 60879f041a5444a0b76f65826013a9f0fe65880f Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:23:37 -0700 Subject: [PATCH 0127/1239] Update compiler-warning-level-3-c4265.md --- .../compiler-warnings/compiler-warning-level-3-c4265.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md index 5824f4d1c6..fa20cef811 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md @@ -7,7 +7,7 @@ helpviewer_keywords: ["C4265"] --- # Compiler Warning (level 3, off) C4265 -> 'class' : class has virtual functions, but destructor is not virtual +> '*classname*': class has virtual functions, but its non-trivial destructor is not virtual; instances of this class may not be destructed correctly When a class has virtual functions but a nonvirtual destructor, objects of the type might not be destroyed properly when the class is destroyed through a base class pointer. From bbb60aa9d2a7bbcfd46c1b95655a8c4e9b5c5e51 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:24:13 -0700 Subject: [PATCH 0128/1239] Update compiler-warning-level-4-c4324.md --- .../compiler-warnings/compiler-warning-level-4-c4324.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md index f50703025a..53042a7029 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md @@ -4,13 +4,12 @@ title: "Compiler Warning (level 4) C4324" ms.date: "11/04/2016" f1_keywords: ["C4324"] helpviewer_keywords: ["C4324"] -ms.assetid: 420fa929-d9c0-40b4-8808-2d8ad3ca8090 --- # Compiler Warning (level 4) C4324 -'struct_name' : structure was padded due to __declspec(align()) +> '*structname*': structure was padded due to alignment specifier -Padding was added at the end of a structure because you specified a [__declspec(align)](../../cpp/align-cpp.md) value. +Padding was added at the end of a structure because you specified an alighment specifier, such as [__declspec(align)](../../cpp/align-cpp.md). For example, the following code generates C4324: From 4c82c996c10ef829bb142fe00023ef3192c558ec Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:24:56 -0700 Subject: [PATCH 0129/1239] Update compiler-warning-level-1-c4329.md --- .../compiler-warnings/compiler-warning-level-1-c4329.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md index 22106ed141..5dc90c7ef6 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md @@ -4,13 +4,12 @@ title: "Compiler Warning (level 1) C4329" ms.date: "11/04/2016" f1_keywords: ["C4329"] helpviewer_keywords: ["C4329"] -ms.assetid: 4316f51a-2c56-4b3f-831e-65d24b83b65c --- # Compiler Warning (level 1) C4329 -__declspec(align()) is ignored on enum +> alignment specifier is ignored on enum -Use of the [align](../../cpp/align-cpp.md) keyword of the [__declspec](../../cpp/declspec.md) modifier is not allowed on an **`enum`**. The following sample generates C4329: +Use of the alignment specifierson on `enum` is not allowed. This includes the use of the [`align`](../../cpp/align-cpp.md) [`__declspec`](../../cpp/declspec.md) modifier. The following sample generates C4329: ```cpp // C4329.cpp From 500deb31818d48e4bb7f26e1fa2fbd45a3f57f07 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 19 Apr 2024 16:25:43 -0700 Subject: [PATCH 0130/1239] Update compiler-warning-level-1-c4384.md --- .../compiler-warnings/compiler-warning-level-1-c4384.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md index a4c538bc31..4df71a048d 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md @@ -4,13 +4,12 @@ title: "Compiler Warning (level 1) C4384" ms.date: "11/04/2016" f1_keywords: ["C4384"] helpviewer_keywords: ["C4384"] -ms.assetid: fafa8eb2-cbfc-4edb-8b0f-511ff5d37ac0 --- # Compiler Warning (level 1) C4384 -\#pragma 'make_public' should only be used at global scope +> `#pragma` '*pragma_name*' should only be used at global scope -The [make_public](../../preprocessor/make-public.md) pragma was applied incorrectly. +A `pragma` that must be applied at a global scope, was found in a different scope. This affects [`detect_mismatch`](../../preprocessor/detect-mismatch.md), `extern_absolute`, and [`make_public`](../../preprocessor/make-public.md). ## Example From 082a50200eeb2f7241d9f159964fa846387ba807 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 10:13:21 -0700 Subject: [PATCH 0131/1239] Learn Editor: Update compiler-errors-c3300-through-c3399.md --- .../compiler-errors-2/compiler-errors-c3300-through-c3399.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md index 550a6e1eb6..ffa67e7670 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md @@ -34,7 +34,7 @@ The articles in this section of the documentation explain a subset of the error | Compiler error C3315 | ' *function*': must be a member function | | Compiler error C3316 | '*type*': an array of unknown size cannot be used in a range-based for statement | | Compiler error C3317 | '*identifier*': an overload function cannot be used as the expression in a range-based for statement | -| Compiler error C3318 | '*type*': an array cannot have an element type that contains 'auto' | +| Compiler error C3318 | '*type*': an array cannot have an element type that contains 'auto'
No longer emitted in Visual Studio 2022 version 17.11 | | Compiler error C3319 | Obsolete. | | [Compiler error C3320](compiler-error-c3320.md) | '*type*': type cannot have the same name as the module 'name' property | | Compiler error C3321 | an initializer list is unexpected in this context | From 36ea2b6332f30ec708b3f1c3411baf99ae7375c6 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 10:31:18 -0700 Subject: [PATCH 0132/1239] Update compiler-warning-c4355.md --- .../compiler-warnings/compiler-warning-c4355.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4355.md b/docs/error-messages/compiler-warnings/compiler-warning-c4355.md index 88df382c32..f32d4d86f9 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4355.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4355.md @@ -7,11 +7,11 @@ helpviewer_keywords: ["C4355"] --- # Compiler Warning (level 1 and level 4, off) C4355 -> 'this': used in base member initializer list +> '`this`': used in base member initializer list -The **`this`** pointer is valid only within nonstatic member functions. It cannot be used in the initializer list for a base class. +The `this` pointer is valid only within nonstatic member functions. It can't be used in the initializer list for a base class. -The base-class constructors and class member constructors are called before **`this`** constructor. In effect, you've passed a pointer to an unconstructed object to another constructor. If those other constructors access any members or call member functions on this, the result will be undefined. You should not use the **`this`** pointer until all construction has completed. +The base-class constructors and class member constructors are called before `this` constructor. This pattern is the same as passing a pointer to an unconstructed object to another constructor. If those other constructors access any members or call member functions on `this`, the result is undefined. You shouldn't use the `this` pointer until all construction is complete. This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). From 1e88c25f5ebdbafe0a45c9664c7f9818072cd170 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 10:33:38 -0700 Subject: [PATCH 0133/1239] Update compiler-warning-level-1-c4329.md --- .../compiler-warnings/compiler-warning-level-1-c4329.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md index 5dc90c7ef6..8096343b99 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4329"] > alignment specifier is ignored on enum -Use of the alignment specifierson on `enum` is not allowed. This includes the use of the [`align`](../../cpp/align-cpp.md) [`__declspec`](../../cpp/declspec.md) modifier. The following sample generates C4329: +Use of the alignment specifiers on `enum` isn't allowed. This patern includes the use of the [`align`](../../cpp/align-cpp.md) [`__declspec`](../../cpp/declspec.md) modifier. The following sample generates C4329: ```cpp // C4329.cpp From eec04367744eec48fe04ec19031e34316d1c0d79 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 10:38:07 -0700 Subject: [PATCH 0134/1239] Update compiler-warning-level-1-c4384.md --- .../compiler-warnings/compiler-warning-level-1-c4384.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md index 4df71a048d..0cfd3e3fe2 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md @@ -9,7 +9,12 @@ helpviewer_keywords: ["C4384"] > `#pragma` '*pragma_name*' should only be used at global scope -A `pragma` that must be applied at a global scope, was found in a different scope. This affects [`detect_mismatch`](../../preprocessor/detect-mismatch.md), `extern_absolute`, and [`make_public`](../../preprocessor/make-public.md). +A `pragma` that must be applied at a global scope, was found in a different scope. + +The warning applies to the following: +* [`detect_mismatch`](../../preprocessor/detect-mismatch.md) +* `extern_absolute` +* [`make_public`](../../preprocessor/make-public.md) ## Example From 50df6eafa018755b898c06137af92556dea64442 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:42:33 -0700 Subject: [PATCH 0135/1239] Update compiler-warning-level-1-c4329.md --- .../compiler-warnings/compiler-warning-level-1-c4329.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md index 8096343b99..2922e2c625 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4329.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4329"] > alignment specifier is ignored on enum -Use of the alignment specifiers on `enum` isn't allowed. This patern includes the use of the [`align`](../../cpp/align-cpp.md) [`__declspec`](../../cpp/declspec.md) modifier. The following sample generates C4329: +Use of the alignment specifiers on `enum` isn't allowed. This pattern includes the use of the [`align`](../../cpp/align-cpp.md) [`__declspec`](../../cpp/declspec.md) modifier. The following sample generates C4329: ```cpp // C4329.cpp From 5f47f75f534f3cfd7ed63210595312ebcc0783d5 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:43:52 -0700 Subject: [PATCH 0136/1239] Update compiler-warning-level-1-c4384.md --- .../compiler-warnings/compiler-warning-level-1-c4384.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md index 0cfd3e3fe2..ee4ea78178 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4384.md @@ -9,9 +9,9 @@ helpviewer_keywords: ["C4384"] > `#pragma` '*pragma_name*' should only be used at global scope -A `pragma` that must be applied at a global scope, was found in a different scope. +A `pragma` directive that must be applied at a global scope, was found in a different scope. -The warning applies to the following: +The warning applies to the following `pragma` directives: * [`detect_mismatch`](../../preprocessor/detect-mismatch.md) * `extern_absolute` * [`make_public`](../../preprocessor/make-public.md) From 377006d41e36457d059468ab16572f204b52c68f Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:45:03 -0700 Subject: [PATCH 0137/1239] Update compiler-warning-level-3-c4306.md --- .../compiler-warnings/compiler-warning-level-3-c4306.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md index 77e749e19b..0e334e644e 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4306.md @@ -9,6 +9,6 @@ helpviewer_keywords: ["C4306"] > '*conversion*': conversion from '*type1*' to '*type2*' of greater size -The identifier is type cast to a larger pointer. The unfilled high bits of the new type will be zero-filled. +The identifier is type cast to a larger pointer. The unfilled high bits of the new type are zero-filled. This warning may indicate an unwanted conversion. The resulting pointer may not be valid. From 263a6d2a39637ab348ad9d2b774d00706ff8cee2 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:46:29 -0700 Subject: [PATCH 0138/1239] Update compiler-warning-level-4-c4233.md --- .../compiler-warnings/compiler-warning-level-4-c4233.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md index 4f1e0e93ea..7987d2e583 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4233.md @@ -11,4 +11,4 @@ helpviewer_keywords: ["C4233"] The compiler compiled your source code as C rather than C++, and you used a keyword that is only valid in C++. The compiler compiles your source file as C if the extension of the source file is .c or you use [/Tc](../../build/reference/tc-tp-tc-tp-specify-source-file-type.md). -This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable.: +This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable. From d3fc69d0a9d94bace90322fb49e58d09d0d208d9 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:48:41 -0700 Subject: [PATCH 0139/1239] Update compiler-warning-level-4-c4235.md --- .../compiler-warnings/compiler-warning-level-4-c4235.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md index 2732db8d53..b555d0df57 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4235.md @@ -9,6 +9,6 @@ helpviewer_keywords: ["C4235"] > nonstandard extension used: '*keyword*' keyword not supported on this architecture -The compiler does not support the keyword you used. +The compiler doesn't support the keyword you used on the architecture your build is targeting. This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable. From 10abe54b51d979a364918eed0ae9ad741e5de96f Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:49:56 -0700 Subject: [PATCH 0140/1239] Update compiler-warning-level-4-c4242.md --- .../compiler-warnings/compiler-warning-level-4-c4242.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md index fbd17fd0cc..f0d4ccb106 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4242.md @@ -13,7 +13,7 @@ The types are different. Type conversion may result in loss of data. The compile This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). -For additional information on C4242, see [Common Compiler Errors](/windows/win32/WinProg64/common-compiler-errors). +For more information on C4242, see [Common Compiler Errors](/windows/win32/WinProg64/common-compiler-errors). The following sample generates C4242: From 0502827724bdfc9069975a05d6244b3445c9fd75 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:50:53 -0700 Subject: [PATCH 0141/1239] Update compiler-warning-level-4-c4254.md --- .../compiler-warnings/compiler-warning-level-4-c4254.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md index b6c36a0a2f..0032fa56ad 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4254"] A larger bit field was assigned to a smaller bit field. There could be a loss of data. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For mote information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4254: From 1b1e469f74a7d429ef86c58f4facddd79c40b583 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:51:57 -0700 Subject: [PATCH 0142/1239] Update compiler-warning-level-4-c4324.md --- .../compiler-warnings/compiler-warning-level-4-c4324.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md index 53042a7029..f2f4076e29 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4324.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4324"] > '*structname*': structure was padded due to alignment specifier -Padding was added at the end of a structure because you specified an alighment specifier, such as [__declspec(align)](../../cpp/align-cpp.md). +Padding was added at the end of a structure because you specified an alignment specifier, such as [__declspec(align)](../../cpp/align-cpp.md). For example, the following code generates C4324: From 1c7ac62a690ff153095552afe87219b606d0b26e Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:53:46 -0700 Subject: [PATCH 0143/1239] Update compiler-warning-level-4-c4254.md --- .../compiler-warnings/compiler-warning-level-4-c4254.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md index 0032fa56ad..7a9386692c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4254.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4254"] A larger bit field was assigned to a smaller bit field. There could be a loss of data. -This warning is off by default. For mote information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4254: From 51f0dfc1b2db490ca73d41ff0df5bec84c8da15c Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 13:55:21 -0700 Subject: [PATCH 0144/1239] Update compiler-warning-levels-1-and-4-c4223.md --- .../compiler-warnings/compiler-warning-levels-1-and-4-c4223.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md b/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md index 5053bf18ab..bc05a609f2 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md @@ -10,4 +10,4 @@ ms.assetid: 6fc44336-0250-4432-928b-fc5dbe7b7c1c > nonstandard extension used: non-lvalue array converted to pointer -In standard C, you cannot convert a non-lvalue array to a pointer. With the default Microsoft extensions ([`/Ze`](../../build/reference/za-ze-disable-language-extensions.md)), you can. +In standard C, you can't convert a nonlvalue array to a pointer. With the default Microsoft extensions ([`/Ze`](../../build/reference/za-ze-disable-language-extensions.md)), you can. From 15055f488a67bf5adf8946c58647f48e238d8205 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 22 Apr 2024 14:11:12 -0700 Subject: [PATCH 0145/1239] Update compiler-warning-levels-2-and-4-c4200.md --- .../compiler-warning-levels-2-and-4-c4200.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md b/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md index 068a7587a0..309f2b0317 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md @@ -9,21 +9,21 @@ helpviewer_keywords: ["C4200"] > nonstandard extension used: zero-sized array in struct/union -Indicates that a structure or union contains an array that has zero size. - -Declaration of a zero-sized array is a Microsoft extension. This causes a Level-2 warning when a C++ file is compiled and a Level-4 warning when a C file is compiled. C++ compilation also gives this warning: "Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array." This example generates warning C4200: +C++ only: +> This member will be ignored by a defaulted constructor or copy/move assignment operator + +This warning indicates that a structure or union contains an array that has zero size. Declaration of a zero-sized array is a nonstandard compiler extension. This causes a Level-2 warning when a C++ file is compiled and a Level-4 warning when a C file is compiled. This example generates warning C4200: ```cpp // C4200.cpp // compile by using: cl /W4 c4200.cpp struct A { + int len; int a[0]; // C4200 }; -int main() { -} ``` -This non-standard extension is often used to interface code with external data structures that have a variable length. If this scenario applies to your code, you can disable the warning: +This nonstandard extension is often used to interface code with external data structures that have a variable length. If this scenario applies to your code, you can disable the warning: ## Example @@ -32,8 +32,7 @@ This non-standard extension is often used to interface code with external data s // compile by using: cl /W4 c4200a.cpp #pragma warning(disable : 4200) struct A { + int len; int a[0]; }; -int main() { -} ``` From 29663a6d5389c8a93280b46eb6ef95878da403ff Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 23 Apr 2024 11:24:24 -0700 Subject: [PATCH 0146/1239] draft --- docs/build-insights/index.yml | 4 + .../tutorials/build-insights-function-view.md | 93 ++++++ .../build-insights-included-files-view.md | 104 +++++++ .../installer-desktop-cpp-build-insights.png | Bin 0 -> 10682 bytes .../installer-gamedev-cpp-build-insights.png | Bin 0 -> 10452 bytes docs/index.yml | 248 +++------------- docs/toc.yml | 268 ++++++++++++++++++ 7 files changed, 512 insertions(+), 205 deletions(-) create mode 100644 docs/build-insights/tutorials/build-insights-function-view.md create mode 100644 docs/build-insights/tutorials/build-insights-included-files-view.md create mode 100644 docs/build-insights/tutorials/media/installer-desktop-cpp-build-insights.png create mode 100644 docs/build-insights/tutorials/media/installer-gamedev-cpp-build-insights.png create mode 100644 docs/toc.yml diff --git a/docs/build-insights/index.yml b/docs/build-insights/index.yml index 4223308cfc..67ebc1a5b2 100644 --- a/docs/build-insights/index.yml +++ b/docs/build-insights/index.yml @@ -25,6 +25,10 @@ landingContent: url: get-started-with-cpp-build-insights.md - linkListType: tutorial links: + - text: Build Insights function view + url: tutorials/build-insights-function-view.md + - text: Build Insights included files view + url: tutorials/included-files-view.md - text: vcperf and Windows Performance Analyzer url: tutorials/vcperf-and-wpa.md - text: Windows Performance Analyzer basics diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md new file mode 100644 index 0000000000..2366b94312 --- /dev/null +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -0,0 +1,93 @@ +--- +title: "Tutorial: Build Insights functions view" +description: "Tutorial on how to use Build Insights function view to troubleshoot build time and forceinlines function inlining costs." +ms.date: 4/15/2024 +helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] +--- +# Tutorial: Use Build Insights to troubleshoot build time and function inlining problems + +Use Build Insights **Functions** view to troubleshoot the impact of function inlining on build time. + +## Prerequisites + +- Visual Studio 2022 17.8 or greater. +- C++ Build insights is enabled by default if you installed either the Desktop development with C++ workload or the Game development with C++ workload. + +:::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +:::image-end::: + +:::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +:::image-end::: + +## Overview + +Build Insights is a tool, now integrated into Visual Studio, designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). + +The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. + +In this article, learn how to use the Build Insights **Functions** view to identify bottlenecks in your build process and improve build time and function inlining. + +## Set build options + +To measure the results of `__forceinline`, use a **Release** build where optimizations for `__forceinline` impact release build times the most. Set the build for **Release** and **x64**: + +- In the **Solution Configurations** dropdown, choose **Release**. +- In the **Solution Platforms** dropdown, choose **x64**. + +:::image type="content" source="./media/" alt-text="Screenshot showing the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64"::: + +Set the optimization level to maximum optimizations: + +- In the **Solution Explorer**, right-click the project name and select **Properties**. +- In the project properties, navigate to **C/C++** > **Optimization**. +- Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) (/O2)**. + +:::image type="content" source="./media/" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: + +- Click **OK** to close the dialog. + +## Run build insights + +On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. Or, you can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. + +When the build finishes, an Event Trace Log (ETL) file opens similar to the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. This file shows the time spent processing `#include` files, the build time for each function, and how much `__forceinline` impacted the size of the function. + +:::image type="complex" source="./media/" alt-text="alt text stuff"::: +big ole’ long description +:::image-end::: + +## Function view + +In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. + +:::image type="complex" source="./media/" alt-text="alt text stuff"::: +Just show the functions tab portion of the dialog with the forceinline size column, time column +:::image-end::: + +The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. These numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is particularly high and is worth investigating. + +The `Project` column indicates which project the function belongs to. Double click the **File** column to go to the source file where the function is defined. + +Select the chevron next to a function to expand the function and see the list of inline functions that were expanded inside it. The functions that were inlined inside this function are listed and their individual size is shown in terms of generated instructions. Higher is worse. Highlighting `__forceinline` information is important because excessive use of `__forceinline` functions can significantly slow compilation. + +You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. + +## Improve build time and function inlining + +In this case, we can see that the `foo` function is taking the most time to compile. Investigating further, by opening the function, we see that the `foo2` function is marked with `__forceinline`. This function is inlined into many other functions, which is causing the build time to increase. We can remove the `__forceinline` directive from the `foo` function to reduce the build time. + +## Troubleshooting + +- If the Functions view doesn't show any functions, you may not be building with the right optimization settings. Ensure that you're building Release with full optimizations, as described in [Set build options](#set-build-options). Also, if a function's code generation time is too small, it won't appear in the list. +- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. +- If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. + +## See also + +[Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ +[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ +[Reference: vcperf commands](../reference/vcperf-commands.md)\ +[Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ +[Windows Performance Analyzer](/windows-hardware/test/wpt/windows-performance-analyzer) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md new file mode 100644 index 0000000000..61c9ca07f5 --- /dev/null +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -0,0 +1,104 @@ +--- +title: "Tutorial: Build Insights included files view" +description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of #include files on build time." +ms.date: 4/25/2024 +helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree view", "#include analysis", "build time analysis"] +--- +# Tutorial: Use Build Insights to troubleshoot #include files on build time + +Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of #include files on build time. + +## Prerequisites + +- Visual Studio 2022 17.8 or greater. +- C++ Build insights is enabled by default if you installed either the Desktop development with C++ workload or the Game development with C++ workload. + +:::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +:::image-end::: + +:::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +:::image-end::: + +## Overview + +Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Included ** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). + +Parsing header files has an impact on build time. When a large header file is repeatedly parsed, there is an even greater impact on compile time. The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. + +In this article, learn how to use the Build Insights **Functions** view to identify bottlenecks in your build process and improve build time and function inlining. + +## Set build options + +To measure the results of `__forceinline`, use a **Release** build where optimizations for `__forceinline` impact release build times the most. Set the build for **Release** and **x64**: + +- In the **Solution Configurations** dropdown, choose **Release**. +- In the **Solution Platforms** dropdown, choose **x64**. + +:::image type="content" source="./media/" alt-text="Screenshot showing the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64"::: + +Set the optimization level to maximum optimizations: + +- In the **Solution Explorer**, right-click the project name and select **Properties**. +- In the project properties, navigate to **C/C++** > **Optimization**. +- Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) (/O2)**. + +:::image type="content" source="./media/" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: + +- Click **OK** to close the dialog. + +## Run build insights + +On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. Or, you can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. + +When the build finishes, an Event Trace Log (ETL) file opens similar to the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. This file shows the time spent processing `#include` files, the build time for each function, and how much `__forceinline` impacted the size of the function. + +:::image type="complex" source="./media/" alt-text="alt text stuff"::: +big ole’ long description +:::image-end::: + +## Included Files View + +time is aggregate time spent parsing the file + + +## Include Tree View + +right click on a file to: + +In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. + +:::image type="complex" source="./media/" alt-text="alt text stuff"::: +Just show the functions tab portion of the dialog with the forceinline size column, time column +:::image-end::: + +The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. These numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is particularly high and is worth investigating. + +The `Project` column indicates which project the function belongs to. Double click the **File** column to go to the source file where the function is defined. + +Select the chevron next to a function to expand the function and see the list of inline functions that were expanded inside it. The functions that were inlined inside this function are listed and their individual size is shown in terms of generated instructions. Higher is worse. Highlighting `__forceinline` information is important because excessive use of `__forceinline` functions can significantly slow compilation. + +You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. + +## Improve build time with precompiled headers + +show how to build a precompiled header or link to topic for it + - this topic shows how to build PCH: https://devblogs.microsoft.com/cppblog/faster-builds-with-pch-suggestions-from-c-build-insights/ +Talk about header units + + +## Troubleshooting + +- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. +- If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. + +## See also + +video pure virtual c++ 2023: https://youtu.be/P63jEa85pFg + +[Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ +[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ +[Reference: vcperf commands](../reference/vcperf-commands.md)\ +[Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ +[Windows Performance Analyzer](/windows-hardware/test/wpt/windows-performance-analyzer) diff --git a/docs/build-insights/tutorials/media/installer-desktop-cpp-build-insights.png b/docs/build-insights/tutorials/media/installer-desktop-cpp-build-insights.png new file mode 100644 index 0000000000000000000000000000000000000000..e02d6d987da0d6dd4d958dbd8b68820c4d56f011 GIT binary patch literal 10682 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 literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/installer-gamedev-cpp-build-insights.png b/docs/build-insights/tutorials/media/installer-gamedev-cpp-build-insights.png new file mode 100644 index 0000000000000000000000000000000000000000..a961141d3a7edaa7c95cc896a73c42a6df9e494e GIT binary patch literal 10452 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 literal 0 HcmV?d00001 diff --git a/docs/index.yml b/docs/index.yml index ef1c16e4cf..0fea3f5319 100644 --- a/docs/index.yml +++ b/docs/index.yml @@ -1,213 +1,51 @@ -### YamlMime:Hub -title: Microsoft C++, C, and Assembler documentation -summary: Learn how to use C++, C, and assembly language to develop applications, services, and tools for your platforms and devices. -# brand: aspnet | azure | dotnet | dynamics | m365 | ms-graph | office | power-platform | sql | sql-server | vs | visual-studio | windows | xamarin -brand: visual-studio +### YamlMime:Landing +title: C++ Build Insights | Automate build tool chain analysis # < 60 chars +summary: Use C++ Build Insights for real-time and automated build analysis and optimization. # < 160 chars + metadata: - title: Microsoft C/C++ Documentation - description: Learn how to use C++ to develop applications, services, and tools for your platforms and devices. - ms.service: visual-cpp - ms.topic: hub-page + title: C++ Build Insights + description: Learn how to use C++ Build Insights to analyze and optimize your builds. + ms.topic: landing-page author: tylermsft ms.author: twhitney - ms.date: 06/04/2020 + ms.date: 05/26/2020 ms.custom: intro-landing-hub -# highlightedContent section (optional) -# Maximum of 8 items -highlightedContent: -# itemType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new - items: - # Card - - title: Install Visual Studio and choose your C++ workloads - itemType: download - url: build/vscpp-step-0-installation.md - # Card - - title: Welcome to C++ in Visual Studio - itemType: overview - url: overview/visual-cpp-in-visual-studio.md - # Card - - title: Get started with Visual Studio and C++ - itemType: get-started - url: get-started/tutorial-console-cpp.md - # Card - - title: What's new for C++ in Visual Studio - itemType: whats-new - url: overview/what-s-new-for-visual-cpp-in-visual-studio.md - -# conceptualContent section (optional) -conceptualContent: -# itemType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new - title: Get started with C++ and C - items: - # Card - - title: Learn to use the Visual Studio IDE - links: - - text: Start a guided tour of Visual Studio - url: /visualstudio/ide/visual-studio-ide - itemType: overview - - text: Open code from a repo - url: /visualstudio/get-started/tutorial-open-project-from-repo - itemType: tutorial - - text: Write and edit code - url: /visualstudio/ide/index-writing-code - itemType: tutorial - - text: Build your code - url: /visualstudio/ide/compiling-and-building-in-visual-studio - itemType: tutorial - - text: Debug your code - itemType: tutorial - url: /visualstudio/debugger/quickstart-debug-with-cplusplus - - text: Test your code - itemType: tutorial - url: /visualstudio/test/writing-unit-tests-for-c-cpp - # Card - - title: Write C++ and C apps in Visual Studio - links: - - text: Create a console calculator app - url: get-started/tutorial-console-cpp.md - itemType: tutorial - - text: Create a Windows Desktop app with Win32 - url: windows/walkthrough-creating-windows-desktop-applications-cpp.md - itemType: tutorial - - text: Create a Windows Desktop app with MFC - url: mfc/reference/creating-an-mfc-application.md - itemType: tutorial - - text: Create a Windows DLL - url: build/walkthrough-creating-and-using-a-dynamic-link-library-cpp.md - itemType: tutorial - - text: Create a static library - url: build/walkthrough-creating-and-using-a-static-library-cpp.md - itemType: tutorial - - text: Create a .NET component - url: dotnet/walkthrough-compiling-a-cpp-program-that-targets-the-clr-in-visual-studio.md - itemType: tutorial - - text: Create a Universal Windows Platform app - url: /windows/uwp/cpp-and-winrt-apis/get-started - itemType: tutorial - # Card - - title: Use the command-line tools - links: - - text: Compile C++ code - url: build/walkthrough-compiling-a-native-cpp-program-on-the-command-line.md - itemType: tutorial - - text: Compile C code - url: build/walkthrough-compile-a-c-program-on-the-command-line.md - itemType: tutorial - - text: Compile C++/CX - url: build/walkthrough-compiling-a-cpp-cx-program-on-the-command-line.md - itemType: tutorial - - text: Compile C++/CLI - url: build/walkthrough-compiling-a-cpp-cli-program-on-the-command-line.md - itemType: tutorial - # Card - - title: Use C++ and C in Visual Studio Code - links: - - text: Get started with Visual Studio Code - url: https://code.visualstudio.com/docs - itemType: tutorial - - text: Install the Microsoft C/C++ extension - url: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools - itemType: tutorial - - text: Use Microsoft C/C++ in Windows - url: https://code.visualstudio.com/docs/cpp/config-msvc - itemType: tutorial - - text: Use C++ in the Windows Subsystem for Linux - url: https://code.visualstudio.com/docs/cpp/config-wsl - itemType: tutorial - - text: Use C++ on Linux - url: https://code.visualstudio.com/docs/cpp/config-linux - itemType: tutorial - - text: Use C++ on macOS - url: https://code.visualstudio.com/docs/cpp/config-clang-mac - itemType: tutorial +# linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new +landingContent: +# Cards and links should be based on top customer tasks or top subjects +# Start card title with a verb + # Card (optional) + - title: Learn how your build performs + linkLists: + - linkListType: overview + links: + - text: Get started with C++ Build Insights + url: get-started-with-cpp-build-insights.md + - linkListType: tutorial + links: + - text: Build Insights included files view + url: tutorials/included-files-view.md + - text: vcperf and Windows Performance Analyzer + url: tutorials/vcperf-and-wpa.md + - text: Windows Performance Analyzer basics + url: tutorials/wpa-basics.md -tools: - title: Languages and frameworks - items: - - title: C++ - imageSrc: /media/logos/logo_Cplusplus.svg - url: cpp/index.yml - - title: C - imageSrc: /media/logos/logo_C.svg - url: c-language/index.yml - - title: Microsoft Assembler - imageSrc: media/index/logo-asm.svg - url: intrinsics/index.yml - - title: C++/CX for Windows Runtime - imageSrc: /media/logos/logo_Cplusplus.svg - url: cppcx/visual-c-language-reference-c-cx.md - - title: C++/CLI for .NET - imageSrc: /media/logos/logo_Cplusplus.svg - url: dotnet/dotnet-programming-with-cpp-cli-visual-cpp.md - - title: Active Template Library (ATL) - imageSrc: media/index/logo-atl.svg - url: atl/atl-com-desktop-components.md - - title: Microsoft Foundation Classes (MFC) - imageSrc: media/index/logo-mfc.svg - url: mfc/mfc-desktop-applications.md - - title: C++/WinRT for Windows Runtime - imageSrc: /media/logos/logo_Cplusplus.svg - url: /windows/uwp/cpp-and-winrt-apis/ + # Card (optional) + - title: Measure build performance + linkLists: + - linkListType: reference + links: + - text: vcperf commands + url: reference/vcperf-commands.md + - text: Windows Performance Analyzer views + url: reference/wpa-views.md -# additionalContent section (optional) -# Card with links style -additionalContent: - sections: - - title: C++ and C workloads, features, and libraries - summary: Develop for your choice of platforms with Visual Studio tools. - items: - # Card - - title: Workloads - links: - - text: Universal Windows Platform development - url: cppcx/universal-windows-apps-cpp.md - - text: Windows Desktop development - url: windows/overview-of-windows-programming-in-cpp.md - - text: Linux development - url: linux/index.yml - - text: Embedded development - url: embedded/index.yml - - text: Mobile development - url: cross-platform/index.yml - - text: Game development - url: /windows/uwp/gaming/e2e/ - # Card - - title: Features - links: - - text: Build reliable and secure programs - url: code-quality/build-reliable-secure-programs.md - - text: Edit and refactor code - url: ide/writing-and-refactoring-code-cpp.md - - text: Build code projects - url: build/projects-and-build-systems-cpp.md - - text: Debug your code - url: /visualstudio/debugger/debugging-native-code - - text: Analyze your code - url: code-quality/index.yml - - text: Profile app performance - url: /visualstudio/profiling - - text: Port and upgrade code - url: porting/visual-cpp-porting-and-upgrading-guide.md - - text: Sanitize code for bugs - url: sanitizers/index.yml - # Card - - title: Libraries - links: - - text: C++ standard library reference - url: standard-library/cpp-standard-library-reference.md - - text: C runtime library reference - url: c-runtime-library/c-run-time-library-reference.md - - text: MFC and ATL Windows Desktop libraries - url: mfc/mfc-and-atl.md - - text: Parallel programming libraries - url: parallel/parallel-programming-in-visual-cpp.md - - text: Cloud and networking libraries - url: cloud/cloud-and-web-programming-in-visual-cpp.md - - text: Universal Windows Platform libraries - url: cppcx/namespaces-reference-c-cx.md - - text: vcpkg package manager - url: /vcpkg/ - # footer (optional) - footer: "[Microsoft Learn Q&A](/answers/topics/c%2B%2B.html) - [C++ Team Blog](https://devblogs.microsoft.com/cppblog/) - [Twitter](https://twitter.com/visualc) - [Developer Community](https://aka.ms/vsfeedback/browsecpp) - [Stack Overflow](https://stackoverflow.com/questions/tagged/visual-c++) - [How to report an issue](overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) - [Suggest a feature](https://aka.ms/feedback/suggest?space=62) - Contribute to C++ docs: Read our [contributor guide](/contribute/)." + # Card + - title: Create your own build performance analysis + linkLists: + - linkListType: reference + links: + - text: SDK reference + url: reference/sdk/overview.md diff --git a/docs/toc.yml b/docs/toc.yml new file mode 100644 index 0000000000..888321af7a --- /dev/null +++ b/docs/toc.yml @@ -0,0 +1,268 @@ +items: +- name: "C++ Build Insights" + href: ../build-insights/index.yml +- name: "Get started with C++ Build Insights" + href: ../build-insights/get-started-with-cpp-build-insights.md +- name: "Tutorials" + expanded: true + items: + - name: "Build Insights: Functions view" + href: ../build-insights/tutorials/build-insights-function-view.md + - name: "Build Insights: Included Files view" + href: ../build-insights/tutorials/build-insights-included-files-view.md + - name: "Build Insights: Included Files view" + href: ../build-insights/tutorials/build-insights-included-files-view.md + - name: "vcperf and Windows Performance Analyzer" + href: ../build-insights/tutorials/vcperf-and-wpa.md + - name: "Windows Performance Analyzer basics" + href: ../build-insights/tutorials/wpa-basics.md +- name: "Reference" + items: + - name: "vcperf commands" + href: ../build-insights/reference/vcperf-commands.md + - name: "Windows Performance Analyzer views" + href: ../build-insights/reference/wpa-views.md + - name: "C++ Build Insights SDK" + items: + - name: "Overview" + href: ../build-insights/reference/sdk/overview.md + - name: "Event table" + href: ../build-insights/reference/sdk/event-table.md + - name: "Functions" + items: + - name: "Analyze" + href: ../build-insights/reference/sdk/functions/analyze.md + - name: "AnalyzeA" + href: ../build-insights/reference/sdk/functions/analyze-a.md + - name: "AnalyzeW" + href: ../build-insights/reference/sdk/functions/analyze-w.md + - name: "InjectEvent" + href: ../build-insights/reference/sdk/functions/inject-event.md + - name: "MakeDynamicAnalyzerGroup" + href: ../build-insights/reference/sdk/functions/make-dynamic-analyzer-group.md + - name: "MakeDynamicReloggerGroup" + href: ../build-insights/reference/sdk/functions/make-dynamic-relogger-group.md + - name: "MakeStaticAnalyzerGroup" + href: ../build-insights/reference/sdk/functions/make-static-analyzer-group.md + - name: "MakeStaticReloggerGroup" + href: ../build-insights/reference/sdk/functions/make-static-relogger-group.md + - name: "MatchEvent" + href: ../build-insights/reference/sdk/functions/match-event.md + - name: "MatchEventInMemberFunction" + href: ../build-insights/reference/sdk/functions/match-event-in-member-function.md + - name: "MatchEventStack" + href: ../build-insights/reference/sdk/functions/match-event-stack.md + - name: "MatchEventStackInMemberFunction" + href: ../build-insights/reference/sdk/functions/match-event-stack-in-member-function.md + - name: "Relog" + href: ../build-insights/reference/sdk/functions/relog.md + - name: "RelogA" + href: ../build-insights/reference/sdk/functions/relog-a.md + - name: "RelogW" + href: ../build-insights/reference/sdk/functions/relog-w.md + - name: "StartTracingSession" + href: ../build-insights/reference/sdk/functions/start-tracing-session.md + - name: "StartTracingSessionA" + href: ../build-insights/reference/sdk/functions/start-tracing-session-a.md + - name: "StartTracingSessionW" + href: ../build-insights/reference/sdk/functions/start-tracing-session-w.md + - name: "StopAndAnalyzeTracingSession" + href: ../build-insights/reference/sdk/functions/stop-and-analyze-tracing-session.md + - name: "StopAndAnalyzeTracingSessionA" + href: ../build-insights/reference/sdk/functions/stop-and-analyze-tracing-session-a.md + - name: "StopAndAnalyzeTracingSessionW" + href: ../build-insights/reference/sdk/functions/stop-and-analyze-tracing-session-w.md + - name: "StopAndRelogTracingSession" + href: ../build-insights/reference/sdk/functions/stop-and-relog-tracing-session.md + - name: "StopAndRelogTracingSessionA" + href: ../build-insights/reference/sdk/functions/stop-and-relog-tracing-session-a.md + - name: "StopAndRelogTracingSessionW" + href: ../build-insights/reference/sdk/functions/stop-and-relog-tracing-session-w.md + - name: "StopTracingSession" + href: ../build-insights/reference/sdk/functions/stop-tracing-session.md + - name: "StopTracingSessionA" + href: ../build-insights/reference/sdk/functions/stop-tracing-session-a.md + - name: "StopTracingSessionW" + href: ../build-insights/reference/sdk/functions/stop-tracing-session-w.md + - name: "Event data types (C++)" + items: + - name: "Activity" + href: ../build-insights/reference/sdk/cpp-event-data-types/activity.md + - name: "BackEndPass" + href: ../build-insights/reference/sdk/cpp-event-data-types/back-end-pass.md + - name: "BottomUp" + href: ../build-insights/reference/sdk/cpp-event-data-types/bottom-up.md + - name: "C1DLL" + href: ../build-insights/reference/sdk/cpp-event-data-types/c1-dll.md + - name: "C2DLL" + href: ../build-insights/reference/sdk/cpp-event-data-types/c2-dll.md + - name: "CodeGeneration" + href: ../build-insights/reference/sdk/cpp-event-data-types/code-generation.md + - name: "CommandLine" + href: ../build-insights/reference/sdk/cpp-event-data-types/command-line.md + - name: "Compiler" + href: ../build-insights/reference/sdk/cpp-event-data-types/compiler.md + - name: "CompilerPass" + href: ../build-insights/reference/sdk/cpp-event-data-types/compiler-pass.md + - name: "EnvironmentVariable" + href: ../build-insights/reference/sdk/cpp-event-data-types/environment-variable.md + - name: "Event" + href: ../build-insights/reference/sdk/cpp-event-data-types/event.md + - name: "EventGroup" + href: ../build-insights/reference/sdk/cpp-event-data-types/event-group.md + - name: "EventStack" + href: ../build-insights/reference/sdk/cpp-event-data-types/event-stack.md + - name: "ExecutableImageOutput" + href: ../build-insights/reference/sdk/cpp-event-data-types/executable-image-output.md + - name: "ExpOutput" + href: ../build-insights/reference/sdk/cpp-event-data-types/exp-output.md + - name: "FileInput" + href: ../build-insights/reference/sdk/cpp-event-data-types/file-input.md + - name: "FileOutput" + href: ../build-insights/reference/sdk/cpp-event-data-types/file-output.md + - name: "ForceInlinee" + href: ../build-insights/reference/sdk/cpp-event-data-types/force-inlinee.md + - name: "FrontEndFile" + href: ../build-insights/reference/sdk/cpp-event-data-types/front-end-file.md + - name: "FrontEndFileGroup" + href: ../build-insights/reference/sdk/cpp-event-data-types/front-end-file-group.md + - name: "FrontEndPass" + href: ../build-insights/reference/sdk/cpp-event-data-types/front-end-pass.md + - name: "Function" + href: ../build-insights/reference/sdk/cpp-event-data-types/function.md + - name: "HeaderUnit" + href: ../build-insights/reference/sdk/cpp-event-data-types/header-unit.md + - name: "ImpLibOutput" + href: ../build-insights/reference/sdk/cpp-event-data-types/imp-lib-output.md + - name: "Invocation" + href: ../build-insights/reference/sdk/cpp-event-data-types/invocation.md + - name: "InvocationGroup" + href: ../build-insights/reference/sdk/cpp-event-data-types/invocation-group.md + - name: "LibOutput" + href: ../build-insights/reference/sdk/cpp-event-data-types/lib-output.md + - name: "Linker" + href: ../build-insights/reference/sdk/cpp-event-data-types/linker.md + - name: "LinkerGroup" + href: ../build-insights/reference/sdk/cpp-event-data-types/linker-group.md + - name: "LinkerPass" + href: ../build-insights/reference/sdk/cpp-event-data-types/linker-pass.md + - name: "LTCG" + href: ../build-insights/reference/sdk/cpp-event-data-types/ltcg.md + - name: "Module" + href: ../build-insights/reference/sdk/cpp-event-data-types/module.md + - name: "ObjOutput" + href: ../build-insights/reference/sdk/cpp-event-data-types/obj-output.md + - name: "OptICF" + href: ../build-insights/reference/sdk/cpp-event-data-types/opt-icf.md + - name: "OptLBR" + href: ../build-insights/reference/sdk/cpp-event-data-types/opt-lbr.md + - name: "OptRef" + href: ../build-insights/reference/sdk/cpp-event-data-types/opt-ref.md + - name: "Pass1" + href: ../build-insights/reference/sdk/cpp-event-data-types/pass1.md + - name: "Pass2" + href: ../build-insights/reference/sdk/cpp-event-data-types/pass2.md + - name: "PrecompiledHeader" + href: ../build-insights/reference/sdk/cpp-event-data-types/precompiled-header.md + - name: "PreLTCGOptRef" + href: ../build-insights/reference/sdk/cpp-event-data-types/pre-ltcg-opt-ref.md + - name: "RawEvent" + href: ../build-insights/reference/sdk/cpp-event-data-types/raw-event.md + - name: "SimpleEvent" + href: ../build-insights/reference/sdk/cpp-event-data-types/simple-event.md + - name: "SymbolName" + href: ../build-insights/reference/sdk/cpp-event-data-types/symbol-name.md + - name: "TemplateInstantiation" + href: ../build-insights/reference/sdk/cpp-event-data-types/template-instantiation.md + - name: "TemplateInstantiationGroup" + href: ../build-insights/reference/sdk/cpp-event-data-types/template-instantiation-group.md + - name: "Thread" + href: ../build-insights/reference/sdk/cpp-event-data-types/thread.md + - name: "TopDown" + href: ../build-insights/reference/sdk/cpp-event-data-types/top-down.md + - name: "TraceInfo" + href: ../build-insights/reference/sdk/cpp-event-data-types/trace-info.md + - name: "TranslationUnitType" + href: ../build-insights/reference/sdk/cpp-event-data-types/translation-unit-type.md + - name: "WholeProgramAnalysis" + href: ../build-insights/reference/sdk/cpp-event-data-types/whole-program-analysis.md + - name: "Event data types (C)" + items: + - name: "CL_PASS_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/cl-pass-data-struct.md + - name: "EVENT_COLLECTION_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/event-collection-data-struct.md + - name: "EVENT_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/event-data-struct.md + - name: "EVENT_ID" + href: ../build-insights/reference/sdk/c-event-data-types/event-id-enum.md + - name: "FILE_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/file-data-struct.md + - name: "FILE_TYPE_CODE" + href: ../build-insights/reference/sdk/c-event-data-types/file-type-code-enum.md + - name: "FRONT_END_FILE_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/front-end-file-data-struct.md + - name: "FUNCTION_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/function-data-struct.md + - name: "FUNCTION_FORCE_INLINEE_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/function-force-inlinee-data-struct.md + - name: "INVOCATION_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/invocation-data-struct.md + - name: "INVOCATION_VERSION_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/invocation-version-data-struct.md + - name: "MSVC_TOOL_CODE" + href: ../build-insights/reference/sdk/c-event-data-types/msvc-tool-code-enum.md + - name: "NAME_VALUE_PAIR_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/name-value-pair-data-struct.md + - name: "SYMBOL_NAME_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/symbol-name-data-struct.md + - name: "TEMPLATE_INSTANTIATION_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/template-instantiation-data-struct.md + - name: "TEMPLATE_INSTANTIATION_KIND_CODE" + href: ../build-insights/reference/sdk/c-event-data-types/template-instantiation-kind-code-enum.md + - name: "TRACE_INFO_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/trace-info-data-struct.md + - name: "TRANSLATION_UNIT_PASS_CODE" + href: ../build-insights/reference/sdk/c-event-data-types/translation-unit-pass-code-enum.md + - name: "TRANSLATION_UNIT_TYPE" + href: ../build-insights/reference/sdk/c-event-data-types/translation-unit-type.md + - name: "TRANSLATION_UNIT_TYPE_DATA" + href: ../build-insights/reference/sdk/c-event-data-types/translation-unit-type-data.md + - name: "Other types" + items: + - name: "ANALYSIS_CALLBACKS" + href: ../build-insights/reference/sdk/other-types/analysis-callbacks-struct.md + - name: "AnalysisControl" + href: ../build-insights/reference/sdk/other-types/analysis-control-enum-class.md + - name: "ANALYSIS_DESCRIPTOR" + href: ../build-insights/reference/sdk/other-types/analysis-descriptor-struct.md + - name: "CALLBACK_CODE" + href: ../build-insights/reference/sdk/other-types/callback-code-enum.md + - name: "IAnalyzer" + href: ../build-insights/reference/sdk/other-types/ianalyzer-class.md + - name: "IRelogger" + href: ../build-insights/reference/sdk/other-types/irelogger-class.md + - name: "OnAnalysisEventFunc" + href: ../build-insights/reference/sdk/other-types/on-analysis-event-func-typedef.md + - name: "OnBeginEndPassFunc" + href: ../build-insights/reference/sdk/other-types/on-begin-end-pass-func-typedef.md + - name: "OnRelogEventFunc" + href: ../build-insights/reference/sdk/other-types/on-relog-event-func-typedef.md + - name: "OnTraceInfoFunc" + href: ../build-insights/reference/sdk/other-types/on-trace-info-func-typedef.md + - name: "RELOG_CALLBACKS" + href: ../build-insights/reference/sdk/other-types/relog-callbacks-struct.md + - name: "RELOG_DESCRIPTOR" + href: ../build-insights/reference/sdk/other-types/relog-descriptor-struct.md + - name: "RELOG_RETENTION_SYSTEM_EVENT_FLAGS" + href: ../build-insights/reference/sdk/other-types/relog-retention-system-event-flags-constants.md + - name: "RESULT_CODE" + href: ../build-insights/reference/sdk/other-types/result-code-enum.md + - name: "TRACING_SESSION_MSVC_EVENT_FLAGS" + href: ../build-insights/reference/sdk/other-types/tracing-session-msvc-event-flags-constants.md + - name: "TRACING_SESSION_OPTIONS" + href: ../build-insights/reference/sdk/other-types/tracing-session-options-struct.md + - name: "TRACING_SESSION_STATISTICS" + href: ../build-insights/reference/sdk/other-types/tracing-session-statistics-struct.md + - name: "TRACING_SESSION_SYSTEM_EVENT_FLAGS" + href: ../build-insights/reference/sdk/other-types/tracing-session-system-event-flags-constants.md From f5b2606b9b2e2475107322221a94908546757309 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 23 Apr 2024 13:38:11 -0700 Subject: [PATCH 0147/1239] fix --- docs/build-insights/index.yml | 2 +- .../tutorials/build-insights-function-view.md | 6 +++--- .../tutorials/build-insights-included-files-view.md | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/build-insights/index.yml b/docs/build-insights/index.yml index 67ebc1a5b2..876c27600a 100644 --- a/docs/build-insights/index.yml +++ b/docs/build-insights/index.yml @@ -28,7 +28,7 @@ landingContent: - text: Build Insights function view url: tutorials/build-insights-function-view.md - text: Build Insights included files view - url: tutorials/included-files-view.md + url: tutorials/build-insights-included-files-view.md - text: vcperf and Windows Performance Analyzer url: tutorials/vcperf-and-wpa.md - text: Windows Performance Analyzer basics diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 2366b94312..f592a2bfff 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -1,7 +1,7 @@ --- title: "Tutorial: Build Insights functions view" description: "Tutorial on how to use Build Insights function view to troubleshoot build time and forceinlines function inlining costs." -ms.date: 4/15/2024 +ms.date: 4/25/2024 helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] --- # Tutorial: Use Build Insights to troubleshoot build time and function inlining problems @@ -23,7 +23,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights is a tool, now integrated into Visual Studio, designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). +Build Insights, now integrated into Visual Studio, designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. @@ -76,7 +76,7 @@ You can search for a specific function by using the **Filter Functions** box. If ## Improve build time and function inlining -In this case, we can see that the `foo` function is taking the most time to compile. Investigating further, by opening the function, we see that the `foo2` function is marked with `__forceinline`. This function is inlined into many other functions, which is causing the build time to increase. We can remove the `__forceinline` directive from the `foo` function to reduce the build time. +We can see that the `foo` function is taking the most time to compile. Investigating further, by opening the function, we see that the `foo2` function is marked with `__forceinline`. This function is inlined into many other functions, which is causing the build time to increase. We can remove the `__forceinline` directive from the `foo` function to reduce the build time. ## Troubleshooting diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 61c9ca07f5..47a553c1fa 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -6,7 +6,7 @@ helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree --- # Tutorial: Use Build Insights to troubleshoot #include files on build time -Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of #include files on build time. +Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on build time. ## Prerequisites @@ -23,7 +23,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Included ** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). +Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Included** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). Parsing header files has an impact on build time. When a large header file is repeatedly parsed, there is an even greater impact on compile time. The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. @@ -87,7 +87,6 @@ show how to build a precompiled header or link to topic for it - this topic shows how to build PCH: https://devblogs.microsoft.com/cppblog/faster-builds-with-pch-suggestions-from-c-build-insights/ Talk about header units - ## Troubleshooting - If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. From d9dfa7ca661bdeba2588692662b9a1b172f56177 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 23 Apr 2024 13:55:47 -0700 Subject: [PATCH 0148/1239] combine branches --- docs/build-insights/toc.yml | 5 + docs/index.yml | 248 +++++++++++++++++++++++++++------ docs/toc.yml | 268 ------------------------------------ 3 files changed, 210 insertions(+), 311 deletions(-) delete mode 100644 docs/toc.yml diff --git a/docs/build-insights/toc.yml b/docs/build-insights/toc.yml index 30f047a6e9..5e1b10f294 100644 --- a/docs/build-insights/toc.yml +++ b/docs/build-insights/toc.yml @@ -6,6 +6,11 @@ items: - name: "Tutorials" expanded: true items: + - name: "Build Insights: Functions view" + href: ../build-insights/tutorials/build-insights-function-view.md + - name: "Build Insights: Included files view" + href: ../build-insights/tutorials/build-insights-included-files-view.md + - name: "Build Insights: Included Files view" - name: "vcperf and Windows Performance Analyzer" href: ../build-insights/tutorials/vcperf-and-wpa.md - name: "Windows Performance Analyzer basics" diff --git a/docs/index.yml b/docs/index.yml index 0fea3f5319..ef1c16e4cf 100644 --- a/docs/index.yml +++ b/docs/index.yml @@ -1,51 +1,213 @@ -### YamlMime:Landing -title: C++ Build Insights | Automate build tool chain analysis # < 60 chars -summary: Use C++ Build Insights for real-time and automated build analysis and optimization. # < 160 chars - +### YamlMime:Hub +title: Microsoft C++, C, and Assembler documentation +summary: Learn how to use C++, C, and assembly language to develop applications, services, and tools for your platforms and devices. +# brand: aspnet | azure | dotnet | dynamics | m365 | ms-graph | office | power-platform | sql | sql-server | vs | visual-studio | windows | xamarin +brand: visual-studio metadata: - title: C++ Build Insights - description: Learn how to use C++ Build Insights to analyze and optimize your builds. - ms.topic: landing-page + title: Microsoft C/C++ Documentation + description: Learn how to use C++ to develop applications, services, and tools for your platforms and devices. + ms.service: visual-cpp + ms.topic: hub-page author: tylermsft ms.author: twhitney - ms.date: 05/26/2020 + ms.date: 06/04/2020 ms.custom: intro-landing-hub -# linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new +# highlightedContent section (optional) +# Maximum of 8 items +highlightedContent: +# itemType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new + items: + # Card + - title: Install Visual Studio and choose your C++ workloads + itemType: download + url: build/vscpp-step-0-installation.md + # Card + - title: Welcome to C++ in Visual Studio + itemType: overview + url: overview/visual-cpp-in-visual-studio.md + # Card + - title: Get started with Visual Studio and C++ + itemType: get-started + url: get-started/tutorial-console-cpp.md + # Card + - title: What's new for C++ in Visual Studio + itemType: whats-new + url: overview/what-s-new-for-visual-cpp-in-visual-studio.md + +# conceptualContent section (optional) +conceptualContent: +# itemType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new + title: Get started with C++ and C + items: + # Card + - title: Learn to use the Visual Studio IDE + links: + - text: Start a guided tour of Visual Studio + url: /visualstudio/ide/visual-studio-ide + itemType: overview + - text: Open code from a repo + url: /visualstudio/get-started/tutorial-open-project-from-repo + itemType: tutorial + - text: Write and edit code + url: /visualstudio/ide/index-writing-code + itemType: tutorial + - text: Build your code + url: /visualstudio/ide/compiling-and-building-in-visual-studio + itemType: tutorial + - text: Debug your code + itemType: tutorial + url: /visualstudio/debugger/quickstart-debug-with-cplusplus + - text: Test your code + itemType: tutorial + url: /visualstudio/test/writing-unit-tests-for-c-cpp + # Card + - title: Write C++ and C apps in Visual Studio + links: + - text: Create a console calculator app + url: get-started/tutorial-console-cpp.md + itemType: tutorial + - text: Create a Windows Desktop app with Win32 + url: windows/walkthrough-creating-windows-desktop-applications-cpp.md + itemType: tutorial + - text: Create a Windows Desktop app with MFC + url: mfc/reference/creating-an-mfc-application.md + itemType: tutorial + - text: Create a Windows DLL + url: build/walkthrough-creating-and-using-a-dynamic-link-library-cpp.md + itemType: tutorial + - text: Create a static library + url: build/walkthrough-creating-and-using-a-static-library-cpp.md + itemType: tutorial + - text: Create a .NET component + url: dotnet/walkthrough-compiling-a-cpp-program-that-targets-the-clr-in-visual-studio.md + itemType: tutorial + - text: Create a Universal Windows Platform app + url: /windows/uwp/cpp-and-winrt-apis/get-started + itemType: tutorial + # Card + - title: Use the command-line tools + links: + - text: Compile C++ code + url: build/walkthrough-compiling-a-native-cpp-program-on-the-command-line.md + itemType: tutorial + - text: Compile C code + url: build/walkthrough-compile-a-c-program-on-the-command-line.md + itemType: tutorial + - text: Compile C++/CX + url: build/walkthrough-compiling-a-cpp-cx-program-on-the-command-line.md + itemType: tutorial + - text: Compile C++/CLI + url: build/walkthrough-compiling-a-cpp-cli-program-on-the-command-line.md + itemType: tutorial + # Card + - title: Use C++ and C in Visual Studio Code + links: + - text: Get started with Visual Studio Code + url: https://code.visualstudio.com/docs + itemType: tutorial + - text: Install the Microsoft C/C++ extension + url: https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools + itemType: tutorial + - text: Use Microsoft C/C++ in Windows + url: https://code.visualstudio.com/docs/cpp/config-msvc + itemType: tutorial + - text: Use C++ in the Windows Subsystem for Linux + url: https://code.visualstudio.com/docs/cpp/config-wsl + itemType: tutorial + - text: Use C++ on Linux + url: https://code.visualstudio.com/docs/cpp/config-linux + itemType: tutorial + - text: Use C++ on macOS + url: https://code.visualstudio.com/docs/cpp/config-clang-mac + itemType: tutorial -landingContent: -# Cards and links should be based on top customer tasks or top subjects -# Start card title with a verb - # Card (optional) - - title: Learn how your build performs - linkLists: - - linkListType: overview - links: - - text: Get started with C++ Build Insights - url: get-started-with-cpp-build-insights.md - - linkListType: tutorial - links: - - text: Build Insights included files view - url: tutorials/included-files-view.md - - text: vcperf and Windows Performance Analyzer - url: tutorials/vcperf-and-wpa.md - - text: Windows Performance Analyzer basics - url: tutorials/wpa-basics.md - # Card (optional) - - title: Measure build performance - linkLists: - - linkListType: reference - links: - - text: vcperf commands - url: reference/vcperf-commands.md - - text: Windows Performance Analyzer views - url: reference/wpa-views.md +tools: + title: Languages and frameworks + items: + - title: C++ + imageSrc: /media/logos/logo_Cplusplus.svg + url: cpp/index.yml + - title: C + imageSrc: /media/logos/logo_C.svg + url: c-language/index.yml + - title: Microsoft Assembler + imageSrc: media/index/logo-asm.svg + url: intrinsics/index.yml + - title: C++/CX for Windows Runtime + imageSrc: /media/logos/logo_Cplusplus.svg + url: cppcx/visual-c-language-reference-c-cx.md + - title: C++/CLI for .NET + imageSrc: /media/logos/logo_Cplusplus.svg + url: dotnet/dotnet-programming-with-cpp-cli-visual-cpp.md + - title: Active Template Library (ATL) + imageSrc: media/index/logo-atl.svg + url: atl/atl-com-desktop-components.md + - title: Microsoft Foundation Classes (MFC) + imageSrc: media/index/logo-mfc.svg + url: mfc/mfc-desktop-applications.md + - title: C++/WinRT for Windows Runtime + imageSrc: /media/logos/logo_Cplusplus.svg + url: /windows/uwp/cpp-and-winrt-apis/ - # Card - - title: Create your own build performance analysis - linkLists: - - linkListType: reference - links: - - text: SDK reference - url: reference/sdk/overview.md +# additionalContent section (optional) +# Card with links style +additionalContent: + sections: + - title: C++ and C workloads, features, and libraries + summary: Develop for your choice of platforms with Visual Studio tools. + items: + # Card + - title: Workloads + links: + - text: Universal Windows Platform development + url: cppcx/universal-windows-apps-cpp.md + - text: Windows Desktop development + url: windows/overview-of-windows-programming-in-cpp.md + - text: Linux development + url: linux/index.yml + - text: Embedded development + url: embedded/index.yml + - text: Mobile development + url: cross-platform/index.yml + - text: Game development + url: /windows/uwp/gaming/e2e/ + # Card + - title: Features + links: + - text: Build reliable and secure programs + url: code-quality/build-reliable-secure-programs.md + - text: Edit and refactor code + url: ide/writing-and-refactoring-code-cpp.md + - text: Build code projects + url: build/projects-and-build-systems-cpp.md + - text: Debug your code + url: /visualstudio/debugger/debugging-native-code + - text: Analyze your code + url: code-quality/index.yml + - text: Profile app performance + url: /visualstudio/profiling + - text: Port and upgrade code + url: porting/visual-cpp-porting-and-upgrading-guide.md + - text: Sanitize code for bugs + url: sanitizers/index.yml + # Card + - title: Libraries + links: + - text: C++ standard library reference + url: standard-library/cpp-standard-library-reference.md + - text: C runtime library reference + url: c-runtime-library/c-run-time-library-reference.md + - text: MFC and ATL Windows Desktop libraries + url: mfc/mfc-and-atl.md + - text: Parallel programming libraries + url: parallel/parallel-programming-in-visual-cpp.md + - text: Cloud and networking libraries + url: cloud/cloud-and-web-programming-in-visual-cpp.md + - text: Universal Windows Platform libraries + url: cppcx/namespaces-reference-c-cx.md + - text: vcpkg package manager + url: /vcpkg/ + # footer (optional) + footer: "[Microsoft Learn Q&A](/answers/topics/c%2B%2B.html) - [C++ Team Blog](https://devblogs.microsoft.com/cppblog/) - [Twitter](https://twitter.com/visualc) - [Developer Community](https://aka.ms/vsfeedback/browsecpp) - [Stack Overflow](https://stackoverflow.com/questions/tagged/visual-c++) - [How to report an issue](overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) - [Suggest a feature](https://aka.ms/feedback/suggest?space=62) - Contribute to C++ docs: Read our [contributor guide](/contribute/)." diff --git a/docs/toc.yml b/docs/toc.yml deleted file mode 100644 index 888321af7a..0000000000 --- a/docs/toc.yml +++ /dev/null @@ -1,268 +0,0 @@ -items: -- name: "C++ Build Insights" - href: ../build-insights/index.yml -- name: "Get started with C++ Build Insights" - href: ../build-insights/get-started-with-cpp-build-insights.md -- name: "Tutorials" - expanded: true - items: - - name: "Build Insights: Functions view" - href: ../build-insights/tutorials/build-insights-function-view.md - - name: "Build Insights: Included Files view" - href: ../build-insights/tutorials/build-insights-included-files-view.md - - name: "Build Insights: Included Files view" - href: ../build-insights/tutorials/build-insights-included-files-view.md - - name: "vcperf and Windows Performance Analyzer" - href: ../build-insights/tutorials/vcperf-and-wpa.md - - name: "Windows Performance Analyzer basics" - href: ../build-insights/tutorials/wpa-basics.md -- name: "Reference" - items: - - name: "vcperf commands" - href: ../build-insights/reference/vcperf-commands.md - - name: "Windows Performance Analyzer views" - href: ../build-insights/reference/wpa-views.md - - name: "C++ Build Insights SDK" - items: - - name: "Overview" - href: ../build-insights/reference/sdk/overview.md - - name: "Event table" - href: ../build-insights/reference/sdk/event-table.md - - name: "Functions" - items: - - name: "Analyze" - href: ../build-insights/reference/sdk/functions/analyze.md - - name: "AnalyzeA" - href: ../build-insights/reference/sdk/functions/analyze-a.md - - name: "AnalyzeW" - href: ../build-insights/reference/sdk/functions/analyze-w.md - - name: "InjectEvent" - href: ../build-insights/reference/sdk/functions/inject-event.md - - name: "MakeDynamicAnalyzerGroup" - href: ../build-insights/reference/sdk/functions/make-dynamic-analyzer-group.md - - name: "MakeDynamicReloggerGroup" - href: ../build-insights/reference/sdk/functions/make-dynamic-relogger-group.md - - name: "MakeStaticAnalyzerGroup" - href: ../build-insights/reference/sdk/functions/make-static-analyzer-group.md - - name: "MakeStaticReloggerGroup" - href: ../build-insights/reference/sdk/functions/make-static-relogger-group.md - - name: "MatchEvent" - href: ../build-insights/reference/sdk/functions/match-event.md - - name: "MatchEventInMemberFunction" - href: ../build-insights/reference/sdk/functions/match-event-in-member-function.md - - name: "MatchEventStack" - href: ../build-insights/reference/sdk/functions/match-event-stack.md - - name: "MatchEventStackInMemberFunction" - href: ../build-insights/reference/sdk/functions/match-event-stack-in-member-function.md - - name: "Relog" - href: ../build-insights/reference/sdk/functions/relog.md - - name: "RelogA" - href: ../build-insights/reference/sdk/functions/relog-a.md - - name: "RelogW" - href: ../build-insights/reference/sdk/functions/relog-w.md - - name: "StartTracingSession" - href: ../build-insights/reference/sdk/functions/start-tracing-session.md - - name: "StartTracingSessionA" - href: ../build-insights/reference/sdk/functions/start-tracing-session-a.md - - name: "StartTracingSessionW" - href: ../build-insights/reference/sdk/functions/start-tracing-session-w.md - - name: "StopAndAnalyzeTracingSession" - href: ../build-insights/reference/sdk/functions/stop-and-analyze-tracing-session.md - - name: "StopAndAnalyzeTracingSessionA" - href: ../build-insights/reference/sdk/functions/stop-and-analyze-tracing-session-a.md - - name: "StopAndAnalyzeTracingSessionW" - href: ../build-insights/reference/sdk/functions/stop-and-analyze-tracing-session-w.md - - name: "StopAndRelogTracingSession" - href: ../build-insights/reference/sdk/functions/stop-and-relog-tracing-session.md - - name: "StopAndRelogTracingSessionA" - href: ../build-insights/reference/sdk/functions/stop-and-relog-tracing-session-a.md - - name: "StopAndRelogTracingSessionW" - href: ../build-insights/reference/sdk/functions/stop-and-relog-tracing-session-w.md - - name: "StopTracingSession" - href: ../build-insights/reference/sdk/functions/stop-tracing-session.md - - name: "StopTracingSessionA" - href: ../build-insights/reference/sdk/functions/stop-tracing-session-a.md - - name: "StopTracingSessionW" - href: ../build-insights/reference/sdk/functions/stop-tracing-session-w.md - - name: "Event data types (C++)" - items: - - name: "Activity" - href: ../build-insights/reference/sdk/cpp-event-data-types/activity.md - - name: "BackEndPass" - href: ../build-insights/reference/sdk/cpp-event-data-types/back-end-pass.md - - name: "BottomUp" - href: ../build-insights/reference/sdk/cpp-event-data-types/bottom-up.md - - name: "C1DLL" - href: ../build-insights/reference/sdk/cpp-event-data-types/c1-dll.md - - name: "C2DLL" - href: ../build-insights/reference/sdk/cpp-event-data-types/c2-dll.md - - name: "CodeGeneration" - href: ../build-insights/reference/sdk/cpp-event-data-types/code-generation.md - - name: "CommandLine" - href: ../build-insights/reference/sdk/cpp-event-data-types/command-line.md - - name: "Compiler" - href: ../build-insights/reference/sdk/cpp-event-data-types/compiler.md - - name: "CompilerPass" - href: ../build-insights/reference/sdk/cpp-event-data-types/compiler-pass.md - - name: "EnvironmentVariable" - href: ../build-insights/reference/sdk/cpp-event-data-types/environment-variable.md - - name: "Event" - href: ../build-insights/reference/sdk/cpp-event-data-types/event.md - - name: "EventGroup" - href: ../build-insights/reference/sdk/cpp-event-data-types/event-group.md - - name: "EventStack" - href: ../build-insights/reference/sdk/cpp-event-data-types/event-stack.md - - name: "ExecutableImageOutput" - href: ../build-insights/reference/sdk/cpp-event-data-types/executable-image-output.md - - name: "ExpOutput" - href: ../build-insights/reference/sdk/cpp-event-data-types/exp-output.md - - name: "FileInput" - href: ../build-insights/reference/sdk/cpp-event-data-types/file-input.md - - name: "FileOutput" - href: ../build-insights/reference/sdk/cpp-event-data-types/file-output.md - - name: "ForceInlinee" - href: ../build-insights/reference/sdk/cpp-event-data-types/force-inlinee.md - - name: "FrontEndFile" - href: ../build-insights/reference/sdk/cpp-event-data-types/front-end-file.md - - name: "FrontEndFileGroup" - href: ../build-insights/reference/sdk/cpp-event-data-types/front-end-file-group.md - - name: "FrontEndPass" - href: ../build-insights/reference/sdk/cpp-event-data-types/front-end-pass.md - - name: "Function" - href: ../build-insights/reference/sdk/cpp-event-data-types/function.md - - name: "HeaderUnit" - href: ../build-insights/reference/sdk/cpp-event-data-types/header-unit.md - - name: "ImpLibOutput" - href: ../build-insights/reference/sdk/cpp-event-data-types/imp-lib-output.md - - name: "Invocation" - href: ../build-insights/reference/sdk/cpp-event-data-types/invocation.md - - name: "InvocationGroup" - href: ../build-insights/reference/sdk/cpp-event-data-types/invocation-group.md - - name: "LibOutput" - href: ../build-insights/reference/sdk/cpp-event-data-types/lib-output.md - - name: "Linker" - href: ../build-insights/reference/sdk/cpp-event-data-types/linker.md - - name: "LinkerGroup" - href: ../build-insights/reference/sdk/cpp-event-data-types/linker-group.md - - name: "LinkerPass" - href: ../build-insights/reference/sdk/cpp-event-data-types/linker-pass.md - - name: "LTCG" - href: ../build-insights/reference/sdk/cpp-event-data-types/ltcg.md - - name: "Module" - href: ../build-insights/reference/sdk/cpp-event-data-types/module.md - - name: "ObjOutput" - href: ../build-insights/reference/sdk/cpp-event-data-types/obj-output.md - - name: "OptICF" - href: ../build-insights/reference/sdk/cpp-event-data-types/opt-icf.md - - name: "OptLBR" - href: ../build-insights/reference/sdk/cpp-event-data-types/opt-lbr.md - - name: "OptRef" - href: ../build-insights/reference/sdk/cpp-event-data-types/opt-ref.md - - name: "Pass1" - href: ../build-insights/reference/sdk/cpp-event-data-types/pass1.md - - name: "Pass2" - href: ../build-insights/reference/sdk/cpp-event-data-types/pass2.md - - name: "PrecompiledHeader" - href: ../build-insights/reference/sdk/cpp-event-data-types/precompiled-header.md - - name: "PreLTCGOptRef" - href: ../build-insights/reference/sdk/cpp-event-data-types/pre-ltcg-opt-ref.md - - name: "RawEvent" - href: ../build-insights/reference/sdk/cpp-event-data-types/raw-event.md - - name: "SimpleEvent" - href: ../build-insights/reference/sdk/cpp-event-data-types/simple-event.md - - name: "SymbolName" - href: ../build-insights/reference/sdk/cpp-event-data-types/symbol-name.md - - name: "TemplateInstantiation" - href: ../build-insights/reference/sdk/cpp-event-data-types/template-instantiation.md - - name: "TemplateInstantiationGroup" - href: ../build-insights/reference/sdk/cpp-event-data-types/template-instantiation-group.md - - name: "Thread" - href: ../build-insights/reference/sdk/cpp-event-data-types/thread.md - - name: "TopDown" - href: ../build-insights/reference/sdk/cpp-event-data-types/top-down.md - - name: "TraceInfo" - href: ../build-insights/reference/sdk/cpp-event-data-types/trace-info.md - - name: "TranslationUnitType" - href: ../build-insights/reference/sdk/cpp-event-data-types/translation-unit-type.md - - name: "WholeProgramAnalysis" - href: ../build-insights/reference/sdk/cpp-event-data-types/whole-program-analysis.md - - name: "Event data types (C)" - items: - - name: "CL_PASS_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/cl-pass-data-struct.md - - name: "EVENT_COLLECTION_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/event-collection-data-struct.md - - name: "EVENT_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/event-data-struct.md - - name: "EVENT_ID" - href: ../build-insights/reference/sdk/c-event-data-types/event-id-enum.md - - name: "FILE_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/file-data-struct.md - - name: "FILE_TYPE_CODE" - href: ../build-insights/reference/sdk/c-event-data-types/file-type-code-enum.md - - name: "FRONT_END_FILE_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/front-end-file-data-struct.md - - name: "FUNCTION_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/function-data-struct.md - - name: "FUNCTION_FORCE_INLINEE_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/function-force-inlinee-data-struct.md - - name: "INVOCATION_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/invocation-data-struct.md - - name: "INVOCATION_VERSION_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/invocation-version-data-struct.md - - name: "MSVC_TOOL_CODE" - href: ../build-insights/reference/sdk/c-event-data-types/msvc-tool-code-enum.md - - name: "NAME_VALUE_PAIR_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/name-value-pair-data-struct.md - - name: "SYMBOL_NAME_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/symbol-name-data-struct.md - - name: "TEMPLATE_INSTANTIATION_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/template-instantiation-data-struct.md - - name: "TEMPLATE_INSTANTIATION_KIND_CODE" - href: ../build-insights/reference/sdk/c-event-data-types/template-instantiation-kind-code-enum.md - - name: "TRACE_INFO_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/trace-info-data-struct.md - - name: "TRANSLATION_UNIT_PASS_CODE" - href: ../build-insights/reference/sdk/c-event-data-types/translation-unit-pass-code-enum.md - - name: "TRANSLATION_UNIT_TYPE" - href: ../build-insights/reference/sdk/c-event-data-types/translation-unit-type.md - - name: "TRANSLATION_UNIT_TYPE_DATA" - href: ../build-insights/reference/sdk/c-event-data-types/translation-unit-type-data.md - - name: "Other types" - items: - - name: "ANALYSIS_CALLBACKS" - href: ../build-insights/reference/sdk/other-types/analysis-callbacks-struct.md - - name: "AnalysisControl" - href: ../build-insights/reference/sdk/other-types/analysis-control-enum-class.md - - name: "ANALYSIS_DESCRIPTOR" - href: ../build-insights/reference/sdk/other-types/analysis-descriptor-struct.md - - name: "CALLBACK_CODE" - href: ../build-insights/reference/sdk/other-types/callback-code-enum.md - - name: "IAnalyzer" - href: ../build-insights/reference/sdk/other-types/ianalyzer-class.md - - name: "IRelogger" - href: ../build-insights/reference/sdk/other-types/irelogger-class.md - - name: "OnAnalysisEventFunc" - href: ../build-insights/reference/sdk/other-types/on-analysis-event-func-typedef.md - - name: "OnBeginEndPassFunc" - href: ../build-insights/reference/sdk/other-types/on-begin-end-pass-func-typedef.md - - name: "OnRelogEventFunc" - href: ../build-insights/reference/sdk/other-types/on-relog-event-func-typedef.md - - name: "OnTraceInfoFunc" - href: ../build-insights/reference/sdk/other-types/on-trace-info-func-typedef.md - - name: "RELOG_CALLBACKS" - href: ../build-insights/reference/sdk/other-types/relog-callbacks-struct.md - - name: "RELOG_DESCRIPTOR" - href: ../build-insights/reference/sdk/other-types/relog-descriptor-struct.md - - name: "RELOG_RETENTION_SYSTEM_EVENT_FLAGS" - href: ../build-insights/reference/sdk/other-types/relog-retention-system-event-flags-constants.md - - name: "RESULT_CODE" - href: ../build-insights/reference/sdk/other-types/result-code-enum.md - - name: "TRACING_SESSION_MSVC_EVENT_FLAGS" - href: ../build-insights/reference/sdk/other-types/tracing-session-msvc-event-flags-constants.md - - name: "TRACING_SESSION_OPTIONS" - href: ../build-insights/reference/sdk/other-types/tracing-session-options-struct.md - - name: "TRACING_SESSION_STATISTICS" - href: ../build-insights/reference/sdk/other-types/tracing-session-statistics-struct.md - - name: "TRACING_SESSION_SYSTEM_EVENT_FLAGS" - href: ../build-insights/reference/sdk/other-types/tracing-session-system-event-flags-constants.md From 692a732ff4305ca2e286bb9985868a263225cce7 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 23 Apr 2024 16:53:31 -0700 Subject: [PATCH 0149/1239] draft --- .../tutorials/build-insights-function-view.md | 8 +- .../build-insights-included-files-view.md | 86 ++++++++++++------ .../media/Included-files-expanded-view.png | Bin 0 -> 44073 bytes .../tutorials/media/build-options.png | Bin 0 -> 6979 bytes .../media/include-tree-view-expanded.png | Bin 0 -> 50016 bytes .../tutorials/media/include-tree-view.png | Bin 0 -> 34633 bytes .../tutorials/media/included-files-view.png | Bin 0 -> 60362 bytes 7 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 docs/build-insights/tutorials/media/Included-files-expanded-view.png create mode 100644 docs/build-insights/tutorials/media/build-options.png create mode 100644 docs/build-insights/tutorials/media/include-tree-view-expanded.png create mode 100644 docs/build-insights/tutorials/media/include-tree-view.png create mode 100644 docs/build-insights/tutorials/media/included-files-view.png diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index f592a2bfff..73dcefad28 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -6,7 +6,7 @@ helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build t --- # Tutorial: Use Build Insights to troubleshoot build time and function inlining problems -Use Build Insights **Functions** view to troubleshoot the impact of function inlining on build time. +Use Build Insights **Functions** view to troubleshoot the impact of function inlining on build time in your C++ projects. ## Prerequisites @@ -23,7 +23,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). +Build Insights, now integrated into Visual Studio, designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. @@ -48,9 +48,9 @@ Set the optimization level to maximum optimizations: - Click **OK** to close the dialog. -## Run build insights +## Run build insights -On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. Or, you can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. +On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. You can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. When the build finishes, an Event Trace Log (ETL) file opens similar to the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. This file shows the time spent processing `#include` files, the build time for each function, and how much `__forceinline` impacted the size of the function. diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 47a553c1fa..070abefe63 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -6,7 +6,7 @@ helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree --- # Tutorial: Use Build Insights to troubleshoot #include files on build time -Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on build time. +Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on build time in your C and C++ projects. ## Prerequisites @@ -23,49 +23,71 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides various analytics such as **Included** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). +Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file as well as a view of which header files are included by other header files. -Parsing header files has an impact on build time. When a large header file is repeatedly parsed, there is an even greater impact on compile time. The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. - -In this article, learn how to use the Build Insights **Functions** view to identify bottlenecks in your build process and improve build time and function inlining. +In this article, learn how to use the Build Insights **Included Files** view to identify bottlenecks in your build process and improve build time. ## Set build options -To measure the results of `__forceinline`, use a **Release** build where optimizations for `__forceinline` impact release build times the most. Set the build for **Release** and **x64**: +First, set the build options for the type of build you want to measure. For example, if you are most concerned about your x64 debug build times set the build for **Debug** and **x64**: -- In the **Solution Configurations** dropdown, choose **Release**. +- In the **Solution Configurations** dropdown, choose **Debug**. - In the **Solution Platforms** dropdown, choose **x64**. -:::image type="content" source="./media/" alt-text="Screenshot showing the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64"::: - -Set the optimization level to maximum optimizations: - -- In the **Solution Explorer**, right-click the project name and select **Properties**. -- In the project properties, navigate to **C/C++** > **Optimization**. -- Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) (/O2)**. - -:::image type="content" source="./media/" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: +:::image type="complex" source="./media/build-options.png" alt-text="Screenshot showing the Solution Configuration dropdowns" with options for Debug, Release. The Solution Platform dropdown is set to x64"::: +The Solution Configuration dropdown is shown with options for Debug and Release. The Solution Platform dropdown is set to x64 +:::image-end::: - Click **OK** to close the dialog. ## Run build insights -On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. Or, you can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. +On a project of your choosing, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. You can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. -When the build finishes, an Event Trace Log (ETL) file opens similar to the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. This file shows the time spent processing `#include` files, the build time for each function, and how much `__forceinline` impacted the size of the function. +When the build finishes, an Event Trace Log (ETL) file opens that will be resemble the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. -:::image type="complex" source="./media/" alt-text="alt text stuff"::: -big ole’ long description +## Included Files View + +The ETL file has tabs for the different Build Insight views. Choose the **Include Files** tab. This view shows the time spent processing `#include` files. For this example, the first file, `iostream`, is particularly expensive to parse in terms of time. Files that take up 10% or more of the build time are marked with a flame symbol to indicate that it is priority file to investigate. The **Time** column shows that 2.937 seconds were spent parsing this file altogether, which is 11.1% of the overall time spent parsing files. It was parsed 6 times. + +:::image type="complex" source="./media/included-files-view.png" alt-text="Screenshot of the included files view"::: +An example ETL file showing the includes files for a sample project. In the file path column, some files are shown as being particularly expensive to parse in terms of time. They have a fire icon next to them to indicate that they are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed." :::image-end::: -## Included Files View +Click the chevron next to a file to expand the view to show which files include this file. This can give you an idea about how 'popular' this header file is. In this example, `iostream` is included by `main.cpp`, `renderer.cpp`, and it was included 4 times by `Utils.h` What this suggests is that `iostream` is a common header file that is included by many other files. If you can reduce the number of times `iostream` is parsed, you can improve your build time. We'll talk about how to do that in the next section. + +The next file in the list is `istream`. Expand that file to see that it is included by `iostream` six times. This increases our desire to find a way to reduce how many times `iostream` is parsed, because that would also reduce the number of times `istream` is parsed, which would improve build time given that parsing it also consumes 11.1% of the overall build time. -time is aggregate time spent parsing the file +:::image type="complex" source="./media/included-files-expanded-view.png" alt-text="Screenshot of the included files view"::: +An example ETL file showing the includes files for a sample project. In the file path column, some files are shown as being particularly expensive to parse in terms of time. They have a fire icon next to them to indicate that they are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed." +:::image-end::: +We could likewise examine the other files in the list to see if there are other common header files that are parsed multiple times, and consider ways to reduce the number of times they are parsed. ## Include Tree View -right click on a file to: +The **Include Tree** view shows the hierarchy of `#include` files. It shows which files include other files, and which files are included by other files. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. Select the **Include Tree** tab in the ETL file to see the Include Tree view: + +:::image type="complex" source="./media/include-tree-view.png" alt-text="Screenshot of the Include Tree view"::: +An example ETL file showing the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. +:::image-end::: + +In this example, we see that the file `CollisionDetector.cpp` includes two files (as indicated in the **Include Count** column) and took 1.439 seconds (or 5.4% of the overall build time) to parse. Select the chevron next to `CollisionDetector.cpp` to see what files it includes. We can do this recursively. For example, `CollisionDetector.cpp` includes `CollisionDetector.h`, which includes `PhysicsObject.h` and `vector`. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed: + +:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the Include Tree view with an expanded node"::: +The include tree for a project with CollisionDetector.cpp expanded showing that it includes Utils.h and CollisionDector.h. CollisionDetector.h is also expanded, showing that it includes PhysicsObject.h and vector. +:::image-end::: + + +The example ETL file shows the include tree for a project. In the file path column, each file that includes other files is listed, along with how many times it was included. The project that it was included in is also listed. Select the chevron next to a file to expand the view to see which files include this file. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. + +## Improve build time with precompiled headers + +Because we know that `iostream` is + +show how to build a precompiled header or link to topic for it + - this topic shows how to build PCH: https://devblogs.microsoft.com/cppblog/faster-builds-with-pch-suggestions-from-c-build-insights/ +Talk about header units In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. @@ -81,11 +103,21 @@ Select the chevron next to a function to expand the function and see the list of You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. -## Improve build time with precompiled headers +## Navigate between views -show how to build a precompiled header or link to topic for it - - this topic shows how to build PCH: https://devblogs.microsoft.com/cppblog/faster-builds-with-pch-suggestions-from-c-build-insights/ -Talk about header units +right click to go to other view +double-click to go to the file + +## Tips + +open WPA window +Drag columns to change order + +Filter box: One of the files it includes is `Utils.h`. In the filter box, you can search for a specific file to see where what all it includes. In this example, we've searched for `Utils.h` and then selected the chevron next to its name. We see that it includes `iostream` and `chrono`. include-tree-view-utils-h-expanded.png + +Sometimes parse time for the same header will differ. This can be due to the interplay of different `#define`s that may affect which parts of the header are expanded, caching, and other system factors. + +If you forget what exactly the view is showing you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." ## Troubleshooting diff --git a/docs/build-insights/tutorials/media/Included-files-expanded-view.png b/docs/build-insights/tutorials/media/Included-files-expanded-view.png new file mode 100644 index 0000000000000000000000000000000000000000..8da516679b96d3233ce17e09b6db799321c5ece9 GIT binary patch literal 44073 zcmb??c|6o@`*sV-t*q4$Aqka;%FZMr+1rq1%96y`_c1etLiU|(+0r7ijeVxF6S6OZ zvG0s!%x0E%RQGc~_x(KY=UqO(Kav^O^_^?3ihPUM6*#IF*9DXy52PN z*td_pVejAm7MFLn`}TcA>S(Ip^|e}~LJRZFyeC2|Tb_dz4hsn1KX%jgjQ2i%cJ9W{ zXLwzYh#P71h{X;V`1A|(9-d8!B1b13EO)qZ_h!ilOTO@%jR*nTmt5BqZ{=rdy=^`- zdOJvV?#S))lZfUU>>(oO+*MZ34MYrIRmF_=^$CfF_?HdQ0tQDNu^wIZ3lmD%>TWj5 z<1QFs!m+plKPt46XJ|NuU~>gSVjK!#zq(i zkLJI(*qGuG5)1veE{wk7YLGSh zm<@{#rmL=;p#tjyrgf{UcFN3ALuxtHd&G_PgIP0N8A1(25V>({>N3d}W9UNH?h;h^ zx3734>q3gKbDYQ5$ZBzjwrBSR=k@2r-?6yIa*v)AMF;NAfg4T1c^Q6J3EH1bwY0lK(>`W|%%YCUZif9XyXYRhbvHuq?p zC*^Y&`R;1f#BPZcSfyJnYx4|XD^7U6gCwqY+in?@P3heVEP=@pH_&wR;~XqBPQKf|xA!>uTPbcOGh4 z%%PT>7-a8@|yThCE5#sn0X!%R9+1pV7!W+Zt7accHgZbh9 zbeHu@4qv*rhHJdP(tE{4-}B?xX7Do!1<50$QM0QeaD3jT>qMNY7V`Xpnmzu#N`2jH zi6$ne@RC`NHP1ouj$&fz947p2PDw5qnp4oXK=I%H*M>7gdmvpn9SL|Dof3uT#i1T-m}~1e+*bP;_p@Oa=vkn3XUxNh?WMnc292lj6Rhb< z#rv>(l;ijGemq85E5+5X6{k4+y8ydU=MqXD@62dR&CYQHYpYzgS7PQdxlN!`jp6W* zEAS>yv`d()3PrN}W|!2Kee|hfm9$laQqmR@*5sK+a*Vz;?d>1nx5=fdMv0v}^E~H4 zkC)FbMW(Ar{$JrDt3nkJBb?;EyMv%%NX*u^Q_z&9m4+IU(EC^<5i86BJ%8U2TkkLv z8B$}2d~|GYx-0cB<&AmX)OqE=6Q4Uaf9CWf-u_Pd%}5;B;U&yfyfgrsk_ zUoJ=EH{11#bM8~IYR!PR(WQ3rs}@?+F_#^LUwP4W-QnA%XwtyWuBPF+>@`SF+FwU< zH1ian3~pUguY34^(Jb9p=jdJlWkk`Kk1RZzzryL^ z(_CVqf5ui3JxSg0-F&))8hjLx-Rm|}l@?wOaYA|o$!0*U0U1^PytyZZsk6sl@0M2-L?YbV76 zNe+u13ai?chSIXu}FWCBYmB+wUF*kWa`RwqHv z`MQ%*zweJwAy@z@!CbzfC~VF4p=A3)PhI!&c{sJDV5UW}b*IcXQYm#u66fLT<~W%% z+#bD$CC76NIWeZN^={Fd6CZ`uSmvo|ijVb5=Y6Fmr^^mHw7e9M&?Ycm_kfr(- z4`pM)c;TrA*+RN2?ujq!H;{|m2T^Yc`Iz`5AzJ(tJz7oO$x);z3D6TiJjN|(h$3z~p@B6tSLVqq*29IW4==2RewPcV+A4c|7`j%Sj?vvVQ zZ)sW1JImi*Q4hE}+_Pze^t?|v7*{o{YfTxbw#b@rBw3c;AxB7!llYTwf@j)rEyk=# zx$u+X;|;Po1(KLO5V+Ix6n2}%RLw$ChUviQxmU!ts=kw1YM^tiC(!g$Zp%O z9Rss-a=PpfOd(Xwr{mjPa_g;EwbKc1PJ0`=rE`!~MC`>*S@{bP+eKDETFn!EQDEg* zz|{Pf2Yg2S8$_EXtlpSsBp&L&N}f2Cwi;f4HuNwu8i4ed=}3lEDOBqEeb7yw#_`#O zr{C=gy9NWvB%Ab~jmXQKF12*WN8oa02~yfr`G5|h#ALtwW_|2{(@+fnXO#{9fqx{~ zO_9iA36o`P7WWs!6ci*zr=*3#r2|7?B0xAoGeQg!-+jZyxwSG?GL{q&RX zeXbZ@`SoQdIm`u86kw~$ZCF2S2%J9*+do$tATF6^U8RXE4gJF2G z43AAyUt3pkt9J`0W|`*A-Xo7D$uzAfl$>Q8=b}RkyN8UIJs~=W@8y`p*T*&5`6Xo_ z)%Dum3W_fYgRN2`HM*L*SaU3xI&SD&_HIm@N3g_7h?i72K z0lHt7qovfJxED^GFnkO3abwK^x~QUCzsZ@mW}F4^&4n26>TJ260KIQ)?N9VM_jP1e ze&wKqx%rzh&*1K;$YJN!R(m}4Nxf$ZFK=7-cduipL#cja#^&^TV(;RCZQI@cEjgGZ z!f;iDG4QC=@SB`e7gj=sa97-y^lSG|wIPSksYfI~sfu{7d(z^HO>F>QeD_+Zn5_Bu zMsG6uQAX08XW__di5#c?mZth+EF(mAZ~`804c@fa&O!1Q7;65Oo~o#F%griBb99q+YB-_Gr`y&e$O7m zD~=3voAgwUSj?OmJf3G*>~jG6eB04eDikSJ@+w8Kjy?oD3dZrOUCL~Ar>MO4!KFUi zv|o5^4wMrX+yj{l%}Aa`+{YZNEkrkyadSGQ=Be#N7DWI*ccbg0aEz?&G zcV%k9R^N+@121$R5wxGy>1M3~T<4~mJ}+IsmP>+l1B9fD=Q7}K$M`-)B7ZE`6o!a< zT#CB2?=F9No7K~7N$B^0!}p7CI)``!!(2+gr~Bv}?`QRijvNq-)o-+yqyb;+jq*yDubn`+OQd+&)GuLO5aIb zaT+6To6b83!tbv?2C`d+GGMIQIvuDU47$+Cnn}Id_X)X!X2jdA%HS983~vc^)cPIJ z>G~$BUdOw7Bl;I*ad*Qpg0_v6qIyEsqB7?3uXnFYG3^1Rl#03l?G@iI)SdmtKvwUm zUU*Z&@2-9~18=q>{siD)PVPUU_wZ@aZ@*EM^ZL!%*$kfvvk3@R^%rIfUI3A|($*oR zRtg0xlb!M?V@1D}PnBa@KXE+RLJYMLj+#P>ue|W6VgHTQF+o9XjhkN;Em?kN0j*!Z z+D;QE(~A!N&JboNAIiD~xEc)Y{|)x;u9s33)EFP}3ze=PR#ZsQ6A()8^ZFC<1qAfO zqBy#ilpg+08Q9sycv@H%JWn~r3d8)Ww_CDIGktS5oPuN)827wdbFVQ(9^zR93-@llrvKL zs&{wubJ0*}HG_igEn(}u=d3vaNhS5ROQAfCy4yb2p~?_G0k6PN*4O%j%O;rT>fG{r zoFy*QS7x3P*aOr3D)WxnS7b<%2~u>|!UQYL90Zr}fX)9K6LT(>D0zROKzsrsSycMS?=eJ^aH7M4Qf~ zkWEg$CmIp?76_Tcb9ta19bAw?8I?WeB9CUv(xMSDUBEi9!7UJ601(H0ihqpz%v0kK z_-i$vD$wOa^SeavR1{ZxJbr)*tPZ*b?{oI0t7^+`jArTD8jXP^ zJjqbf@cfu?WI6d-agksi5^8n4_8@cUp@^O-q68_aX2{7tRaT zXX>&M2sZ~)iICVwUU?$vsX?Q56*B|TCY+nqtsjkLMN*_QqF zcf=782w`wMmoP2NwY9(ib2}t;EQ}l}%A@Hn^Jl1HVTli$3HqOjF4xY6V(Ye}(0kFB zfh!%ex*%8|)NqiE5k}rI8JGJ13VMf6oA4wGw-=`%>E`rjzuLC^fz1zTT3T_D$|AlP zN;X-iHy?9216JkxTa2np7G#gx7$>a)lB4O#u-lDzHwopla&?F?2XR z2>ZfkieB&iGle$0QL z7l)NqrvLoh+-U@dN*(nIPSGs0hI(_Lc)w#qTSean&9mAHDxBpa>63xHyl$mzR)i_T z-WY5(j7~D|F0XlK(%*!rm5fuHj-OzE$jL90sR@4%45Gh{Xg+pV0Bd8BLI*pgl5Fw- zgH!1oyXDnfx4wV3E^3o;+?5d_uh-f8(k_;~#2zSp`8r^&>|~nO{YoKQ@4?HtUc+yt zRuoNlr!N=YA)heEFLE?SMQW;!A(d#J0oLQfQa%<3W2+3zEekvfD`ymIj!@j*R&{=# ze$@OHmP_7VyfxVIAuep{q_!5M=^?xX^6ZmIUOm%_+?qWyJ{N*Hq4W zg}A5iQ_pHOr#TAo&)^{sJ!2z74t&2SfoWGtx6HC!fKNuF-xL!Oi^ZOUj!y;)hV#i0 z*3Lu3QzU}$24!XB@LEoECk4Z%7BJa;Z#rUS;?g+C0w|u5>EFz!jNtIHi;@wuHgk&W zhTuaY&a4&tZJurQ#UE)?QLtP;;paA%lN`a^7G807dt<@@3XleSQG_d(rDuXB)|EJW zQ^dbkmU74|Ywt}ZyIhvM8vkx}iKoF!m}p4XYsOS6nxw8CZ=g0^G8f`q@N)?`zv_j6 z)`_!_hQxhXi#sn6u#(+_jT~wya_<&PW-ZUe9Fxp5*4)HSrp+I%3s!ken;?N4t^9t$O^d~PUu7Fdy*v(s;1vWN?8(A z%e(xEss?f^0fXT=PEQe_xH<48pW+wct!oo4(MLTLQ_h;!b9674UF2&j?BT1fW0ILH zJkGp`AvxPN*k;I~n`J8FY3Oyz3DxrN)EKPOn0^(6|+wrSv27 zX##2=^~J`nBG;^BCNv&HGHaa?u;Y^tyzH+MX& zaP6u(MVLm%N}^~hSs)lr8-C?5)FXt+n6@@m+aV91Zb>etM8oJ?&a`MeY7;`so?C%W zV{W0mPr|95=@JGUf)zK(Z1HR8_V;U_jGR&I!r_&+=>1+BH+Pf5bWtMmQdg=2f@_Ed z?4L#v`bH;r%cCBlqfV5&07sv$HgA4(DF@pXT6rhgaZIc()c%;j9|s;IEm57-PWVxG z)gf~;{2khloUjFy@yD<5UNU!W?J_<|-{nI$7;=WB`8+L#7C`|!l~jE`=+52HdL?>h z#*Ly;$t{&+?-QR(l%2E?X25&6Y=wyG2VJvnqVox~E#xRuP4=gIC{cc!OCtxj4Em{hxY1mbvdv%AET-rFL2w*Iv7Ua7t^nfCg ztSZqs?CKIn^uUK^7sAHyqiX6$pqSltAI7SN({WqPK)=#}1)R%843x^Y zxt&Ju1@h3L*5rn(Ga&hlL$zk2)5n}XW{9$V5~y+LbMbOe&(*LSyNmFuaZ!1u70xdg z?|JUW%uuA(=uz7|80p!End!ItvpVPRtr6rZZZ3XozF68g@2!3gb^|`zT~D#Kakxy7 z8NHKI!C`09cf}w=^~1$R&e6Li$TU*v@THNua7)?bci5W+MUpc?#W~n|H~m^udoqc} zt$YZ{ZGrX_%8QQtaepTnc@dd-krQ|;YT)a4owOEFbTcRUMti>6;PbJ^wXOR>TAq3% za`o^ML2?bPpXia_5?;eEl(1D;L~0+s6GM0caU7!X9QNRx^ISR8`JA@@h9Alh&Qw!U z8P88Wt@Ocv$#Ky3Nndo@Xhl8W^7P3BC0v$R)c6v!|In5xV1*++S%Kgcu;~{Yp2dGr z@H^#$dvC!=+Wc_z8RhO#z`e)iZTOBkXRFKe(DLH}?{_Nwk6%Nrnv`P*rxc}E^u)Ae zKKnuOySfL5EJ9kh$dMB)o@2WY`Q=%I;g0WOT}}YYRp{q=8a3Whnn6nN1D_4o&+aX0 zh7ZtGjZn=9U&QHf8N~qnh`rA(P7H)jo%=+eosl_xY<5TwwIf8iNs+`z+;S&&VW@LI z)(=*qE?KIaFuO7tT65_#xMwmuvBSG$fcXi!i=(I1tlzE70vw`PC>B0mDdhDu>r*|~ zW=JbXmMU-=1o}~W8-hIro0y)wIF}t=)_s>+2qmssus=@Au{SI%lMTvB5P&Gk*sX1^ zhO`C9X-3N>^dOpv#0=`ug0PLD==%o7Ke=W#lDisNVJ@79KKIAvr8>6L#< zRxN88tk@D(TTAiv;|Q_=ytYGrKq7!9U+B6B%D34T)Rx(ChLiFf-Vg?phaKKs2; zDmBJ5ZA}-wdb}hOD(zOGUQ}5SF~PE0v-3qxjx}JjI$__a%kfm~ zND=EvJl*FRNc}3(1J?f+99aY$cX_LP9TraaE(FBE$P~AOk<_9 zd4!?-I$IP+>A1ghUPi{9@C8Ew(DEm#eAxX3lELzZE2{)NSBg|dsaa}H;ce-KQMkU8 zbXa(qf}VJX#sE&NGPqmIr(PkgiVw3!yQ8jyZ!m4UI-i* zyknhE;~m-a=%I_V0vrm&SIo+h?O!H38c9uQ`__Nr7ie6|J#wSB8UBe{P?vX4P9b<&V)SUKjb#rVqBhV_J9B&RCtRr;?N;^ThlMxN;?0{QJ*3l} zjs(E9T$+-U&;&Ajray6D*0k2iDROz%!zF0=?T!P6yj*h(J}F+3-##e!rkH0Jr|lo& zeg5wEEBqV9F(;t?3VivHQwu%r1i?jN>p<) z$UW|yfG;G&!K5i68X*}=r(sRnrleSNDE1d8XgGK#_c!>mkPG8Ab03{j+%&s+fgVJ6 z4j@d(qvqPLHBPPGwmTUW{4JMYT=ic#-s!p+^7kbk=OdY-TxbFn9K)T}!wMU@oKTyUuY`7= zAM7@U)N{~?aM#d&pgu6&a7{cvyhq5Z1m1gcCzTp|(k|L(}4E z#7pdmCAjbm!30{9!c`b8UUT;~Fb`aE5a?rP2U$i>tB+1nQc=#IR?8TZ@x8X9huA%2 zUt}M5uUQ9Kitu&=k#pALq2{|eSv>CEgYkMPrcqxerdAI=g+^H`^|ch*ar%he=ep3x ze-M+%WDLv4ag6!uCx%Zfqh7S4to?~M#|DToyv{P7MNFGMNJ9PGfC9@__pL%_^BGwW}4ihIBP#HTP^zVDffL_smYqREZ#5z)CW<<3(E|`!x}N zu7qG$ej-NQg2P?V7nq`8A6O+RL>VMZqfX;Ocg(4;mI&4&#CahKUh3&}teI(WL0mP>c_lP>qN6A;-fh*lXpY<8xF&~WPdVKac9nD=QY56pNWN&i4d zYh}pBkp8Eiyx1hL%8-G;7?LuImmYrtLvEw5Y>i7($XgZmC>K&YYNK&$hu%PUCN;Cs zTjr>QX82c}QH-u#TO$=Ta3;8L|DFc9<-13r1Ev91AT=83wXJJld7|2Vc7_Zfpcg37 zTKu{legv}xyD2zR8D}8$Qx$LzU`Uh#1|Yac_4bIgbE4=i{(q76cYg|~&k4N^*SXb5 z_kZaA!R0V>Hsk=~k$))}*!-W0<$t{4`AhWM(8-p9u? zR4}UGV3yR7p|hkFQmuvR^qnFLUJfj}*Q#CSTpj6~`_`;(M@x!u(d&ESp&Ty2Q-OCu zMC`;MV1~OqUm$j0$TJK!-{b@c-s8RFI*b_SP0Qn@Gm#wPpJ1i_Ak*AP6NDfl?fu5Y zHeuXxs(vVhq2&1K3EYs)hACulm(z+)`@D2NlqNSnQGQQ|d4km-xwhgcUfUqq+|}?2 zq5KDO;?ZQ;aPrOt%t<71tZi#mUo6z|^!%N9Sj{w(@d0zt7fWH+3*IG10hkd^?G;^O zQq3VLB^|CVU~|$BLUcFbYq6yWFBIC)b7AqM+)MM*I<|Y-^{kP?OWT~o(3N-sE}$;hP|~+OvbE$9@SmLEW9zW35>jqv9Y8D)FFME zyKT@1vm=Md9kpVWZC{Z~mx%`!j>mZ4xUXufDYiHfu-Mw)`f&_}Le8H^f3$zJ#?6h=tBP z1AM>E3NRj!10|TFxhdYyA1PXzrU{@=0A3gMr5!AfXKf3Y97sjsCA z;h9kS6Wxroz>+rHfcqV@CeFR$($@hU&TWVyf9E(;nEi+PG^fSBNFgjcIsH_iPgInv zcUn!7FcP6cpAAV`05N2vKhjeyz=5XHwN{oPtkX3L+%tI`9qwUGO$pM~uLdhEKh(pj zSM@?4v?3-FX0&=DBWFfRE`O!H#KnfvgkQ-_Fb6z)AiQ(C5RC&okVNZ( z;cfSh*@u+i0$;$of+bYJstGfJg>n%%oM!^UE~4ZpMEACnpAb^0y)_~rnpTcHDv*WM z2jR?V7IMT1c9c+iR+opZtqoleygsYoaf7j?iHa|6uV*doUtlkzRu6S`gLiTEmnRoR z^mY%+-d_da-rHnKbq}Jf+L_$$DU_5=Fv$q-FGP{qlgAuy%K>b%4|xz(OgRHv3)#%b zRTy?w+2%!Ym3%d)KkjoR%;<$$CG;Y8qQi8YQ5l)Yu1T+b(W$mTiA8*@lBLP%b>K6sAs9|$*c62%F%@HMQjMhoWtRq^xJu_=>Cgrtb z_1;~+nnA@EHY&fwh0U$6_G5jP`quXsjMwKW_uY`zHqam+hkPSh?iHcvhurR6lT7mY zXu$cRN_fizy=FrFp09KOE2eYnL93aS>AsCMIf0PLnJ* zq$Xy6!d)RVlfw}%L8C^6z{m-jfG}Wkce)^=qGLyO8EO~6p~Q#L#U$k|xmm|0%~^3E zl3_dhWU}s=ElIei722BgE-6Jlnrls|cIMr)Fh;$$(Gly1=A>iiRa!g%Sm|6s+VXi{ z{0#N%GeVsI%e38lOtve^uMnSTug=k5E!A8qktkGC9}DBe@%GPhXJdupZv*`feOyi(lvv#d9A1e*`Jjyx^^ZK%>-t_;~R z(PwP2;|ws3(PbDs7ze3y!>UHAT|P7v-0-*3A7rVThdvkE@1ptQaP* zh|4F{4qH|Eg(teT4tNVqfOl*@+Lue_1o;z3VLla>@WM3x6cuugw4^9oEk@e;X#ssAM1ylyvO z@hZO)k&Nk7dEl(tC;qHRkR6TSw~0SClO-%9pBx^Hgj*m9)X$3QxLwwtHChX~z0)9M z(4n}J5j(T(Lu^<}DFnxvFTYytn>&#{M?2-zFE-}5eCm)|ILx&;K5wIG!63=rMONK{ zO(sj0(05!sl*&BT#N^y4dd`xRj!Ry;=ylY>Gfu=}lsOX#4?uFjD$>+`R(l<%dE>&? zDV|tWcN*Czu_v`AW9*p^pu@=nQ7JcN)ps_ueqz%^ch00MMc-WY_!XklF|QUQG+_aimQ%d2(d; zhOK9DOj-39+%u!~o_$SvXIJWKCN&iddlL@Uyx*fSp)-PyW}T)gca(`sOG-1Qip4;$ zNKQSSIUw07_(tDF5f2^1{m$g~?hoqpqrl++cgq5R@V~&$``eiQjV}zi+n;!hD3_;y z4Q&N|nHCe!ER&;egglHf2YSk~AX{L@-81<5@v8Bwmp4z1j*%bKLmH#?rF-BLnT&L2 zvr36oB(96v-!is;L$7J~ns8=))R;3Ra0x35=J9k}z8y#$-J-+`J;;P7vQD3OwRW#y z%|Q-3e`6}aB{C=Ti9=13ZiE47bx)3ea;Y_fP~AsTV=Utm5^fHcxTz?6iw$EuHK=I< z8G7G&SZX&HJ0&7YTrm86Tr+?n!XoP9B*cNuQM02nRGOjE^zojTxw=Tgb}-^stDHqA z6IZuI^@T6h0@wVOR17RopSlBzRgq}Vkcs~J^$KtM_e#NTjP#H5H;%>YezoH*~yALIk@s2qbRoC`r%xw%&1;OgbYGmoM*f7E82Hsd;$tgh~*;* zQXQcD3Tl`%WG1G+mShSQ2s!wbXq3_gWTe`qXIozlGnXdoXl9oexk<%!NM| zXvXX86N*5HkkLYAdD__54^}~PtR>kI$2~vE<#nG^pG7f7Yam&qq<(DrTN?;m3EH^~ z7(ZN>CVI{x*3R$Iev4xF)fcF`3pTotwXt{Rl|=QZ%cqxmF}B&z<>DjY{DL0oAD}HL zfB#Esssj$cu&;U_1^~1xv@F6JV=v4=W@^C{F)vx|OZWS9a7(+F_w1deE>UMwjR;}x z>!Zp#MS#`Ra|=&CTqZmpZ5fN@tn*1#z9zb2)V-|3ADfMp7?oSHDi4){N*}m}oU*O!BTH~7mKL+IW43cT$h@b46m0ZbYU{2652 zHTcCeT^UHKMigoX{+pv_uOri@!v82ydoCn60rU4;#-G_KYC2nY;TdWSd2rpTY$b*< z{*jDa9kGq|vMDLyg|#r%h8e%~T@6d8+DHpNP@A4l!jzdRFUQ&!r0+V)ef!1SY+G_t zw2ZpNRYro;_w5IOR$IA~<1YPi{+a^O;pxTuTQI;$Fa6x@>F?xS=nXTv(C#!Z^#E_%+OjzYUmkDQCzK>%Et;x zhpaC88}k9S|AeCnjm@0!h)U6&Ihf4N5jy3+ zF_YC;yiW2srIQ3#wiae~pg@>U%HekU4TEbF&pSUzM}?`i=V`D6++EvqEFu;dpen^x zMqt~u8t53YSO+fYU9>Ox1x!&EgjJ3Ro<>h039n%T+vBRU83~^vQiLZ^Wh#)ZZ(Do% z?quWaQ-&wzi}y!{@e!m zX4*4EJ^6_IX;OrZX4;zoE@UNa(Uv_Rnwpc@vIePjt95)ltz2HcQ{hht6-u+pq1UN0 zqVBYt7q_N@`Mvt;gOjPR2+yynK$NSyi2M`cTUEYZsW@8^n)tB!_ zwe_?$sUy#`V2g zfH&hkRWXCN0%H~B0piNYJ(^uKajAr*&i|;wCi<-Ca~|X#BL|*5(R=kAf$ak` zgK6np(tK>m>(+BZ(ffHTZ&~p~JiDQpsu3gh`+vQK9t52Lm-r~FLNmOsPom$*AD%Jn zHxCH2(X@2^PI1mcns^Bw#N-|Wt?H9 zw7wCcZcUYLFvM2~D>S$M#&&-$VLzRcnLdDbK5ds@Fl@Bkpqew7|4*!X4+Nh}Huva> z{8FnE7k9!e32@@e&iNKAVn?kkqI{?;vL@B%7Gt;$kL1jrWRWjum@hft*l=mVE3V)6{;4>vzm3R8o^e;N_-oh70?%WB45mRLbqU+IM>%P#8&&E{9Lpb_hq zWn~XA7t2?@g%;7b;I!j?jO86$=4s409NuUZ+IChQ1C+DfejKR9SQ+r8)M1u+mQFx~ z=nD!~xG3U6)-U^0%)Kv=rOX%?u6maX($9!%Q}NPspsNfG;r`zcfeYSr?DNh)sZq2c z3?JUnf`y;{Z)9d>J9^?(Shnzg@|>R%P%9e2dVJ9OsBs)azyqO38~b!*7fMC7QN z``X>1ES8>y)a2w4e0>C83s**_m9y%l9mqj&Quo6JBsjzU88W(Lda+!dy^(Mb$S^D6 zw))q!mo39}eNFbktD!7o^^b>6@8xaE+VOgmA$e1z#+*bG}(I9>V9Xw>8KNgH2ytzZtyZyWE|gH2dVR^ zXD7~pi$j8cP{9)F>-Wy9k4?j7#+wezl=*wQ{DG}yDj7QcZ&(%8_%c8v;NloxwAh|< z=-cBZRgZAFh(?$iu+85$ty^;pcy9=*_*je{IKcjH^WoH-cjY&c#H{&%D>S$k*&wk+}eUrFR%j^cLn+#^gg@ILkc^xqK61nqH|mU z1vJYvduq6lJe{(btEc4oMSH+%FN{I?zd&S;>i`C+3H#q*kK&pTc z+2i+m{g0>Vdh)cFgeB+wUcOkPV3`cUxnIT~j*HzWhPriJL8fw)$r$7$|0qy_1^y@< z_sHyokQK4dT2m2UAgNO{B%PeWI&xM==YI;G(ESCFZsOSSvCC?gl!8L+%Odid3E0a% z#TClB)h(eaVxbor!>V`0Lao2QYzln$;*C^OE4xm+#D0lm_CvvM`qfdE@~jdq%u80Q z#?pq`4(83gjG+J8Z~CD;Z|&0RI6;FiH5S{GHCXw4X1jiAg`{7f7Cq47rob7&@nVUx z7wyg68I;%uHdF(6Y?F4hcSYEeEh2a1u|;J>8XJ9X|OOS_wxrnIR8 zn%prhjdw06C@wQN9Kes$vY~|ehfBLfykm<>#jN!aK6KekLi+iE_EEir?8xGe!b&-v zGbNOuf(mVn0}yYwxBvK~L{g3HJ(PB5QbQN2!61w-#G|NoQJHNz3sY8h((?#*hN?Y| zHY&K}Ja83iz$!vNI{m@b+HHU}hx1@1tvp{c%G(VLo*Ea`(P2~UU}Kx~PqdMy%vti8 zk2)@Bjel1@+kzID&PTOf-|YwSjovcM1--$DGKTxon)3fnqWlRl>ri;|JA2iM8wVOZ zyj`)cvj#2|^%!G}%fY=_jJu036iTYdOm5=eL`neG?mCRh!_kqt)Hhs=G8(_082&j) zeVh4=&S|=G=!Kbf@n7NF_BexLh|ij9V$tnv!Y~MNR+scILGQ2l-UyOmcKQz;Z6-d8 zI=!{I3kq$u|4+?~NXf0VwwCxWfBJbP!1A|!p8+9Hd(VbiozP)qS`0bB?i*z3A9n^I zOG=7RY9|q(H%AAb`lp%~OivBpY513qxGuSfhfz`ZZJ%e{A7IFV;(DAz-DI9d7HMh2 zjC4uy)D^;KhRqe`Zc`n;_5vdRbhowQjwM`BGt1t}N^q1Q`&dBR)8D^(=Sx5KXt|kM zP{uC8t9?INt@%}M--H4urknDN>0Yq>s%^%AbqNi|rh?|E;d&ep*%LCt1ojVFs%Q z0uES>u41h(uptchS*i*k!1B#v=bC})G$cy}}qlF$Xd}9RVnDWsL+A7JpEh8L%uVa z{O>9rs|Cb(y?r4MCE@a(am6wI*c8Rai4{sG1_)6`&pIZrLl|Fsc2z(_wkIQ!zk6a0 z*6PSNAzjDdOz7R4eZVot8YW}UHLOzcSimDizjbzo%}U#PW>&OOyXvx_exQP-L{(M# z3%NRpJrDxW%pYZ^|C2DOPsgCg{|LVed%fL5r1LGg%)KjZby!2sAKV(SzqT}kj*$!Q zdjOcz1@;xScVN?8g4u9T_T?*L!wTD~gLB<2D-ipDs|dyv_T8Wdvr=Q`3rOFR?Wux0 z8vF^-YyJn*)iR16(hH*)d+*U+{7McT*?nPm*QLufvR>nAFUh29z8S$Pg5WWmTTS%2 zjkm3Hr+00wwy|}DGq%-p9*>XuoZ9=dF0q}JJU?*%VyS1W{(ffwZ&II~Dd<_re-b8s z=kp5q#mh!(LX4sB2SavJank;+_5x={ndZVb>UT86JtiTmfE^WQj1Rw$6Np>19BOWv zcd9E{KT6k6vUt1pwX(&KgmmRaUS+liLl#}7_FjyG!yf-JLHMo5`Sk8}%QFwVbZx!g zdd;}_7JpIJ)>bHB@hTpJ@A*>yf~V?HCO3qUzaD2=xO;8zX!ymXsW^TefN6q_^qaLD z$K9`XBYLe;I=9C4`iB)VPbu@Pw&+&bYxIH0yr^e_y~xP7xHMjP&S??-|+%2IslPRQeHE8j&$|0n7{iesf z1XO7BuGt{rc2p^1fVty+G~OguCTWN?K5Dc{Nv2*}4Dz_!F*0FxilGTM%rb(2mt4aL z>%vq6q+reB3L*NH$IIG^iPZy(At08_diKJKoy%}WC_P+ z409`iEUnB$B=MZhnmaVwAH;_VGRVN*@a}Qsx76dKayI{9xL}eONS0_LcF7;gIn+1g zH$}3B^H2xi2Zk@eJw-rQ_PKqMl17J_?fR9Js(au0oV&Y1eNf9?G{&9pD>a&{eoxn# z^DSdr7)qgRdhN(h7N#Dpt}n$!rj?vdtAq>-@Zo=qB7UCbZ@;Tp2mWGWQ786Ti@U`y z%=_9w?&RZJ+0(0D%*L=z`|sU^Q~YC(k+r&gWq?j>l^)h6Zy|ed+h8CO2*35_@4l1Pi37BN=_~?Fi493 zz5_9Z*H{3nOU9b;-|G1*ptGazi+~(C-It}MIo2S2m!r-osWL8yJX|Im8kNlY+66@` z&FzB<*);VyxCn$|Szx}tyGwKL(b4_2Cz3ac_R-vT*{dL(MH+jVluwjc>X+JR$o#T$ zkeY@N!^UyWi$*o>TI9jf?!;`~gPwHpyx*a?zRc$R5ahM4nMm_ zV$aLL)>vQoTDPQp1iw|wXVywRF!3kvlA*C~6{NKaGAfnHSSZlRfRhS4@DulvJB=B% zJ*4m4$Vyl1Pu#=57JB><5|=(Qt}1dCGPC>Qr&QRAVn~IC3^&I_io1g2dK0^K;HeY0hrW=chZK^4>-m%#yOSnqKV*I?+hRWznC?h| zpi20fWe%|525kpDg}i!;b5AZrm(?r@c`k8l_7tF2>V9gXKfN0n#D>s#PNAtT-z%)s zp3kQaxc`fPh2!pGR3`P-yPxv>r40i2b2aM-C83#-?M!@O3|GcGhATtGl4wwWZm3i9Z=Q@rTkA}P z;iFnEN{=F-yA!RUyr?RqHrGp;3i`_?X#%%Hc{|bBvOJ?8aJV_-n>!tDPxPc+aK7*4e zw|KOZ$g^_-G|g)a5V(v&7hvyYw0t4FlZSN)+nrSUI4jE+pqVihHZ#8xA z)H)g1!&P`TBkFzrAaFtHMn3F{gwFA^2TJ>QpTS{^JdfjYM~SzY^{@YHe&u`ybJF*g4D&Z%y4!2>*K1)Y*-=T{cFuO( zdj0yOJR(LpNtiEh@e*x|v7XK^q+I>y)$f118C31-!RPngs}oDCeb87tboS_W;SUp- zduXB``;=fm`eGC?f!QjqmmN%CH~R@3GS!!WtD+#sseApvV3U7Rgqz;5m%e-EJCfbS z)_nJ`c_shw)ZOjh{lye%K`z90_SlaZ!V$we zKJ8%(NdJsjf3M#)!@!GEHT(}93N>+N7<9LDBNVlt zK@Xi$6HSN7jN4AlfK{h%jfH=gf~u&-59Ldv7jPd~H+RNuG0VO`CYsRqjNV|6pb_7w>x)BnhOl3kaIY(V zgz`eTr;v8L>r1S=fJ918kH`<%oaXL|+Rukem1-ksJ+s+NQ**cY+(&^jG*~!et=BJT zo_NM#NAkQwP6tjsujGY|2VKL?UQNz47`9ZJ7FZ#r-lY85xx_Y#d1GZvcesh1N78Q- z9X&bi+IIa^=yLgphjN>*N?K-D1K9o@p<7(Y&T&a07ZO!yQ=fk=iLcPbrrhWrm1W4w zKkBw@F=7ZIU(cN+FN0?Vl@#Uona0ce+ykcL*_&rHZ!chIJwR@I>S{iyx=O%BD;0=$acj+rj`_jjlVDLLJ}Qig80%NM&hZr5wGeu zF_T5@;`@fZ)&~vSxLos?vg!-uLe>iryP7`>R+@Txqa|69DS$^tf+wE-WmrbUQ zZpujog|+K%t0Nr0f8kHGxa12?8?iT&eP@y>=SmIh=XZ1&eRp_k&0nF^vQ#e_MoJ{y z-iK}f-u9M6bV4)+ElzOFzl6xty+DR8KfQeZ>eb!#pHozB6Nr$c!R#ZMn0h2KOIb=j z?a*a=#bH+ZBkouRY==$s3_`l&pqom`SBwn+^gq^h@u6O z($>ih#LF}Dt2KDfBL3H~J+_CAuX+>e+GK(H&Lt5B--JWJm3_p|hq|0diV+gNI{;=3 zoZspx;MUwF{YLbepPVJ^ukE*ORP2+%=9o>YN>?p$Z*HR%IgdsAZ|*a};#@>;q|fH^ zV$_&7-mv&B3*OZXcz!^#$JG1c-l4utF-|YIpN#buY>^0nWvnXdeRROZ-vbkl6qLQYjN_@d zo2%Jzd9Za4_4&RK7lV8DrCR^d*r5asyM-|O=~ottn?p8KcvfNTUDZ~q_f%x-BO1le zZPF-X;tjI>ZOOQeRe9S9oan_hOAGcpd&?DXx0Y2tkj4mot)=J2v_Gg##LU#k+SB&f zxSIp*{vaUz)h-1)`%@URZrClct_tAQfOp=2jfK>F%RK-kBGDh|vsO#Az|gwErb24# zQBrGr<3*Bd>b}-KB$TQNhK8jX#XHwim>ZL8m`eX$F%mZYx09Y_x{ePVL~lP!Xi4H^ z^GpBq7YtccUY1aD+)?BO%hLL?wlMjq>?5qd_lV2T#rw%e{pFL5Du{&Pi=T?lRkja; zOxDF{Lx|N`QPADw>ZpOVZ~5>mpyV$uRx1x-7lQh~yrWEZC$t20%vr2l1G)G>2EU4R z?R?K$@N+gFk{nG!V6e@RZ;IG(@{{a~*23ja7@wWPoNYOpqdr)BNV^Tr$#kG)en&*R zevR@tUx}A=ZAdsRXn?-I2F(w~6hf{u%@@}*R$JLWtL8aiN~vdO)W)aAukW*c6VOze zr0Ke)BX2yMS{nktaatkIXd^=+bDz>aUgsa*B7O0MIS18L9sSJ7$PTsk@_jQ^p*q?^ zW1YX;3m1g?Kb@JL*A8Qs!{(-Jy`X+kqLSKs%cxp$_@30S!LFM)M{%|(d*Y`E46SJ5(3~-P^rH34ckRZMlfp$rU)%`t%#PdS3vkJ_m`s341 zQh;{EZD&?zO%k%tfi3?B1zD+gYSu^x%b?P`RIopjW(Ob){pPHnWGrppWD2usG(BIm z$DuF2hM`YwOcM7tHhP><>mbcA@pG><&EL0Z0HJ(fv&ktBmT~mvt#U^mj|p)jf+Z)q z!)lwXlR9qi;H# zd(v|=DL=cY0*6@*|8bf1jq|P%$UN20`wfWZ=+E>}grW9V)X0w-U7C;ESL@p|wkpe} zKd0iT{3VU%h1BJ!*ZgKZ+2^cZkI2MtP6S~f6+etFSqs!yhul|2yQfz0?wL&WxXUna z)W&fYt0szqxSXH^_%S@~vYF2E&9*b`-BdioDnGE;Cx5j*oV6yizL41Qwz$T|%DdP0 zi{IPkxKJ2(uzar$Ssuf6!j@&MRU~BAzm+mH^ZEKWw)OY7*GGFZ9!t7;uL1}c?7K5& zcWR>&vWcHt8ONWzx>WY5zWTf4#M!&hVx9V6^u@fVSGpCA zBboUg(%F≻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

5LS?Pl=hVP1vd7rkQMrp6w0~My(91nhO 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 DnzS1m literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/included-files-view.png b/docs/build-insights/tutorials/media/included-files-view.png new file mode 100644 index 0000000000000000000000000000000000000000..9bd474e5fec4c71a73d753b7de06e3e5aabb0679 GIT binary patch literal 60362 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 Date: Wed, 24 Apr 2024 15:11:40 -0700 Subject: [PATCH 0150/1239] Recommend `snprintf` over bugprone `_snprinf` `_snprintf` doesn't terminate the buffer when the format result is overlong, which is just asking for trouble; `snprintf` always terminates. We should recommend the latter to `sprintf` users. --- .../sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md b/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md index 3f35c2902b..960c47657c 100644 --- a/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md +++ b/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md @@ -103,7 +103,7 @@ The number of characters written, or -1 if an error occurred. If *`buffer`* or * The **`sprintf`** function formats and stores a series of characters and values in *`buffer`*. Each *`argument`* (if any) is converted and output according to the corresponding format specification in *`format`*. The format consists of ordinary characters and has the same form and function as the *`format`* argument for [`printf`](printf-printf-l-wprintf-wprintf-l.md). A null character is appended after the last character written. If copying occurs between strings that overlap, the behavior is undefined. > [!IMPORTANT] -> Using **`sprintf`**, there is no way to limit the number of characters written, which means that code using **`sprintf`** is susceptible to buffer overruns. Consider using the related function [`_snprintf`](snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md), which specifies a maximum number of characters to write to *`buffer`*, or use [`_scprintf`](scprintf-scprintf-l-scwprintf-scwprintf-l.md) to determine how large a buffer is required. Also, ensure that *`format`* is not a user-defined string. +> Using **`sprintf`**, there is no way to limit the number of characters written, which means that code using **`sprintf`** is susceptible to buffer overruns. Consider using the related function [`snprintf`](snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md), which specifies a maximum number of characters to write to *`buffer`*, or use [`_scprintf`](scprintf-scprintf-l-scwprintf-scwprintf-l.md) to determine how large a buffer is required. Also, ensure that *`format`* is not a user-defined string. > > Starting in Windows 10 version 2004 (build 19041), the `printf` family of functions prints exactly representable floating point numbers according to the IEEE 754 rules for rounding. In previous versions of Windows, exactly representable floating point numbers ending in '5' would always round up. IEEE 754 states that they must round to the closest even digit (also known as "Banker's Rounding"). For example, both `printf("%1.0f", 1.5)` and `printf("%1.0f", 2.5)` should round to 2. Previously, 1.5 would round to 2 and 2.5 would round to 3. This change only affects exactly representable numbers. For example, 2.35 (which, when represented in memory, is closer to 2.35000000000000008) continues to round up to 2.4. Rounding done by these functions now also respects the floating point rounding mode set by [`fesetround`](fegetround-fesetround2.md). Previously, rounding always chose `FE_TONEAREST` behavior. This change only affects programs built using Visual Studio 2019 version 16.2 and later. To use the legacy floating point rounding behavior, link with ['legacy_stdio_float_rounding.obj`](../link-options.md). From 304f753ec9204f64eb6b633c28aad1d51844b853 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 25 Apr 2024 17:09:23 -0700 Subject: [PATCH 0151/1239] Learn Editor: Update c5243.md --- docs/error-messages/compiler-warnings/c5243.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/c5243.md b/docs/error-messages/compiler-warnings/c5243.md index a2fabbb18e..a37dc6e4db 100644 --- a/docs/error-messages/compiler-warnings/c5243.md +++ b/docs/error-messages/compiler-warnings/c5243.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C5243"] ## Remarks -The Microsoft C++ ABI in Visual Studio 2019 and earlier versions uses more than one kind of pointer-to-member type. These types have different sizes that depend on the inheritance model used by the class. The C++ standard allows you to declare a pointer-to-member of an incomplete class type. If you declare a variable of pointer-to-member type for an incomplete class, the compiler must use the most general representation. It can lead to a *one definition rule*, or ODR violation, since the compiler may use a smaller, more specific representation for this pointer-to-member type in other translation units where the complete class type is available. +The Microsoft C++ ABI uses more than one kind of pointer-to-member type. These types have different sizes that depend on the inheritance model used by the class. The C++ standard allows you to declare a pointer-to-member of an incomplete class type. If you declare a variable of pointer-to-member type for an incomplete class, the compiler must use the most general representation. It can lead to a *one definition rule*, or ODR violation, since the compiler may use a smaller, more specific representation for this pointer-to-member type in other translation units where the complete class type is available. To resolve this error, you can specify the complete class type before you declare the pointer-to-member variable. Or, use a Microsoft-specific [inheritance keyword](../../cpp/inheritance-keywords.md) to specify the correct inheritance model on the incomplete forward class declaration. From a9d20126ae50825aa959dd67dae05fc1cc2f48ff Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 25 Apr 2024 17:09:28 -0700 Subject: [PATCH 0152/1239] update Metadata --- docs/error-messages/compiler-warnings/c5243.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/c5243.md b/docs/error-messages/compiler-warnings/c5243.md index a37dc6e4db..0679327d67 100644 --- a/docs/error-messages/compiler-warnings/c5243.md +++ b/docs/error-messages/compiler-warnings/c5243.md @@ -1,5 +1,5 @@ --- -title: "Compiler Warning C5243" +title: Compiler warning C5243 description: Compiler warning C5243 description and solution. ms.date: 08/09/2021 f1_keywords: ["C5243"] From 7452aa796bb2d2f0f8cb2b2f9f29f3aa516f0dee Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 25 Apr 2024 17:09:37 -0700 Subject: [PATCH 0153/1239] Learn Editor: Update c5243.md From 71a6daaab075e27fe52c387aa773a443f2a17495 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 29 Apr 2024 16:07:39 -0700 Subject: [PATCH 0154/1239] draft --- .../tutorials/build-insights-function-view.md | 2 +- .../build-insights-included-files-view.md | 119 ++++++++++++------ docs/build-insights/tutorials/image.png | Bin 0 -> 85774 bytes .../media/Included-files-expanded-view.png | Bin 44073 -> 0 bytes .../media/build-insights-rebuild-project.png | Bin 0 -> 16923 bytes .../media/include-tree-view-expanded.png | Bin 50016 -> 36677 bytes .../tutorials/media/include-tree-view.png | Bin 34633 -> 35170 bytes .../media/included-files-after-fix.png | Bin 0 -> 19255 bytes .../media/included-files-before-fix.png | Bin 0 -> 52839 bytes .../media/included-files-translation-unit.png | Bin 0 -> 16187 bytes .../tutorials/media/included-files-view.png | Bin 60362 -> 0 bytes 11 files changed, 83 insertions(+), 38 deletions(-) create mode 100644 docs/build-insights/tutorials/image.png delete mode 100644 docs/build-insights/tutorials/media/Included-files-expanded-view.png create mode 100644 docs/build-insights/tutorials/media/build-insights-rebuild-project.png create mode 100644 docs/build-insights/tutorials/media/included-files-after-fix.png create mode 100644 docs/build-insights/tutorials/media/included-files-before-fix.png create mode 100644 docs/build-insights/tutorials/media/included-files-translation-unit.png delete mode 100644 docs/build-insights/tutorials/media/included-files-view.png diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 73dcefad28..ab7eb845d9 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -11,7 +11,7 @@ Use Build Insights **Functions** view to troubleshoot the impact of function inl ## Prerequisites - Visual Studio 2022 17.8 or greater. -- C++ Build insights is enabled by default if you installed either the Desktop development with C++ workload or the Game development with C++ workload. +- C++ Build insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 070abefe63..2093995b57 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -11,7 +11,7 @@ Use Build Insights **Included Files** and **Include Tree** views to troubleshoot ## Prerequisites - Visual Studio 2022 17.8 or greater. -- C++ Build insights is enabled by default if you installed either the Desktop development with C++ workload or the Game development with C++ workload. +- C++ Build insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. @@ -25,83 +25,124 @@ The list of installed components is shown. C++ Build Insights is highlighted and Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file as well as a view of which header files are included by other header files. -In this article, learn how to use the Build Insights **Included Files** view to identify bottlenecks in your build process and improve build time. +In this article, learn how to use the Build Insights **Included Files** view to identify bottlenecks in your build process and improve build time. We'll use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. ## Set build options -First, set the build options for the type of build you want to measure. For example, if you are most concerned about your x64 debug build times set the build for **Debug** and **x64**: +Before gathering Build Insights data, set the build options for the type of build you want to measure. For example, if you are concerned about your x64 debug build time, set the build for **Debug** and **x64**: - In the **Solution Configurations** dropdown, choose **Debug**. - In the **Solution Platforms** dropdown, choose **x64**. -:::image type="complex" source="./media/build-options.png" alt-text="Screenshot showing the Solution Configuration dropdowns" with options for Debug, Release. The Solution Platform dropdown is set to x64"::: +:::image type="complex" source="./media/build-options.png" alt-text="Screenshot showing the Solution Configuration dropdowns."::: The Solution Configuration dropdown is shown with options for Debug and Release. The Solution Platform dropdown is set to x64 :::image-end::: - Click **OK** to close the dialog. -## Run build insights +## Run Build Insights -On a project of your choosing, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. You can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. +The solution for this example calculator project consists of several projects and one of them is taking longer to build than we think it should. We suspect that the time is being spent parsing header files. We'll use Build Insights to investigate. -When the build finishes, an Event Trace Log (ETL) file opens that will be resemble the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. +We first clean the project because we want to make sure to measure the build time for the project and not for just the files may be dirty right now. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** > **Clean only **. + +We then select the project in the **Solution Explorer** and run Build Insights from the Visual Studio menu by choosing **Build** > **Run Build Insights on Selection** > **Build**. + +:::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: + +>[!TIP] +> You can also right-click a project in Solution Explorer and select **Run Build Insights on Build Solution**. Or from the main menu choose **Build** > **Run Build Insights on Selection** > **Rebuild**. + +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the `%temp%` folder on your machine. The generated name is based on the collection time. ## Included Files View -The ETL file has tabs for the different Build Insight views. Choose the **Include Files** tab. This view shows the time spent processing `#include` files. For this example, the first file, `iostream`, is particularly expensive to parse in terms of time. Files that take up 10% or more of the build time are marked with a flame symbol to indicate that it is priority file to investigate. The **Time** column shows that 2.937 seconds were spent parsing this file altogether, which is 11.1% of the overall time spent parsing files. It was parsed 6 times. +The trace file shows the build time--which for this example was 16.404 seconds. -:::image type="complex" source="./media/included-files-view.png" alt-text="Screenshot of the included files view"::: -An example ETL file showing the includes files for a sample project. In the file path column, some files are shown as being particularly expensive to parse in terms of time. They have a fire icon next to them to indicate that they are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed." +There are tabs for the different Build Insight views. Choose the **Included Files** tab. + +This view shows the time spent processing `#include` files. Files that take up 10% or more of the build time are shown with a flame symbol to indicate that it is likely a priority to investigate. + +:::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: +An example ETL file showing the includes files for a sample project. In the file path column, some files are particularly expensive to parse in terms of time. They have a fire icon next to them to indicate that they are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed." :::image-end::: -Click the chevron next to a file to expand the view to show which files include this file. This can give you an idea about how 'popular' this header file is. In this example, `iostream` is included by `main.cpp`, `renderer.cpp`, and it was included 4 times by `Utils.h` What this suggests is that `iostream` is a common header file that is included by many other files. If you can reduce the number of times `iostream` is parsed, you can improve your build time. We'll talk about how to do that in the next section. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time, and thus are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed. -The next file in the list is `istream`. Expand that file to see that it is included by `iostream` six times. This increases our desire to find a way to reduce how many times `iostream` is parsed, because that would also reduce the number of times `istream` is parsed, which would improve build time given that parsing it also consumes 11.1% of the overall build time. +The first header file highlighted in this list is `winrtHeaders.h` It takes 50% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. -:::image type="complex" source="./media/included-files-expanded-view.png" alt-text="Screenshot of the included files view"::: -An example ETL file showing the includes files for a sample project. In the file path column, some files are shown as being particularly expensive to parse in terms of time. They have a fire icon next to them to indicate that they are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed." -:::image-end::: +Click the chevron next to each header to see which file is including it. The **Parse Count** column can also be helpful by pointing out how many times a header file is included by other files. -We could likewise examine the other files in the list to see if there are other common header files that are parsed multiple times, and consider ways to reduce the number of times they are parsed. +The **Translation Unit** column shows which translation unit was being processed when the file was included. It will list which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included when `Grapher.cpp` was being compiled: + +:::image type="content" source="./media/included-files-translation-unit.png" alt-text=""::: + +We know that `winrtHeaders.h` is expensive to parse, but we can find out more. We can use the **Include Tree** view to see which files `winrtHeaders.h` includes. ## Include Tree View -The **Include Tree** view shows the hierarchy of `#include` files. It shows which files include other files, and which files are included by other files. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. Select the **Include Tree** tab in the ETL file to see the Include Tree view: +Expanding an entry in the **Include Tree** view shows which files that entry includes. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. + +Select the **Include Tree** tab in the ETL file to see the Include Tree view: :::image type="complex" source="./media/include-tree-view.png" alt-text="Screenshot of the Include Tree view"::: An example ETL file showing the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. :::image-end::: -In this example, we see that the file `CollisionDetector.cpp` includes two files (as indicated in the **Include Count** column) and took 1.439 seconds (or 5.4% of the overall build time) to parse. Select the chevron next to `CollisionDetector.cpp` to see what files it includes. We can do this recursively. For example, `CollisionDetector.cpp` includes `CollisionDetector.h`, which includes `PhysicsObject.h` and `vector`. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed: +In this view, we see the header files that are included by other files. The **File Path** column shows each file that includes other files, along with how many files it includes in the **Include Count** and the time it took to parse it. -:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the Include Tree view with an expanded node"::: -The include tree for a project with CollisionDetector.cpp expanded showing that it includes Utils.h and CollisionDector.h. CollisionDetector.h is also expanded, showing that it includes PhysicsObject.h and vector. +Earlier, we saw that `winrtHeaders.h` is expensive file to parse. Let's dig in to see what else we can find out about this header. + +In the Filter Files text box, enter `winrtHeaders` to filter the view to entries that contain `winrtHeaders` in the name. Click the chevron next to `winrtHeaders` to see which files it includes. + +:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the Include Tree view"::: +An example ETL file showing the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. :::image-end::: +We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h`. Not only that, we see that this file includes 21 other header files, two of which are also on the hot list. If we improve the time it takes to process `winrtHeaders.h`, that'll address the processing time for multiple expensive headers -The example ETL file shows the include tree for a project. In the file path column, each file that includes other files is listed, along with how many times it was included. The project that it was included in is also listed. Select the chevron next to a file to expand the view to see which files include this file. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. +The technique we'll use to process it faster is precompiled headers. ## Improve build time with precompiled headers -Because we know that `iostream` is +Because we know from the **Included Files** view that `winrtHeaders` is one of the most expensive headers to parse, and because we know from the **Include Tree** view that `winrtHeaders` also includes several other header files that are expensive3 to parse, we'll build a [Precompiled header file](../build/creating-precompiled-header-files.md) (PCH) out of those headers to reduce the number of times these files are parsed. -show how to build a precompiled header or link to topic for it - - this topic shows how to build PCH: https://devblogs.microsoft.com/cppblog/faster-builds-with-pch-suggestions-from-c-build-insights/ -Talk about header units +In the example project, we added `pch.h` that includes these headers, and looks like this: -In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. +```cpp +#ifndef CALC_PCH +#define CALC_PCH -:::image type="complex" source="./media/" alt-text="alt text stuff"::: -Just show the functions tab portion of the dialog with the forceinline size column, time column -:::image-end::: +#include + +#endif // CALC_PCH +``` + +PCH files must be compiled before they can be used. So we add a file, arbitrarily named `pch.cpp`, that includes `pch.h`. It looks like this: + +```cpp +#include "pch.h" +``` + +Then we set our project to use the PCH. In the project properties, navigate to **C/C++** > **Precompiled Headers** and set **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. + +:::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: + +To use the PCH, we add it as the first entry in all the source files. Or, for simplicity, we can do this by modifying the project properties to include `pch.h` at the beginning of every file in the solution even if we don’t explicitly add an include directive. That's done in the project properties: **C/C++** > **Advanced** > **Forced Include File** to `pch.h`. -The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. These numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is particularly high and is worth investigating. +Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary, though, because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes around for clarity, or in case the PCH changes to no longer include that particular header file. -The `Project` column indicates which project the function belongs to. Double click the **File** column to go to the source file where the function is defined. +## Test the changes -Select the chevron next to a function to expand the function and see the list of inline functions that were expanded inside it. The functions that were inlined inside this function are listed and their individual size is shown in terms of generated instructions. Higher is worse. Highlighting `__forceinline` information is important because excessive use of `__forceinline` functions can significantly slow compilation. +We first clean the project to make sure we are comparing the same thing as before. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** > **Clean only **. -You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. +Because this project uses a precompiled header (PCH), we don't want to measure time spent building the PCH because that only happens once. We do this by loading the pch.cpp file and choosing **Ctrl+F7** to build just this file. We could also compile this file by right-clicking `pch.cpp` in the solution explorer and choosing `Compile`. + +Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** >> **Run Build Insights on Build**. When the ETL files appears, we see that build time has gone from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it is being pulled in via the precompiled header. + +:::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: + +This example uses precompiled headers because they are a common solution for code prior to C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. See [Compare header units, modules, and precompiled headers](../build/compare-inclusion-methods.md) for more information. ## Navigate between views @@ -112,6 +153,11 @@ double-click to go to the file open WPA window Drag columns to change order +Save as, the ETL file for future use + +rt-click, switch between views + +double click, or to go to a file or right-click context menu Filter box: One of the files it includes is `Utils.h`. In the filter box, you can search for a specific file to see where what all it includes. In this example, we've searched for `Utils.h` and then selected the chevron next to its name. We see that it includes `iostream` and `chrono`. include-tree-view-utils-h-expanded.png @@ -121,14 +167,13 @@ If you forget what exactly the view is showing you, hover over the tab to see a ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. +- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. It won't appear if nothing actually builds so your build may not be 'dirty'. - If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. ## See also -video pure virtual c++ 2023: https://youtu.be/P63jEa85pFg - -[Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ +[Compare header units, modules, and precompiled headers](../build/compare-inclusion-methods.md)\ +[Build Insights in Visual Studio video - Pure Virtual C++ 2023](https://learn.microsoft.com/en-us/events/pure-virtual-cpp-2023/build-insights-in-visual-studio) [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ [Reference: vcperf commands](../reference/vcperf-commands.md)\ [Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ diff --git a/docs/build-insights/tutorials/image.png b/docs/build-insights/tutorials/image.png new file mode 100644 index 0000000000000000000000000000000000000000..60b0288d5d14257cde0eda13db7d44d1898c6e50 GIT binary patch literal 85774 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 P`%qEPcu*i``tpAO-EcKt literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/Included-files-expanded-view.png b/docs/build-insights/tutorials/media/Included-files-expanded-view.png deleted file mode 100644 index 8da516679b96d3233ce17e09b6db799321c5ece9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44073 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≻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 z

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 GkNqD_$@Pl> literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/include-tree-view-expanded.png b/docs/build-insights/tutorials/media/include-tree-view-expanded.png index 7c1a3b3a623a14455bbb7165ea4fddd9332a3ace..faf85ed935026280a0771b3beb1c4159820eaceb 100644 GIT binary patch literal 36677 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

5LS?Pl=hVP1vd7rkQMrp6w0~My(91nhO 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 adeA%3BV# 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 DnzS1m diff --git a/docs/build-insights/tutorials/media/included-files-after-fix.png b/docs/build-insights/tutorials/media/included-files-after-fix.png new file mode 100644 index 0000000000000000000000000000000000000000..42691ef4b66bbdfbbd2a827042c4a26e42cad183 GIT binary patch literal 19255 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 p`Ev9Hc28G7mvv4FO#t!)J^cUx literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/included-files-before-fix.png b/docs/build-insights/tutorials/media/included-files-before-fix.png new file mode 100644 index 0000000000000000000000000000000000000000..309bf01f1179ef9af7b2c5db2191d79dc4ed83f4 GIT binary patch literal 52839 zcmeFZc|4Tg`#-J_Q3;8Xr9~t6;m>Dzky{Xsh^?tuUpYQkg{rvI!?|XZA9Ori5=UnGH*SXGhp4WBV;kOKQ z_H!NOVqsy~f8+XJA^U-*xi-_i?tB>nGCAKhm<1R=W14P(sg#!%CPp-{wf+ zm&aa@Tia-Nq&G&(5>h8jy6D>1rpk2>E2qmfmzFw4tOTdFc~ z?6V=Ex(wH@LU*UpFdG{v!SmA6!T_~9SE^E?C9DoF#$suf%5mxUJxli>OLjb$#@AiH z>uMFH)p8l?W{k6M}t6#t`ko9-{v>>N(L0%{8vES7T6_45Q zf^8fIaa*LLZ?-XaO6?ZYr$P}C58bQ&hQU@PdOX*AhI)hXHa zj&5ny{C!~o!1WfMt3Og#Roo5h)dq48JH1KKBVJ^WDn3`qhn z4?ETrJng50uOI#J4WYFc2so6v6eWJA(8$<=8^jix31Cbt}1^;b4FAXYrt3gK@~R7x7)mTvfv;FQ0rqxcBVbOPVg& zO5|DrpH?yXr19Q=xZU~`c`vfl_zDH_4t!Ra^V?0PsMSuP# zJFwa2aoy1ngF|7AOT4f5-$+7kK9-Z+C(pe8^sJk}$kOe+LGy@w56##1M|4detPy;l zWf!R}P4S`=#V@J=Tv!f`wH zWD8n!Q+SD?bF@|gARw1xFAyXikp7vnB&0y#jm!VnYfG~L2@U;+bL>a~wA8;)c@WTF zzpn*0q`;p)HDeZi7v~q#P5%0yr8KbK|5R>C{PWJ|e|<-@VE3O#KJjrH|Mlvlp8I--@9;jT>{dP zsA3Ig%pz(eW&MX*M^CGmH2I~bKwd*GK^NXpHk-gMsmsu30A1~v(mpm z@ud{|cKDB5i~9WB<*_(;TS~~FoCzjnb6~N`xWz{myzECQH<3vpY9U*j;;*UGvWTJ4 zr}g`1hU`)lbzUBm^Txrv<=YP$?KFO2Xy18=$2^Y55uWFDPD#qhKUgODpIbibM!K18AOcl2xy#cjhR*7>KeheZ)64hS|(CV z-oSX^or``?iy6m{*IGBdyz&FQ`O{K6*@;(iKGk_6&i#1D z_5}8qy^1aMc`a|wYX~KuH8;NdmBbT;X%h9n$=Sc+saQoi*lEN6LsClU>P;rY2qY>s zCmU`EY7~VRc&nvz_OFJU?a*8B=Ec1NMi!X)(YG$g#pS9aIef^3(YV##JA%zxC)Kb& z9z({MV^8s3(~jX!F23Vu@l8w9Fc9P-+Mb!Kp3Y?)!CieC8>&9LGSN^IT2*RucjOLL z0L{udB5*1|Xr;8Q8XG`xv?wZ6cLJ@wjxLWgQpJv4U{J$dvtB)vt5Y>Se;l&26ZV5I z?=_}^Il_A*OA+6~`|(Qwy)k-M@L4$XfH%5^_gy!OHBR4dP5D|nd+Oqp&IlSj>mdh_Mq zcOR`=EfDaP!G`nj)$5Oc<2RMzqOYbeHQS<3O4omII~bzASF*iiz#N}vfuNIM4OhAD zN_Zw@1&_O)Uh!3rt3EXFbZp=Tsln0Au((M3esMk(9oHWq)HQtFOJ2?Id+a0HOYf?B z4J(P)y7{}s)V$gP7{nCs+2FnXqGB)X>k^_I&pxYJGOR3&jWCMHnv*y9V9`)@hE)9} zY>fzy_6Urb$K>A?+u8903+3NgYB+b?ct<|*+}K>O`hY35<_XI9P=aS(%8NIa(`j$p zQR_hq^ZNOa(B*=q@oJ1f_NhbPRwcod8^nqZSbIa^ve@?z*uujGF7;^TL9DOIgCbrY z?N-;(%jUx`W>ef9>W;F939?oz5l$r*znbmj?}vw0xq_dE-+jR?H$8bxDHGnzv&$zr z03PHbWy-&5y}GFD(bONC8O;&px>=;eh}r|ryk6X`h=8%wB@iR)d-}?MS)cl5Jx{+$ zyf8XgQutHJ9tFWTi;;i4bu=P_hZ<+EBVg0R^AUnOA}ADpPY`Wp2)R+<1-8l{CR)bi z3-L$>`1cs1b-^<0z@i@B8wO?)!OGm++}f7!CQ#Fy;jGe+zU`@!(sy0V_;H3?G1-ut zAC`Pl@|ViSsD~j=JGo5q`}KoriH#;L1EgN*pHuyM1&6PEbhc>vP*Nfl6)AxXm)7RW zxu})8=NnWS;^BLueA zyF>E6riEI*n`wmu-VjMh!2%ektv%7fSnL>$=IS!~u64z6^i0-3$@9I!D|y8wd}y}4 z6z^Kv*v%g_laI@_Oa||x6QO$q{m#Bq=8TuQJ$$*~{qQ`WYVdRMdrWa;%;fbSDo5CJ z4(B^)u*-?wLf)hO5~mFbMUr_=EJ4KHO*%W^Wu|XWC7ql)*K`{PQ+#FkTk{AR|I&%A zf=Eofo{<=p-R*JQLHW~?T1LfyA3Ge_IuAt)u9c}su~*?ywv+KJM8_afiiSlL8MEE@4WBvUI~aA zn{GE~+PNLm?U|$-u>Tw+SO^>5JC5v|Y>Zw<;DW`X;UTN(P4`h{^E}=LHKdae=QeOl zlb^}r31_DW-%qklblnRZA6g}MD8F!^@f?IkFH#EOkDkzpK2P<}Ri}IBAuv97hBFJr z%qoMfJbep}7|>b>x6$2q0^)J&7>z#{o}N@SGw8w)w(2yGMUfsI6+EV2Qywq7Ee!8( zboh7GzUp9_^%raK?bkO=e9i^u_;AAdNb7=-&V-h8xub5U>g$o2=wj$+a=Q3}u2EXp zT5g7=M529UX(_{|(Qx7IG7o||GhjARp>#_OP83d%xyOkOl~d_u;g3b_T5hdSW>4e0eNZYNW%zg=~d0bf6o^T!@Y z<=b-@O@EVPXA^h6PB$bgV*T=!Lpf3Bjak?AzGc4(vm^)})%jyESXRruvLuAXRxjEd zM8h=G`Xc)RsMqRijhC)U?e%5$s-y^h{9{A}lCE1IW0cB*ftI_EWLZjx|2U;p?6Pk1 zG3>Z9hyUxG-xh3O!kpgURtHPYem1F{!LYCdp8FpfERqlp#M)o>3kyU~{I@~}n!CIA zf7a^0GmzP~w%&K~Tu!P3PQFvvnIKA>-F)_#?W~4joW$+C(}%I6&T80EVnuO@t&Q`; z;j*UD>M7l#X^9?NvSzusW9 zZs3^HNF}AqSIyW9m18bvlUJVgtz7Cau6_!hV9Plur8g7gh`!}JwWOMotf6p{ZTOi^ zgLOw#>9S0cB2i{+Ll&WZZcy1V)51TdVgZ_MX+~{>+7cB_;-&6WG?bI>VZ${W z{oL4I{IbjNXW(G@d+-aE`;dJRF@~l#S36(C7d5#QiLrG~CRWVvM`2Y;+j@IdY+DsE z*zwG^NlDwb_ZF#=?z3_8BFb_fLF7%h6=e--@jSkHk#k=UB}cS$nt8e#(}ga^Ue1?`dk$WRbGwi1=pPy z<&@g|?XWSqMCzJh z97^_5lPUT5kdCx&fy@w*XzrFoL|vKnMdc}Ait(I3^nl@Z4cI7CsEtrul-LX7bo8zlk z9gc^Jm5-Qqy{yn!Eg{VkF43!nnoy-fYf+Y1vixs;THX_iv?QH4a}p9egB^$IfjZP- z8*XpokIPN6efORD9Nmt}Fw(Ofk3epYHC=m=gh(2KSvH>^ayNNkHOW3$RY4=6+A;@} zzY!=JwvtJ;F;}`o<*kWk*%m7IcI!X?HtRi7sT|+xGG=`^_I=ys(H|doEeOZ%=XCasXLPVD(vTq26tuT0{ zub+euEt0Vw!r(7@yyQ=*Aza$?-YLaZ>7k26ZHA?p--@c#Zj=dfR;(cH{qV|E$Ust* zG6}0EQ*>f5Ww{y~F*dNI;EytiR<4F;4H2tIV~xIzu!B~#5b7GM@yFpf8Bk?UlEp@< z2twafxfWU$Uq)AFevryFi;c&OdFNMyXU#4<^v|#|`fMa2Mf82Y*$9ztJOQC^h|}N7 zABW6yz+5mbrmHBy1nhdfT2!3dBZ7c2x&-?4L(lU=`#zD$*CUNtruPR$k(ZfMG*O}bs_p6q5Jq~Duj({9z(Bk`?uaY6R?XUK*o5Z1( z{lA@mGv`_AE2ff{WD1KOcakYaE_?%54K2dI@D7<4cu|LW(@(qd@oW%U!c77Rs)7jyjPahww-~ z#1ReS#*8~%k55$AH_Gy&B`nk)_5PARF*%WmoP0ByE6cKngc2QLqYBM)av zUC%{45lOilsPuSJ`y*_g9iJ(D&-83m3dZ_AZgeD$UYUYY|2>$%7`sb#EeHu8lt9>Q zhk_yQqb0OyWGh-u8jgeqmGbVjC?Dc_i=C;Y&0xE`-}p|l##Suz_-S=XG;S5b^}UJ& zBqlrNAiVDPedwFnNi*6~*IgLeHys-y^hX{MLrsu^Vz94V9j8<3OE;+3){6%Y8M7qg z&1J_Ny=wYLX4onPRQ+A5AMQ;IfO(8`kigeYh1`qHS3fP64;K3sW9fHJKYzdvRgW)t z=rV$*&V7r8)SkidjtunTUP`tZP`f0Q_q=brCBw%x|O}m%tLh&P0%PpyUJ$?kD1TQ}`tb z^TT2)Q3=W^UCSRr6Ao@=uOL$pDnr}n=qfQ3l4tYwWeUGDX!*LVbmQKDs z{IUI8m5s8zi71D7L=Ax} zIFOr1@qN=ivhbPH9{0~67y`C4b(#92g5-3)Dp}>OloiUA9@!*h9~Vi|yA<4b1-ws5 zIJw|G^~i4)6r2OB0~5}T>hCk*_A(;BZ?b%SW*xqzW-RAg1C{qlEZzObvbl zb-*|_YXj_hm`6-Gt0S>FGq}&%Vg4hf`)!A9&({U_wO?O+m+)bP>Z$8WB50Yg!_o1S z*~4bFzq;!d)_P55uwB;WVFN58A*dgg${L$(JO3^>U$;ESM!K?rg%%ZeQ8) zA1;TrWyG34fp3N(1{)}@OtLFsOGSDO2Ov7m;DgLbi!E*sQlANi5r;xK(&n2GTTNK$ zve6SQNSAU;GjnsLX!W({Lsh;-k+Yfls2#LrQ22yWc#f7qfvCDqXIooa9D<$?bjjQz zVwc7+SODo7Ue6DhmYOMpuFl?c9 z)9{y6VHpT`HQcbca9^herLalVgLwK~#cZ;FTkTdX^9$C4N#BU{yr6DcaOWnoiMc5z z(+H-fgP$8dt7%J^r13yY_9TGCsF!86bixdP zfBD`n=x&_q(h-BcrF;!yovB`iA&P zD=HFnY_JwldxoftAS%yHi7_u-S>XE0E=6LE^5)An)F8d9*jj7FZfymW9@Cnf?_h3q zU~%*@TtyUxl}FujoWA63M?{W4t;CBwoQ=G+;%`sl_Bv z9MUmJYn1O$w;o@4rd;mdI8e)gdi32hi4PNlUwZg5m1DPOiqF<+lUWLE(OS%d9^1<8 zSI;h$D_h)OHKUj>H(=@!6`zy@okBP`G>4x~;9uXhJ6CVLAQbegixf1`g^XEZWln&% zI5xytkOJ!;*F$0s8}nUPscZQV#idUL_}t;FKKJ&D-=q$=rVMy46Cd-lBVa~;sWAg! z5x+*Yl=Gpwm3QWQGgo1Rl7R$S*u0*L(YGE>zLNF#-$(-%%WH2e>AhK?Y0zMouNGo^ zzCcdD`u9jf9Gt0NIY6(_`Vw>XDI36C%@9+VRS(OSs)z;~-;Yf?T+&6xuyv#`=2I%6 zx?qhAWw+~xCbAbc_ihtyu{9|;LSu=7J}A=N*wsSZJ`sjXJec~#vcow*U~(QUaynS)mneQD?|4D`Etpjb#WHQ?#(j*mNcQe!3r$+X5e6%e5osIq4-Fa zNx4f6#g@3t7_0Sw-84+K7rz7YYgrerT@_xUO2nE@x};XhbV@_A!E=f-)K}uB>8J-j zQK64$VTjGJCH@Dx>5@k$?xnTLVA@Fc3`~PAO4RA5ysriDRB2FOChFMOK8MjB73aJ5 z{MxY9G{Nd0Ta0C9jsIArQsnv}x(T3J#-P-Xg*biYwP5c4l^ed#XAz7JW(AC@KLu}n zFD*m3m+u$jyVflEw(_ezAa~YD{RqEDKp#e<+2G24pGw(I{`)PLJ?1L$dGcV&Tkw1f zqd8^k25n|Hq8f_t&z%95tlq+In>t;?=W|d;ddV@qYlrL-)DDeogQQF5+79azcALYj z4adYn4j2sZ8&ijWnAB4HoK*O9*PlJ``JzLa2VI7(@`G3T2^wJ_774kluHWc`(eyY# za}jExHH4zq^Ew6Hepkd!b%xo#Gq6rhE`RepL!r{bNUYODWNu>LmBpukBjB~r)q?Ji znR^X|d1TT!hi`Rzx6BD}`-R4Vuo+kma~wYN6vRQh2cN;Cv3_fn-z`FV`or?IZvK4{ z;AtKlKWlJ0yA*aWRg}+JQx}KL)aPno>bv^A9SNNCOb}KOn=|qr4(y3~zC^X3$t*KAK|hLwRK8x9H0V1Uct;@%@iHL-y7N zu%@25aK7r#I%3E>7TtcOb{(Ql2mN31qdmc?%X;1TD6Mz#%U~)${w@C2~;b-l+Bm89lf>95j( z3I+{+P@3p-Tq>dr(e&2ISx0;}!adupVTqK`!RO)xU1@se4(Vnp)MiI|@;LEOeim)FN+ zDD#-}^#=b$S zuAY}o3cEkTaq|ghQjaj}`k@%M^RkyWeEf*dK=wZeSnn!v8uOWYM!_W~co;uB6%>%&T4&wlZd!-hsc+)=N>-ze0a}1tZ#OnF>qlwXcpA2K+l=LBm z)%j}?Cijd0d5-JpNgKuA?-lG-Rxh21v81jmjdpTY%5`tF&atwcFAfH%)6mZ-e>0aQ zd=!=+n%AYCnssd}_y|>=J;UTVAQX6SYR7Qr>DNjN>kI0&2h`1g3FB9z+c}?McqW-^ zOjGLS0M#?Az%x!v-YCzyq409PqF9zvyG>muK!%|>8Xxo922ZP3~U}XQ-u;Abo1@Pp!?T(1kv83ZaTD(m`A$A zAkf`R9*;TfSt`HOA@79C3XLB5to-ko{SRIB$45V`dEz+JgsxM0(Y?UASR!t%YdnJ7 zuqh=}57?X69^IQ3AVxkYC(ElT*`|r@NwAJE7Doi7j2v-h>>Yn;BOc zfK>wrqSk;x8P0u+Zep7g5U-T$($<4rPHF764XzR9f21dTZTM9uR@O8t%h2>YlJOH6 zQ{#UH{FIk^VoSt$IE1ZE_tE=t(Nv3rGbyP?iw;Dc={dE6bkPss`u<^}ld zr2w|C$AUlZ16F8j?S_BtEW<#d;k{DiyXgLle%uQjh!u`8D4+I+^K)Vh5#t9P^*oYY z(WYJ1$jLT#sp$_qQ2Rw9DP?JyIbFLYX!3rBJNyhaHDz2i6`qD)hw>!|SEXou6syx6 zn3I-#;Cd!=+r2l=XqKdQ5@X@>v7^ug`Azu7%C@3Ev)8yl2~fd%(fa{W3hv8T4-r6v zRDdvym!nd3mV}>x8(4a~`s|J6e&7WIaR`1lvP1?bb|Fhd|Fc$iU9+H{oz2kv?+%gxze2^1Wh{eJ&hV?Vj8?t$PzG!!U!4x&jc|54+*_NQ~8*zO#lVVjh{ zYXUFWes>Pgu-!R8!!{{@*K($Nvu%o=&c)H0o=UJ=FGau(c(o_*4PMMHKj;eiAWX}i z?joeu60bu=j`du#8b!t|s6FC1=`7iL{iqAm@((tprgqX_F9;6| zrq^UZ;imXASh>%#u}b@T%cc&Y7091ln@Go%uwz$SFZF*es1+Fym3~p}MvxPSNH;D1 z{17!=&gKZ&YLbA|GPZcVJ;a(q4zRi>?)KQ`Sg&LkrvXAN4PO3WF~D97YTu>-+}X3?5py^2t2n-`fE&69D(kN|is_C2Rar`V7=R z?B~ceij15Z`Vms7o`>Qe(h)9mBQ=z79}y^Oc~S5ApL*qr#ahybx6*Qn&r#mMJEN9-$eIMW)&@UX5vi!&+g%|TGv^*x8 zvu27M>Myv|=}x^QuTSxzi|szZI?LIlq6CI}W`U+aRi_b6B`IN+C7J~Xc%&Hz(eAUJwkN&Q07niNskx(CTh)!^$2pb+S&mM?F!om(CIQu7pEJZ{)`?~@yMfU%$ zZ5JO3cmHliYw7?JdI^}B?M5QOY0~?;XmBQ=+eu;=SY{Kd_%xcVZlIK4ZNsgNnXzuK2YrJ z-`J+;pqEnK;*>B9_$HwJi}bI>LrygN8}DMy-?vbDh}jsPsvvZ6=#Kc~56hR#pCf*K zT~s6Te&(s$bLZIm3La$y1&r z(R&E9S=hy(I}gCL%0qS@o$MU8*y18sf7lOFBI+9~N)HvguO8Dwa%A5fJ@B*duCa=B zsd&!aGA=N{QA6&Vnyy2R*W-n_4ac1GwsNJ~#_0QozY;On7~@YabZ>Xza+nv z@b^s^dAMgn+rLG|>c*wjL&NjWxdpS$kR>?k#TAe{ZT4r_CnL(G^M_D13ql{6$RA6u zYnMwkJTMTnZwmQ26mSlPEX2#(wE?J!#LfvlQl|39`Sa(0vEw1&>E@qTZl$DrQCRdH z@Rbo?e|N#$LczP%s>R6<&zfW?q*Kok&|rNcRY^G>FZx)!dq0ccLS=K}h7#opblLe~ zTV}UrQQ`RdaFX-rgF3(OWD=!6pNDN?q&Qu&3ZDa)yp|d-KAM@q(FR5B!2{u(z)&AF zhj+{P+?RRgJ}cGq3fZ^BQ31PJ_xXEz+W>}e>Oe6McG2x>waE4W@08~j=g0UD4l-V? z_I}!Ye=80FoVg zslm9BQe-o1>OCc(lzS@E9T~&@VqvWrK9tkV}#ighLqlO+(R zXV{*QWA6WwNKYIvw^?e}5HTNh&P%N9UNm2yRba`?%#$w?D`2L$awNeQ^lOavZI(RS z_U5%?91Q)($*m*p@+fmzFw0W{VEb=0H@~Y`Vr^3v)|-9!R*86vKROeUK4_+Z!CkV+ z+nUp@xwe0M0t!@rU2zbsLXVF&dB|S39UIRdLMi#93(B~(v4oNG%_j}PhZNyr^R1_M zKU;1s=`8lmHv1CEeWfgRpUu0?^wKoVdrDlprWAEPNq$F`O<5v8RbR8Al$`E3MtnOm zjH%hz-#-X`?061hrrK8qdryGf2Z@e|@+|m>&2wCxX0$eS@;7R3g8Q@PpI{U~SNwXi zsvnIR6?DJt(-HOk?le-GE0AM`R6IJSaQ=G=B29VP+(d%c{bj{@^^B3So&!#@N5?G3 zJ>!Qcb7}VU-`ZDgi)oIiOR`<=eiJ3I zA9*dH+Yu`po__(OKwdAJ23!u`^yPC|NUY8M4(#6j{S-hK7@0Ki9D4A+jdkE=d@JaX z^9KD9K0&pN&=KgU!_%l#Lyp^%95pagwxmStFQf37Ip8bWM)h$gUAhCrRyP$$5b~&f z!&a_Y;f_B#Zl8NvF}L}9vZ=4uuZ=3_gb@q3!gS)bAYT0A0SYLuxhL7^=tzzmY7|~L z#@}6Iz?F9;@zO_)T_&-lvr<0C3Qh0i^J#>4RWyq10qwsQvDk2_+$9cMt)rpRy)T6LVk{*UX z=lm1y_^>Aq()DGjiLYFS6Gv(Q#UaD@!@uo?zq?d;@XZ514lU=$32DDtwbmudIi;Mc zY$rQkdKe=zq?NVDUnmhX6fGUT_2lc7D(8Te5V&t3eelk8{$Pc#k`ctvzS(xva#MtY z2!C`=ZAbIYCVfl(@2v+cwDCmOau60b8ch8%@!-(j;tj6pMTa zR!)PAGL=u2eujM-k-CO^OsiphG(UHeoH^QYCmCW`QDd7wT%7Xj1~~_gSSHdWf9Aay zE^1}Gb-ohCmp@!71PjY!o zgbH#M4xfd1G=q0m+|r>O~&r6gpEhx*i16T%VUG5e7Z(gC*e!g<9EX@7(21cdfY zvCGHA8lHr)R9z^U?Z7$brTT5$2P?5#&9Xa^@AW2%?5){<IJVQXnN=NQGd*Kf6r&=e>B6Q>mHPO-A;I3XvnAw+jH2kzR|{0j=?Rv`Ux7ZPaX3@0B!6UZjNdG0(|l zbQ!f1+hRs!tidZ&7WL4yu&b z|1$sJg`)+)qlYNRrQ4;4mJ6tLmk}qP!OuJNC@zL&?qM8oTY&j4KC4alH~NsZ!zuE58SsAI!poU!C$0b)Qp?mUU&MV%bZ{ukIW9C znRo;}pKLhvi*vs4g&0Kpb&>e%&G>G^yD2I1%JlIHTmETSv#m!1nZp#$bwXCEW8;C< zJi_OBG6RcP=VGSo8@DCV9%7^A6{p#VJaMS;f{JE5^FR&*ld{B-=2Yo#qhdM>-d8ej zS~MM{h85)-%#nr=D3f+B7h@~L&L>=)O+n*h`*gbaZ_OJInXxvnkK6 z--YtidXyr0fY^*nxQ!@$hqoe*E|It+j~QJ!c=apuh69EXt5S8_+ZIG;XWKeYAW-?x zAtU+28uwTQcZG~deyL8%t0&MCzEE{yw?yT0Q7tQ8#nq}~1lG{~i+-7Kw$i*jn-Rej}m(wJ+_qvoG{_PPq3m{%H# zlZm1XcU#~{TL+}#)HiWf*bJSyX745c++7rJ$N<-dH-utjwM|{%-qU~q_oGivW&JRS z#dB9(rOb!gipn9=jUyDjnuP5jB9!Y3gpwqO24OTHo55H<=l;0e)SF>52OJ*TZ335O%wGow7M6bt6$jEpen0W=UdtOX$QY-;VzUYgvyFkc_~4R> zmDf|Y%Qg9SfDdx5tthN*AO-wJpEai=HaVa_@sjU3)E?v54E`)r#INqJ3&ha@9+X|J z*O~3R`Ae|&V=BXRyQQxSt8-JdqJg>vkIf6@GDWwaL+r$@x-C&bz&*qEHxlv(5c#)a z2b1`Ng#6c{;VTmALVFjVu-2x2s^=0BlZoxkD6&nq0AFy-M18sFJlipr%`qW1x%>`n zty!urrRK>$NX;L>=HH97-F2VY&zXf;CLQ_*+WD_keg+agK2pWZ66A`MWX<;`@B2SJ zd~WlAqsRCgcvcMS4wUoc4sX4>$$9 zMcKGBWYk&1mJ^!%<(Ua0{tWblqK5{@-yqmF0QCol`j-Om?+*ZH_dh_`|E}14oz@F?#zJQ?rm6 zg!c@o>iy?}{j-=|F0>~C0j?Tf)DLxt87eRCXo+EzG67`IuwW8eXV^_ZDhHL})Prnz zw*OA`3cr}{v1=OO4dY1$L0BBHSm6xKh_NxA5NT&PxGX_NDDN{_CbA z4pA05h{nebv*YLG?XZl7=?|OK!n*H|!f&%n4ZSXsZITr8Z48*EWRMfLI);iLyt1T6 zC3V=+@smxiA(re@?EhgSK!X7*37&0MkgN*pAEh@~53Tk!lsydct#h`Jmwew5*Rf=A zabPPtn3Y&4E2b>zOu5aDcU?|UX3l-i`r=!;nbRTWMV_7f@<6jdyP$vf-_DlbCdLk@ zzEI}gHesb)efzg?uDIBh%dWHt$^^bPK_9b1w~$Xk%v>pL?|XC%Nvby9oL*a>ci zIgL5{osL3a|E||R^P)XQvVdrHyO|FGqPvk$1#yU^Fdtf$5lJ5cElkF``0hap06&Uv z_ZW-)+ny46jt#$+=OAAKYfll2Q|vL4w>6mF3t-TVpOB=Vt35N7hNA8$#@8}u|2v7Z zo05pNcNH^?P_%w30!RYefKlQq8X~f+E?xW?eZWB+avZQc|I2>yNxPukT-Di@=evjB z@B_b=;b{FZ!S`(?J>Cb}Xya>TGZpm6A=LqHAX(Iv{#{$iP!I>(&xXGwbg$se%4SzQ zY)IW~YZA-Rw$(L_)(0evtFF@czX;$}0VMRA#_bHrydE#>A4E24p@S9UQ^jTj!l86) z6Nqd~V3usUfNmYr=T!tW`PjS_O=H<^AK{>p?s_Yv({?Q*D4cMrnOA8pNpb?QN%-Chhu% zw~$zzRj8#jYh7ijW`T=S9TjhU0X|Y%H=I?$vCW`l!0+&a2QeQCI6b~P8V{!zud3C`Is$Jx(~W0p82%P^M9mI1PYEvu)xPR=m> zh(BRWjF_KGJ-0D66|cb~oxm)m`8El7YXFg8b*uzm!F7>erb)u#f04Bdsc13#WOdU+ z5j$-Fxs2 z$eAC_Ju}@rAiJ6kX$$Pk{G^hj@(>f{9f0NP+?JCv;&OD{Y;=m!LxwE~pj(Vd%)&Y& z5WN8t6-G0PrF2t(#{>)+<3{Y&Vy5fVYvQlDfcAZ>x!h`e;lQ{zbFC3J^S#-oh(_#4 z5Gz43v_32!G+Ok&-^HL0>>uA)*TMzWr_;dA>dx#mM4{V{2B42Bt9%g*#pJ6J-v-Ec zbZcFW!=lWB7L-4vk2_0j$d8>};sDXmlplhEMGoI@W0t0!c1zVyS*X9NK46@3Qs;eJ zO;$<=5VXXk=gi5XzAJz3Rw6=EANXMZ2iSU@K{cD(aP6hUTA`dsCJ zvuB+yjgG@Ou0Ux_<)V(Q=}{|5h-`&NxkhUx@87|@N=o;*{&wg6>%n?m8Zxi3YLsPQ z)AQ#f%@XL=6T6+vyY}m>&fg)&EJDf}>{5a`|D|H*6x zT0^t{<26jxT@m@4fP39W1$>(^mVfn_qYt=e#JeJD>;F2=Tb9f{{Fgkf|Dl`lQk`xs z%byGi7M9)+ezYMB`X`Toh2@sOKZE$UeDt3>v42tYf0M&?N(v%)K!n5kO4IL*P5`HH z6^EGY60!KJ6~Ov1WA_Z$@dpC;)&YGZ(7F0o1a>E2yxi0LmzVb(LT|)78zG!PZ}jmT z=MX_dg_5!T4Hu?$ZRV)&;vZElXjmw4`@6{HKOyos+KGzbez4A9ja-#@9`{g#T55+E zx1Px4M%J}xtk@pO|C-|sS41If#8CsO^!z1-e9?1_Q>RHxEYGjC-xL+V2UC$HCT8`+ z@j6Y)7mpwnFFIAY6+Cdx&xkfdKQk+#{{B3N(z%1^`_D?`qhGp)umJ`J0&P6vIBzYO zV`Y+C^E+WTs)Z9-!V6udOpyhyZai^DZA98O)A|w zw_RiRGOw1QFy^HarLjcWoo2NUqN5;#l$lZkN(F8M_SGZ=M9dFIbfIDWmg*29WM(tRQ z`E49)DcxjQ!6IYIX;jZ^CO|A~?Dy>K>v)drb9r1gHroTz{dO-x<*eo9c;uOz-D#X# zv<*{Byv(~I0@bUsfkyGSU3=Wh%pYZzShjo6+YZLRYw9+EG#K?h`e(gS=J-s|-+1g`4p z_ycr&uH`0J%=?8!ZB^yReJ0+FPt&~FGW~s3e2z+iDn0vRXyQAnw%F@nUHJP`E`byA zx9SqIF**A>1_nr=VaF9i_ohwVrv}&8CGz~D78K+)nIzT ztD4XBGX`gZ^fw!58Z*3;otx(=g5%s9B7UwiJ(vh z>Z$n`w_}F$z=t->;f})flydXEOIgel+IJ6JsR3~etu82|lpm&Pl1dLOS=2;L5Ps)6 zTKX7YFL*}WRDDF%xE;x#t)J|SFujRqbV;0Rt<`yWrYDWiW@h5+PH-DhOa98ITEol7 zN#_z(jaKsM`nYzfu>Y5Dk-&w};w3S&v@e&d_-?*in8z?=E)v)y;P{IbM0=BiX#`vn zwpv>%VE&%BM?0YvL|Wu--Q!Ux+Q>VE9sE$%a603wry58|y#AmMH=S zT0cm?6(2+m2-}#`G8hab-N<9^D1fiS0C1$qQ3jJN|%L5!1->sY#gRrK>_YQHDczvh(DU|AVwAyc8FI!a_Z$51krbA z0AGhY!z^QjP0FkY9&c+FUTF&BZHHZdPG#bfaSyUC#VUN8@^-l}FhiAno@hAQc@`94 zF?+@Eq`}CSnrdV5^-pC7uJNMfGEXGKx+O9zyC0mX>6INAX5Jg2BRJD&w_>nls|T6J z)ClX~MO=XBPL~Br!1q4FwUmN$S_au2nQ55@-HemB`Pl7a5lYy`HRIQ~%X9=GSG~V7 zd8<4-l0h@(Iyyaa(Aov~j*a+j0EuNO-PaT55byWz;+jnE0jmqVKYh8w~Ej!@5hVROeE;g`v~f(!m~!hsmg|x$DET* zlPF#xK5c``BMu>Kjyd{0NQt0f{i`|;Gt&bK^tnv+=KN(|CK4PFk?xCrlVK~>3NE@7 zUp0}!FDr7y6!c2O?x>bfYWJ!Pd(?~U=g}`E)n=`4ztkHi@Aq=~UVMt2aMOQ0A7b%B zBE2_^AVfYjWfa?0P#&pbRA~SW#kUzhQI5qm zUJtZ>DlMtE|FXE`sxPqy6u4u~RT+1H}?Cft7!m<7q5aFF^HFZWQYAgH(=D5u_@mqsGT8W{%^xABq>B8Yf*%d zeIG@VY^gqsUB;5ekZg^$NRlndI+)6yu`_m37~7C-24l%KmNCRIma*KI`h33kZ+q_N zcmH0`pO3#XuCD8v>%7kQ`96>LaUAbPncuvRBPfaEOeU3iP6(|MXL|%Vv1pjL&wW(w zewuVa6(ekIRnE-l1+09qH6D*8w|`coF80?(Z2ZeeN zZ4j+4^J}6D8e*NHJkXqbrqGOYSWdw!i)_ z2$O(Eowa(aL(nZ`Le;w%q*n&KFd}YqE^4M30dm^yH$lW-ez~c-3OTzNoy;-Be4-?Dm zNz*)okEN{QymW0w0mU&hUIy`mY49wi?F?EUy3{sk_E_g6TWlCDQ*n4HwIg@`-StV< zLgi2IoOA9a7RSb&RsCc*jtti1Enmsn7Z5e!aE9#mUg?dwAT3NEmCi2Hkfr<;^O-C0 zv&L=U^I$wa+oAPloA~bRD$(8kvcs|D?ZHfkImRppOvqa)s9v)Hl5-l&rFD9^(fJR- z53CBT1MxTA)Q;v}__wPA?nZGRdrVh9{}D0zV8?)v{ohMlZsK2OQ7xv&jwT)Xw~LKg zoN4gUq{~$wkCG6U2Y=Gh3P61Df`8`K88C8YN8oq#K=BBvmJCQZ ze*X*D6kIVZmXwl0lsWbMSyhWCw?=k9EqPt9{%9l;b04YP1Z;@fT?GFePvRS4nJWxw zrw>qpf7m(wccs$h@kLjhz+z#0JBT=h{D4zIePD zyK@{k%Rd#)cSolj_g;e1)c#>vwjFUV+rNP{aV*jGbEa>p2F42+dlIuM?^bNEf z`AhLET`3EB7i4wd^ILspvd9k-vW-yl0f2i5LKL;J!v1`%dxB$Eb7;0b<;m(#aa}M0 zI~D?GiB;uFH}L{H3${FP72Q@zt;6;&?TNgp+v?q0q{(6{-(TfH_c*M%=-&;%X%$oF zn=jErQ-3ymuMx>C{pYJj#_ry(etC=VCHyUjIstjq-BnI=_SUB@HJc(D3hDCu&gU;6 zphnKfFh|qEMpLh)Xv3^vd3B?IY&XOi=*0OR5R_NZ(e$J*Ed-%->!K4pCdJR1a$6v@ zkr!DP#Q>H=B21ts?#yIL=&|u~Wv9;exuco%j5F*NxYVoVPm?GbawC;UYleGQiUNUeWpJuALkt-~tfK?p$9Eq^vT|L!er zprO=OB3?+t%$!~CEh8tg0XA$Mq>`%|{VdLZ5DhMsJ3#}&I_&N z*Lhz8TLmm$L>i$r8ll2A43*ADXwAwzL2+L@m`ozrQc+>^>k+6VyS>O?4jDrUP#;dPHHHLdNZC#@r?i(oCGcw!Tz$z zCtrIl_#X9B=a++)nOyPzV7{{{<#4kXR8Vs0Nnq5UfaEXQLt%z=|^s6iwUZ+ zz!FNN>C}_#0jIy`udUXDL|a(;=lJv=XO5|39~gx(d=9WNm2g%OP=FY}09Zm4I#p&CqK#B1Em&vlS zKxse{fkRZ2A2RHI0y!N_k&t(VI7 zJ!YF%T={Sx^WxEb1!o~s1E=_s_+u%|%B;mo_{3h_-s0}YYf>e#NQYm+LMlaubHWg_ znG^w6GkM`D7ztkh{#2@Y4b$cQ@Y|*7hlm%*pd9mYJA$OXKWrGQqHEmry zGM%MS-+FCtxWYM|`7yiNm0JmEUA06of68da+t9yQQI|Q;9ET}Bx{BXw5;a#KX;x2>7>Q$ENA5SC^4oddy zS^fCgl8U4)eEOw1(-UrAwyqo8p8z6=&7Fz*?{)9PTietf#o0ezmJ7WITeF;aYwVh+ z?n<)93?u+lRq$jZP;3IY(fWoP!Cu?4NI8)S8t3v>SHB;&i8C5;n;fl2fr$Gco4B&{BlHHk?g6Lv=JubEgAta=qs=qX}F zie^%ixbD+cCw%_BxYr>EZox89x?Tx^l3prOU66Jfy(>~N9-Yj-g*t#B(t4Y89z?+ za6;lE(waBFqhiv^GFUO$M#R)Jbq1fE!&(G0y{NLi`mf8oS^XT1*hOmi*Jz-1vQLZ1 z!f`zF>|{WrA-Mw9t-|y8+WM2Q;T0E&%#vp^!tQm|GXAKr-B6kFL}f<-p4upZ?NuNK z+X~6(0{Sg?a=q*@twfDnAIqe^e>v{fMRw#%Kut4i7Jz+VW|UocVpYtI!%T{C^qy3F z2E~6HY=}7$T%nnwKGe);!j?IqTqKZpVa;U3vHeMv%Kp! z+1#%`=y2aYdc;Y-;#T!W*rOS}AD_M0L-GD1V>h`P{DOcXXF;~XX=}2G(ugF^Q&}p? zf+oH%ln)T}U!1>7MXLxOsw-r)T#*X1p&ZEMDre_@|X$@n10(*P->h+99T8d%QqCx>* zw_ehlYjjZxweIX)+D@bEM8&FrQzi~Yxq2>N8O{ng`&JQmOX3J~4m_Kh`zI@r(M;s? zbWrK&WQ7c=4p89uV2=WfO#e~EMuf^ipWk7F?(K^?^U&tD|68@i8h(#i(lx`hX&}0M zy=`wtM`GQ)E(wk^_3$|6sUKXi3H|!kvUVW7wiQ{r204if7nBWD9z2DUr8SJa{j2*M zOHd+EcnB=p{kgYHLpiZXIg)-om%gG{>m71;uKH`aT~lH|k9EoxSzZhY|F)=r*Sz|? z!(lpDFqC(&orAl?*@!&7k;sv|6eCr!AtS)M%~f7rQi|z7Qq3Vn9E>gCdEZfZu`U7A z|g(_9};?%2T5JFE&&!|L<2Yw>~o)&}}TnZNgvf9G|#AFTSVwD_~Pa+Hd|~+i7`Z z7=kJFdit21&~TSa;p6bvUj_}xtxuMtbc%S%G-=sn5!AyN0$t^Hio#om?QBG)Gvy8T z`JHLl>pG4r$Ly4EgNx@6(APFi-MSrkN)6+Yw7EC?&Q0c#p(J({BhnqR9vSe>y0jY~ zI1dh|-0R+Ww6f*7d6e~c$3r`UYJT7Q%UL6aC0(W=?s&-F8?d`Fx=hguUA3o~T{#FN zt|#)lH4SzD%Jh(F3u?nZg>b*x-sJOE;JlnZ@ zuWi%RzHp$fwC-_V2OcHxld^FQtWml0F*(39;H}A8xWAA<#RMxV4s+|DLYm3pA&hLE z>*r)dc7!jiiHev2B)WgI_aj*qyWRrm5iI{?Loxu0s{wovlO9~bG(KGI`R7tcav2{d zZ5&PiQ}B9m#-OPFdXieM(Wghk5q)a^eL`=OJ7vT4kh zMo|D)77Us?r7L>kl^1S z$)6(q;K744fC=FdJyn3EDg~JEsU3Xn0+^;3WD^ZY*ioveEae^u_K*nJ%Pm+@hRa_r zL=FObR=MUOS+qA_Kyy_-()7Ya&i5E5F^%Xg2O4t6ot9dsa16o+IU{Z?0^I-gt8rJr z+t#RJ7B;^tjXGzKxot92I`Z&I1+~K!I?K|Wl@6ZVbC1e4K8t#+l0CaR!IC47ykGej zMs;n_*@P7pO;Ym-D%%^R%2JPx?~8-dFMy#oxm9faw27Yhn#c7zCPsi0A2zuTiAj1O zP~XWX1uVY2zN;}w{eH;1Yw;hW4nDA&dCRO!A-oRLI|Pv4m47`gB-1L`c03CldoaS_ z2aEiiYx+C6TOX97*Bmxpma zYuRFF2%$g|5f#(@_^j#fG0GE<0BQASdnVrMLV|pj18mxlNN0@<%Yx&VCaLnp-sQjq zIe!!K^hw9EUO@wxsp;;)a{Z>Y$M$R@A~cjfc3kRrnzJ7T{F=8SmxJ`}OSMvZ%pBOm z)HP|E-j9#D?&azm+SYFHWZzsHeB`Q49S6x|R#y%f&NF-V_tP=-x6z`YD@^ziQ?*lY zt$^B;qc;?U?J8#ok;z#`N~d7I{H0B*hjjflx^{+?RZqFQ?AUh?eK93Wo&HYg zX{iB60K;$x}=npf#&=Z~4Qnnq0bH+Kp-P-|Y6F>L6|Tm+gw$_>*69bo@U z;?0% =CtZNMC@+5AdOn=8g&BQEJu5DJ(=9mw%dgi@e*URG!x6-ZOajDnOQ5+}3 z8al%V9{B7@5qXe`S<>Q zh-t$(&}3x*DS5{uA_wIfi&X3C6f9S%$k*SAuIFqh=e|H*SaxE2x9bJ z$2!Nivxp9}tF3w%`OX6gCzQC4+GJs_FuIt@+I7<8=1p6wC|HNaEFRKP?Ys5BB=9tl zEZetAIcd|2hYv0+EWET~5H{3kz(fpk23m-lvjnbGCS??%* z-m9zSa(Y@t_fC6!7ag$S0EfT$3umdc(3Z@R1S z8htlde&l<=m5X5USJZ6iC9p1vnHHkA{>lr!{J=0%a(^i%Ib`C1Z~6J8&VD$}nv~}U zdd#uE?E^&9Ao~XQsat4fX4tRq`NzmaH6AX>BfHHkv!lm;HXC_h4Y!i1qC!%57b?Nu zfTyL@{DmCcB|ug)_m$kZV;l65pf*!#Lb0uKEL+F3pbbG`!aJ`oyQ3O9>r!WVvH(5b zCrWwrK*PYeiw65Qn}x9GcqNuuO95)Mk&nQ0y-R{c*v=#)hGTbO;)ad(7; zuRaO)3WGkm_O=11QIl!cx0Op~g}qjKwQAOe-1^rfk$5778?PkL@@sTdv*VQvfH$G_ zoraVNqgixgHcvz22ys@UtvMY{6$fuXTZT=8hvO{yL{8#PxpQA!j*tfy!3Cp{(=;Ez zNGHf*kxkT?ZWf6ac&LxMg(7el@cgLiZVWN|TiuSLF*s>g~_3YroWW7!^!6K`b zz&0})W;_Z1N@0(GJ}kl~@e1E9X4Yj56w0vKw9=~jF}SZ;Y|>_a5~sRc_5GTZR0K3c zQ**t|t+9i5KRz*K*65%>xpdpoV_tg#YB;72Wj>%GrJ1N(Gc-48r|#7D1P1mtU(VlI zThdh^lYN<9O0=G|a%dKB1Ng)*&!0t2zn~*6I=}3j@G%T4#ytk71BC<{KckX6fV0-0m5iOb~ zZ+m#ykt1?EH;V&ZCvM8p=6Bc%W|#mx@1I2QZ-^1va+?*fY*+Q=PG%2^JGuRyJ)aK9 z0{;Q_ZoCGvPenik5~pL-G(x|!Wcjy8!;t|xxvrffMt>v3ue0&iT>AV2IX|w)X*=_4 z{*%*UZ?mIFv$d!#X41~Fe^p0#bc^4AwUBD$h_qp}w)s~H|BOc?UHrDrfYZYIp_po} z5WEL=$>JchhuisQNEs}YW?AtpSYZ++L8(Uuw?k1YKp-Ebcudq-g!C{=-s@XV+>7nRp_1|X|w%Clt0^z}tTc3q`U`93#KNaO^Y zdaKukw@s`bHt)hA-RWH_cLHR7@e)xu?hjE?o3+DsV2en-QIMt5Q;cYyrx5YD`_J{Bln8(2|o&G@bDyCX^a0db1Z4=qZCD_Ii& z@bG@+C(+qQ=wIH26CK^6EaF0YzzTE=NQ}q5@K%m+xS1tS3cElr~u>e6rHAd2e6lEd4{B3#OIol>w$~uq%FH5paoL4J#1d$n(S2 z+?av%>*G^O7ecW46(@R=bXyaw zzDZ*0WN$`tyukNdZ343;e?V`fucy=pX*Y>!OH>Foqo(;iRtKP6xG|NO`f)TiT6gq| zclF-i33%1DCAT-gv<0jdURF=O=IL6U#z=ZtrY671KST7OdJMU>b7@Se-T$XQP? z(FRKBVl7iJ0gYkHhEE90_O`alSW05O&XSbl1>h25;lo zoeqL^n;-T6h1@^xu}cnmkIi2g<$8KlgLK0+s+6vz z^7|?M{hES{BG>uuzA?|`XZtc46r>*T?F-@kb~souD^yu~wgcTN)6@v)8$#_@ZpNNx zN3E}n`>n_)+5}dcfx)Z`duvgE)ym|=^J=rC9Yc?uJQ3`0XvlADn>TP)IbiQ(TaxdZ5@VHDKmPX|@?2E?sHJ&G<*XHHSaAT+S(!O(?t*pwWw%GMoT$PVY`9;3J z{nWz&^Q8C5o+;j=O$ihADmth_dqY#?)%GZH$RW}st9PIDB|I}77vk& zf$w1pNo7hW{NVnY)*J}5wVsO}CM2!4^cuD$Ez8~SmDEF>5#iWKAqNZY?}2Mib7AK( zM`HBijF2L;w=TSs&eEg@*w973_4-mPY6Pbsn;E!y@+8xYhET09I*Tyx zLn|a~L1%~eA*->{b9+Lxx5&;R9XpE-hCo+xoP&e8jA3#?HApZsW@I_Fes9M4Y%^`K#ADbynBSUu^5Ka3F@AMstBKSjrgLMMyaX6vBVbXpdKK~&s0OJ)oj_4 z)S6Ow8r7nryizt@ELA@F&<4%UE~KM4LQ&c$O+>GU9?9|-Gtej@n-;$|eP_joO^r6P z0CJ_bOX^okr-I}6$DU6|8J1INX}DkO>qGHHKF8vfsI7Q}5F)5sm!UHAqd8M*8Gw ze)4nu*#(B18zZ3^V=v~DN~ml!hw)6;iW0`z1$khwIy0<=W;YfU2$TWCasFY{UJO;< z0cIuJBxNBfp|w3F9FA{+d9HSk+?jiFTJD|1+JXxR8U2XB8R`k|hGb5k@9CGG498c% zR@F+v<_6Kuo)Zdp{Q9agsnj^k{l_u$e8*WfD<5WO4OzSSO;;~h-tbi)!NqgL%%N;o z_l(d(GEF9~mDHDMKGc9o^PYc=8Qz=QbOKc0%1iQs&u{dB_9Ev-KzgdgcK-NQisClW z2djk0>rM`nacE;M0WrwHBB0yPm2%0gif0A9)4C%d_pnfFV22b&_)Jci3s(=_(3&Bg zB@GC}w3f{!S(5044U7ADr6MVwX>kx_#0|;Qokd4w2iOOxT9={=GNh!x5c-YWzRM?u zX*kScSW)cSjxNtkEQ`m34)z=YgJI$-Mt~Du^VG;7hF2jhaEbvaUCg&g$uLRnnt1%8 zHGEIq%J)IY_ADtzH2!)(bjgYG>@Q)zrElri|B+&8yM(!B>>RG^eH?)qXiv|>!PHRA=7AR>oF^S^N~LykAkEW)keOXq!o3DG zzA6pm+P{+`A!4KJ(6E?PLK*V;K!icbz0#kbEu|`StiNg^kYI`4^v?p%*16S5zzE-n z_qX+tWzyK9@W69{&ymwrr}3I9mBu6D-AvQrG4QicC#~tYxA{d8IkN#Q%_3I2DeJnC zvg7=GWpKQ>QDK3CMvQdWt~2euU8}!%JYz9>1Kw+$Ua89o$q#jzbhkr$Wt&-!t%qnC zq{%Hm-lgoH@uon$(jzDOz&ShcF)Ns=h1RvL5*566{D?QXWT<+-oSX->*OKWu6}aXh zEtRs(wb;8Syp!r*Lh*D|jVUY5zp{l5SckdS+WV=vEe~mu6{HQ8pqO`y3~w)$#r5F1 z5cd&ZB)z&xYiMbU3xYNt)^96R9U-APExtA6V{zXz8F5NZLmS@Fy-G8XwC?HDHjVac zySc`i`=VDb-TD%EUvDm|EpoystLF1l!yw%x!o$O|)LEv(Vob50y=1`uB{C9SyE??U z=AkL_cYt~AHzPWe83j)DHsfWXx76!8zZ!W@v&u5eS2QkHr?aT)64WC;ff&5 znz6@a?h+k~IkR^9j!W3BoVk=G7L&?19z|-UM#mTGoB_gQRzWalqJmIN&D@t4fCqm(z8kyAMbuuvbz*dOve2A&wheg!wg43Y2*S67cUdAt4Eg_2? zR^nTtJplorZZu!XiT1$$>5x`9N`x~JjI-&Xy)Qz}MPU|pI*V3!cDGi^eO@@0C*5n? z+>kgojXZHv#Z7H&8Eet9d~kfF5@Mb|O*dj=y_iY=beu4_zr)cq1VXbvda7*H3GV>;Na#eN&mkeN_&7qq|>|A@Mp zJP)~C`%YiYpK=|vo-JwTw#yg7eWz76TSSy7$6q4dWv3{yt*q?{%Ow$9iq_4?be(vc zd~^KWj*((@*-;s+bU%O0o5Jy|yL>oCNCBPro-X3i0kb$G?l4|3X>7${OEjtmcpHAH zmHi5saOLRPHuj(nNqfu;HqOv3P1@|69qc^KjuvxAJ}Kyrk_+%vG`v}s4xzshub*H` zZ(H!fb_@)-OCD2qnAPwvzg>)vT(G1uHmSf-ZvgFNv})JdT4|NS)yubHcB%PYlQ!@? zv;Fmn6d^>9e3HjQFeZ;6j;gj8Ve@hX=7M*=5`OqsSMs_?cn+I^acl;!wu` zI7LLY+-5`7QkN7fHBikHbXq|B-Vr09{sz$o^t>0Fe1W91E7ry@SsC7GKwK)LVM`{0 z(#{u3$zzJ@MtK{(5j53;>e4^(NMr|aE+oO{M;E9DbW42u#y=;^FmJm1!Fn?-7ysfA zuR8MeR%tAq_|0Q6>34~@eqO!_nrRjTTsq+oCH~+aN5J9=DYj!LZxsJqzNW2J(BTK_ z^ia;aGLOSH&xb$v*neCn9sh^=#*O21=GrLlb6M8V(^EPJcv0CJ|AW!3%jazO4C2*FydK0yTjv|HXuR!Tu#8 ztSc`jKnd|j)%CS%_)f6A$PVuKzaE>F&zM6(Vq#0hCuR3$ybI;5f! z>9#G2UWjGlC$7`doAk*_#HDsr$biW4o=4qJ3T_T>J!@p5T%RuE$$^wAYgCF~z}sqF zmku5*kY3^!T&Cwu>AYms?abx_?0y}j8pfC!_+*QmiwvyFzc1O^-CHXj_BFnSDXM=) zeB>j!_@sKoa)RhqwYQkmO|ZwqRqcKJ4B_Al3xL_`dw5?@^kodKk-LIP;=@y?cw{PSA?(Oh`hAi+N~(LAoc`BU5#oz#EALAcr*KS z%>t)_3~xi8F;8V5@%9jMxcth#F@Nog)xbr*5PlTSvG2id9=a;x_Hk^A?^nwV? zSC}Xio$T2^!Lqk8JxYDXKkRC5^TbpGE;l>$i)*ts!Jcv+U(W1DOG0jZ-d*IzLv$+A z!ZUc;8xC5+gj)8wUksXul%m(9)1pf_#5!?>%WxU4?QNM66}qn%^}pCkU|U9OW{L09 zFhxuLz9WDm+L=G#ijirNf`!NDfk)a-3kzayA#{0V5+dLL9xJbTt{cTBuWExlgDx7O zk`Akc<9PPE?MNq|OFYGHbVzBI0eEHZno4fU^5&2T3sSliFsUu3C7uJyUMYj}^A zYv`aI3HIov`-m170bSM5q6CvW4%3~h3NwEOi16WJlC1m1}hqrO+pF zI_rGUN{P-z&s>#}QrObk^wppKcNKU?Imfe?8J>j9I(Rj^^DcJ9_jH{<(%Ni)3a7N< zm14p04EjMmaJGwC{2~IL#QvURb+O>$dF14RGgVaVk+#EfjUNomgv)l_zbid_bFO}A za-SV2oWHMU&^CEk+}C*6)y48z`xPS4BuCIl>P}?(I0atzOKW2G)?!}merswk zr(N`*9yf<1ohukVV{-#21YhqFcYE*Yaa!?-3K4NMC~j79pvvrrb191O{DVrEgrKXt zF*%|o8*2PSSbma_wf5-vx9IK9gCD%M2RC?Sy4@dSObd`1$ric)2~Fu4YA8?Jz6&Qj zm-Ck2wnUaY`0tUc%i@QZ7gy&-4cRXDlUpUrJC{z)vR{>I5s5R3G&M6Nn5qSNq+uGh zH}aN6h7+QdBOt|z7?Bx=5@%9HGul&as9L9k)~<9Poh7{_!V)%O z;(q#9mE86^{J!CbM~@FIe21WqrWvD7-*Ld0&3k+RwYt>XfNJ?3pPI8rqatpUMo(y7STt=*r!J$6N#4D@*7ni zvqCMGwzNUQaGC40DKBebc9x^F2&?rW3>@zMwvPrn205qsH%Dzf?&uL>ZsbcP&#juTg z*&Hc;uVrZ(p=rUXuKo<4x16mu8;@`|fCvp{Q5X?}Tu-+*z@^1#`YsVcLeMpk46!cA z-e%R~0_~2A-uBm?f`C$#zFwPkMYiZ5v!xw}o+TJJ>{ThW@jP{@XA#t z!HoBQ?9BIU`x{{BK6Qx99f^!-XGc|61m~3av0`bC%Ye4D@pY&6$DnUwYxK7Qx69?l z!JfR(gFnng1#<^`eQrBMz9hjw|Kh+hhfWU4)^tpSnpIU!whl8w zOJntTfvx)b6lZcMz^7K;3Yd6gxI0*jO?ILpT5PsNJVAmc#AlvbqkHJz5SLHx{5 zYF7=K!>n>BQ(O-zDfmy2*8p~e~1^*DmFZqT+(i43^e!f^7ZxoiGLa1AG5M*w-Gvld;2%B9NMGk zL|u{9!`HW`A=RHHN-uIbWL1l41lb|e$~ls?^PQ`Ab7-h zC~tXc_2Ll4PcstHzfsD~hTbxWd9Lr+ufc4=d;dQo@?Rn%Jmb+~$kgN4LBa;biyJMy z-O?ZyMwJ-K;?y@OignMcEcT3Hkqr7v&`&aJjL?0rpSzooJnOW?jwHNYF*GxB)Qc|v%6y_DU0HWm-&@eldwI$lBsnuU*OXH-`!!nb2g?^wtnLNpoX z0)A5UY@X9zl|^w>Q&Xt5FJTJJCotRHid-eG&YXJF4d?v(1KSPG-<0mdCl%FLyLXez z(fI;uvC?*XH}3I*>m}VR&?R}I2rAPhT1G|a;yr~*?;*KI57?xvaeuBHmeJH_zH>R9jT8Ghy8pG9sIu{bSqanvXavj;@lbG{GPar12r z86VJIB4$GF9dCc$x_-GOwN*%=$ZRS5ibl?xLW7`yV4%y^qM^$4$s=GR{S;fi(2GaH zgf|zLxtjn6IKU7Px0j$J@%fBC`n|)wdFhhxOr?zj^FfCmb}i=s$2;s_sJ#ApMLuUa zT|Vq!uP2G#&wp*NGD+5{+rHB@oc0i!=9;0QxJ}AaHmi<7@v*$a3T%`vM?mU#(wO zUH%)8IP$~ga??(A00VX@gQQjdo(14`{EIU22WLQ?2WS>-mw(OY*&EUsvdw52q7Hc+ z|65%4FT~=122cR>6_$U;duByJzvpV~zY?%A|KFUBqrqMqmp&;kBJoYg3Nsr3FzHEE z?&t5Hux^>K`6DLFr>7$=Y8mNZRx54un7`=ZS^gj^#|?8O`DJoI)JYd#qyLh0+~^R9 zmlKzD$o9cTtn1#OT?ahotdX*^u+#I;Te}=Om`}GTvFmh?QXhAAX~{$p7VQl7zPV(S zmUaPT4d^;eSO9Teu&F{H(_47 zu=C#O*GaTse_pGgNRNP%Afi7OrR_|UGxeWffm&=@atjQ5zlzzzq_*x=xn$SeCA|cT z=OYQTOrYr1f*SnZrZjz6El z%DEnUo<6crzsiMoR1nZQIySGRk&A`89%n18q;e`izco6_Hqr8YPW!%d_L=>;*DFu- zZK-|7KUHS6eR(IO0TeK3h=xgO5m5!#_JQP&--(m-=36d<89)tN+OGv{oK+ z!FSWz?&<9d4+0V^AWzWP96QX~jpBslt4$-LbLxE1n;u5)+s`K`YdiZkVnTN?Nwta& zYqcbU0AC5#UNy2-J&L~>=Z1eu2};3&Evl3V~5bc!#_7GbsC7AA>3+Iu>`20Z3T&_LgEY$}k|DmTvly5WR zecD_LT#>sT|3T(^f|bDmjtS5b&Uu#vy3B=lP4B3xRzB_y-M-}!5fyKDfgbt2P=7zf zB;~*g`WNdbAGJd`>uh-cMeqv1r`P0ve-gk9YTZDtl2-AM}^m!&vU&z33UWeYx zzt~m%r-Vc<&9XQ*Smxr#l$NHZgypOc7B$YZdvgt9jc^*wCDW}M z{an@anj&wMfdAx7NzOF640Wbq`yC>7K)_XFHf#EQ&{CCiP_zpc-R?5n!eJvw(CIUr z%+ET1A3*o&qFh}TLhGWEmspT79ih-B=H=SpCEE=V9xj~5n6z7Tvd!o8$i@gd9{+}N zjf_Sq=GzhoQd?1J2ELs~BZ2ee(hCz?+Ub z3@g;%++t(h$lmuzHQIrlon+$4P$5dTZa<$PTH#EX2L%>Oo7bXPlHI?~*_7uT)N7ZQ zsdlq@KGR!`7MBM>)3soo(Tp^gUQARo=W7h(d32Fh{2|Jr;Mv&C@CB7JWX|$s~yUch)>eWD(q#_I~imsrurklF0%o2!G-F;Q+-#EVr!Q$?; z#+FJ%J<@>?vsE@UzNe~5SlOp zh5dk^qV(`FX$)08E;LS8u-+?|u*=x}>F&DpHXs(A7LoBQ<6M!xDolO3t|W#AIorU7 zO83_9m&Zq!ClYSMA(mzn^3zf~Gi2(V3Kl=zU7fb9#J-7>v@!WkhMsi*m_I+=JHK_* z*7YVnQ(HGTZoo|~5~p9`=cbeS7&y#|dUzmxXM?QKI;qO8k;JtxTjwaSd%`Bgj+hfs z`M;V@VvmDbw}xg(x~3PH0q9D%@^-WPN_PZ{n3}bx`OU>wPqrqQdJo}l@<)+e&u*JD z(aq25TmjXI=DL#c|4gb-rr6BpdaNa!%(3LC$-0*PO(attf7CT3-O$?gfiL^IVlH|t z+j@b)=GL|Uh-TDIC2jS7m}I)r*t_G+BQS8r5@U)l(5Qz7lyAJ+`7Xbpk#CAYsc%Ne ztVlKdd=OCDm=pj55uytsKzZK(-@zGOXA++VNbbDwk6p!WWIJ$uaTBaxs#wTc?eF_b z$J87ZQ&=qmH~2qOK{V1l{IbYjToMlwy!{vDCdJP#W$jcL^(nf>@E+`1?g({eIrlbz zrVQca-4A;gVppHALgUtTrU=Lq*h01DM(f7Q;cx!2u+E0QlDib~_Zx5L0K+VgVH06D z>3x(-jFMj)CR$Al)V_VfNrqlLN(6l(oV3fIu_iwqPK@D2@HrgIa?dDI++0Nms+i8+ zdD?2~n`LWoOO#gltG*%ZqV0w*b_D!7ueX(ou1BLyS8EYkqtAx zDd-R%{2~WA)im!q#Sme9aiB@*1dOoyu1UL@VNow4`rI>HaZaTji1WrP%e0E zMSchc^prO3K5WC1)k%Nt{rJy3>-wtIf3ZSJK9$J*w`d_QE~Nn+1fPFH3yJIS2l0JJ zOPyL+OU2y5h^Oa3zOffU2~%)8mY#fA|9k`N9W~QkmrNFk$@;qNqKiq2Vi8G&(d= zqJ%f*(ecg+)#Z|grFtR7#0Y3q^Wef-7UWWblXFMUd`5>8pe*3EPmHG5i|~Tm?eR@x z1qmH9P5>}w&Ctte!h7)ujFW9$r9DLbRA8A}o>3}YEPAv1PahZ##5 z493t{#?Eu9>-W2V*YCcc`+1K0`S) z)vu9Ydk&lR0>F)j3{_;9Ey_8i54&*$eb4O}Hspn7PB(@Zu?Ke{p4rL^_-ayS!l%gJ zd?^>#pi3cVm)lNAavt_xhR)NfDu20s)Rh;kzVTc}g=Od3gIA0QVT4=wmW?#>(~9M% z(d1c*wz}E{%&_~Cr_^*_47V~0sRJFu4GQoJT_touo3zJ2E;0Sc+1Afe!G{-l-So(~ zqRRVfeN-3yW#@OGm!L7Kf<#kUY!@t^8L`~xGXb&rLK^ za}0UBWp;h{j#h7Am5lIi(0r4fngt9ltw50DrU9f$&$qW93-L zYc3Pord154(ioub)qu5~`SuMN8z*TeWlC2O)V0R5ITLD0dL0=#r}?Q`S8twzh-@y) zDjs^s1CgfDX| zD=VLY3f^4MIHh@xr5lo$1?G%_0w{=E)buZ2Dp@v06VFt8edaLp}KUGBfI9viUueB$$*r!ToU+Q4AA z6nuObR3Lsow79aYDdz@8YNU1}{u#VLtv*)`yW$A)w6yZk^4 z3A{aiED8v6weCLhj8s@_6WWrA?LvoG?LD-p_KVl0_fe1dTV7VRO2RGIWvd@JiyrAbarR{DC6%H)8$i|kia7Z@lQJ1>$+E?-Atw-#0tp(gL`zZ z)d#%1Fy}Z9x&!jvcC3^wu(P;KCH44f?wU)Yf}EWsx;k>bP9m&SJKX5b__gSc$>XMT zCaNJkk5gqRgy`^Vi6f~DhY?R%BfkVVRlHKlMHe5JQDU3^qpGRG^%nGWW-GhtuBP6l z2A=jZoD8rIyp8g70^Z5O2W*3$hNl-vbR*ls`gL!F!jaXNBgu#7--V%}<55ofM#de=t|VUm zYG`Zsm3KwMGjDKm`M*3Q{?}e`nVWzQ41Lp&d6eyGfmAr7re*g$Aq-U4Qj1={t6gA{ zE&Zy|=34c%l;uN<`sWYoq^*1|aRKd95AzcqWvfH4&yU+)YVezWv*Y;v*dA7qc`PZV zi8I}aqi&JhIiaZjq)R~AF{WlSDfLg)?RIq<7}V8&?@~W^0&Ek1R6OL6YopS`ZtTIg zcZBtd48=5oNcCrul;ZQUgYnk{63=Vt90&^aYy={weguB+N zCF7Fq*?L(WxeVu1wKM*mAFG`@zX$DIcWe;I0K5%=$K?9(QrUU6f~$d70V%>6;5L5( zM3~Q7fVJcJlIOT>&jjMp%CTH&2L^6>&Tj6f zR)7TiJ-<=!cQ%K9kxAK403TfbrRQXYn_kuPylY(rpvYUZp8Vwq`D_6c2FS&JeV>~J zXcBDq<^DZ({+Aw;mHUYP+}rD)1m`CQc^r{{iu}rrKho@TmOLrUHfQoUx%Hh4+h5S; z&ml*jmz_GgV<-y1z3TphQFfR{(riS01+(G{4;M=Q2brv)iutv#*LL>{YeHsmmD;}h z2FU!a1KD%lzrIKI&qvn&?sguhJ&^n1`H16#)eBYaKl4*r-?Zi$sGY6DX}Ri$0=ujOl-b{wgGUpmh=u#Po$g!89WlZNM3%oC zR^Ohpbg;^gJcg0Vj`?hJ^&)mG2ojdeO>_F6lD(BB)cNfU|9ZYvp|3LR-UDmUG8ygtwsT7pLka z-IZg`^0ckTkR1Q(=I>C91oAh_?M`p}W@=32V0mK>rv6`&JO3^Ry?!h@tZdcc{A>*g zqCCoPVVYiw>372fA?oHTb$nNLU@Nl7N!b#kVtSZt?quXzHJ#s}A zJNZ=o?!RYkTXIr^8rH2zjxgTjuB8M6M%$9@AtBv5F?y$Z93IQAKd!La=~3o7L3v-^ z39Qwx$+El*l@xaupQtTsz2c1sXN%BUWJkB(y+F@s8a9h$6RohcYY@;m1ff!+BDz1& z9@JA1_lxPrx0DBY+NcxpFcN_+(n&IE4q78>H>VDPIpk@5X$ zLiz3PZtQgXOTW>JqXQmit+Sf5I(bEE-TW~yO{%!TO3mJg*_6CneRTASIFZ9GG-fI! z>u(+u@ciVv3378Djg9O`{qqnTdypHBaSn+(QcZxdUYIi#Ibt28L^Nqy+sa`q1Q4*fPee2r34hMv!sarH)|qJze! zACePm>vkX*%vT#eT1R&viNnEIT`SO;m>=10*^wa(%Y{!u8bNDVLy_HFXkAc3A&1ma z*r-P;DOO+$tF;Ob(x{!Uf}zHf&hHi&`eV+4o3PfUL;a$7laHyFxZ~VYkCl%5MZK)L zRlg)>X&EpMIBnL!`Mb>pq>^wdUNCn1XU$*aFoOLlYU)hEdUR_c*N>Mva6nnGu zN`w1oSu=QNRBAb8P#fSFsHoZNLl=^tI98mW&1<2pSccO(5l=r; zcb6ZE){>5ihe1znwKiqq9`GGfkuXq0rpL28aFO;B1(>AG3VJ-A@Tbmdt}@%s*H?I$ zI{`N;40aCgGD!|vFkf%L-$Fz$l``gXVP|-!j-e0`v-!wUx)t9`P_~Z)2?}J?qmd(^ z$R7!hR!bo%m`bnrwIgzEyp*<040lkEh+DZj5n3nU-9`5xys0Sn+9>961xH?P+7ds6 zvg9xwn~JWBr(_Z%!ivmR<0OQ-UK;UB!D1|{<2(BU<RV@-8 zw|kwppDS!?LqTuZ^Invui4$7evsjJiW$W2|cPppasA^O$%}jRegz7Z^n}BATtICqE zc?hYE#rU~8eBf&waUanFyy86XU5A>(fv1IQ4MSVR;@F0vXn0Q?sAlxU{pU6;Hk)yx zqf)By?3F(7u5s?;gh*$$%XgpHvT7I|zbYTTakzx4^cnWm(*|my^nIr@AGYs#>49q+ zPyQ`0gi#OG#Z)?z}wg!96GObjpZ3{!tO{8+F1g7dggp%0QEJ#WTY5A_>MxCo6I8|Wa zthtGo8~Ws83stIb+ISm~#dNWN=KBOFPpSCTctmG3Br7z`EyN+$CGhv}C>u#r1eJ|` zr{wsI-rR}*7vyZwXqbFLTZMG%tJT z`%HMkELDu=zx$TKct*=vd(&kkJ_4CA>{*hKAK`P;j(7s}3XVt~^TBM1$J(H9z`#kV zq-XwjCYeNdXY*&Oi9_{vd8sGUHn?36d)TJ{tWa&n#$qoeQlwlSZTJ&Z2a{^O zC#T)v1+OZUtm{0)zAT9uY;Ys*Z_HQ5Bm}qhRTa!|gO!MCo?q?{W^KFC1pObXeMhg{ zT1#T)DV$pI4UV$BQP$c*6kHoNf;$ioBLTEvF}>cP^0x4D5p))B z!0>w;$}a<8e9Cq*vjI=VEZ4q}BxMMg5nr390ovc3=ePe33Ag^z+VHS4V@8FOOBvcY zLE6)x0g@5aeFKpp>~OrG*SLUdq&7Eq=;Nwe!P4sZ{I18qcFVoLaUoyTBYQoA&G8wwf1H|UOrMhDz z5tWJmS+K}C=Km^Kw1KOr?e%()NHicQdEMd_8!?M?)>$XQ3lxbI^>o_C!q#xoGPI`4 zzRL@rX4^O7LyOSt!$1Suz(44IOS35-Ui%Q;s z*TX&as?B-UvcI93dZn{JSl-tBT~#`t;b_r+VPOg9z>7{PhSr}hR=2SHaLNJU9BRNW zcZt#KX(26t<-fGuED;TFJ=`g^ifWCj<=$JdirZxovP6q)42d}5RBhlyb)|8ku1loQ?L5%~u@VMM1j-a=Z7#|HMdMa3n`HX*1id+8vhOglh zJ~1ntjaOZKlV?>~l$UU!fhN&hcFoM45?R(nh_}gWlm*(L&V4iMQW5LYM8bZWcrpp$ zKNo<1<%CQ(1FxRwr37ssbNsFYo{3?r-yW|h720E%jVkV(H=&9)Xx?DSN*AMCl;;-7 zXuKeMVG5mPt)P5VHujgo1XYP~$|_zc;*H-Goi=7Gl^Q*~`q9PBsy zO-=z|CyAaHi6Y!MofG_LeUp-H{>#6|hd9BwR;2eTKy9lK`2@6Wv31T$s*VMgd(Pr% z#SVGR$WNt)^1Y?EqfNf%Q_Tag+n1y|GBZ-8b%Lk|5%UpxBN?@=33(^{-tpL&d@Xc2 z@Y@ZbX%X`~0OZp@3pii8|H84{BOSXR(l)obkNX2?d*Sf~w{I3809|Y-a!2fpWkMxyN84*JS@Lp~XAb~_s*c1OK&`Q4O&U36E zXzl%F@Oh;9x=-P)gx~Lj67Ffg!acwJ7I(vt@@MPY!oLKc-}23hIBkAn24$IWNb+Ih8E&5+Gffx+hm+3Ma9Uf zaZ+y(lRagS{gY?p!elSfQ7&7mZR>$^VL|vYkM#T_`xus{?&j~)br*ScaCKocP4<9} z^*gXxU%j0IOj+G2D7gsX@yLDmc>S_7>u?gfol;zhs0-UrobwTgZrBR9vs{9$S034f zjE12*R2|={xLQByC2fquK?6my-33Q7CG?bVTh;2J?icSAjw?Ax)YYE(SPq8e>|+ao ze0ousdfh67qoUMu_7>Rz~XCZkG`Uk{x^<$CP`h% zZ;ZF~m@z8H207FcODKLv&d>|)@KOBYHdDG(+k_U~py@Zcy<$%3dvz_X;wD*m$sU;L z!4L8HC}a;h#8)_BGMXr~cJ3TMd7gYh=*5@<@qBneY{DEjL5q zr+vh3R#-f*;|q>g0&r6_yQ}5!(K-bOQp>={FGDlCtBN6bjTNFn)r3!6q*vld@-#F+ zgNE(wrQ&E_n~$r51M&7TyLk6d>qbI<=!k+YX&%CQIYwRp!N2#%aKO}h5r z3cJ$$UI!G#KAe$vMh7=$ACSOYuhDq1qKs4G+P@lurgdXp`LZ%N>){v`&DUv7kTB<% z3BR6WO)DmqwF5QXF#W;cidkCvhw0xX`xbp9r%jygsH*Ck`NWvDLHtt{H=K<}S!H_o zgJZwM7`A;e#>F1ga(mxoS?|ACOSB5ym~ynW6+{=tb+HQ9_c*xvRf#Ek2M3z5^U0t2 zSQAwCS&%dd#R16(0rgi-^ymxmnP}~n_Vmv(ET2<57kjOoifZ1~-kuG?a~{H8li^<= zqvRz&i44WVA|>x)V$2ig*5qPqD}DMHQPFxX!Q>9)?VVRU)0~pl@~rKZhE`yB2HS1XSq-?`sS027|T049ll%4inO)pppitE zH;L}N*39W`1mMU?3D6Ca4vK^}8ji~s@Y@ILQ2>w6!>tST1>S?WTky((oo=$pZl0PT zZ&n5_O;{YClSLQqEWFh>O()I(pcQ>P6=IA*QehUqYjDw<-Vu0Cp>MvX%Z6;4O;Pk( zo?A)f*m^he{m>C*vOBVQ6!r41+~)Y(xyS8Z8{JQlpT<&;Qwqz<4f>>V<;-oSB5|_H zL5H)wG?8L>0}Ba^gj~O%jkGioITW2*M3mgXM>s|x66s4Cron;g{AQZrKD<+=R80KP+hX9sQEaD2^BCvbK3(q_D;=YKmpogQIPY(P>lGvDVNie8V4voG|cGyCMV6M*CX{1)2~SP?L;GNZ3btj z;z2&!w{1R2I5TEC&t{~u1`m_FXZ_u3V+<;)iORx7i2&ycmex6YUk3-eFJ`r`n6wil zSJiuAg#{?`0^XfRbU0%-b7=`G7ht){bQNJLrY*bYgI^SK47$Nw-mo@~y@Le?0$El>Cy|pr2}vMB zQ3$vbqq}iFlIUAIgrE>9dQkSduSkCq>s(W2cLhtfTp&aNLID-EA=N7X^YbUy_59gP~l z#+z)w2x0HriIyoP$3Ngd-wr&urX!zjks(usS*wD4?S2-o733Y(58m`O=kLdqi(8j! z1w0sS6+JJQW_Nb!rL*qvUCFXm&O#qUsYqnr5^2+YX9^RpR=z>5fd|~(8jW=9OJWhlLN#_+59n@M)2|c76&WLM`kz!DOX!0HsQ(9ZvG36p`UX zeZwU}HxB%67Pm0Xr+RC}lL6q{XC5o-wwHAxi?8`R=wC;amMOwS5<7=PCeF~Jy`;J)`&Wq5T|7ed-b=%*t^F_6VoXM9dACkS=hmp1RuXW^0qCO<9mwix7 z)1Xt^L(4n>Tr0^_NDT(mwq7n?OK6E;8QfZ|A9oopZdTb{rwrHJYWZ=1!&-`4>1chb zjJ141$Gh&i0r{IsC|EJNZ0@&*m;e*WQTxgrI=rxT!44|oE@6}-Hqb6VD(#p!nA;!t z%8Zy+It3B4fjH0Q5P$bYV{Jwy0gg!=wG2k{X)`#qVY{rnHNQ6rHV&B+g-Mu;wRAs^ z&Q|lL=!my`ROgUQf1Nz%0hb^Tu7)o64pE4D4spzV1Bzyd{=?88SVFS%?SQXv_sOls zSDhJ^T`&nit|%w=*?6Td%loGd0~i!iI$2=)%*s0x1wd0iv(jn_w)WOaW^-l(<4Hz{7^Nl&KoK>xG`_uDw&BE79L+4-+>Kh+I zjdX~BBNzl{Tb=d1@=?^kz(0Qr;HS0-Pa9#!eL)cc{7B5iS*#~bhQrJnY-YJsQ$03h zBv#;oa&6h1{))`(Zus!?p{OW}3bT(YgUF?IOS$=C5N#CVYwRV#q|kW;ak`_KE_rag zDF%=hf5&N0_nQ4frC9g;_8aR{-z+RU#6NK9%QI(`^8V@EM{VB^>upk0Kjo`g>$enH zvoPH^l&f?jQPgO~9uED+EGN{cCa4=%geS~Hq~1H%fJPLJSg>ARU*wEIEnwH+wG120 zC>#|7uUB^MvM<41e}4%8oG?(WUIvyt;q%ABh$vdkpkuR*VWmG$tV(= zq9fp3kswb)bW=sJOFwo!cFS_G`j4DF+Mcy&^H##l@=@2sl@$yE1o` zd)XqLC5Pa^mBe$7?b@mS~6DFYJC}k~a z?#06>RKHXovWCqlwKbJ~W{snG*qRDwzz{!qCxY4%0zF2yU|y;|x1-1+)hCtI)?T4x znPIH%a}pAu2b=1urVSwH!UN~3!rlD==b0i`f~TPC$T6AkGwo0 zwP(Ig2+Vbl^!t!oQ4-izs_@geB)NkP90Lc6t-4TFb;rxW>l$k1xDei~6@yLwNAmJ! zp;lj?v-X=>*7Mwzir#v?X0SE2DQ^azPALbEM@=b~U*G7tbWZ3DTitJ=H3h7|&^%TO zHV#5dV@^S{mfy_1!(Mcm2z;q@|0IGvh4_khEq(#hzG@cu%LUrP!KzYe`yAF&9V{N0?2g-X) z2n+}Z3A6-5WFaB7dT`w;^^i4WuxI67oX*hs!PrvuV*1);%GO7rU2gwA-(rrF(t&y> z)j31aTd!UChBq%@*bIJ1QAEqKsp6~URfC&K?_o_{JUDkOPA`^uv>4(7GnbzbMxefb-G=rZ%4GX}t-MP*r6Yw( zqhkkWRXRA-#{YNY_g|?RK({!)Fr9OBX+%PCs6_rUPltp?#L)0#mXHp}<-OH-*{JYu*;Seh~V{ji}oS57Z@4SBb=Vj`8ST~j!U<*Na z4UF(4^l~Av9CUMKuV^`eJFr#Fy`A?H<`#?iFPGI=wFsp4W&1@I=g(EA<+J^xx(MGW znY8qlD=0zPM6$CVfB%e%R~nS;NEoa)bFI};c`$X*6fm1ufLz^(QdG15Bvl-%-|)N< zch^m8W!nCrJaT8`D;|N!Y<{bgIuIR99vq*DhYFeH{sGC_B2u|{SbD(nvk{bNLiP<; z{bd=o%+(>sSp*p&A1VOz{@R_~(KBwoP^7n>ycx?YqKii6A82OaAs7ny0=kfIuekQU zV;TO(`WdP0_p2TI;yZ&Aj4amkeh)WXxJBP03ydK4pNYbrMG!aa=)JE z6VS9moFzu8&D3XjMBzc#yDqCmH$GvKuK{l#*MF#DMR&7HZ5%xO2ScEuFO=7yx&qZ* zrLY%}`Z{p;mrudz#c~&ZUWGFZ=+7yn+v(BqPx?qMig_t=T!sdZvn^~;`9yX!Kj zw!U0>)^`T!j^v?pG)7#8@V(2L^0e3_)n`!QAOALbdtqDT_ebxzjJXqX4&(`zs63&> z?9EzMdpC(O4;2XI5AruT1jsnZzTUUt9c_BH!K}EM^mF!h^B5Vo7d-p_C-46}dHZp_=}ZN-=iuU>iYtL|fUOMloZ3@L~-!lQ0%4ZTG^a{Hq|j&^h8B0@+x zRH&cO97u6Kmz5XAbv@=<-B5)=3-vo9gv3Js9XnS+uu}0XV=u09-M2qT37h?ADJIh6 zDWd#{-+h-lod-ytxz9z{ZsnduFoIXTz)aoGfFOrZ{cY1W(wc zZ%xE_ij?nqiyvlv@*PUSaK6W*if*ja?gvHbPM|(C<$Qd`1>vWQZJgaPg&Fe-g7~io z-2y3Y`Q~R81mssjlyL!;wy7T(iP_ws3u@11!1*P*eehF5vy=DSD1A&tjl&dd`c>p(zuQAO2FR=<|2Nwd7|9kys0wS)8iF~ zC*17CIcqj!6_a*I)oDXikFIuX;F&rL^ZGKZgWPfdNZiK8)Us!%EErrGhkD?etJ>9^ z)~wF5&pBO9Bvb`AUqDN=`PV;Jo${I7R0$G)2bo!pw;{FoogsNVw+v>QKWMy}XPa(F`(*DmQC^mC% zLx~A@s1IBUY-rPK;}R;cR!dvR8wF#95ssN8y<}6 zPJE0iO%R-awR;A7(s;{bxue(zcPfLCGgrG9 z@u+5IXcDkVi4;HtH1D4$1J9fGn14pOz_meCKkB5N^e0}P+&%Oi$LB?UQ}$1U^~l22 zf*(%BPOV34zN4`LvJ2%@5WhrXXS7zXLz{7Jz`fT}C8cWF%*dLmh4gwL5Io zZG}nJ)wx#5rPt!Nb{|gxJMoLzya&qbRj276x6k-4L$3@I>~0f%)GH9_9Cq~iFxY#w z*!q#9i|Vx@T(E9yN}#j)P$el@fvjQihY-*VazzrEdlfHN)?hMs-FLKXl+*}FE9EnA zJ-KBd?*cT5#X{t)SZ0f1YKdQb{}5$cG@^o?d52HWy_55)RqF({{v{(7{rzloX zJ&;X71o3>}pABs;<8;AJ6@ah1TD$drfH~w9W&vkg@Kp{aRFZ_EcLloBfB4O+Od7yq z>nuJj#s>+G)daQS7zkCv8kk_=!m@oAGt8f5cpkG{v5u>>E>=w|KP|+Gn#nCHj7H>~ zEQwn~s2IYg9IVm`j6Q-?LZs@laqiU7)j73QEp>?X2-{1pq{II_=WMpC3$9{hsV4IK zx^KSjFLo#7hMhm|9WF80N&@cAd=|JS!+EO>Wke+ET0N*Q->BYHG}C?!TGk?Rbx;{k z(Joc1g6H-JA*~)rOyP$|m#|8zs;cX>&nLavOXMXsW`74iJv5(El?m@{y}>TnpHcad zfr|rK+r@Q@A2qNc9Y4!4x)iNxoH8;J_&u^3e%P`p`rc-u#KFUs$G>!jy2QyZ-~wge z+VQMiT0}G3SKTmm9kOofB}BpQ$}~V;_{bIR6V_bQN+x}SoS_+PU0N-_LYa$|Q_A=# z!K2qGykPc0v-z5QrZ0ab+-P>8Dqj*WgGk5fG5JB3r3?p$4XYyPQs^TeMZGRgx~6;d z+ObF@N6bqvyDh1sDz(jJSuP$Qyc$>csUG*qFjZB0^pABGGFr)MuZL~;1x?J+8Y-9$ z7mJk~@ls-g#DVgbG1x1ZT*_T0Tlq^=dkij4Mh^$$00bQr%v*iK>v2t}d0WL5UJq*t z)QV(O?xe+_oab2lDsHB78p1u_51)zhcic@1XeD+phd{=Uu3ajn0kl)VVleS(Fjzrt z9g7>t%~m_phSC^qt>ghKxtY~s*&NaXw;!LOynX~XhE6fk!o`Ot+CItjn0-$vtX`E` zkL6W=qQ5MCiWB6BW=b-=SIs3SLI|~VLfu3@zBo9#J#bUIlN`q9G^=uF`Lw&f-uRbs zyXL~fMyFKqJ^wJ1^nM*Wk;&Nye<#x7XM1b=>M51#A1f9^H|)hADRKwgv4u&x#hzue z>B<|t$i-4w+n2;SSM7(vz0oE{`woH6A8w399ooIw+IBj~r8W4cL*Q4;gfwnjz)Jd% zKW}fTjHjdbF5*71O8-Vn1u6*H+fM@v?rS~3ub%L0t9s5R_To`?ZXP|a;jac3?-6+D zLmQi}9D_f$&mB6*tM=QC0$?QzAU=L`kvZ=w9Bl2+M3X^|?*=re9@f-bKqK=mDvlr_QzWR<`Njjr?YmBtBd zJle(E-}}cMD{nr&gWtFQwl#TucH-j$bm`x`{xASYO+QfLY+*KYU7_R;(a(oNU#=uR zK6cd9`hl|PL#eQX2S0tjgekdwcp z?g}r&4ve}kaqu&^;JUfqnfKE_V1hM8MGCwn|Fu2;_B?*?-#dIEd!&y1v$I=JSN5Ns z{TX?o?H!JB-?o=>w=VeC_B{BIvf{P@{NMY0U4pvPXTGkB{BvOadUNeg%gyb7AGoH& zk4WaDfd1a+n{_poqB$;-Dls*2PD@51llbA0fJ^?UIO^p2sW%jNPot+pP@Nf7!O?|_ z?mb?_POSmFf}}sO$ZiIZfmJ*3c5|OUeIwgHH1jx=^raFw_W0dPKZOKKOfNjZkQN zUMs0M9a0Flxp`H$`F*T&KTMuH*rdF0;t6@%U&HLx%C1S33$sVrjOpBBt{lmTM5q!| zbcgSTQYG`WfTt=PGS!(n^w_CU+geOcSU*nd0D5$oUZwzsRWYVYxnQB6XZIm0!+j{e zMu<6+T*+q`VE2GXuz6va+<9Gu_vVo~%f+Gws5`dq2?j?guKCzudd_uzgOTxRR(hVk< z5}GQIX^hxkE9J9?Uf{;G-#+_rhI`;PJ;&)r+_lFvkY735@FHl%&nbpK5(Y_i?*$^u zaP!_4g;WO)S-S52^_x92z)Mkcmo*5X8_NpVVQn(*V?e(tDDOR@b?G}A<%4ay4Fe>a zbUUV#w{Ig7%_LiKF?pO($6PGtP|ffA%!h7@rgq4WxYR$V zXSTzwGmfO>93GLKTso%g?L0G^hkDp)IK_NKwx}L;`~*O@=1yxRxSo?LHx?TWHS_Z6 zyosp|e|O%&af1jNGiLAeZFg1seU)Dsma*~b{U&WUQg8FE>KGAq9mY)B44h5ay({`e z>I_#+F}oPY<~;(^CvTPJnb@aJyLL@4omofjcYl$OC34(Y6<#BA>#H*Xz_O=8Ui6`L z=>!rO96b}Y?#8;j?5r z*#CLT>7UT{^~d$*oqvye{w?Hx8&(O?y3IU=4zC*g2hQq0duTz7|xq06$&?}hG9 z0P`dAKKu-e2JgLQa4obZEb_wjLAQnv^BYNzBGK}dr|7TzYbf5!QR74;uEyfszS7Q! zN0pCNF`sc7Myl0T%pYaEF8W*bfF^UYHh+(Evml_>@N_2>1Q>oyfAusSPPB&?%KgR3GYe8RmxA*Q_LWk zitUEYn-Pp)>9?~%$L?0>&%dQOm};R8Eq6p7UzfxD473hrc6`?`(f^V+7EQbC_RM*j zqJOg?nv8oq`x=aLdWM$i#VSSt>Fb6M}1u)uhAxl#{Nc^fQ8TTdEG?prEY%y z%B$HsGt9O2F<%B822jef-~Ry=FsIXZ%alD93(_{PFVVgC!v2%cb;Hq|Vp~L5;EBv; z0SywN2NwVoxU7VKcZ__sn;W!oBJ-@!%cJ?jjkn<@iOFl$O+`41#IfmumLYcs7s|l0 z7Y}JI@(H0Sue?W0WRH+Y{EoZG)T-i791nItiB3i?j$l780Dc0SAXI8+=ODC@;X1RH&F+U!d;~Z|x zCB4oELHi)?pGqy*U0G@2c_u5ebh4<~QOCgqwA$i6eb=$=bk(7?$d~~OiDhu=SmQmm zi-yiCz!=2*x3hiyVHF-P|MJ$+qlcBQ;~(|&AG>=g^61Wt)!OsMJ~xl5$JO1L4t|n$ z?2h&65g%Q1o7hV7+w;9Z_njYGCDDatR1R3bCET+yH{y;NQtf5JxG$cYVgA{$c}O_~ zU;fhkmi{Gj4$4E*TlE#%b?4wtP1(LGut6qL4XFa|o0IJ^MK&cV&ZMvH9p6KVtG4rB zor-X~^1#>^UySL?*znEkO(K(=Y3-9ugA7~H?|}aNx-uqyu0i6=iPH`*532=LTVIYR z6n#GBjAllT-%K|iGiZxAyRDJ`M70OlMELx6NPZdp%E)bf&{6Lv&z$q!9TG%{K~+2# z$_XeY5r<7xS1a?5=(H5<(l#^6ENr~(J+f|{5SJh|Ky-s!n9)a$kQK}WYSaIK(ki|gYP*yq||q;6}*#+%QtClS*sFjdd@)nn0UAR zC~$PCNtmqj+vN7m9ygk83&y_Y>xU*hwEa{1X8PhfrLy^OXxJZ1bj0R@oSgAs(6OPF zis#*=^TeLA9`qUo=oCR*+5Y-ncaDBo@+uIlSKO|v9dR!)s~cQ49;K12B`YC+_g*Bi z_W8TK+jSdHr5tZp&Nk^v{zixA-&8)u zSE*QD{|7DjuBq@znU2P{){6g~jq&l_^VSb-A2%`h2VnS=_mAgJ{k8<}3-*7BH*)8l zGBo`=!C>&OsTMT2jONk>Us1(+pP)nK%h%ia?2kKzwKqw^wbDelrnm2ZL;qt@BU;2k z0}wv6cFKjXWdCoVJL=JBA^890VV6V7abM`}JRG%dFu^fm9vomF-b6?%}R#BgPIMgP1q^<(fl7Dc~=h%T$L$utx(k zrNq<1R~coh%{1>w4Pmgr*K^9B;?;k?C^wQS7oYrjoru4u;`i6R`?|eF;OrGs&)Xv3 zk5ZPxN`5lbC~kDCfuVGCBwxi{-JBtd3*}%OpqyFd4x1Ur_Te;jLZT6_Ruj*H_WvAG zPmHhnexi;Cx^)N1doP*qmUS|w{b(@+?)TifI?F@+h!v~(&b>F!UvRqEG4^5-Omr@Z z)SZ6oDE#H9Z|siHc0OI%ubs;H_`E&I;*XUrCnytP+boYN`;JccdzVT93*z@&x0|`0 zsA%*nWM9%O_iU^@bqo+SC^As+%x(Zv<(r=sLm_Q6l8f==X9;C@-94@3)aKX?O#_Vs z)3wcL%}_(CAho8%!bv>AGU_Q-$>~@W7q;GQTiAyR12s-YM zk+=d9rbV=?u5=kL4@_4&O>dy>qg@!Jwy!L#5?Y^Jh=8}TH!}csW96m%bKhx~tHyfe zd?c>xq=8{)Y%Zg<;ymFa7TzarCtwEsx7o+y-yn=dgZU_g>FbH&?dcTd%-M)MS@||Y zAe}GH`3|HSxMiv5Rw)+E6=KuF8fG(dkt!_85Z&i#hn=N`$*n|8$#vx2=Qh$2KjPy_ zR};_5;@T^0*dt9P@->GrZj9@JWAARXc7gwduY{m1hC)>|Ep($47-JUC{zMe+@ zH#`QgZ^yFE7gwqH8Mig!?&V&r8O+(%bxfs(k$9{00l+P{+Jdbtbo`v|h#Rbz8nVtg z>paNqT2&CU@%5w{bk58kNq&iNbYZ?QgH|er4oDVlMlGLPZ;Li~oMP5&$o>*h)N^bF zR&DIX;JU4ETt&mqDD=j*RiGxp-E#s&UpDk|^l3%X?rTZnyzDxJ^wvZ~;%-NX!tt+- z2Q|MOU)VDBr9Evz%DFF(lhdwLvW8{8+MTEyl?p!wA-8_C zym+wZwy#}-){=!jsNatLSYvEYnyFOot=1CeA?2`)Qpc@@f=^n*D>z?{qI&2+F+X*( zh;m23z0w70uTs%r`CiePrc&y8ute#1z>QW|wxhvmwSmBSMKm#I2Opu66JvP%v+0Fr zD?0X6`4R}s{gkrSuaMmcu8CssBip;f~P(+rY zLJ>EWmTJ&38s@it>Ly>A0-VhF!XR6(Vo2Bw!jA4zQ7Jg>R2R<+ zo-yT;g5r(G`7Z4E&9E9uLfd!YVr0BH?X=xiv{yp9vI|<8Csb&Dr!MUN_rP6g%l#oK zv2o%NRy0%Y(~a6-k4v3A9QzH4X9uHE690m?|0joe80kIJ>3rl@E>)-jhfZ2D{wqk9 z{i{ayHU7tMu#PkX3Bc#O?)(4v@ra3Egal;AtLl@VfnDG#{|#OXYK4U}y*Q)a7tu8| zhaV|#wnjS0veS4l-MB|-$8+c36}k_WQIg92u({u1uU8%nyTTtj(nrL~Nkq!y1Ou;;C99%edU8~Zfm=9P6%Vr8YePf1-W-*4O9!aTZlr$wY#6eBtMY?*&ZrO~zit+l!-{voVWicMUzN zMyO_WS^V)4_pEZOGKJ(T?fPeO4Cz+$%6@K-RNUaZwzvJ+T%>a4dn97v^~)3qtJyX& z(}j@@fb@Wl6t(lgC{k(5m-m}DYcXg1zchKRdvR%Dukk-(0Tjwe6?<_mt4+Bm+(Kb~ zI_>%H3r^-93pPK3Ts>g)emXDG^SjyPkjL!dn{fxsKD@_h7?r4+4H zZ1iU=jOaZwz@l+G+CLG3K0;SxP{?^NX9l-W19AG9;LlYu`qHDY78#&>n=0#;PxM@n zxZle=1aep|>y@H$WOeOyu5MUGY3&Yr-8GMe@DJH&sy}5V=5gl1^kTYMr@y?^LCQD( z(b$)gloXEuF`sl@ySSBGwL~%3OyFtXwrHFMqc8X^MF|%E=rf+6lPrRGjP|F99;NP4J3ZB*6pgf@Ls*PVcvURTh08FRwe*ARsbax&+D4T#uIf z;w|Q1E$~{9MQ8$TP=9iFDwX?}DJ6s&?l-?Qk372?VgqB0N5DRi_eyIM$ZjjA1$s^$ zbz@gxSJXL(7g-jn&LWuW*Uly8=?6K>*^F@me_9iTggaRJ#S~35*YP%cP}wyUrGt%X zOwNQUPG#Y|z?4z;2DV&WQ6Bu_u##?R3 zL&8L^2zVJWriE;jStrJA5LM73QFn68SLJI9)`UyZDJ`TjxZPPw>*Uk{tMUQIyC@w; zXgMguf3YEGE>*(-n?!wg9Bjb|g+78GLWNyWt#EdV$6#~<(nK!q zVnJAQpun`v3to>~IW#!^8Y<x3ErA^!i_=6oU#LG)Gi~mTk4{eVw0VaNWJ~h#E!=J_ zKQ8$4riyFJ`=r7h)u+8QPuy2xW6opFJGqSh`EG?BoHHt|Ivv)(X6naIa`_S$uYT^C zyMDtd2N&?FV<9j(U)yAP>Ht=?h^FfPKpWVh4ay<75*fRZCQE8(U|Pw9qV&_+~eZbm1@pnrbCpf&cagbFWja{{>Ja}P6^^|n)tjYAwp5Ba z@Br8gdZ01YKM1hE6>s#BH+h^>O*yq=O?CQ`f|FnHc={1pk<(7bT=gm`3sm0>Y7V1J zcMWa7|7H%K`l!CWxX8VpQI{dNnDDV{v@nj{Sb!zI&t*3q#6rW{aUaw%Q>hgyiR8Lp zvFNH4tuFKR2_e&R7S+UC1m`oD&aOwU;ghR;#{1E< z(u95w5KE=Snkc(1K&0X@MNS1Byh57bHa>fdQbtFB#+WSSwbOy2@iC{uUAk-)Zx|}m zq`A+_-+Gmt5yR)!^YHTa88D{c+0FQhx?I~R-^9@N0SU6_&ZKP)18A0Z-3x__< z($AGG^Z+U}&T14~?(l_~5Rdnoi$49_ksB^x#lo}{klp1zR>W2qCIB&nUbJF*pOH0H zK=O$CQc`y%%H2z~Q@3ZdLVUoY1=2p_cy&mJqf`lJwI?j&IP7=anb9z422e@` zMtQI~tjW?$esJ3xn^RmMqT}y|-k3>$+TA64fT|^V^DIb!VP+>wqxS+q~TO$bfxFBtnE?orztV zI-m#~nA;GUvyQ(2gLuNamt(?TD}llSM&nxu@YNr%v5P*B{Az z98+Gl$Md-5(q~HKUGBzPnR>{#y@)y%VPqy2zeXOJ<7~FrU0o$EP9D>ljKx0g&|ZJl zHj<~t(ez)g3-bVo%Jb`=|0OX;N0^O9OI{5a9Pz^lZL{EaORMNci@k6TI^`5A_-o?p z`w(Y@Io{8gO6hHeQJMx@7EpaM9g+_dKxFns=tTRcy9=_l4n zueR7ksVn`_ekbjjbk0|<%Rd#czbS&H!2gmt{7;9EhW$qpdY<`J>@Q7d-#}f#9wl+f zdXJz(Dtwl^e@jJ?BW1!o4QKWB=7MYGDVK?m6dvwh`%53XxA3a6gg=ohq>Joo z3a_|DdUr%+XzV{ZF7JXxF4{f@fNBG}KP~;D9}7oo9;saPQY?NOete4~ctHP4YCqPz zx_x@tadAO%^Ev~tWv8znhYqAIzvusQcaS0dU-M_z&H!GB94cR2MQuhxH+HDa^wOUa zgE45dd3jS2{Qd}gyqfIYQLXv0m(c!-j7N`wdE&f_<5(&gZowU`<<-@isOo>5hI+XK z!hGwCKu2IFEiJJb@lf9D zKm~KlJ!jmrOK$6j;^RhVft7xVWcGbuY6f|v-$(*#;*B9gr&4RyRau3!hqjPUHA*=& zU#DV!e&^7YC!SDO(;QszccAY@w}({&d-yN#>>DHKu!Va~VeR-$Hr{{pPr=O}+{GpC zMJT?W#a?{sx;guuORI{}94SrK8cW}-3rY7mbMuh3K|SWl8~w#>)#3 zsNp68LQiDQfb`j5v3z%dqiwRRfM@SrUGu*j4TsFgJKCfKzueOIN??r@$CIndt#&jA zo+{^(uYM@*cYFCmVWLufM zjTDhMaL%UUnmi;;x!*PK{D94;Fr$&+Z7-Yy)^Ox<&~fwjRgv8F>jz7)}BMg|aa_%4=iZWs(z zi02$z&JP<7I@0w#tUWRYCJ>~lG*K`W?yC&|ezqhlo7AM%3J4#Nb6DTI#b>`Vj`zA~ z*p##gOKi$sssb=shR!1p4M1? z#InvTL z1}Qxylq)O%orUXwJ9%pM#bW{@%D0@}ZTfD!*dy`BQb3dDaH0ipPE}1US6KPXCMyK# zmqvi5iYO9-*Oeg#rn-MF0HG`s8o8 zMo+gJc3z|KE4ckssJt8<=5E6T+7#0XlcJX)=WW2%0Vbhs+D7kfKv`~gRjt#`8G3{) zQ34)UNE)qYX~iu@p+`u&(=Uz+_>lqesN6GICX@?}Jh{UDwJ6y|tMK@_eY$rHYBKKZ zy2ftI7P^QnK?o_cM+;X!x*R$-b4=Ov7vlhHdXR-IcZZLdh`tgk_p?jGOA;~jQBW(_ zHrF_786vdHrI*+LDVG_A={EXaWVGFXL4q5XT2qq*o_?AyL>q zg!IKNZDquN47O;u6qqccq=?^G$qO@VQG6dr7Q_A_|2~i+Hqt^20tLv>`W2Z>LhTYJ zur2L$(&^?M)j~e4f>WnT>i0n28IW3b=0K<-nY zF?qU7FlQz4ZURkzATIxak{vmz3Ltu#fF_z_LOmF+w(jq=w+(wzLK{YNJ* z2F;ada(5{D*}zm~1?TiXzy6|CqQW9Y)Mr@;K0UAD+v`V2(`p>ex}eR{hYbLny$4suA9lwfG}=Ci0kOW zbDZGPPmILD#DW^zq{=+$IXSyAXrM#yz4<7FXr;5$!d#X<%AkrWvRy$H)@{tw5yYJ? zr!BW{cn}38%8d^_cyUR_N%m-HlYCe^i+ejqcZKzA)dsPyqC5S$c@@-g$-&%mhEZJb z9U#At+Ci%JswF`?Al2}Nu9}%rG{xJdSYOk$O5txK2})?qG8RWD#b3rFZ`Z%S)qJ#b z41Os*g|PnWcDvSkyIi#%e7t|L?&pogRmIJZI%66TJR~ zu*YpXduGt6f>YZkiSKwRdadAz)hriMuPx7J34z@r z=#y{>a2aEcw)d&AM?w&_ik=8CSu$e8c_u4Zuw{nFOouRd^o`d1psZjn2z>)-lXmWH z@LQXEW{++5aVm#JZq(R7>#+Cqst8Wh66QOqDhw3NGhVubR@zf-izZqiwznOnY~nw& z@$mElFN9gPa}+1AUgnVjc@2$qo4g(?1)6TopeW_sUPO_0bN=T(< zckzA7ybtzC4@K35L@r#SYV%TqNXjFuT7et26uKLB(T{|Ed-p$<72?sGGrZhPhcddF zqgF-4F)Aa%)uZC);HkJ}eO{3iKIC8hi2y6xtYvL@G2m*n1*)V^+SsxWrix*-IF3*m zQog*><%QcDB}i`H`4$j8<(-B?SdLddk@|v%%;xfV^%phz+}`tP#C@i|srj{>zuC~` zj|mqEheXO&yb>%hMB|%o;%*38tS2%T4AKid$Es_(*;(W4L#2??V#?zy)WEOlX3r#O zEKy^I34DLM^z~MA4uOf#<(9?3RKuz@a3b}D{NgOUd4+S6dyb-PDNnYJTh<@B?XLI0 zb@j#qGHf;7kB2-9m;T~KDqd=|0>me6X!PTuW6HM-qvvSSIq}oII?PzOWVwF9rpzh2 z-*km;4hIs*$eo(+Frmoth~+qwk6JyboRY#)%3;dUD;L(y8g0@BP%uX^usXLE*lPot z^+sMC5oumy%%Iz|f?0*k{p&$5B?X?zObp#yUIn&7X*f{)g*F7?jw|M18f|ow0^gB4n zG@gG$2wq-nXww+Ufb|2e3B1itRx4E0zzHp1nl8AfD7U7l(1-Oyy6kFNtt~BQ)qP(O z$-RgP`&Cns(w(-zubU}eND60qLloXFPEr)T<$_nI7KhW})5f@I_DHFSR&P4zyRZNF zYdjHbj+ET|+QD6VI=%9pA5jv%CB|FI@*~Pmc{xu9@54F0MV84p6>mQ;Qf^l=^Jpup zvz#4kw%sZ1lmY*fwm69o4uft?Z!V&_(DHM;J>CRC*+{WgAHK`3=Im%BDuMm?%q z##(+6uMQA(<>~*s<^O7Kvpwh6W^K7s2Le@++ZQY3W?)=@bnstXg_r)pd*6oq_s#LF zo_TZaCYL>8W??s#!C7#v$<^U(wNL-vlHV1^M?C*e`|%Cw^G>ZXxwUJ`%=&`Oui8Ij zB=>9$9lX*!25GYcT^aq8HyL|T;~fW@;CPcH4Q{RU#nk&G{$^MY&hABor)>SAM2yFM zo(gRQ&-?38GS-t!T$bX5+@dPv7TJw*8r*)VvtpgXM-*p|M?)S-n#8*Mg+M__CBnTdLY zDp1XY*9P4-aBD5k0b6qfN2b@{_Dzyr@rdg04vV9W7oCDfOyG5}X@lJ1B7fKrXLw0x z5*;h)9T&6~vbY1ujbt~fb*w4SKpy>@h?BkV3W|LJizrf_<&i|R;-XWPg- ztQsOMR+ISyG`ZB#W^)kMk*;3xVHX&MlJN7lEwrx6#4@{iiU6XUr z`Ls8-3MUxFOK7Zo*5pv|;}TUY>|)Fw zu0|T*^@Y%$TV|DKH7oLZnx(-&A-9)&mtW-VJZV)gPW(r!L4@Vml4G&A)?r%eo#iTV zCBn3%R?#%9bU3-A#pWQmL*4VibSbaAYJY;qznI=$wg&P_Cb?B}@zv(JRfH&5nM*=t zV-oa|RZSSBBe^5&SsJvIJ0AF8z!l6=PM*OvCsCv;04eQsv(dj)8u#Wex34vy+*9TI z$;DEspo!PTv98>B6k2)-Fz@(_bdAl&Ah^n(GRvRSRbeW_hL1ze) zlPP1U)Cj<04DDHj5;ca}Oto8$GS<{MDBN<6A0b)I{HzHd(_Z{@N&FAw2Ia`&aAW%7 zph3nGpynxZGlG=>_pD1p^a3pNU)Kd)PhZ-m-5+A5DC;_zGa+zt=W$SnN~xhqT%3r; zi;DK%Vp-In%fu_JRZ?#p&jxBLvfby?MRG0O2WY;BlqY(@#s zy?fnX8KS0 zM`jR+8)J_hti#EJ3v_34sfAsd|M24zV#>_j4TE8ZthnHVlA05p8w{^62|A2@%j(YFc^RLNmxk&;DUc_b z;-!EfamKdf42)n*MW@S$*_9K{xOmkhivthw@rT4TLyG&*^N(itz;OT3jdDYlYQ=Zy z3@BB#kPpTB{Wr;6}|T|C;K+YaX}T7#3^Qj*eG9IDf@V|FY=ab`SWlP+(BExK7lEnj~b# z%34QLA-q;CTu@dUFMG+PFlU7p3LqQMgKRBNdgD@?(8tfR16r>VS})VAw~6;I8rTe` zIl5-3X?`6HYj13d=I!-yCI!ZK&UC|__R2ylJUd1c0PMCgel<*hprUX zjOP%XX#!Y5E!wsCuk#geF*;q<-}49$Jac78d(Zr(J?)UYpiv1U0a@>Z9cAVcjfSqD z1)ojclAa_Bc{K1oQEE?Du`lBJc5)3{wz zsGJcj^Qfb+GIF&X>9aZWVq$UQn@LT_jCMyXZo`f&|(czh9xRGnXi@2 ze@bO8HgooV93CF+N*dBcx$p{e6Vh*)(-N!C@cSs+|v`-virGU zPFIeJJ~^}PEg?OSN&=-PFBld_fgZx+HGCi>;O5YpesLwCpjHwLuyc92oCxy_ByYT7 zytWnd4(?NZ49a1Wf~EYX+YYV;VR4c4CWiiKk2Tx61;hf1f1;$Xlrzou^zhoBk7v15&-cEgl z`m>Mm2z#Qy6~wyDLj;;T8l+9jpQKIA(j&Pi=WjNj+v5#vs$gVa|1wmICrh%N(=IHoA13W8JCyVon$}5 zy-w~0@A5P}dcM^#=2mLNwR2juE~GsJH?^`qWG z6`>7!Qd`hQ=l!x&=bx>6Jnqy4v}BdeglUbU-xjIH=@0=s`JR`m@Sd}Dodo)|a=(Ns ztfonaw9`D~YD2Ni(FbsqH0w#?&R}|N2Hw2U6))H^NV)UrBg|tfV zDQ{>+$QM989 zqi3DNv%^dr8kT<0dL=9_;ysbM%10d}R;r1)O1XKF4pIsxwWeuG?-!6Is87JeDYd5y`V&ieewOSCup9o~!%_;+3-*LI z71Z@1=*(nKQfRw=aNkrjq(UD+37GRnqU1WO+X1|%uftY&acUlkw!Mz8xS|S$k?KeP zFk<8L+;u_3snwyb43Wl%Z*y=1YaiapQN4cJGJAWp8&bmB({$+0{+<&Fz*;SC*^-YQ zlI^q!p|QpmHa(|@$U3vC_=!1BZ))1`CYE^z9Zi+~)+7F`GX5aZZyjRw1=YT@?3t4s zW?T6V25AqsY)&isO2Oz>(}6`eP`%X4CdG)HeY#lkkg{G~=#~Bt4%4@`!Lr6*0@Yd} zS{ou0r7<{cnBw;$US(i!8hg6S(YW!0#)ECwmgahBjmDrPBO4{(Dg~HQZ*VtwshI7o zcw&jyVj}U4KoUVDOC8oE-^h)44Sy;v^W$C5W2i194`zO{bxH2y<_g1?XS5GX+0t?7 z5y=>;s^^i7FX_p5&)t2R(O@wLsZe?6Oi5GU?b3MygYC~;nQ=H0XADYqHHCRG(EWPp zC`W$>?^L-#IifByO3&SYY|B`NEVrr+pCB4JW8N6cI^jQF$+Hiy-@|_+ThYfR*SIRd zV&mQ+b@-a|qE7Idz>ucjr zux=P@ls)oBk`?T~ppBn17T1`>tt^3-Vr%D}7u&qJf{Th{>$Jr&Zs(4n+ATWHmo!px z9R8iX`p>I4(kOcuCTb zh4hCtaN5Rd71MZ`J|EwyCeNYhs2_4(imfK47TbOmMh^X_-BMS-IcU5e9#7aB%U4oY zavY=`KF52v;+Gn{RjV+8EIWt)(veFj_A0o*L%o0Zd}hZVQAY9#CQzmSypL_q&ud3z zFX6}ReEZG#Q-966^>K;6?61O9)3<-N()FfXyic9@)qtyP$=T?=ZXp$6e-&sPedD$Y zHe?5P_g@YE_QcY(fjXpyPhZg(l&8S^15chj(zBaaD``O|a60~8ZfE%vR|gvsaL(LX R{#S)X|CaI1VqN=}{{tu8aOVI3 literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/included-files-view.png b/docs/build-insights/tutorials/media/included-files-view.png deleted file mode 100644 index 9bd474e5fec4c71a73d753b7de06e3e5aabb0679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60362 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 Date: Mon, 29 Apr 2024 17:27:29 -0700 Subject: [PATCH 0155/1239] fix links --- .../build-insights-included-files-view.md | 20 ++++++++++-------- .../media/precompiled-header-settings.png | Bin 0 -> 23629 bytes 2 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 docs/build-insights/tutorials/media/precompiled-header-settings.png diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 2093995b57..92bfe89f53 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -25,7 +25,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file as well as a view of which header files are included by other header files. -In this article, learn how to use the Build Insights **Included Files** view to identify bottlenecks in your build process and improve build time. We'll use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. +In this article, learn how to use the Build Insights **Included Files** and **INclude Tree** views to identify bottlenecks in your build process and improve build time. We'll use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. ## Set build options @@ -44,7 +44,7 @@ The Solution Configuration dropdown is shown with options for Debug and Release. The solution for this example calculator project consists of several projects and one of them is taking longer to build than we think it should. We suspect that the time is being spent parsing header files. We'll use Build Insights to investigate. -We first clean the project because we want to make sure to measure the build time for the project and not for just the files may be dirty right now. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** > **Clean only **. +We first clean the project because we want to make sure to measure the build time for the project and not for just the files may be dirty right now. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** > **Clean only \**. We then select the project in the **Solution Explorer** and run Build Insights from the Visual Studio menu by choosing **Build** > **Run Build Insights on Selection** > **Build**. @@ -75,7 +75,9 @@ Click the chevron next to each header to see which file is including it. The **P The **Translation Unit** column shows which translation unit was being processed when the file was included. It will list which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included when `Grapher.cpp` was being compiled: -:::image type="content" source="./media/included-files-translation-unit.png" alt-text=""::: +:::image type="complex" source="./media/included-files-translation-unit.png" alt-text="Screenshot of the Included Files view"::: +An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. It's child node is Grapher.cpp, which is also listed as the tranlsation unit." +:::image-end::: We know that `winrtHeaders.h` is expensive to parse, but we can find out more. We can use the **Include Tree** view to see which files `winrtHeaders.h` includes. @@ -105,7 +107,7 @@ The technique we'll use to process it faster is precompiled headers. ## Improve build time with precompiled headers -Because we know from the **Included Files** view that `winrtHeaders` is one of the most expensive headers to parse, and because we know from the **Include Tree** view that `winrtHeaders` also includes several other header files that are expensive3 to parse, we'll build a [Precompiled header file](../build/creating-precompiled-header-files.md) (PCH) out of those headers to reduce the number of times these files are parsed. +Because we know from the **Included Files** view that `winrtHeaders` is one of the most expensive headers to parse, and because we know from the **Include Tree** view that `winrtHeaders` also includes several other header files that are expensive3 to parse, we'll build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) out of those headers to reduce the number of times these files are parsed. In the example project, we added `pch.h` that includes these headers, and looks like this: @@ -128,7 +130,7 @@ Then we set our project to use the PCH. In the project properties, navigate to * :::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: -To use the PCH, we add it as the first entry in all the source files. Or, for simplicity, we can do this by modifying the project properties to include `pch.h` at the beginning of every file in the solution even if we don’t explicitly add an include directive. That's done in the project properties: **C/C++** > **Advanced** > **Forced Include File** to `pch.h`. +To use the PCH, we add it as the first entry in all the source files. Or, for simplicity, we can do this by modifying the project properties to include `pch.h` at the beginning of every file in the solution even if we don’t explicitly add an include directive. That's done in the project properties: **C/C++** \> **Advanced** \> **Forced Include File** to `pch.h`. Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary, though, because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes around for clarity, or in case the PCH changes to no longer include that particular header file. @@ -140,9 +142,9 @@ Because this project uses a precompiled header (PCH), we don't want to measure t Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** >> **Run Build Insights on Build**. When the ETL files appears, we see that build time has gone from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it is being pulled in via the precompiled header. -:::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: +:::image type="content" source="./media/included-files-after-fix.png" alt-text="Screenshot of the Include Tree pane in the trace file. winrtHeaders is no longer listed."::: -This example uses precompiled headers because they are a common solution for code prior to C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. See [Compare header units, modules, and precompiled headers](../build/compare-inclusion-methods.md) for more information. +This example uses precompiled headers because they are a common solution for code prior to C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. See [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md) for more information. ## Navigate between views @@ -157,7 +159,7 @@ Save as, the ETL file for future use rt-click, switch between views -double click, or to go to a file or right-click context menu +double click, or **Enter** to go to a file or right-click context menu Filter box: One of the files it includes is `Utils.h`. In the filter box, you can search for a specific file to see where what all it includes. In this example, we've searched for `Utils.h` and then selected the chevron next to its name. We see that it includes `iostream` and `chrono`. include-tree-view-utils-h-expanded.png @@ -172,7 +174,7 @@ If you forget what exactly the view is showing you, hover over the tab to see a ## See also -[Compare header units, modules, and precompiled headers](../build/compare-inclusion-methods.md)\ +[Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ [Build Insights in Visual Studio video - Pure Virtual C++ 2023](https://learn.microsoft.com/en-us/events/pure-virtual-cpp-2023/build-insights-in-visual-studio) [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ [Reference: vcperf commands](../reference/vcperf-commands.md)\ diff --git a/docs/build-insights/tutorials/media/precompiled-header-settings.png b/docs/build-insights/tutorials/media/precompiled-header-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe4060a8cc454eb04c5eaa39f1623de57817eff GIT binary patch literal 23629 zcmeFZcT`hp6fcSeREk(YBGrzHKp3T$*bo&FR1l;Ejf#LY=_SbsgP;hp(}@UDf+V7Z z4lyD`R6t4yJwT993;_a!koFEZ&UI#(Kkj<>-nZ6WFKa1~lk=5be*3rg{!Z>%oi&pZ zmlqci5s^A|^7wfXkyTps(y)xRz~t({C0P zQ=M`c>5MIR3NxC~XC>d)JeLT2S32yu5V92KTfzn)q!y8g6vNm;?wD7OkGRc0dm9-ZWA*#|$l2JFy&Cx5e$5eocu7Y2Gj&Yi zQ*%bER@244nKd@t-DJJpm_lGVvFZqw%jAl@jNKR$ONLtN~5B{E>Z?!u*h>+=mr35-YQ zl752@R&g+_;TBGh|CjS*y*x})87AZmIWS+Fbi%Pvc<=h4QofO;N7@Lao zS%%2krxG4-l3-Iq@L|dDs2G1w62TYnb8~TQ}!< zjE=__QUzq4Sd3n##&K_pOFiGSl9?@-fZo)l+n-{XfMEbG2S^pLxP3Ozmt*k;%I;hGR- z-%C#S`;s$X42xTP7@2948uodANWws~#t2#Ru4lFD0NE`G5qJlkzW~_xqpt5}HC^K-dr65Qg-oI9<5{6AT9EUGfp?IX z{Jt>lp;JI`7sg{0tf4O|G=fuUzMfLHJ>`o>|j=DEYJv?Ip$p zc;}W4#1;>o?hyp9vEPV^r`)m^84rAknVP6^io7j%mgB3Y!Ei)W7JEbzk!-54#3_t> z(AaAnrzCkmkDLgz0Dq*HXcvSCuol7vrmWZZFg@u~p@;;?~HqX7%k=$g%@UtNR z$kOP?)l5R6F#yvAF1Cm@)!f!vZH@`(DlD?FPweWdbh5vZ?|Wwa@s`;>i250RxVymdB`k~NmpP~- zEvEAfUclpg;m%W9Ehrw@<5P!6Pf(9>5_RsNW79J$QEs$u-+;8;O^;_AaHKEjif}J& zbW*VvKWsbnn85f&9Sawo-+sx`DP~Z|EXq9F9f@^MZ@{EvxtEaTY57_gY|wyrCs@;- zVCp{G@Eyq}wzGZ!zBe%lR}BzYca(IlZ0*?m#T-#~L2w{=ue#BNs;`AB_iJVsjGU5y zC{Vhx8L!a$Cto>*9#GG1nGHcAzei<3oLeNi{4J^*i%MrABYJSMFukqeq8yPizXzO4DKBOfeF7KYCtK^%7CZ)v*5+3kt$v~158 z{77q8=w;c4$GFbA^HG=< zoN3x;`e&S>cY?BQ6drd_UB-e;ZQve<4R!UjYuFg820F@S1R5ppVD&=yE%^SCf-3xV^?J8X)>GCY!)?8 z8cJ@sfHySLHe2#vP1{*Do4ADh1puS+FqTUg3H%CZ>jXyNU=2&bsP|=*i%>8EtUG~F z!Hd5wyW0t2)%%qV5(i5*EOhwiJi>Dcw@%i;wo0JQafI0bphDX z{`(ENBN|d-A%JE!<5?uX1$?d_C!7;t#yDe>NFVpFLYiQc*mvtb+OX6-57@LdHatXB z4Y$Kc-&3IpvlskcVz+8)D}{M6@|xLc3I)4`)y0JT@lV_)c-qb?%X-T6o3j#Ud$0$< ze_(L8^56!;He_EV7iEKKQ-`Q%E&7RLGl)WEpY*qn~d1Ae{g!Gg=}5+ zY{{US@i2@|+~(~%ENXYi()sr!9YmMz`Pl&0ES3GDU;}!B28uIE++Q4@-F}yKa03`&X zJrDtbQ1~>r?l&8U%3}dqi1V{|t@%ws2`(<78+B|agKrOevQ~Z)e_pxa&6O|l--z2F z!?0{qk3*K$KAchvJk&|YyYFm4FNzaT;qHV3D2;)(|K~I(zqp&2UqWY2FoVG0`(@|V3J1)r?2Td3ywfTJ`eR)Z*EyB-J zSvZGL%5-Q?4#)=9^L9*MZ^=LWipQ?!ba~?E=C3zQu?n9q5ix7BDiFi7<#*c5CS8cr z%8}1pV!Dd9c1qS6+RTHINQOTYb*LD94B_TPgyK9MuLZhtcA;=6C6Nsz|w zVNsVuO^(DHq!z8-%3y28O-J$`h;qSateTRCS6VjearvF%6ts)RWu0f8FwDD?eanrwS%ljQVlS8Da0A}0aOcF@|d&AMO( zmB#Q*%Frp)(PZ9Wf&-c3+=|F_u|=6Wd=}pgT}yhV!`LAh9Eo8 zYYvt5Gz7W+7NgW1nKE`omP$R>e0#RRyARW#KVd8=qcM6RwzHQqH|iE9iuM_ z)BYSb9v5Igf}7nFxnhTNemSUi{QQ<}F<4p9*t|R|!W5r$kO^qyuYCc(127zO-f1%7 zH2ClbC34hW=Y%(trLwIG&kazNZ+%c)73p(ZuGL zfR>=$qbal><5$f9;#gE3z(r8HSsDWR;)j#QA~t)I&Sm&8vUQCE1S=QV)dtaQEWG!E zP0GqvChX9syMXR|EA!Q^ike#ZI%BNU|7{Y$Q{PVVr1&cLy|+oj24pGmmhZ`@BX+m_|EE8 z$6pN=J^%1|RM#oMOWI6#F0E?FF)R_uY{H+T&-qZNJb}#hdS4eM44X5%F96*!3gX5S z9=}<8+!{!W3X=mj*O{kmS-mtRb96Vo{0XP&4*&qU@#rnD^DqU0)YNz__whX>_>EHVSw%d`dw_kB0reQCHZsm-|BnLXK!Xqds= z7IGri9msRh>&RaD+<0#wXXEBw8{emb`{GB*Im7*if_b0_vGmoEcz(hw!X1k*z}6ODK&rR+>HsWt={lg5#n+!V7e4*7 zR`loHfC(*Ly`uK_yHEbO`NPG(-~F@DRPfi`F2+a!3#|)TXhtPNIFBJmj(<4bt>B5W z4pVhT^^hi;cY$2AJrDB7@^Q%oZUy1ka@W;EFy02okMkprc+#}&W^Hgvh2o9m858X&<9pB^N9GoLJq-y zJ4_nvxu`NAI1PSh#@a#bC!yi+4x{sgzVJC%FG7m)B8gFUNJqf4qmws zzB6ldC@h2B%H;cZRa*g)Pp36h!+?n`=FYRm(fr^xFQyB)iqMzynb;pY+}-O}&F0f{ z8rUYDB>qfTgXK4lpHiK0PHwO#^%!9&%yX`f!RB2}*R1X}!3H`7W1mJ6*(u%uRK3;) z8kdSulDu! z-)%Aj40cMvi*ls9w7#psbop#An4;qCeT$B6KH1 zr`k;Le1+)sc3g!k3rn=IR|i!JyYH`#Wb5==B~Z0|qJ!37tgbo*K)5-l!5i_GGiphX z#Wb04UvYY=e5a7cf~}I%Ve5!4DQ}6}s?Y(rcR1v^d{ztbd5ZTp{;gRULvRw1WgNiEhC)i* z!Jr9OV& zJ%(QJmZ0r}LA&nww)*X6e;%?!3cp0w&zqLxnK5T3>WRh)+>zN!svt>7={MXSNrl66 zH9g)MG%053K$hoQsn;dcZPVI{x;r7mDPL~*>3g0`i6mbA(jJ&bn;ja+46w5lh&NpA zt$?@&=(bGTdGmbTvo*Iz@8}Xv#l>@n4cx=T#c$q-L3zlmKYi@> zrGua$W|!r}cGn&h51}>T?NzFIja`rE4b)h-+4(}aF?ZMdtoGb66$L~1?Hjk4w=%=- zLX;cnOwj#%QxmdbQ`n<@CH)9D+AteeIjI6UTL)?%_{8nMVbN?H6kPqmHyoNT7CCzT zMcPd}v&`P6Z)t{vB-Qd#^w@cRP zJpJz3?IxnP)ypR{FqHKK_u!0<^YO}n5?=ff<@N1i7P@T>OwekD>xl3+RljhJuB>TVt8L`j#5EpU%MyF`nhT9T4t2+@@i zX`brTzRt4fn%E#&3~}Y|*KPBPOqLeQZ1Cy$dO{a_oZ7P%fSY)SJ}n=0Mcx=rFov;m z0l+8w$TnRnvx3AhDgK7YV&b?x30^xvl2NyA+(O0Pn{9jEuq%9sQEvPFG1s}7e`^n@ z=-HZd;!JPM43ng@I@00od9d9D|3>dU9BKHWiJAGQqLD8m2t`f>^qbIDDg3-rQ-#z0G?b%FE?OnU)wiZ<4$-MeganZa9IX zPw3Wo5)XfYmR=smC(?}oK|tL`b+CIuk_w-1WX6bd3i&4r>eA*YxEM*Ch*EbRUNTT& zJ5gjR-H5IfS>S97-b+vk>E>`f+&S>kg-BwH@jgP3Oi#_l)se96f~fL@Enmp)w6jbo z-}tq|F~t9izQ17N027UI_OHL65p$k$>!_789SHy za^xRNjhCjkpA%*<+#W0HRJrLIlEKe25?_DGX+mgahQW{F$9i^|3<)@?=CrIIGi^Rc*6eJ<$+PCP+`qee?(MlI9 zwn_U|nW>!>VP?0`7ucIBqLoy}gED4g?f85Q*RN)`BRSbL-1)Wx9YJ z*RY%O-+F;Z&fKFvz`|*BkMnjY8{C}gLS1sA*9kcI#;SK$d82BIIdh|S#NnqX zis!x1&1N6EXEXY=z)htp9R8I}l8^jICc}e#`VfB2D$bSG4+3Sabt^~xS`7B*wube5 zwOkX~%2zw^QEnoE&uP`3p*-o0j1HsDo9OnaqG%dDC5D+UUm+^2jFr?H3BWAz(qgS8 zR)uZ;$Ka?GFXPUy8>Yg802X4ySxIT=mK$e=NMB&u_XpVR24(FFI7JrjKM*b}24ngi z^JF-C?hARjdZTx(LpbSh?}eur&1WGvb|G8+3kTG!&7EX|I=UY`E;$xma(1>m%g((# zqi@hqtl0Og4t7A@UgywpBZ^<-igvaav|k)Dc!4^y^L((<^tl&2wuC`Qj*GN6;@DGy zG|^BrhCR|Ch+lDW77@AP#j_=D)y7>=T6O#b>lfnG5Podd=N+0?kLHCGAf3-g5NFK+ z7PQF4t{yWzet+?!KY1Z?CR0Tl3ZH$-t2=f){HmvSk@0y(TCnj?^2XydA^Uhl72Xk6 z7=axY6O(u&ER*rjo%vz>As1wl{1*%T8v%CslL7z9VUPbwVT=EF(dYDURBjq>`;Hyh z^SzeXBfxZnTQO298#nr%4SR=-lg zE!ZHr!T0T*u2pmG!{um~NmG^@I=m(P)=cX#T2SU5^isg_)~4!VJF(Xo3z;S!C~x1U z!VSK$u*M#MY zi{%W?s8abwoFN4QnRm5iVoT5Y8#pPEuq~{x_^22M#S0J+?>h_CT8NknVHKvaX>`Ub zsB*cBkL3Cq+Js|_xPsO{*G_Tq>8>4nhBt$^D^my6A(R;QKw=ls1*E3d&wV{vIO>5! zM!!=|XsQ}^S`~mUy|`A)kP{m0ZW2EK)yP;W+16KiN?E&2`E`j71-3d;z$8oqjS1aU zs5gSz7^Ko$sPI5vah&&g7>%ewAzOH#r0>u&=jwgY^ffuGKx`Q4N-!^uDY(`VcuV6F zbISe&eh-N-)k~FU>nF#_DoGE|^PwzQ0b#B-PuSCQ>lLE9nF16B{LY*LPriqLjpYs4 z2x(KzpjD%WtIY09J)VPG-RM?Y|2Sw6DM5;B`;rsrIm4rzmm%g|P6TG@1f^!k!_|aPIXb61UV!kvA%$P_y`UigM|9zx z+hHgtJ5T_bpB->i5kJf5sTS((3Kj}_e6fKCD)N*_Bg#3ozAb^jHMUS4P#z4@wD#g_&y>u z6$H!}%Cr{7qRjm4Dz=Zz>|tb<)fB!6*fyvfe`&p#^Me$UtsweE_?08z7?YL$sU!tW z(N(erE8F0M_GO=3`f*$G{VqgXO?uVBpd-CKYTd`0jWz74=VT@Axk0co!uW++kFa>P z8%utL4TF0k&giA+D!OJjH492{Zi39?=A=md@4XR|Fw5p1;*a_K zUPOf1&!}#H4>5RBJuUo3?suvqgZe_l^=e#-w9&^aRUsa)v0 zhB`S$JnXoKg~{++rlty4v0n2El152^P6bK6;x9VW4W*dUXmQQ*-a|6?n|7P>wG?Cg z*1;!VuXL{5{P4GRy95uj`%o&aA_rNGk%xO#u}|~YiMbJJn82OUS1>&C!T`(+^ZN6> z^P2BZc)s0%FVWOsX`i`AxLiQHG9e>VEEee%7t;Mdav0~emhDd8^fwnXtid0t8^v)U zwFaJFyzckU-za#@ER=;tx6p%q;|F{N0ZB${5-30R$=)pKb>trG_$%7CsUUfi>ndtp zjmbe0l8a!3-2wQ?OKVRvu_)W2tZjyv*ebUS15Y}sE^6K%>oXDY{-8l0&UfKn>8;<8 zmz(9W+*kB7xe>S5$~J4`F6BsyMACdC@U9+l?bdUO316C{(_5G$K4VbUk!`kkm9qVy7~6);WVKez*HmSuLG9Sr)C8iDEbZ5FIe&hi>-9bL_hw-+CjC*z=BK5M`#OuJrJ!M7h}J(pH-7 z7Rh_!f|fu$Fk-FC1Du~H_#-;AXL12x!7uestcPzww@UnQ-d}^_Ep0-0WoO38d-vYA zl^%9tyYuFQPk}*owtgj|g;CFo2&@fw(u6#ii_$r z392`mnw2#n#rhQ?n<9=G(XZ_W9q^tP5&6o>4SP{;>8QruC~06>>o=D5bu+{Iwydmk zD=mun?o7lxH)kiK(5W$HXKu)|$Ri#)s5tfR^`d#Bv@tC?2Vdh=6QAA%Cno#pzXz18A zvGND+DSgsO@2qIL%Q{P}I0^2sJjPfN=Hb_C3)Yj3hj4i?Rz0aHrTf*+5*gw-G@exA zGhw%z&vw*&2hU)Cc)CFn^9ywvca9`_$~|&uSDw8T7A`@Lw`oB(&93Z`3$=7yM|{5j zPhuv*Hl%XS7GekL>oM{B~We=@?-%j=+$l&_B&UB zFr`onw2yz~0&}mcLIR~1tbE+*Gknta?do=q6*8$0;P)qd?G;r$RcQzKy~+#r+`@1R z_=ZzmN?V7YXf!;0gxi<=g9uPYnqGR0lN#xc$*cOclD^;Vt!@<@kP3?=(nh_wP$s?{?4jOYA;>ZR}6%SjIJOS4H!?*+BKR?0%K1&*0XHmS0J{kBta$a>FTQTr2WOEVajxP%mYgqXJP@##@p; zk%aJLd2;>;2+FbWU*$!r%~&Q${()@()&0sQ}s`cE^5E&_>|I?3D9j;`P7AC%nss75pA~O}J>cL@d>D>r{;o6WX_<@ga1DiCx zX}(`t3Z11pIVHp2IBht?1gAAb5f32nyt7%c?fh)eQcAX?FBZts-YMOiwjnqg&FIT= z;J4Gae7pF-@*XeawMqm2`YWT#B3fMJ36)zduzxH83vkSJA|l39={JO7oQwgXC=$6= z%u7b{&W^qY=u2DEh1OO-)^s~$LVSA2*SjyM!S0$$z^6!&zpn$!T_-k&T%9V26#TkUEHRTIt>0?~_-h(Jn>8v<2#ACp^_Ul8dgocR!i&8Y)i zj>|*h`$&AJ{I+a}!te+^Xh3K)Kkd`VTh-fi#qey9h2h(pj@7G5`jsNj`6}U?;>|=k z>9Enz`N0gO3YuedlB24UE>wQ;U^m>~sV@mxy_@b>|7Hp>W^d-HH zar@!AeMzt;y3F&`(exYC*f|#K+muqICIrHW?iBXP6MRcRkGA$Cs ze!V(GUsT7?f6)&%OiHYkRPy1^O!9ph zY&NQXD80M)zWKeURoH7@sgLyM!q2Yw1c2PJ?P2rh;ZJU?T}e_Y4FIx$0Hg^hweEm0 zM33vVDuT!;wKhUEn&GBhPrxR0E`HVZRw!6CrTB}(%z}u|h1`J$m8XXl;I5$urxom( zqkT!mP2TqyM$q)e?lPL%^@1GR`fN{C`lDH8OH&VvcqEU<@K!n{(SRH7d%H+8LU+V`&S4Ewkc zA?OJI5=oqdhb$z0jJSxcCK=Xr7<^Lc-uDrwNMBzip7Y`B)(@CE&m_faf=@XBy8ZgAZsjHGRCbSf zJ6`tf=-a#C$CsLJYaHdOc+^hpdAKFA-eO193S|{;oW6(QR@YJH+*e8$>YK-y_xn>7 zJ8M!~Uh1Ep);9GsgU!OTX~i9^ZQgJAluWd$LeQIZo?{q1w&|^w?%7Y^>x2GI2VwPe z85fm7<7NW%u@6`V$RTdd>!*lC3h1uZ{XsdcOe8E(mAiEg(aYw8ud~^g1@#E+qR~33 zcJLUQxwUgDyw}V<-gp&pThRP9n%hGY_2Mc<>0YGgdQnl%(EM;=w(tuEKaS0CQTn^# z0Cf#U9sE$)#z6X`l&@2DPi`272N^MRx5ali6cYAbg*BNpHks0PA<+)wBg5KC6*>LE zhs-E9OYa8$Oje8h;U8Fijjw^ufglKGVB1OY=wcrC*BF7YQ&)b!-?uqV;5q`coktOL zEvfNGz##ei;`C>D;&Tt(`ppRFQ1r&F&8(YW;vR2GlURsuTJ=saV%+?i$)DrC<{}iu zI~S|&p3UP_+_B~`XYf~8Hp?=C_%&Oh4k#s7S`wR;= za5V^Q51KK;ZB^ZEkf7Wo#HO$Lou4#um%)azExf2q23uhDagNG9){Nk72PwOnR-&6C ziABK^1WM~sYE8`)7YTYB_T4mai{yeyr~DnAO#Mg!iB|pkYGbqZccZ|4KY8EJn529V zR5X8rsm#1pW8pO!9NcE2q^1%!;VWbdkKX`uB{!IFHC<{ zR`$)V*=gAdXnMdPRHSVwoInM0b?YiU_ej8MA)2NnPh%ym9f&9-mdQLK4~ zbh+#h=zg7vpi&Bjx(-pRN$dp){IvF0M{Dt1cXdk`w4%}9T|EwY>D)(?O#xQ|Wq@FtCxqL)k&*myzC;uww&GXBrA!w=EO!WnLxRrf*e_ z?e5*YYOUBcpv0>3_h_rJPIUZQf5;uuU?BU0NW_t()vG>`euW2sGW_0s$9QVtpNldD zFQytDn{g^X+3U|}Q6j(i*o(L6;`?*$5i5X4bUyqnW&TPcMB1W&VrL3a*z3oLY{*-v z&{@n(M4oH>Q(;R_0tGC$0FhjYKP#%g#BdRj!%qLEH^9haN5PRNYZ1sFR8b_Dx}Kb-W8$>S!-*Xr~^DRKxmh zA-K`1qkF2pER)X~@+=Qz_+6)ElX$^hy55-(>`O`l)XbF_s_Iv5d!u|Y*Zd!>^2hF7 zvJkTH^EcL;4v$@df32&y6OU;YoGir`FRZwczkZ1rq zc=|Ma((BY5_EVN#lT><5Db?S(syh7squDtq%%r`@`ER5W7z|MU#|DY^dQ!~sl-<#D zqa^F|nNv0nel55a z=F0RolM_$ymz-XgVAW>;OZeU{CmK26^zhYWgM_D3@EUZd%B8P+_IAvs4*P$}Wy}ZH zhenO|WrjYB&dy9V50tCo z=5jpwWm{#3JX2`2{@&Xz@Lu~zK@#yKaV#vPYP3AG#)I^5nU!w1q2f?@+lh!F!7@{J)2=pZ4`<;{6l4ehT47-{t>nu=+o}i^Q&=iW7|kWZb{QVe8R(YC%`btMVIAu}59>U=kNpZS-I-J%fR9XsL%GzHcd4UJz` zTv;3s>$0N-DGxh!EBjh5GrCyhA(*fz z1jePx+Hu|aGePUxQI9_viUphh3l|eA){5<43!G~&bIL#qs^7ihXeyx{bsO!LUyKHl z6a2P@oqwV_alR8|5~hE1W}A(vrr(sy>-yoZ5i&tXDSBTLD z4d$zU|B}0n>Um%*a75`*@qefzyGB#NGIqwTkl{%(<#_n*-TP6Mq>Iw#yIw4C3X&52 zk7+Q5eA7Pc*L2?a(Sl<~(8*iawZwNldd~l@lh;@^R8OXbxxVW=m3Zfl z?0O>1(UBTcQWh*)df~gW``K&DgQOmz z8dF!ALQX7%t#jLG%np;7N`!By?+$xtqHm%nuj!EzDz4Xx&w*htg|(SQVPVvpaVe2< z8p};?a{#Hj4e3f$W=ApS+0wlE5!tzZ8+K)>NnDal>oF>w{yj|!lK#qge|uOhQ?yd~ zjfY&5*+3UcrT)_}v+G*ZL#1)-L5I&nAvL|rxuv|ADegCMF$^>7hVw?rHcf;4!G&O> zQAm=mmb_umco(fKhxy6hQ`KW1k}XC74)Xkqd}_Ae~fRNVQchWg;QvLGq3!JWq=+xsF8+kdsJ>(~zJ zApP--vQ>q|S`N`q2iE59Ehn9opaSQs;0jY4U%c0ziYLNs(^^IL9~^F+M+RHRSp=G~2 z`5NvUoK+hO*#ZSXa}#z7PoZoYA}xgUa~s9eugWeb^j0xkGhM|K|I_0XS&# zFYIvNx_T9o(m$E3WL9}(IX`)J4h%xD-$fF~2Y!I#9a=B7im_n_kG=T>9XJ%Evc6&5 z*1O>|D=#f+4XQKb4$Do5=$QglwU(VwiLw;Yf{3Q9197mjf*O_1m`vY?86RmSI>qZL;sdTNg zhJi9H9C%hq124Rh8mOq4&qDS4 z;}TUp)j|F$CG~yUBX!oKHX~yGoVz5nwRGN_GK7+&q!uYD;ygyf$M4PFq1>-njxXbl zbU}&7GSZT_^pa4GlC^J2l4NEISf;mx?qLR&J;myMkITNC+mPtQDq;qwzhrrJhOQHv zT@D)+bcAP&2VX9G2{?|+ELaA%dR_z1GcBIa`DZ1o#k$2NNuPiA z#TTo&R;RdYCdokZG9U*Kq(j%fsZHRbbDHV%w82UhVOyigGnv(q z85>NBop_~R>VhP;3>SKg$6sSyeXwsSSyF*$_LdD9Ow)CZk&1pd6lR-MBpiG_gR+;g ztu~*%8$L_aWPof%eFWy8YC34|tC)~|CsfDxu03!JZG+2|`$7|)8znwoC!4#Xk5Y^a zGHxo{SXpwhTl2qXo_$Qu2ZR1-@|)4VR9Vbj7VJwG&${6^lhACmM@m|3`|G0O2t4ZE z@cWP#N5h&5L%9)-(TVLY@l%N&)qA2SfjP^qNR}?~xlqEh!uE5?n#iKVXVYY;W(gGR zy%6o_vY#Dgr}DW|-AWO}d5_-+$^pFeBt1YUrLMSnmO-7?%kvN)$QLu zZ{A(NNtSW$PFs$b;uXcePTJ5vl>RPh5{c_tPgv!X%)H-Js`(0D+4m;o(>?mZx<{gf z;A-(z$BUftb#FW>{$0KTa_Q`2h1l4-p#+=gE85-^*=O}?t!XCL?Tw@XylW2b_T9+q zQapXnM%yxHZ?VMiK8<1F_)N-in1wH9-JK130 zylKVjT;SwcUYbU5)z`BPP<2#Xd%94bQOLN+n0+zS1 z|0xpje>rabFDO$*o?fiK{%B4etCU*~gdPFmV)g%`3&2CFOXXVN?2gaO=%j%=>(2u} zB})XZZI1KJvkl9}>+kYRPft%tC=qnz!6B|DD3j{S>b^%IYu=8JVAYLLx;e{$kM%7r z5RiSn53xVv08W(o>IpFn44y?493vWQ^jL~=vt6uSS5JpndL~dJmZ`OF2U*|xY<4%E zxgiTxVcXvt*cxHL3@R!GX{xn+TWCxwky2?LuUVGW@4p1}fg?Jdor288nNw5!FvIDd zE*Ee~wJdA>k;^k0q#obOt;>qgocQium|9Wm`|=rCj``}yZ?gr`Vs7tF?gsT>mx)7G z^_?yoD$gUdiO+Aq$0Jv)=oc)DC|IDM<6CV2I>S{`LY&iA@0(48Z-=NzPKUIANfDK< zR9JQ~ES24##HTK*brd9?m0-Ma`D!3DnE5_z?*z-G-_z0*2`xf#6AGA>Aq|1bvIi!w zFFUn8`1Mgeww;}-Xpx(#zw@NrnpFoCa1b;+%M}dm9xnVBUJ6L8m^69j;;hfhacLz(9t+FA72d&VZ01@6O9w$ zjnvAIYI96&P3O2}ME(D|OKeVdnKToQNo{1>{e_F>OO0FUzxR*VEq>|bY{-bqBpX5Z zh$(%~bN%>N@ZPl4N?JUBcZG%CzRWL`!e>e(TcPs+o+O!TW9qPH_2(fTyQdH}f))8jVRp9{P~*xe`6W`9qoeCdnN? zw!9s5K*l7+CW>x#(*({cA$h8tjyQ6F2z)CAAP_5+2;$L!x1G-?d9K2F1(xXOs?%Vf zbz%>H?qzZA6H)XEnN*58@!f9F@t>jscB7*po6hhB4qa*Lp-iWI!mYPS1JBtYA~e#u zsNvugtkc}N-6=4C!KjK3)uJ(lZ@4wEQuC}T@F;Elu-+^htE!1*ZQB+}yyL+{Gd~es ze4Rc+rO94_3<B5R$$lQC+^RK09`}0nIm#9Bi zk3`XQOU7j9tNljNw*IQ7x9t6c?nShIsY{h< zOPb=0&cj`jwtV6*M9}IxfPXQBATywC0 z#^H(f62}gLE!c|UIY;3lh=&X6&&2wNr8YvU`(}yT(4Q^nsbZ0>`reQb`eovO3F!NJ z;x>&12f6Mqavxtt!ABQYn*e2v_}1eIFmT7T_Eso!!38XITunVzR$~{-*kq0{`Im1+ zM!k1^3w$xh$lGr_6S_Z$(u$ZS#KTTZe{8rDjiiQka&q8ScIVT8ujP3ZP=C|}I-ZPA zFp>k#-5=nk`~T;NuA-6c87CFxk^s*;-xYY{poU_%jzBN?X=%zqwK?`$v0nQ(#qL;M zvT75t-9rUSiD#-v+RIVMgh4d69$Vl*Z^z3S$vvhwb>FYnd=Xf<8=~?TtR?*FQ7_;7 z`4rnJ0FOBM-o7zcd!r{CN!B;U4R`MZo-TU4vLwZPrU7@!WX*0$dJ{RW8KPnnal5Pt zd()zLeF)s6y&9Y&P)Y59DmpS_SU)?t9jWzUk9${R>x8sFPK$pX#4$~L%4vy zlk-C77dt!*B8;ym8O#6<{>NfdKPg}TJgaNHyc}@S{>V;N;Mq;ASZZiT(f0n+B7fu# z?$GG_)!QFE|Ig>&b?-zxe%WQtE=;Wd7jvm8VFEiNa9+xwXihLodrj`<*N3#Q8g%+T zr^Nov0by&(+15Y0T@gERj_C8cKUei%NT$j(5ek9b1LXW?uF6700h}uw8s__QrPl zmpkP=i*~vlZ#UID(~NaEM@#R2x68YG>mS_*&gZ?in(=PqqN8i z_0RWR6(rWoIxYKaN%EsqY;CeEz5Uq>4mrn}eDB(r*4(IdW;yHsoyDH#dD#*ZA~z(& z-HFGNlvZT^@cI_;XO+`7-GbxtGhg2Jv)7xv|MrD!;Of%VOz!{u4$TA_!N<0Ca_P*s zQhm9%_NO0AG-8W$!D1FLS#F71INK^brMmFFTwHVb#dfA!Uy6_SbMr2IQenr>+Wh>C z>Rn}t87FJrX=;3NRJC>2sF26v=LhF(*qDKP1F#NXol}u`po* Date: Mon, 29 Apr 2024 17:57:20 -0700 Subject: [PATCH 0156/1239] links --- .../tutorials/build-insights-included-files-view.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 92bfe89f53..469d109e87 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -136,7 +136,7 @@ Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all t ## Test the changes -We first clean the project to make sure we are comparing the same thing as before. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** > **Clean only **. +We first clean the project to make sure we are comparing the same thing as before. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** \> **Clean only \**. Because this project uses a precompiled header (PCH), we don't want to measure time spent building the PCH because that only happens once. We do this by loading the pch.cpp file and choosing **Ctrl+F7** to build just this file. We could also compile this file by right-clicking `pch.cpp` in the solution explorer and choosing `Compile`. @@ -175,7 +175,7 @@ If you forget what exactly the view is showing you, hover over the tab to see a ## See also [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ -[Build Insights in Visual Studio video - Pure Virtual C++ 2023](https://learn.microsoft.com/en-us/events/pure-virtual-cpp-2023/build-insights-in-visual-studio) +[Build Insights in Visual Studio video - Pure Virtual C++ 2023](events/pure-virtual-cpp-2023/build-insights-in-visual-studio) [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ [Reference: vcperf commands](../reference/vcperf-commands.md)\ [Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ From 5a0d08262a67f6c88119337a8b126666ad08b074 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 29 Apr 2024 18:59:04 -0700 Subject: [PATCH 0157/1239] link --- .../tutorials/build-insights-included-files-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 469d109e87..5e72b68098 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -175,7 +175,7 @@ If you forget what exactly the view is showing you, hover over the tab to see a ## See also [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ -[Build Insights in Visual Studio video - Pure Virtual C++ 2023](events/pure-virtual-cpp-2023/build-insights-in-visual-studio) +[Build Insights in Visual Studio video - Pure Virtual C++ 2023](https://learn.microsoft.com/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)in [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ [Reference: vcperf commands](../reference/vcperf-commands.md)\ [Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ From 65bfe296283b49e531a40136aa3c4dfca5d1dc85 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 30 Apr 2024 15:37:04 -0700 Subject: [PATCH 0158/1239] draft --- docs/build-insights/toc.yml | 3 +- .../build-insights-included-files-view.md | 76 +++++++++--------- .../media/build-insights-rebuild-project.png | Bin 16923 -> 22153 bytes .../tutorials/media/build-options.png | Bin 6979 -> 11702 bytes .../media/included-files-before-fix.png | Bin 52839 -> 65994 bytes .../installer-desktop-cpp-build-insights.png | Bin 10682 -> 13533 bytes .../installer-gamedev-cpp-build-insights.png | Bin 10452 -> 13048 bytes ...compiled-header-settings-force-include.png | Bin 0 -> 33967 bytes docs/cpp/range-based-for-statement-cpp.md | 3 +- 9 files changed, 40 insertions(+), 42 deletions(-) create mode 100644 docs/build-insights/tutorials/media/precompiled-header-settings-force-include.png diff --git a/docs/build-insights/toc.yml b/docs/build-insights/toc.yml index 5e1b10f294..5afd5982cd 100644 --- a/docs/build-insights/toc.yml +++ b/docs/build-insights/toc.yml @@ -8,9 +8,8 @@ items: items: - name: "Build Insights: Functions view" href: ../build-insights/tutorials/build-insights-function-view.md - - name: "Build Insights: Included files view" - href: ../build-insights/tutorials/build-insights-included-files-view.md - name: "Build Insights: Included Files view" + href: ../build-insights/tutorials/build-insights-included-files-view.md - name: "vcperf and Windows Performance Analyzer" href: ../build-insights/tutorials/vcperf-and-wpa.md - name: "Windows Performance Analyzer basics" diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 5e72b68098..ed8424a97d 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -4,9 +4,9 @@ description: "Tutorial on how to use Build Insights function view to troubleshoo ms.date: 4/25/2024 helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree view", "#include analysis", "build time analysis"] --- -# Tutorial: Use Build Insights to troubleshoot #include files on build time +# Tutorial: Use Build Insights to troubleshoot #include files build time -Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on build time in your C and C++ projects. +Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on C and C++ build times. ## Prerequisites @@ -25,7 +25,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file as well as a view of which header files are included by other header files. -In this article, learn how to use the Build Insights **Included Files** and **INclude Tree** views to identify bottlenecks in your build process and improve build time. We'll use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. +In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to identify bottlenecks in your build process and improve build time. We'll use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. ## Set build options @@ -34,82 +34,76 @@ Before gathering Build Insights data, set the build options for the type of buil - In the **Solution Configurations** dropdown, choose **Debug**. - In the **Solution Platforms** dropdown, choose **x64**. -:::image type="complex" source="./media/build-options.png" alt-text="Screenshot showing the Solution Configuration dropdowns."::: -The Solution Configuration dropdown is shown with options for Debug and Release. The Solution Platform dropdown is set to x64 -:::image-end::: + :::image type="complex" source="./media/build-options.png" alt-text="Screenshot showing the Solution Configuration dropdowns."::: + The Solution Configuration dropdown is shown. It has options for Debug, Release, and Configuration manager. The Solution Platform dropdown is set to x64 + :::image-end::: - Click **OK** to close the dialog. ## Run Build Insights -The solution for this example calculator project consists of several projects and one of them is taking longer to build than we think it should. We suspect that the time is being spent parsing header files. We'll use Build Insights to investigate. - -We first clean the project because we want to make sure to measure the build time for the project and not for just the files may be dirty right now. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** > **Clean only \**. +The story for this article is about a solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We'll use Build Insights to investigate. -We then select the project in the **Solution Explorer** and run Build Insights from the Visual Studio menu by choosing **Build** > **Run Build Insights on Selection** > **Build**. +We select the slow building project in the **Solution Explorer** and run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose rebuild instead of build to make sure to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: >[!TIP] > You can also right-click a project in Solution Explorer and select **Run Build Insights on Build Solution**. Or from the main menu choose **Build** > **Run Build Insights on Selection** > **Rebuild**. -When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the `%temp%` folder on your machine. The generated name is based on the collection time. +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the `%temp%` folder. The generated name is based on the collection time. ## Included Files View -The trace file shows the build time--which for this example was 16.404 seconds. +The trace file shows the build time--which for the example was 16.404 seconds. The **Diagnostics Session** is the overall time to run the Build Insights session. Choose the **Included Files** tab. -There are tabs for the different Build Insight views. Choose the **Included Files** tab. - -This view shows the time spent processing `#include` files. Files that take up 10% or more of the build time are shown with a flame symbol to indicate that it is likely a priority to investigate. +This view shows the time spent processing `#include` files. The children nodes are the files that included the parent node. Files that take up 10% or more of the build time are shown with a flame symbol to indicate that they are a likely candidate to investigate. :::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: -An example ETL file showing the includes files for a sample project. In the file path column, some files are particularly expensive to parse in terms of time. They have a fire icon next to them to indicate that they are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed." +In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time." :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time, and thus are worth investigating. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed. -The first header file highlighted in this list is `winrtHeaders.h` It takes 50% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. +The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404 second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. -Click the chevron next to each header to see which file is including it. The **Parse Count** column can also be helpful by pointing out how many times a header file is included by other files. +Click the chevron next to each header to see which file includes it. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. -The **Translation Unit** column shows which translation unit was being processed when the file was included. It will list which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included when `Grapher.cpp` was being compiled: +The **Translation Unit** column shows which translation unit was being processed when the file was included. It lists which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included while `Grapher.cpp` was compiled: :::image type="complex" source="./media/included-files-translation-unit.png" alt-text="Screenshot of the Included Files view"::: An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. It's child node is Grapher.cpp, which is also listed as the tranlsation unit." :::image-end::: -We know that `winrtHeaders.h` is expensive to parse, but we can find out more. We can use the **Include Tree** view to see which files `winrtHeaders.h` includes. +We know that `winrtHeaders.h` is expensive to parse, but we can find out more. We can use the **Include Tree** view to see which files `winrtHeaders.h` includes. Choose the **Include Tree** tab to see this view. -## Include Tree View +## Include Tree view -Expanding an entry in the **Include Tree** view shows which files that entry includes. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. +This view shows include statistics for every file where the children nodes are the files included by the parent node. Expanding an entry in the **Include Tree** view shows which files that entry includes. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. Select the **Include Tree** tab in the ETL file to see the Include Tree view: :::image type="complex" source="./media/include-tree-view.png" alt-text="Screenshot of the Include Tree view"::: -An example ETL file showing the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. +Shows the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. :::image-end::: -In this view, we see the header files that are included by other files. The **File Path** column shows each file that includes other files, along with how many files it includes in the **Include Count** and the time it took to parse it. - -Earlier, we saw that `winrtHeaders.h` is expensive file to parse. Let's dig in to see what else we can find out about this header. +In this view, the **File Path** column shows each file that includes other files. The **Include Count** lists how many files this header file includes. The time to parse this file is listed, and when expanded, lists the time it took to parse each individual header file that this header file includes. -In the Filter Files text box, enter `winrtHeaders` to filter the view to entries that contain `winrtHeaders` in the name. Click the chevron next to `winrtHeaders` to see which files it includes. +Earlier, we saw that `winrtHeaders.h` is expensive to parse. In the **Filter Files** text box, if we enter `winrtHeaders` we can filter the view to only the entries that contain `winrtHeaders` in the name. Clicking the chevron next to `winrtHeaders` shows which files it includes: :::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the Include Tree view"::: -An example ETL file showing the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. +The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show Windows.UI.Xaml.Interop.h which is expanded to show the header files it includes. :::image-end::: -We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h`. Not only that, we see that this file includes 21 other header files, two of which are also on the hot list. If we improve the time it takes to process `winrtHeaders.h`, that'll address the processing time for multiple expensive headers +We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h` which includes 21 other header files, two of which are also on the hot list. If we improve the time it takes to process `winrtHeaders.h`, it'll address the processing time for multiple expensive headers. The technique we'll use to process it faster is precompiled headers. ## Improve build time with precompiled headers -Because we know from the **Included Files** view that `winrtHeaders` is one of the most expensive headers to parse, and because we know from the **Include Tree** view that `winrtHeaders` also includes several other header files that are expensive3 to parse, we'll build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) out of those headers to reduce the number of times these files are parsed. +Because we know from the **Included Files** view that `winrtHeaders` is expensive header to parse, and because we know from the **Include Tree** view that `winrtHeaders` includes several other header files that are expensive to parse, we'll build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. -In the example project, we added `pch.h` that includes these headers, and looks like this: +In the example project, we added a `pch.h` to include these headers, which looks like this: ```cpp #ifndef CALC_PCH @@ -120,7 +114,7 @@ In the example project, we added `pch.h` that includes these headers, and looks #endif // CALC_PCH ``` -PCH files must be compiled before they can be used. So we add a file, arbitrarily named `pch.cpp`, that includes `pch.h`. It looks like this: +PCH files must be compiled before they can be used. So we add a file to the project, arbitrarily named `pch.cpp`, that includes `pch.h`. It looks like this: ```cpp #include "pch.h" @@ -129,22 +123,28 @@ PCH files must be compiled before they can be used. So we add a file, arbitraril Then we set our project to use the PCH. In the project properties, navigate to **C/C++** > **Precompiled Headers** and set **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. :::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: +Precompiled Header is set to: Use (/Yu). The Precompiled Header File is set to pch.h. +:::image-end::: + +To use the PCH, we include it as the first line in the source files that use `winrtHeaders` because it must come before any other include files. Or, for simplicity, we could do this by modifying the project properties to include `pch.h` at the beginning of every file in the solution even if we don’t explicitly add an include directive. That's done in the project properties: **C/C++** \> **Advanced** \> **Forced Include File** to `pch.h`: -To use the PCH, we add it as the first entry in all the source files. Or, for simplicity, we can do this by modifying the project properties to include `pch.h` at the beginning of every file in the solution even if we don’t explicitly add an include directive. That's done in the project properties: **C/C++** \> **Advanced** \> **Forced Include File** to `pch.h`. +:::image type="complex" source="./media/precompiled-header-settings-force-include.png" alt-text="Screenshot of the project properties dialog with the Advanced settings open"::: +Forced Include File is set to pch.h. +:::image-end::: -Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary, though, because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes around for clarity, or in case the PCH changes to no longer include that particular header file. +Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes for clarity, or in case the PCH changes to no longer include that particular header file. ## Test the changes We first clean the project to make sure we are comparing the same thing as before. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** \> **Clean only \**. -Because this project uses a precompiled header (PCH), we don't want to measure time spent building the PCH because that only happens once. We do this by loading the pch.cpp file and choosing **Ctrl+F7** to build just this file. We could also compile this file by right-clicking `pch.cpp` in the solution explorer and choosing `Compile`. +Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. -Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** >> **Run Build Insights on Build**. When the ETL files appears, we see that build time has gone from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it is being pulled in via the precompiled header. +Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. When the ETL files appears, we see that build time has gone from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it is being pulled in via the precompiled header. :::image type="content" source="./media/included-files-after-fix.png" alt-text="Screenshot of the Include Tree pane in the trace file. winrtHeaders is no longer listed."::: -This example uses precompiled headers because they are a common solution for code prior to C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. See [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md) for more information. +This example uses precompiled headers because they are a common solution prior to C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. See [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md) for more information to see if they are a better fit for your project. ## Navigate between views diff --git a/docs/build-insights/tutorials/media/build-insights-rebuild-project.png b/docs/build-insights/tutorials/media/build-insights-rebuild-project.png index b265f9e9ce6160659b9e62682670368dd54f11ed..ffbe46758fb4280ff6e7f6e82804ac288b5adb99 100644 GIT binary patch literal 22153 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 ef;!Z&&sldJ*1~)fGpCq4*xg6xKUOB literal 16923 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 z

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 GkNqD_$@Pl> diff --git a/docs/build-insights/tutorials/media/build-options.png b/docs/build-insights/tutorials/media/build-options.png index e41e9ae56dc4281ebc8e761309b60ee220613d55..156abb7646ca164882a28d1a5f615c754133588c 100644 GIT binary patch literal 11702 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 literal 52839 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 c?=HYnnB?&=EUR|z2#x&@E01m{iz5oCK literal 10682 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 diff --git a/docs/build-insights/tutorials/media/installer-gamedev-cpp-build-insights.png b/docs/build-insights/tutorials/media/installer-gamedev-cpp-build-insights.png index a961141d3a7edaa7c95cc896a73c42a6df9e494e..3eaa8c2df1c80e579ae52fb27640637392b8592d 100644 GIT binary patch literal 13048 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 z�zMT|X^dxW(*cn?P_;ucd|DSAxcXE#?|ej*v(UjGmMG>S>@B<`CVIn(_N}vb(ya zZFKDMZ@MQ8s@H-gbV(rw`sBEwNT`vXka%)>Cm$v;pN$TAjL6K`N*Y#JNTiEX)7XL z0cpc4f#PHVOi#eN>6jpeXAYDktiuE=b?|x@C+rt4H>I)~-WWw6Ge79XuRvgNl9#Ek zmkO^%32d&SLrGa%QZcXmFvhr{DXHESxH-c;(;Jt?p!u#_?y1;kBo8gM*Z1R?M8P1w zCm@&Zaj6ZZx=@6c3ijn6!orcvP0vnI+f|n$Lzp)FpBWYL0l$1&;25I*MnFFG+*{5O zNs;rcAd!D3I!G@i|NhYSXyEJr*ZRNDt7HY#j2-f5LN>oQd4q9$;S>g%|B zrIdX|@z#detlVhl7|em;&5@FfhQ#JaVPv{Nc;Rc;y~-F}y|7(;wx`9!NuoV#@PF_?;SV+BiCSHH$+ z(T2;>NW_%;uB(ZHdw()c951D>ri%3w+cL-Z4m6KI9XP>asj`Df*>H+5{}eR_N&luL z@c};ll2iL{1gxO_$A8bUk%p0``K*>=YBYPe=k4>6NAU>_b3sSiwwi4vNs0;I3?>>@ zzM-RDrNRlw%U>%uc}YES;SKl6+f|0q>C4D&_?;RAiMm}r2ArsGh&A*|cHIaGu4#7_ zZal{}ej!I=if6i{>#1dFRJMx-O`=$FOl9vh%V>N{?XxuqjcE`Yo4QJ<)ey|mO?EYu0qI}gLtNn#e zC-!dhn%o#6#n(f5bnbgYn)Ez7B-v3Dae`e@_=w;1; zK@2nxgq;rE894nxw*sfBvJPiO&0-*KKnZ66$h|DKt0Mf5I|&#!vj5d6lBLJ2N2D&N z20$sSR2qj+av_Y1=Tv}evX0Q?Lv4aX;H>?r=G#UUGDyDDj0fyHzm-;&#mu*p^}Lz- z$L{GARp@EaN3oB35R4kSOeI=6wg8{<*8@!t$!O}ws-1jN%1WQ?B!T_~6i}iB!u^p` zM8xWdgCRlcQM#GlT91b10T*0+bdjEDcziX2?kRPgWGAnB>f~SJ(QUom>1W@o22TdD zuNx%WP<>!l_k2Z@1O1u$(QZ$y=)Rsww3`-v5VCYVU3t5|)kW1~D(P>)BLK~}30{3X zt{4x|ROBaa;X@~XGBpskAW&aVAusVB&Xonz$0C1fZ{XA0s8aeN~Lwbp_{J<)ra zm{>AkS=8>kD;cL#FKWr9-S_fKdp-GzjMfdl6W5ioRS_}CVLkp>x85UJG~^@nqIhcD zP6OcG4&O3xp5c6b^6;s%(c2hIc*wvcE*&>Xp{mgA*!}!&dxK=#3Id6@g+5cwX!J(g zPr$)NBT2epFs+Rkjt9T;$lCJeK>I9zLkl#i!|I7n>o3``*UB>$7~Ruc=<4D z;n52F_G98jQg9flG!nzU literal 10452 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 diff --git a/docs/build-insights/tutorials/media/precompiled-header-settings-force-include.png b/docs/build-insights/tutorials/media/precompiled-header-settings-force-include.png new file mode 100644 index 0000000000000000000000000000000000000000..f53b2faf6a5d95c358353b979de4f840998d161a GIT binary patch literal 33967 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 b!KDo!jqFrFf>Ytkc!Y_u=^>n Date: Tue, 30 Apr 2024 16:08:13 -0700 Subject: [PATCH 0159/1239] Learn Editor: Update compiler-warning-level-2-c4150.md --- .../compiler-warning-level-2-c4150.md | 60 +++++++++++++++++-- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index 1d141e54d1..08533039fd 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -8,11 +8,35 @@ ms.assetid: ff1760ec-0d9f-4d45-b797-94261624becf --- # Compiler Warning (level 2) C4150 -deletion of pointer to incomplete type 'type'; no destructor called +> deletion of pointer to incomplete type 'type'; no destructor called -The **`delete`** operator is called to delete a type that was declared but not defined, so the compiler cannot find a destructor. +The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition is not in the same translation unit as the `delete`. The pattern of declaring a class without defining is sometimes used to reduce the number of `#include` directives in order to speed up the build. -The following sample generates C4150: +The following sample generates C4150 by declaring but not defining `class IncClass`: + +```cpp +// compile with: /W2 +class IncClass; + +void NoDestruct( IncClass* pIncClass ) +{ + delete pIncClass; // C4150 +} +``` + +This issue should be fixed by putting the definition for the `IncClass` type in the same translation unit as the `delete`. If the class is declared in a header file, then it can be included in the translation unit. If the class is not declared in a header file then the `NoDestruct` definition may need to be moved into the same file as the `IncClass` definition. + +```cpp +// compile with: /W2 +#include "IncClass.h" + +void NoDestruct( IncClass* pIncClass ) +{ + delete pIncClass; +} +``` + +C4150 can also occur when the class is defined after the destructor call in the same translation unit. For example: ```cpp // C4150.cpp @@ -21,10 +45,34 @@ class IncClass; void NoDestruct( IncClass* pIncClass ) { - delete pIncClass; -} // C4150, define class to resolve + delete pIncClass; // C4150 +} -int main() +class IncClass { +public: + IncClass() = default; + ~IncClass() = default; +}; +``` +If this is the case, then the use of `delete` needs to be after the class definition. +```cpp +// C4150.cpp +// compile with: /W2 +class IncClass; + +void NoDestruct( IncClass* pIncClass ); + +class IncClass +{ +public: + IncClass() = default; + ~IncClass() = default; +}; + +void NoDestruct( IncClass* pIncClass ) +{ + delete pIncClass; } + ``` From 1157c1521e7a975f6feb337768e9c02c9f6dfbbf Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Tue, 30 Apr 2024 16:08:21 -0700 Subject: [PATCH 0160/1239] update Metadata --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index 08533039fd..e96a9c32c8 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -1,10 +1,9 @@ --- description: "Learn more about: Compiler Warning (level 2) C4150" -title: "Compiler Warning (level 2) C4150" +title: Compiler warning (level 2) C4150 ms.date: "11/04/2016" f1_keywords: ["C4150"] helpviewer_keywords: ["C4150"] -ms.assetid: ff1760ec-0d9f-4d45-b797-94261624becf --- # Compiler Warning (level 2) C4150 From 0e4acccfc9bd590d955e598a3d15d35ab2084df7 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Tue, 30 Apr 2024 16:22:52 -0700 Subject: [PATCH 0161/1239] Learn Editor: Update compiler-warning-level-2-c4150.md --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index e96a9c32c8..c0afe9d9ff 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4150"] > deletion of pointer to incomplete type 'type'; no destructor called -The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition is not in the same translation unit as the `delete`. The pattern of declaring a class without defining is sometimes used to reduce the number of `#include` directives in order to speed up the build. +The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition isn't in the same translation unit as the `delete`. The pattern of declaring a class without defining is sometimes used to reduce the number of `#include` directives in order to speed up the build. The following sample generates C4150 by declaring but not defining `class IncClass`: @@ -23,7 +23,7 @@ void NoDestruct( IncClass* pIncClass ) } ``` -This issue should be fixed by putting the definition for the `IncClass` type in the same translation unit as the `delete`. If the class is declared in a header file, then it can be included in the translation unit. If the class is not declared in a header file then the `NoDestruct` definition may need to be moved into the same file as the `IncClass` definition. +This issue should be fixed by putting the definition for the `IncClass` type in the same translation unit as the `delete`. If the class is declared in a header file, it can be included in the translation unit. If the class isn't declared in a header file, the `NoDestruct` definition may need to be moved into the same file as the `IncClass` definition. ```cpp // compile with: /W2 @@ -54,7 +54,7 @@ public: ~IncClass() = default; }; ``` -If this is the case, then the use of `delete` needs to be after the class definition. +In this scenario, the use of `delete` needs to be after the class definition. ```cpp // C4150.cpp // compile with: /W2 From cf3880b730a78646809a572b26f8951598dce29c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 30 Apr 2024 16:26:37 -0700 Subject: [PATCH 0162/1239] draft --- .../build-insights-included-files-view.md | 31 +++++++++--------- .../included-files-show-in-include-tree.png | Bin 0 -> 16003 bytes 2 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 docs/build-insights/tutorials/media/included-files-show-in-include-tree.png diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index ed8424a97d..07f4dcac0f 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -148,29 +148,28 @@ This example uses precompiled headers because they are a common solution prior t ## Navigate between views -right click to go to other view -double-click to go to the file +Some navigation tips for the **Included Files** and **Include Tree** views: -## Tips - -open WPA window -Drag columns to change order -Save as, the ETL file for future use - -rt-click, switch between views - -double click, or **Enter** to go to a file or right-click context menu +- Double-click a file (or press **Enter**) in either the **Included Files** or **Include Tree** view the source code for that file. +- Right click on a header file to find that file to go to other view. For example, in the Included Files view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see where it is included. Conversely, you can right-click a file in the **Include Tree** view to jump to where it is listed in the **Included Files** view. -Filter box: One of the files it includes is `Utils.h`. In the filter box, you can search for a specific file to see where what all it includes. In this example, we've searched for `Utils.h` and then selected the chevron next to its name. We see that it includes `iostream` and `chrono`. include-tree-view-utils-h-expanded.png +:::image type="content" source="./media/included-files-show-in-include-tree.png" alt-text="Screenshot of a right-click on a file in the Included Files view. The menu option Show in Include Tree View is highlighted."::: -Sometimes parse time for the same header will differ. This can be due to the interplay of different `#define`s that may affect which parts of the header are expanded, caching, and other system factors. +## Tips -If you forget what exactly the view is showing you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." +- You can **Save As** the ETL file to keep a record of the build time. You can compare it to future builds to see if your changes are improving build time. +- Click the Open in WPA button in the bottom right of the ETL window to dig deeper into the data with Windows Performance Analyzer. +- Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. +- double click, or **Enter** to go to a file or right-click context menu +- **Included Files** and **Include Tree** views, use the Use the filter box to find a particular header file that you are interested in. +- Sometimes the parse time for the same header will differ. This can be due to the interplay of different `#define`s that may affect which parts of the header are expanded, file caching, and other system factors. +- If you forget what the **Included Files** or **Include Tree** views shows, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." +- If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. It won't appear if nothing actually builds so your build may not be 'dirty'. -- If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. +- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. The Build Insights window won't appear if nothing actually builds. +- If a header file you are interested in doesn't appear in the **Included Files** or **Include Tree** views, it may be that it's build time is not significant enough to be listed. ## See also diff --git a/docs/build-insights/tutorials/media/included-files-show-in-include-tree.png b/docs/build-insights/tutorials/media/included-files-show-in-include-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..75df957eb5ac2994edd110d9d04e0c7f21d9a87e GIT binary patch literal 16003 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 O(!Xt_Q>yhW^#1`xl$G27 literal 0 HcmV?d00001 From 98dc3a79a99b809d2669afb5cf4cb7838eb35c09 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 30 Apr 2024 16:58:22 -0700 Subject: [PATCH 0163/1239] acrolinx --- .../build-insights-included-files-view.md | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 07f4dcac0f..db53af9535 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -11,25 +11,25 @@ Use Build Insights **Included Files** and **Include Tree** views to troubleshoot ## Prerequisites - Visual Studio 2022 17.8 or greater. -- C++ Build insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. +- C++ Build Insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it's included in the installation. :::image-end::: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it's included in the installation. :::image-end::: ## Overview -Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like AAA games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file as well as a view of which header files are included by other header files. +Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like triple-A games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file and a view of the relationships between header files. -In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to identify bottlenecks in your build process and improve build time. We'll use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. +In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to identify bottlenecks in your build process and improve build time. We use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. ## Set build options -Before gathering Build Insights data, set the build options for the type of build you want to measure. For example, if you are concerned about your x64 debug build time, set the build for **Debug** and **x64**: +Before gathering Build Insights data, set the build options for the type of build you want to measure. For example, if you're concerned about your x64 debug build time, set the build for **Debug** and **x64**: - In the **Solution Configurations** dropdown, choose **Debug**. - In the **Solution Platforms** dropdown, choose **x64**. @@ -42,9 +42,7 @@ Before gathering Build Insights data, set the build options for the type of buil ## Run Build Insights -The story for this article is about a solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We'll use Build Insights to investigate. - -We select the slow building project in the **Solution Explorer** and run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose rebuild instead of build to make sure to measure the build time for the entire project and not for just the few files may be dirty right now. +The story for this article is about a solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We use Build Insights to investigate by selecting the slow building project in the **Solution Explorer** and run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose rebuild instead of build to make sure to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: @@ -57,7 +55,7 @@ When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the The trace file shows the build time--which for the example was 16.404 seconds. The **Diagnostics Session** is the overall time to run the Build Insights session. Choose the **Included Files** tab. -This view shows the time spent processing `#include` files. The children nodes are the files that included the parent node. Files that take up 10% or more of the build time are shown with a flame symbol to indicate that they are a likely candidate to investigate. +This view shows the time spent processing `#include` files. The children nodes are the files that included the parent node. Files that take up 10% or more of the build time are shown with a flame symbol to indicate that they're a likely candidate to investigate. :::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time." @@ -67,12 +65,12 @@ In the **File Path** column, some files have a fire icon next to them to indicat The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404 second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. -Click the chevron next to each header to see which file includes it. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. +To see which file includes it, click the chevron next to the header. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. The **Translation Unit** column shows which translation unit was being processed when the file was included. It lists which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included while `Grapher.cpp` was compiled: :::image type="complex" source="./media/included-files-translation-unit.png" alt-text="Screenshot of the Included Files view"::: -An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. It's child node is Grapher.cpp, which is also listed as the tranlsation unit." +An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. Its child node is Grapher.cpp, which is also listed as the translation unit." :::image-end::: We know that `winrtHeaders.h` is expensive to parse, but we can find out more. We can use the **Include Tree** view to see which files `winrtHeaders.h` includes. Choose the **Include Tree** tab to see this view. @@ -91,17 +89,15 @@ In this view, the **File Path** column shows each file that includes other files Earlier, we saw that `winrtHeaders.h` is expensive to parse. In the **Filter Files** text box, if we enter `winrtHeaders` we can filter the view to only the entries that contain `winrtHeaders` in the name. Clicking the chevron next to `winrtHeaders` shows which files it includes: -:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the Include Tree view"::: -The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show Windows.UI.Xaml.Interop.h which is expanded to show the header files it includes. +:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the expanded Include Tree view"::: +The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show `Windows.UI.Xaml.Interop.h` that is expanded to show the header files it includes. :::image-end::: -We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h` which includes 21 other header files, two of which are also on the hot list. If we improve the time it takes to process `winrtHeaders.h`, it'll address the processing time for multiple expensive headers. - -The technique we'll use to process it faster is precompiled headers. +We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h` which includes 21 other header files, two of which are also on the hot list. The technique we use to process it faster is precompiled headers. ## Improve build time with precompiled headers -Because we know from the **Included Files** view that `winrtHeaders` is expensive header to parse, and because we know from the **Include Tree** view that `winrtHeaders` includes several other header files that are expensive to parse, we'll build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. +Because we know from the **Included Files** view that `winrtHeaders` is expensive header to parse, and because we know from the **Include Tree** view that `winrtHeaders` includes several other header files that are expensive to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. In the example project, we added a `pch.h` to include these headers, which looks like this: @@ -132,26 +128,26 @@ To use the PCH, we include it as the first line in the source files that use `wi Forced Include File is set to pch.h. :::image-end::: -Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes for clarity, or in case the PCH changes to no longer include that particular header file. +Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes in the source file for clarity, or in case the PCH changes to no longer include that particular header file. ## Test the changes -We first clean the project to make sure we are comparing the same thing as before. We do this by right-clicking the project in the **Solution Explorer** and choosing **Project only** \> **Clean only \**. +We first clean the project to make sure we are comparing the same thing as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** \> **Clean only \**. Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. -Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. When the ETL files appears, we see that build time has gone from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it is being pulled in via the precompiled header. +Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. When the ETL files appears, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in via the precompiled header. :::image type="content" source="./media/included-files-after-fix.png" alt-text="Screenshot of the Include Tree pane in the trace file. winrtHeaders is no longer listed."::: -This example uses precompiled headers because they are a common solution prior to C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. See [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md) for more information to see if they are a better fit for your project. +This example uses precompiled headers because they're a common solution before C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. For more information, see [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md). ## Navigate between views Some navigation tips for the **Included Files** and **Include Tree** views: - Double-click a file (or press **Enter**) in either the **Included Files** or **Include Tree** view the source code for that file. -- Right click on a header file to find that file to go to other view. For example, in the Included Files view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see where it is included. Conversely, you can right-click a file in the **Include Tree** view to jump to where it is listed in the **Included Files** view. +- Right click on a header file to find that file to go to other view. For example, in the Included Files view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see where it's included. Conversely, you can right-click a file in the **Include Tree** view to jump to where it's listed in the **Included Files** view. :::image type="content" source="./media/included-files-show-in-include-tree.png" alt-text="Screenshot of a right-click on a file in the Included Files view. The menu option Show in Include Tree View is highlighted."::: @@ -161,20 +157,20 @@ Some navigation tips for the **Included Files** and **Include Tree** views: - Click the Open in WPA button in the bottom right of the ETL window to dig deeper into the data with Windows Performance Analyzer. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. - double click, or **Enter** to go to a file or right-click context menu -- **Included Files** and **Include Tree** views, use the Use the filter box to find a particular header file that you are interested in. -- Sometimes the parse time for the same header will differ. This can be due to the interplay of different `#define`s that may affect which parts of the header are expanded, file caching, and other system factors. +- **Included Files** and **Include Tree** views, use the Use the filter box to find a particular header file that you're interested in. +- Sometimes the parse time reported for a header file differs depending on the file that includes it. This can be due to the interplay of different `#define`s that may affect which parts of the header are expanded, file caching, and other system factors. - If you forget what the **Included Files** or **Include Tree** views shows, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." - If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. The Build Insights window won't appear if nothing actually builds. -- If a header file you are interested in doesn't appear in the **Included Files** or **Include Tree** views, it may be that it's build time is not significant enough to be listed. +- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. The Build Insights window doesn't appear if nothing actually builds. +- If a header file you're interested in doesn't appear in the **Included Files** or **Include Tree** views, its build time isn't significant enough to be listed. ## See also [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ -[Build Insights in Visual Studio video - Pure Virtual C++ 2023](https://learn.microsoft.com/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)in +[Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ [Reference: vcperf commands](../reference/vcperf-commands.md)\ [Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ From 9586524d08f8b4d39b4651556b2b363981526e02 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 30 Apr 2024 17:12:22 -0700 Subject: [PATCH 0164/1239] resotre range-based-for-statement-cpp.md - didn't mean to modify --- docs/cpp/range-based-for-statement-cpp.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/cpp/range-based-for-statement-cpp.md b/docs/cpp/range-based-for-statement-cpp.md index 925a6034f0..2ae2d0bad6 100644 --- a/docs/cpp/range-based-for-statement-cpp.md +++ b/docs/cpp/range-based-for-statement-cpp.md @@ -1,7 +1,8 @@ --- description: "Learn more about: Range-based for Statement (C++)" title: "Range-based for Statement (C++)" -ms.date: 04/29/2024 +ms.date: "11/04/2016" +ms.assetid: 5750ba1d-ba48-4236-a923-e32de8345c2d --- # Range-based for Statement (C++) From 9997220062b2cfc48d0fce95c9adf51b321181fd Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 30 Apr 2024 17:35:09 -0700 Subject: [PATCH 0165/1239] acrolinx --- .../tutorials/build-insights-function-view.md | 4 ++-- .../build-insights-included-files-view.md | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index ab7eb845d9..12ed502552 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -14,11 +14,11 @@ Use Build Insights **Functions** view to troubleshoot the impact of function inl - C++ Build insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. :::image-end::: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it is included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. :::image-end::: ## Overview diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index db53af9535..0a562b65c9 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -14,16 +14,16 @@ Use Build Insights **Included Files** and **Include Tree** views to troubleshoot - C++ Build Insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it's included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. :::image-end::: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate that it's included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. :::image-end::: ## Overview -Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like triple-A games. When a large header file is repeatedly parsed, there is an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file and a view of the relationships between header files. +Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like triple-A games. When a large header file is repeatedly parsed, there's an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file and a view of the relationships between header files. In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to identify bottlenecks in your build process and improve build time. We use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. @@ -63,7 +63,7 @@ In the file path column, several files with a fire icon are highlighted because In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed. -The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404 second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. +The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. To see which file includes it, click the chevron next to the header. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. @@ -93,7 +93,7 @@ Earlier, we saw that `winrtHeaders.h` is expensive to parse. In the **Filter Fil The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show `Windows.UI.Xaml.Interop.h` that is expanded to show the header files it includes. :::image-end::: -We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h` which includes 21 other header files, two of which are also on the hot list. The technique we use to process it faster is precompiled headers. +We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h`, which includes 21 other header files, two of which are also on the hot list. The technique we use to process it faster is precompiled headers. ## Improve build time with precompiled headers @@ -122,17 +122,17 @@ Then we set our project to use the PCH. In the project properties, navigate to * Precompiled Header is set to: Use (/Yu). The Precompiled Header File is set to pch.h. :::image-end::: -To use the PCH, we include it as the first line in the source files that use `winrtHeaders` because it must come before any other include files. Or, for simplicity, we could do this by modifying the project properties to include `pch.h` at the beginning of every file in the solution even if we don’t explicitly add an include directive. That's done in the project properties: **C/C++** \> **Advanced** \> **Forced Include File** to `pch.h`: +To use the PCH, we include it as the first line in the source files that use `winrtHeaders` because it must come before any other include files. Or, for simplicity, we could modify the project properties to include `pch.h` at the beginning of every file in the solution by setting the project property: **C/C++** \> **Advanced** \> **Forced Include File** to `pch.h`: :::image type="complex" source="./media/precompiled-header-settings-force-include.png" alt-text="Screenshot of the project properties dialog with the Advanced settings open"::: Forced Include File is set to pch.h. :::image-end::: -Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler will realize that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes in the source file for clarity, or in case the PCH changes to no longer include that particular header file. +Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes in the source file for clarity, or in case the PCH changes to no longer include that particular header file. ## Test the changes -We first clean the project to make sure we are comparing the same thing as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** \> **Clean only \**. +We first clean the project to make sure we're comparing the same thing as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** \> **Clean only \**. Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. @@ -147,7 +147,7 @@ This example uses precompiled headers because they're a common solution before C Some navigation tips for the **Included Files** and **Include Tree** views: - Double-click a file (or press **Enter**) in either the **Included Files** or **Include Tree** view the source code for that file. -- Right click on a header file to find that file to go to other view. For example, in the Included Files view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see where it's included. Conversely, you can right-click a file in the **Include Tree** view to jump to where it's listed in the **Included Files** view. +- Right click on a header file to find that file to go to other view. For example, in the **Included File**s view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see it in that view. Conversely, you can right-click a file in the **Include Tree** view to jump to it in the **Included Files** view. :::image type="content" source="./media/included-files-show-in-include-tree.png" alt-text="Screenshot of a right-click on a file in the Included Files view. The menu option Show in Include Tree View is highlighted."::: From 332074a5d875aeca846b49b224ea6a360d4bf6b6 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Tue, 30 Apr 2024 21:52:04 -0700 Subject: [PATCH 0166/1239] Update compiler-warning-level-2-c4150.md --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index c0afe9d9ff..6800234767 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4150"] > deletion of pointer to incomplete type 'type'; no destructor called -The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition isn't in the same translation unit as the `delete`. The pattern of declaring a class without defining is sometimes used to reduce the number of `#include` directives in order to speed up the build. +The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition isn't in the same translation unit as the `delete`. The following sample generates C4150 by declaring but not defining `class IncClass`: @@ -23,7 +23,7 @@ void NoDestruct( IncClass* pIncClass ) } ``` -This issue should be fixed by putting the definition for the `IncClass` type in the same translation unit as the `delete`. If the class is declared in a header file, it can be included in the translation unit. If the class isn't declared in a header file, the `NoDestruct` definition may need to be moved into the same file as the `IncClass` definition. +To fix the issue, put the definition of `IncClass` in the same translation unit or file as the `delete`. If the class is declared in a header file, it can be included in the translation unit. If the class isn't declared in a header file, the `NoDestruct` definition may need to be moved into the same file as the `IncClass` definition. ```cpp // compile with: /W2 @@ -35,12 +35,12 @@ void NoDestruct( IncClass* pIncClass ) } ``` -C4150 can also occur when the class is defined after the destructor call in the same translation unit. For example: +C4150 can also occur when the class is defined after the destructor call in the same translation unit. In the following example `IncClass` is declared before it is used, but not defined until after: ```cpp // C4150.cpp // compile with: /W2 -class IncClass; +class IncClass; void NoDestruct( IncClass* pIncClass ) { From edebbfa40e68b23b6c830a5413cd7e6043864076 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Tue, 30 Apr 2024 21:58:05 -0700 Subject: [PATCH 0167/1239] Update compiler-warning-level-2-c4150.md --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index 6800234767..a8adf8d148 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -35,7 +35,7 @@ void NoDestruct( IncClass* pIncClass ) } ``` -C4150 can also occur when the class is defined after the destructor call in the same translation unit. In the following example `IncClass` is declared before it is used, but not defined until after: +C4150 can also occur when the class is defined after the destructor call in the same translation unit. In the following example `IncClass` is declared before being used, but not defined until after: ```cpp // C4150.cpp From e34d8ce95ae8a8de2e80f1c49cb28419e9f7819e Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Tue, 30 Apr 2024 22:29:14 -0700 Subject: [PATCH 0168/1239] Update compiler-errors-c3300-through-c3399.md --- .../compiler-errors-c3300-through-c3399.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md index ffa67e7670..867bde6228 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md @@ -1,10 +1,9 @@ --- description: "Learn more about: Compiler errors C3300 Through C3399" -title: "Compiler errors C3300 Through C3399" +title: "Compiler errors C3300 through C3399" ms.date: 06/01/2022 f1_keywords: ["C3300", "C3301", "C3302", "C3304", "C3305", "C3306", "C3307", "C3308", "C3310", "C3311", "C3312", "C3313", "C3314", "C3315", "C3316", "C3317", "C3318", "C3319", "C3321", "C3323", "C3324", "C3325", "C3326", "C3327", "C3328", "C3329", "C3330", "C3331", "C3332", "C3335", "C3336", "C3337", "C3338", "C3339", "C3341", "C3343", "C3344", "C3346", "C3348", "C3349", "C3355", "C3357", "C3359", "C3361", "C3362", "C3376", "C3377", "C3378"] helpviewer_keywords: ["C3300", "C3301", "C3302", "C3304", "C3305", "C3306", "C3307", "C3308", "C3310", "C3311", "C3312", "C3313", "C3314", "C3315", "C3316", "C3317", "C3318", "C3319", "C3321", "C3323", "C3324", "C3325", "C3326", "C3327", "C3328", "C3329", "C3330", "C3331", "C3332", "C3335", "C3336", "C3337", "C3338", "C3339", "C3341", "C3343", "C3344", "C3346", "C3348", "C3349", "C3355", "C3357", "C3359", "C3361", "C3362", "C3376", "C3377", "C3378"] -ms.assetid: 190b7d29-ffe6-4261-921d-140da1935d00 --- # Compiler errors C3300 Through C3399 @@ -17,24 +16,24 @@ The articles in this section of the documentation explain a subset of the error | Error | Message | |--|--| | Compiler error C3300 | '*symbol*': improper format for IDL '*value*' | -| Compiler error C3301 | '*coclass*': coclass cannot be a '*symbol*' interface | +| Compiler error C3301 | '*coclass*': `coclass` cannot be a '*symbol*' interface | | Compiler error C3302 | '*identifier*': identifier has more than *number* characters | | [Compiler error C3303](compiler-error-c3303.md) | '*attribute*': attribute can only be used on '*type*' | | Compiler error C3304 | Obsolete. | | Compiler error C3305 | Obsolete. | | Compiler error C3306 | '*template*': unnamed class template/generic is not allowed | | Compiler error C3307 | '*module*': unable to create IDL module | -| Compiler error C3308 | ' *function*': direct call through imported class is not supported | +| Compiler error C3308 | '*function*': direct call through imported class is not supported | | [Compiler error C3309](compiler-error-c3309.md) | '*macro*/*keyword*': module name cannot be a macro or a keyword | | Compiler error C3310 | '*identifier*': module name conflict | | Compiler error C3311 | module attribute must be defined at global scope | | Compiler error C3312 | no callable '*identifier*' function found for type '*type*' | | Compiler error C3313 | '*identifier*': variable cannot have the type '*type*' | | Compiler error C3314 | '*symbol*': not a supported IDL module type | -| Compiler error C3315 | ' *function*': must be a member function | +| Compiler error C3315 | '*function*': must be a member function | | Compiler error C3316 | '*type*': an array of unknown size cannot be used in a range-based for statement | | Compiler error C3317 | '*identifier*': an overload function cannot be used as the expression in a range-based for statement | -| Compiler error C3318 | '*type*': an array cannot have an element type that contains 'auto'
No longer emitted in Visual Studio 2022 version 17.11 | +| Compiler error C33181 | '*type*': an array cannot have an element type that contains '`auto`'| | Compiler error C3319 | Obsolete. | | [Compiler error C3320](compiler-error-c3320.md) | '*type*': type cannot have the same name as the module 'name' property | | Compiler error C3321 | an initializer list is unexpected in this context | @@ -66,8 +65,8 @@ The articles in this section of the documentation explain a subset of the error | [Compiler error C3347](compiler-error-c3347.md) | '*argument*': required argument is not specified in attribute *attribute-name* | | Compiler error C3348 | exported templates are not part of the current C++ standards | | Compiler error C3349 | '*class*::*member*': multicast attribute has already been implemented by provider *provider-name* | -| [Compiler error C3350](compiler-error-c3350.md) | ' *function*': a delegate constructor expects *number* argument(s) | -| [Compiler error C3351](compiler-error-c3351.md) | ' *function*': if you pass a NULL object instance to a delegate constructor you must also pass the address of a static member function | +| [Compiler error C3350](compiler-error-c3350.md) | '*function*': a delegate constructor expects *number* argument(s) | +| [Compiler error C3351](compiler-error-c3351.md) | '*function*': if you pass a NULL object instance to a delegate constructor you must also pass the address of a static member function | | [Compiler error C3352](compiler-error-c3352.md) | '*function*': the specified function does not match the delegate type '*type*' | | [Compiler error C3353](compiler-error-c3353.md) | '*identifier*': a delegate can only be created from a global function or a member function of a managed/WinRT type | | [Compiler error C3354](compiler-error-c3354.md) | '*identifier*': the function used to create a delegate cannot have return type '*type*' | @@ -117,6 +116,8 @@ The articles in this section of the documentation explain a subset of the error | [Compiler error C3398](compiler-error-c3398.md) | '*operator*': cannot convert from '*type*' to '*type*'. Source expression must be a function symbol | | [Compiler error C3399](compiler-error-c3399.md) | '*type*': cannot provide arguments when creating an instance of a generic parameter | +1-No longer emitted in Visual Studio 2022 version 17.11 + ## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ From 265efae98c5252fc1fd5d8c61ab3f0635bcc300c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 May 2024 11:17:17 -0700 Subject: [PATCH 0169/1239] acrolinx --- .../tutorials/build-insights-function-view.md | 4 ++-- .../tutorials/build-insights-included-files-view.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 12ed502552..47b68649c5 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -14,11 +14,11 @@ Use Build Insights **Functions** view to troubleshoot the impact of function inl - C++ Build insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. :::image-end::: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. :::image-end::: ## Overview diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 0a562b65c9..733417d9c8 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -14,11 +14,11 @@ Use Build Insights **Included Files** and **Include Tree** views to troubleshoot - C++ Build Insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. :::image-end::: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's included in the installation. +The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. :::image-end::: ## Overview @@ -128,7 +128,7 @@ To use the PCH, we include it as the first line in the source files that use `wi Forced Include File is set to pch.h. :::image-end::: -Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the includes in the source file for clarity, or in case the PCH changes to no longer include that particular header file. +Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the #includes in the source file for clarity, or in case the PCH changes to no longer include that particular header file. ## Test the changes @@ -154,7 +154,7 @@ Some navigation tips for the **Included Files** and **Include Tree** views: ## Tips - You can **Save As** the ETL file to keep a record of the build time. You can compare it to future builds to see if your changes are improving build time. -- Click the Open in WPA button in the bottom right of the ETL window to dig deeper into the data with Windows Performance Analyzer. +- To dig into the data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. - double click, or **Enter** to go to a file or right-click context menu - **Included Files** and **Include Tree** views, use the Use the filter box to find a particular header file that you're interested in. From 75e68e740893aca79638a1fb8c598fbc8a2762e9 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 May 2024 14:08:13 -0700 Subject: [PATCH 0170/1239] draft cleanup pass --- .../tutorials/build-insights-function-view.md | 19 ++-- .../build-insights-included-files-view.md | 82 +++++++++--------- .../media/build-insights-rebuild-project.png | Bin 22153 -> 22035 bytes .../media/include-tree-view-expanded.png | Bin 36677 -> 42426 bytes .../tutorials/media/include-tree-view.png | Bin 35170 -> 41082 bytes .../media/included-files-translation-unit.png | Bin 16187 -> 19381 bytes .../media/precompiled-header-settings.png | Bin 23629 -> 25727 bytes 7 files changed, 48 insertions(+), 53 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 47b68649c5..3fdb88daaa 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -1,10 +1,10 @@ --- -title: "Tutorial: Build Insights functions view" -description: "Tutorial on how to use Build Insights function view to troubleshoot build time and forceinlines function inlining costs." -ms.date: 4/25/2024 +title: "Tutorial: Troubleshoot build time with Build Insights functions view" +description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of function inlining on build time in your C++ projects." +ms.date: 5/1/2024 helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] --- -# Tutorial: Use Build Insights to troubleshoot build time and function inlining problems +# Tutorial: Troubleshoot build time with Build Insights functions view Use Build Insights **Functions** view to troubleshoot the impact of function inlining on build time in your C++ projects. @@ -63,10 +63,10 @@ big ole’ long description In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. :::image type="complex" source="./media/" alt-text="alt text stuff"::: -Just show the functions tab portion of the dialog with the forceinline size column, time column +Just show the functions tab portion of the dialog with the Forceinline size column, Time column :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. These numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is particularly high and is worth investigating. +The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. These numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. The `Project` column indicates which project the function belongs to. Double click the **File** column to go to the source file where the function is defined. @@ -80,14 +80,11 @@ We can see that the `foo` function is taking the most time to compile. Investiga ## Troubleshooting -- If the Functions view doesn't show any functions, you may not be building with the right optimization settings. Ensure that you're building Release with full optimizations, as described in [Set build options](#set-build-options). Also, if a function's code generation time is too small, it won't appear in the list. +- If the Functions view doesn't show any functions, you may not be building with the right optimization settings. Ensure that you're building Release with full optimizations, as described in [Set build options](#set-build-options). Also, if a function's code generation time is too small, it doesn't appear in the list. - If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. - If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. ## See also [Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ -[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ -[Reference: vcperf commands](../reference/vcperf-commands.md)\ -[Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ -[Windows Performance Analyzer](/windows-hardware/test/wpt/windows-performance-analyzer) +[Tutorial: Use Build Insights to troubleshoot #include build time](build-insights-included-files-view.md) \ No newline at end of file diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 733417d9c8..3e2f2127d5 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -1,31 +1,35 @@ --- -title: "Tutorial: Build Insights included files view" -description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of #include files on build time." -ms.date: 4/25/2024 +title: "Tutorial: Troubleshoot build time with Build Insights Includes views" +description: "Tutorial on how to use Build Insights Includes Files and Includes Tree views to troubleshoot the impact of #include files on build time." +ms.date: 5/1/2024 helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree view", "#include analysis", "build time analysis"] --- -# Tutorial: Use Build Insights to troubleshoot #include files build time +# Tutorial: Troubleshoot build time with Build Insights Includes views Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on C and C++ build times. ## Prerequisites - Visual Studio 2022 17.8 or greater. -- C++ Build Insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. +- C++ Build Insights is enabled by default if you install either the Desktop development with C++ workload using the Visual Studio installer: :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. :::image-end::: +Or the Game development with C++ workload: + :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. :::image-end::: ## Overview -Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like triple-A games. When a large header file is repeatedly parsed, there's an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of repeatedly parsing `#include` files. It displays the time it takes to parse each header file and a view of the relationships between header files. +Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and particularly when it is repeatedly parsed, there's an impact on build time. + +Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of parsing `#include` files in your project. It displays the time it takes to parse each header file and a view of the relationships between header files. -In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to identify bottlenecks in your build process and improve build time. We use a hypothetical project to demonstrate how to use Build Insights to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. +In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to the most expensive header files to parse and how to optimize build time by creating a precompiled header file. ## Set build options @@ -38,36 +42,31 @@ Before gathering Build Insights data, set the build options for the type of buil The Solution Configuration dropdown is shown. It has options for Debug, Release, and Configuration manager. The Solution Platform dropdown is set to x64 :::image-end::: -- Click **OK** to close the dialog. - ## Run Build Insights -The story for this article is about a solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We use Build Insights to investigate by selecting the slow building project in the **Solution Explorer** and run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose rebuild instead of build to make sure to measure the build time for the entire project and not for just the few files may be dirty right now. +This articles examines a solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We use Build Insights to investigate by selecting the slow building project in the **Solution Explorer** and then run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: ->[!TIP] -> You can also right-click a project in Solution Explorer and select **Run Build Insights on Build Solution**. Or from the main menu choose **Build** > **Run Build Insights on Selection** > **Rebuild**. - -When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the `%temp%` folder. The generated name is based on the collection time. +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. ## Included Files View -The trace file shows the build time--which for the example was 16.404 seconds. The **Diagnostics Session** is the overall time to run the Build Insights session. Choose the **Included Files** tab. +The trace file shows the build time--which for this example was 16.404 seconds. The **Diagnostics Session** is the overall time to run the Build Insights session. Choose the **Included Files** tab. -This view shows the time spent processing `#include` files. The children nodes are the files that included the parent node. Files that take up 10% or more of the build time are shown with a flame symbol to indicate that they're a likely candidate to investigate. +This view shows the time spent processing `#include` files. :::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time." :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The time column shows the time spent parsing each file. The parse count column shows how many time the header file was parsed. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time spent parsing the header file. The **Parse Count** column shows how many time the header file was parsed. The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. -To see which file includes it, click the chevron next to the header. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. +To see which file includes `winrtHeaders.h`, click the chevron next to it. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. -The **Translation Unit** column shows which translation unit was being processed when the file was included. It lists which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included while `Grapher.cpp` was compiled: +The **Translation Unit** column shows which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included while `Grapher.cpp` was compiled: :::image type="complex" source="./media/included-files-translation-unit.png" alt-text="Screenshot of the Included Files view"::: An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. Its child node is Grapher.cpp, which is also listed as the translation unit." @@ -77,29 +76,29 @@ We know that `winrtHeaders.h` is expensive to parse, but we can find out more. W ## Include Tree view -This view shows include statistics for every file where the children nodes are the files included by the parent node. Expanding an entry in the **Include Tree** view shows which files that entry includes. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. +In this view, the children nodes are the files included by the parent node. This can help you understand the relationships between header files and identify opportunities to reduce the number of times a header file is parsed. Select the **Include Tree** tab in the ETL file to see the Include Tree view: :::image type="complex" source="./media/include-tree-view.png" alt-text="Screenshot of the Include Tree view"::: -Shows the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time it took to parse it. +Shows the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time to parse it. :::image-end::: -In this view, the **File Path** column shows each file that includes other files. The **Include Count** lists how many files this header file includes. The time to parse this file is listed, and when expanded, lists the time it took to parse each individual header file that this header file includes. +In this view, the **File Path** column shows each file that includes other files. The **Include Count** lists how many files this header file includes. The time to parse this file is listed, and when expanded, lists the time to parse each individual header file that this header file includes. -Earlier, we saw that `winrtHeaders.h` is expensive to parse. In the **Filter Files** text box, if we enter `winrtHeaders` we can filter the view to only the entries that contain `winrtHeaders` in the name. Clicking the chevron next to `winrtHeaders` shows which files it includes: +Earlier, we saw that parsing `winrtHeaders.h` is time consuming. In the **Filter Files** text box, if we enter `winrtHeaders` we can filter the view to only the entries that contain `winrtHeaders` in the name. Clicking the chevron next to `winrtHeaders` shows which files it includes: :::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the expanded Include Tree view"::: The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show `Windows.UI.Xaml.Interop.h` that is expanded to show the header files it includes. :::image-end::: -We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also expensive to parse. Click the chevron next to that to see that it includes `Windows.UI.Xaml.h`, which includes 21 other header files, two of which are also on the hot list. The technique we use to process it faster is precompiled headers. +We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also time consuming to parse. Click the chevron next to `Windows.UI.Xaml.Interop.h` to see that it includes `Windows.UI.Xaml.h`, which includes 21 other header files, two of which are also on the hot list. Having identified some of the most expensive header files to parse, and seeing that `winrtHeaders` is responsible for bringing them all in, the technique we'll turn to is precompiled headers to make including `winrtHeaders` faster. ## Improve build time with precompiled headers -Because we know from the **Included Files** view that `winrtHeaders` is expensive header to parse, and because we know from the **Include Tree** view that `winrtHeaders` includes several other header files that are expensive to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. +Because we know from the **Included Files** view that `winrtHeaders` is time consuming to parse, and because we know from the **Include Tree** view that `winrtHeaders` includes several other header files that are time consuming to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. -In the example project, we added a `pch.h` to include these headers, which looks like this: +We add a `pch.h` to include these headers, which would look like this: ```cpp #ifndef CALC_PCH @@ -116,23 +115,23 @@ PCH files must be compiled before they can be used. So we add a file to the proj #include "pch.h" ``` -Then we set our project to use the PCH. In the project properties, navigate to **C/C++** > **Precompiled Headers** and set **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. +Then we set our project to use the PCH. That's done in the project properties via **C/C++** > **Precompiled Headers** and setting **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. :::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: Precompiled Header is set to: Use (/Yu). The Precompiled Header File is set to pch.h. :::image-end::: -To use the PCH, we include it as the first line in the source files that use `winrtHeaders` because it must come before any other include files. Or, for simplicity, we could modify the project properties to include `pch.h` at the beginning of every file in the solution by setting the project property: **C/C++** \> **Advanced** \> **Forced Include File** to `pch.h`: +To use the PCH, we include it as the first line in the source files that use `winrtHeaders`. It must come before any other include files. Or, for simplicity, we could modify the project properties to include `pch.h` at the beginning of every file in the solution by setting the project property: **C/C++** > **Advanced** > **Forced Include File** to `pch.h`: :::image type="complex" source="./media/precompiled-header-settings-force-include.png" alt-text="Screenshot of the project properties dialog with the Advanced settings open"::: Forced Include File is set to pch.h. :::image-end::: -Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the #includes in the source file for clarity, or in case the PCH changes to no longer include that particular header file. +Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the #includes in the source file for clarity, or in case the PCH changes to no longer include that header file. ## Test the changes -We first clean the project to make sure we're comparing the same thing as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** \> **Clean only \**. +We first clean the project to make sure we're comparing the same build motion as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** > **Clean only \**. Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. @@ -147,31 +146,30 @@ This example uses precompiled headers because they're a common solution before C Some navigation tips for the **Included Files** and **Include Tree** views: - Double-click a file (or press **Enter**) in either the **Included Files** or **Include Tree** view the source code for that file. -- Right click on a header file to find that file to go to other view. For example, in the **Included File**s view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see it in that view. Conversely, you can right-click a file in the **Include Tree** view to jump to it in the **Included Files** view. +- Right click on a header file to find that file to go to other view. For example, in the **Included File**s view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see it in that view. :::image type="content" source="./media/included-files-show-in-include-tree.png" alt-text="Screenshot of a right-click on a file in the Included Files view. The menu option Show in Include Tree View is highlighted."::: +Conversely, you can right-click a file in the **Include Tree** view to jump to it in the **Included Files** view. + ## Tips -- You can **Save As** the ETL file to keep a record of the build time. You can compare it to future builds to see if your changes are improving build time. +- You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can compare it to future builds to see if your changes are improving build time. - To dig into the data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. -- double click, or **Enter** to go to a file or right-click context menu -- **Included Files** and **Include Tree** views, use the Use the filter box to find a particular header file that you're interested in. -- Sometimes the parse time reported for a header file differs depending on the file that includes it. This can be due to the interplay of different `#define`s that may affect which parts of the header are expanded, file caching, and other system factors. +- **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. +- Sometimes the parse time reported for a header file differs depending on which file includes it. This can be due to the interplay of different `#define`s that affect which parts of the header are expanded, file caching, and other system factors. - If you forget what the **Included Files** or **Include Tree** views shows, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." -- If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. +- If you closed the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. The Build Insights window doesn't appear if nothing actually builds. -- If a header file you're interested in doesn't appear in the **Included Files** or **Include Tree** views, its build time isn't significant enough to be listed. +- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds. +- If a header file you're interested in doesn't appear in the **Included Files** or **Include Tree** views, it either didn't build or its build time isn't significant enough to be listed. ## See also [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ [Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ -[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ -[Reference: vcperf commands](../reference/vcperf-commands.md)\ -[Reference: Windows Performance Analyzer views](../reference/wpa-views.md)\ -[Windows Performance Analyzer](/windows-hardware/test/wpt/windows-performance-analyzer) +[Tutorial: Troubleshoot build time with Build Insights functions view](build-insights-function-view.md)\ +[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md) \ No newline at end of file diff --git a/docs/build-insights/tutorials/media/build-insights-rebuild-project.png b/docs/build-insights/tutorials/media/build-insights-rebuild-project.png index ffbe46758fb4280ff6e7f6e82804ac288b5adb99..63ceed7705e216cfb8e210fd762c7050fce28e2c 100644 GIT binary patch literal 22035 zcmb@ubyQUC`!9?j-3`)>A|=vY0@5JeUDDkp-J*0TC>_$>EhRa0_YlG`)DUOm^L*nu z>#W~d>pkxuvslc)-kUqF>r*#TDoQe#XwT5#;NURjWTn*L;NVf<;GU$TAOY_jvJH^{ zU!J(C$wH9-WvM|G0bafO4!>U?}Xv7L=Vg@e;5l9LjD z=Vf@bjO}Eu<KLtj$1rsH5X(lp}A(3~S8KQzDNtT%19&dk1 z>Q50XTn)WA;~y#(=;D^1HL#}_c4b&PI2HmPG@_dly`0t0o4J##Y81w6NlT7?J)37d z?S1%-H@oIJ*0k%9+x~FlQL5Mcu|2m$aO!fkX?Nwgeb@88_L#I#S@Z!dGBUFM%K^Uf z=11Pkb)yF;u@7n(^u?VhE-tR>GO0{_&QdKa%Bip*l!ca-mbaeTO$iYt73*-eCUfBQ z=W`?!DJg=;Clb4JePU8l)8Qw6yNg$wqW3r}H?yTqJ(!^Nn%p)__SWAahAr+KV$`&> zX!{)xmmN|fq7ip6(P+m2$U{%y{diy$g`me8_QP*~JvLcuIx%JwOJg{M{@3c0r6JR3 zBxEF#Um2~;pIz7$esQ;}iDzXz>u(S7RREp6{)-!bM!B6rPQ5u zwZlES{N8dhw9*k8!YK$DV{qstWlw&>&;8-Xtu=Rp7iB!N z8Vx*S&+W4|k4}z2dbQO`MrzKkt((08-<17q)R%DtsxB_g^V3&9n>9jTw9Tm}h=|_t zZd}N?M&2;A92~)t0_PeN%CfpqowZs|WH&>~vIOG4#@z6X@+WoB$)udNUw;36p!HB< zIQje7^FieP_=NJ8tB84`7hI!cU;||vZ@fAgZcxOuH?d?HRVcIBcP8$8L$dDjOC=NL z2bF|;-s*DlCgR5X(5p_Ub+b2~y=}_|iGVZO1(R;T7&|{7qENdndsh;ySLT5=7Og%+ zw>;c+j9+V3ld@^UB)K(HO41N&p+@t^A-xzx!}djc;cb z_MU*sGPb5?pSDRhdfa`f)7`IZueo@fcaU7=n(^c~_c%*atI;7&$8VkxVb4ls*5xg4 z5thbXOW*YO&pvzKGoNh;3wVWU&(;uq?pLgSVC9WOS$Db%*X?k)e4Vj8QgBtU{FVh}6JHx*!+Sa&RwmG{>>>sB!?Ynz=ecIYD zeo_PSz7EWNwkUg4uxN2665?yp*E+jRsy&oiM1dn7d3h8#01hB2gb$qy*TU=z2C(5shA&Te}ET#xE_~=bB;IM zST89}GR*094Lvt-K?x+?JP@}&B6Pa`(3m_}ZPLlKX2994(z zuDfUoc0k+xwzX}=xL^y@&FKolsA6jbRXhGZ0`Er2<<2vhiRiJ)F44Kjr7pxuA|OSH zoC6Jg)g1{0D@^swX8S#ZDZS#?>)vkQF+6lBy`{mEv=Wf7eE_{iZSEI2aUF)(y88<# zHjv#^!9LGef@3V_CH#$} zA9~<-=sAZwd#DhIsq!nQT10U%Ai8-Sn)_R57tmLI~Hc9!YbtflB#LGSF^+JpE{+h%VjRfW<|G!Aq|R}oUqbOoO(a+KzuyE=Lc+}w7eRJ*!(LZXo6YhO*#7VQrnZP>QT%d!6)1c~ zR~&XnZ(kyobCoZ`tm4Igfs|I}dKGtqyr>R9Q}S!v7v8yg*;>QkDU)UcHTEl&81<> zSdQCvK9V3P|~$61Nwb;5=aHocg4h_xT)lWjBr6`X(GpW3$YkuiBuBo2o5Oc z4Cv@U#nj?T*~ln$7B2~sBTLsBv7NcJ6F2eC<&9ht%{XJc@3^6eRRV<eYr@0FtzYlXb>zFDT3 z;qf4NTi97*PL!qJTRrptJimD}4@ z@K#pV<#ENV)&0=jJ#HDr`m}xPEaay(W8Jj~_f-@>;Bq0(3JKZw(l81#-T@bQ#uOOc zaXb8gjEub!4z9o_7K!cgBr|wgZBh6waDBryPGSY&h|_(!xnbyWloG^AbUOF)?jU_6 zYMZ26lRnFM5^luw97&FcTu~F0o}473yjp&!#LIRU6WSfNL8`;{7)Ww!9|y{x4H8
th6BL+XGO^J)y~-hOZ9e|wR7U^f*iuHd53nF!vY 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%0A=g^ABe%Nzze8% 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 SI`*{(>1S37 zSc7R{Ui2Fk1zFf5M7ljO^0AKJ_{GuyKI}F*Sk(P?qwpW6!!st=A}YG|gv)GAJ3B(g z>7~JMKE6KOeeFw=D3bJ#_V0?rGEq>|U%fhOCt7^G ztYXy;vF};{<_+X8V@f;X_Ri!%Xp6vnz5UoK*L=XnYcxm0D%cHkEwGEn=6ey+RH7BC z@xcM&P1LPLgl-K@)F|^uwPAr#ZD@OGHlA_Z$8MZ})I`Udb5oZ4*y$cyU6DZlQdH4T ztPkZlB)vWd*{nR@)$t{HK1L-xx+~gX0ft!|W0vb~p}v_@iLeo?mj(w z7(0@2r8%XW+R(hfp=9B@&=BeS;ghzzhmw2maprC?n!-yCArh?8?PaWk zuuj2n2@o#pc5bU_WP%a3hCdD#Lk&hAA|=R;_#9ELD@1NshHtwy+287a&(V5a)5(-(p<=iy}nrhdG9oFy>qP+xv8PS0;|JMaDiXG zU}~e#BZ{7hB=_^n_7HAXaRBgRLWOctdA^yDV09rviU3TkL5`zDZ zM|{}_^uS;^`=)nlgt=XL?Ae99mQ&utvj)Jqxb+jn&#o!dcw2wh97^ZS4BlDa5I>hp zyuLQnjeRoZlr0e+&aO=0cFypK`WOq)i1djE7jV>}rxcgh>^ESEs2n1OtTgbaL^#t- z!I|x+8_2HJ)zu<82Nwh4ipK-M0{#*T7zb0uAI{e1|5%kdxA_{)GyScJVEu|)+@K9i zAo&0|X1ew0C=bsu4(_(5U#_qI&jiw>i7DdHbru#C2S&dUbSG-qQNI7%^HMIF#c_w{ znOK0;PXSlYWdi;JA{jl?%%;Gnst9tLOddmY;uYTNg(=u~nd_{=6ADnHPnEg&se&Un zPR;sM`76;#T~I16t^gGFpE8qb6LdR&*A|xzn}wZnx*MD96U^|o}khaEkTv~og4CY8cyoDo#ZwMFaEzZ{??y*%ugaI!PAlJjK}h(s8~a*>=pyxYcNK(M8@AkG52j z=Xyi9LXX$Oh3a;y!xT&e>c+zE85jnxUbs9@TnA{S8anclqc~BOWAB6z_(n)D0Fd81 z;oxn#>#g$RXs?v@{Mw6;VTs>mK*6(UrG)x<+}HT&N%v!GldvbyOqfzJSy2-12m7hq zIx(0+!;gOhLU{1)75)98f+%4?hc`i93-+yFyV?9Fi18Qs{Z~fuXA2xSa|D>wjp%4k zM#&EI2M{knx$Z`uSiuLnW5>C(v9x7>lvA;aY*%_hJg`_-fD~i_nf_ac8o{C}e&fxZ z0f+4*(q*(&bO#h z9Xp=V*KfyCgs+J0YxwruQ zp=6IWn{S4DPhJD1x{|xiuJ`+la-`YEXJ1q*Wx*`@9)i9w%enlI834Oi$*b)t^@0}? zY~NnQ$hQ_WVGobX>t8dVn20IMrEjGtAY9S>N!nWCXFy5H)3*F{Vm-f+>ZB&ZPmCTD z;^^(ZE?cwd;r2ut!h0UJA7{TH1c|irxw)q)$#>yUciMNW*AN9lVpo_v`1oKi; zj#$MG+ou8{dZ@Iwu7j_ettM`&zm-!(Dv2m6`7otRRJS^%CR>tru=_ z`Yd)j{#8a;IZ*31OYkm={-FH$uzOLERXpP#lX#2wNCLVq-;({KDJmu4NLx|b3d81D z4@f4P_fMvpK;GenBmEF^{_|@DwE%Hwjh#7|+;%Ba824GUZusTl`B(wC3Ad8y$$-%L^&srf4Ih)E8fWo~1=ZSFMg zhBmw9dA}+#@8omDps zmUX8%Xh^D)z<0k*UCvOH@V>cczis~#9`$DM+)pCeoiCi8_DV$9fy+vr{wWZpmn?Me z&USq7>4d#ZT^+l%mnbr3!`jMPHC>=gojd=JVqrP|nNwEHnyl|D?~>zO`u@QjPghFZ zP|>O`{g`i-vs4R)r^vxA5=_#1+##X7JDhvP1bcfF#IhRWLN2L6iA4>tdSKD`*@^1c q*hMGif_6&q5fRp7$&j_(y-oE)SIO_>(?BEFJ-->6!AlGr!u|z2&IgMC literal 22153 zcmcG#by!sIyEiH#pn`;iG&o2oEz%`0q6mm|cS%b(C^DH~=M7M5X zq}{~^{^eP;vLEmR!%^wAP_I6JLVGd61Q%ZMd4l;VgbM3`}juF@zyQ;wwpf~ zwJ}yZw{EG?%77(Q-1K(l3BDSerZQh}{@i$R+rM?n$+^qodB*r1vkw7pz2f|wAB5p$ z8#uA04yz>B3=8e0Oef6ef8$|}ua0*%i^@LU9op5tZ%!^nP43gFqn5d;WKUANK9-3}PF#masci>NE8EKwTHA6K#=*bkUogsq&Lj z*9l@}8!bi`ZQ1Cp+CM#+agL=HQ}NX;)?MsYau==4NSGO(h02=i$3`?ybi;oB=~!uMTpTf}M3(er6(SQ}JG^E|CjAq{&q=LnlWQMk4sYe9Rq zKqoFI>@LZ~E`C2*xZKqSzdXRI8jAH2R}t4wf9)!+m)g=}Qw{Fqs!);4f0C0;K@wY$ zv0(@L+UjLN8xpOz@IsNg5q+1|SLdC6_kusaQ{Ky29rZ=EhMcT5O1l>K_j|(w*xu1y zm`9Pu=P@G3+07mw?hId9l}{I?$1&9IST@ZlCM<~i*DM|P@NA&8T~M>f4Cke5g5@5! zdpea5nqOP;o1i)s@$^N0@lS$xY28h*_S_Y2Lp{drHh6h~$3eFQtSUy+swDOooKM0> z=7Z$p$3zW6 z&Spxuf}&DCokqs*A)9b=Kj%&i@Vc#v9Za-@#&oE?&sX_4BnaQi_ApPa!i0LxBN`iC zyo)b;PTkGX#DdwMEb4!>Fj_~SQ5r61DOtlc)c`8$r=2G$DD2pvq=4CcYic8gZqyhrbAL{|_FngIPo=7rq8^W? zp?Nh|TkYniYSn3d@uqr2I8sgjk$05(xD|Z=%D%Bj4_YzmT<4o+dH$w2XV&mg(9hGb zv#b03V!6=8*sjX2JSbOWl?$_o9ZWPoW4)}!X1w&an$wwSAUX-?Ks(RpnFd#KFmR- zf>#}fc1}ywD5?8P4QB8_hi`gNiI6AJso`5F3CI#CP5OzIQSihkFQbEVK`YDR{@qD4|&7=(~pSodXI8S(fABa3XotqHM?nYj!DN8gg`C2zgviV z-UY>FTftYi$X67#S32HNOTaIo+Py_v&txB!UM~%I7FWafX*$CwKv4G1G)Q9GBR`+5 zuXYeDhOB%aC)g zhV9#5p<%s+){#w@WMvbZmn+Uux_a=O$?@&0JMuNe*kzt}7z(LhksyQjdq~4Zc6SnH zlPi4j0P90af%KUjZ++h;6pR4vsW@2$8uFBDq&6!|x4idN_nEGtcS~X{9*4Xhu-q~4 z`e8E>C>&p|(3b1-y``x#V-NYk#jBmgrTM*PP0qTQ^l#_(E8hHh=PHkm>gE{G<^~u& z99Lg8uIakYWw8nQmzt^eCeO7N_u|hjJ)38|(GAz1Ha8U}=8udw)I) zEu#qE6nOGA@#W9N`Im}1Y_oAr;$|rSk4x{0RFWCGFb|0jKR?A=@WYfre*P_y!!Htn z-h5=gzaABevxDu>Ks$YublDs9`b1j2d%Rne2GIFHeJ?WIe^K;Yg~0jt2{>GpnZp!}5MhVzbq%!}!wb@s&&G^~lk416N zWw7zBnM~@E*Irz9kC5rD%;U-BC3S^XY9A-t{2)FNz1r{iLrhO7qCm;$0{`gU9*Nup zFp2G+u$#)OokFzNy`F-$Plr_(KCCA*YkfpVPmgw3q`~UVEjw<6!-OS9(Ht{=SX6l%=mbfV9!+q#gyj3$%AKZ(XlBt z2pvL2%{C*kpwj#0IE2;MBo2)MY0iu|X6vIGzx4O=R@eDTg*&Vtj`0?>%}<31>n2YX zU}88|nvdPa{&-Nzs1#pCC|Wq8{jFX1><1$*e~*?^jhkN7l$RqmI+TBpyXIqM?5a0W zRe@(Q9X`siH2k%_F-<_$Zj;t*E4lfB^PDQWl?+;Tv9C#|Cci7IzUiplvoseozQ+i) z!RI?d6^@{l$GGfU^A)tMR%jda)Wgs{B?z=E>4LJrM?&fT94+RvZ?Ll0vS3Ez|9!q&%DPBk_rkLanG3e>(4{shYjFIv?8tPh!PSl`l~G*WvU^HEKMB%e%2i|Q6eKsBTo*U<>yo=M_ORgbi?ptG z3{rk>s6D$BU|FEx?-TK@4{x$ntc7e4Y&Q{4H_;XQc)xQoHt7mJ{N#RVN&kHkF=x|V zXNt@gf^J<`I+51eR($ljtZzHhjKM6!UrEyz_cO*>4uinGT-aqSA++?HFPhniBb_m^o#h5ysFpp23u^?Syoi< zWx!+iT;~oMmgu{YnnK_Rh{NR0pI>=H1tIock z$5@1U;$(OkK6!Au6ccpmXiK{%?5lPtvR)U_H|ZFYhpUATI^J81GEetblW!Pu$GSSs zlsZ}Aj2q)SZPAHG40^9ViMq!T^ey}0TSjj7!S9Jjir<4DCUOok5RLQ~f1x{h5*-Iu zfj=;=GNx0S_0O4ad>A7^I%fZs`3SD|ZnQP@Y#STzF!heR*qHawE4?oiS>?-9r*|Yj zACfKAkw;&!cF(8ewN#BiJXj9n1i2jGlL|C$W>kz_J7|{dh5n)ku^3em6Wr#sGF>$` z#M^jvdg~1sB|?Pye&0da0t{{wvA8U9S*e(fflJ~2w!Ce#b?A67c)swfD&$Om))+MK zav28)x?y|kF=>2^jQm)}Y5m50{Wj5b;Y{f89f36MaaNlQhBs@Yi4JdD9U47(GPD;~ zuVqZ4Ukhp4l!BVDz|Cg< znJJreRK1YZp9?#Ll(8pEiZ%VZz>uoc)zHS-s`cJIWC_acf?FtU58tnW`#%xObZo6e zm{*E%B16Ej=6=cV#2$tCd3F)_>_gIaR41BSxYmoRj@4Av6vGD%J4{OMUnh?o8j^B2cLTqv6NX|vzP=}6f8>he51EV#cLgI`ddeZt-Jwr=uxL3WQ!ykk>zGs2| zhVtdqSzFAdpT|TT^{1~2#uB~@taXBLum3Tk(9e#hv8&nsrEN=a& zQKos6Im6@e6DFnJv8wxbmwCP-3{FdGMd|ot=N;`4=RH+D2f@Bby*YOQfBmKl)}{$4 zDRn(4&{HR6kMuh?zMS&r z&qztxXa~KX40syaXT6j7G+c;|mp#vU5;wK?bP zSf8@uTKVe+C^oZgFOVz13# zwoPMit_Fjpg7G&QeQg_d_~zWhSy@sbB*6wjv&2^)s|H79q9QSLX*icD~x26eTTJ9&;Z%9(d&QuoJ1N<860b zOsOAzA%?2?Mcs0xZnIGjd!?DU;KXUGa^5F-jy>nPa)~O&aW2~QNbS&QIWOto-=AfJ zpS{=*nRQ($Vd|-aclG+ZxKW}Pd~mT%`@1ph1*5KC>&!>8=WubR{=O!&TDi~-KQylN#qIchl%*Rvenx<}pN z(3Ewn9mlVTC7Vl;1Nfs-eO1Dvs+75{$OceS9!|w zCCNp14rOj-)1e;=zK>+CBZ~LUGRwOc;Z4zHhO$Sl%Z84GpIAEgdbi^5X)XceOn6&AUqG|_=ST8})ke$5 z@2$KkI|p$%y4o<6TO-u@t0il*cj6P?{X%~qucWxSWPJ-Ls%^xClgZfNH;s~HaW&AThK ztzW9s+cKy%WWeA^j|0}Ua+KlO;-IzlBvze~EN~O3#tnq=2@-MTu+k$I&3uCe#*ocN z3)he68V{ppsLo%~^r-v)+w|vx&;!!bOOK0L3akNqMud;Fa2)DH_c9(!uH{RI8!7>5 zLg{!{_$oAQmaoo-f+71>%P&n=+oquy^=3X9Loz8Dq-}1rjmIShv<)o^0&yPBQp~TT zXDP;#&%QH){+ZqR=?7_~uVk4uN7Tg`wizzp-$rK3Kl?7^V5=z*#h^YMMkPVEEdyz7 zYn(JJa@h{7)PtM!c;Upx$D=j z=%nsTl?KzZ{Cm3osF-HuFXi33qPgkfbX#$g_Z?Qcg#-r+k{WjAoZsEvHy0+0h z{TwMGBlcx_j9X5$RQ>K-=!2gvfq1u&7IK0%j`FiVePDy8xrnlzS=)t>>Q4->BbQ1V zcH3u?&ZC|IOo71fuC73D@WtWXx5#@ZR@r1daa~vSR8P|N2ww#e%bu0jH5Fq#%6K1| zOVmdxe>|#DL}mATh!GlymBpZG+>}UJF|q9hnin*v=a^?u4?_Gpd zpYF*HYX}(bax<3L{pP}hKdGEc?9MzxX+nQcZ09Y@NmK>(?FK`Fec3AJ+A;O0`Ezhd zV77#aLsC~FtKoCAenn{#khU8e(6X#wwzXk{~gvCkCt z(uk$Q-N8S{p933Mr(3B3of%zGxvx@Mp7>gB;lrW@j#ra#jBAD%vo`$=`m7idl7&9r z3csS%2w~|q`*fu8jzkKWyQ}JAg9i@}ISK9 zwB-(*?hrp%)Wq{>W|3Apt2eFiPe*QW+^tHlS75)22-~3lx$aFHTF6a~+!FB_J@yc_ z2A&KiuvCt8C#^Ui*T0zqOEvUc;jqLUkc^#){2|S1*JzqA-$=@vTW-q&)lKVSPDm8P;9~xs$2#OsE&rn~8T z3BbQvfCvPD_}4P#j+Q4e-PnhT_WiJT=TCea3p`TPDQRcfT7m>$ykI@H&LMVZ1m+gC z_pgUU9Ro`DvcDvb!Sv3breNM>U@wmw~L z4M8I513_w@W!TMXCD&N;iocjoJm&yb5{ObKRMe1W;tMsbz%EHb>DCiWSk87As=9fi zKRZunTD3W(9n2NzSukLxcu^|9yEnErS}fbmZg+V7aqg|QIub+WM)ptvaB>Lc0xLSkIr#efFr;*<&jh1&SrnihtJ=Br^!gD0|D;KW18}X2jn!2)Z zKfdq8|Ml!O3nv3JVvzA|kXtB1EKR+xK5 zj@YM<14^<9#%xDLtnO)El(<5)fc%jX^>md@_bzD>+d2_0feKPHg87-?fGHb0jw;3> z)9Jf(VD&1_tPB`4$d#q29WoLljg%r>xw`4|@`VT=2fcCssgc`_D;L_7P56-b&?>{@ z+H^X8I9wp=%rf5|sF2jC5c~{lmtwrGm`DIbHv3zwD!bT`pT?{R3|wfq{{fQD2HA0o zM*x}=LWHAGqnrr$Y_AIv4w{+b1PJ6qgOHZc=lwJQ?&T>0Rd8dNKn?yf)_*qa|I2;; z&&Nb*!6aOTKBN_V5yDqTuB;|WEAi<&w#tSRUs^O{Ja{l*`hA9tv8POck)upk`7i4s zmko57+d}1o?-|?cCwk9Bb)mD8q}#Hm+zgjb^4>tg`VSx76kzdijx=4RNn&MrAg1x& zV<-HrS`?=mVsCywyFT+k$@PLT zTsjgMMC*-A4eZ^HMq#gu7tJ!l_)w_R4!rxlzuD^hNBjGo2MC~ zSkb_MJD`dyr+5p7FOr{bvl189FIbJ0qPY(0wq&MH2 z`5%Y&jXacov=V_;XI$^$sQicdsSjl}xo2vgEzk5boTX(&D{w*>Zt!uTfZG(K8mkB1 z75G~LdYdkiqeop;$=~88A0O+P8sFeCjcY8TI8wHC2J#}lds&v4RBL1JtrDJTuy1KD z0@LbgL43qpTl}tJLv7Z82$tSlb0g>CN5JiCYo=onnekj@u`CDP6of`SSJ9z{&M-oC z$uPez`RHKcfYkBZjL(nXiU#%=xM8gurBZhldo}9`pJ`|gFfb**Ny^gZ0m^2?@4W`u z>(eD+ZvZ0gZu--=kLYs02;Nt^SJjQZGD~TM)1)gm{`np^_@{EWkkyi6kAR+w6#04I z0crfD3BSY>e>s!()55r6iLZt3VGJ~VMtVC_Pv)PA9=FfgX;v2|W{}Hh;;3nz%HNcm z=a7cJ_+@#T`p+JP-y=WfJ@WNQxe9Mb9$%M88oJ!=XP9UWgnaN6__wm~70&E8;s1>I z^cJ|lod}5lhLt^Vp6zWU6)mt1D&}D~vq7-|@C*k_|BL4He_BDCvGkJH6qYEfZ$^}` z5Z*5rKZ=3rVDBnpSnaa=L(_i3?Dl%$myQ!@9Ri?EagKZlf83uC_({z8^{qz|wpvoc zYU*QH`knIix&&Y%Ow|Dsf#vh5(s_%>TcGt5d5A#r==tLS%jNv3t>P3D-&O+exo zcJg0gR35g#&CyQGN`Qfec1j|BK{it`o>4aYgUhOfc+}dtc=&#Fp|fhZFp2^EI{IfW z_gZD~u9s9ElWxyKl_5v}b!;zvl+)Zmf{p&2KqMMY3XVUCPVztX z`l~o*Yczo^oM~kuQd6L=)o1)?7whaY5FZF7(0N?@q2|`xx~r$B0YXw!u5rkcThEbF ze*tGZ{UDdir7dfmm-NP1Z#C!bJ6iJ`go7b1y5vCTP^9YoL)xOC!c5ZWrM+;D-<+F` zw@nplVOqO*3%PnRqg9y_zjQW30nhhLExgbP+wp#H3Tvs;NpG34GMcWD(Q_1>S7l(D zMBgE@vAO|Q!QZ_S89#5Es6YuMMW|OSz$Qq?`~VBK(BL9nlGtoErFtsUW@DR{Wuf&? z7W3@>M_h`a1 zVr;%qgL1aL(Ob7C$}~f(lO-0WzWlIO z_25hVq!sgciv*Rpj=$0iVze|5AJQmd z$)g0Swttz9ZO@g!%MW6i&oAwT%;>{4m^AgJ)X+nePN5!dJ4`i9Z?yEFsYagOa(}KU z*=yCg+pBDTff!u5gPKl+7>0KXozTy}xPf-oHN82O(+&*&(2<8`Mjqb$C!z^^BAUBV zv)mcKk{=;*xU=t{YAJiY-7Czk)+!PD7LPM&^%%5eb4dzTQ7cX4$0>h6Z~cH})$N`r z;w}EbKyKN0x{rq+r!O9sIG zmoqE5fUQivmJBjUqxKD$`fR*uQ`t8bCKUNCcK{H2Q!`)*Cg|eDlq-%>D|ruB`y4!r zc|9&(49hN=o~sGGc-_P0|6=)hME-M-O%2#BWfrBQ7@l>6U@n|Yb9bl{x9w4B5C|ev zc+K@=fuy^Mn7PQ-io9`CJG!z_Pndvqazun3iq6@&n!J~&4g!VoOiU`Y6v5*T50q=2 zKGf)C0RDx`2mIfbx5gfq=Zoug2Y7#{1x6J$d+JL!*t;eGGywub-aEs`x>j2^jmiKI zboTagk@$_7Qtu(B+`ip|?`qul+I>>E87XMlh9g->X1NJ!A z!oW0B>~#6Uv5Q2ht8S2W;|8n>UEpTwt%@q#)!}`zlkmRPBU0sZX$9;vv)ezoq)TvHki9|8=9IC}$}!d15M_?r zk{b+_wUS8SIlU*LBy$YQgNoGYOF1d!vOiQX-IlM(V0sZFX;$ab6}X0{M7+E}N){by zf-0*fBhR09fq8;X>-H4o;^VpM$?e#BMMrI=b69tSr;p~`>}h(1QAIiF%=y!voe^t- zD(E!EnS~qj>9*AKyq{fUtjpf`4CD9sgD;%M@-V)n>cGABN${L1)wl((pQ@~~^ z%gu?b5OMmFv5<*hVE&>BAMu^#j;8xtP7Ua<70LokV$ymfuD}}*W{e}oXE9Q4@D#_Hp~*C^2dPbc_|?tZ1U+T(_$IUFxjN| zJjL>7aZzQbl3^T1E7meRHqvAKx8vCOKl^^DHAWAG&6FroB`E8#btrs)Lgz95IYc%w zWE16_K|YEu{E{p+>{T0jF2EU?-2Jt~U+F`2)94t2ve1h6v866mI`d^3znE+lj2#mz zWBtrhE}&@V^@wu)sr#+piP>aNdt^5>ubnDdG>Q2_B!!q0qyXhprEo1-Lp))aSF?^i zJxFsn2Fn?BaV7x!^g3cMvF(eG0Y$7A@8afesm6*-Pslda@aS>AhlW6!pC{n4iq8DYvxjS+D zmMZe@nRCI0NtMieQ5&8-Mn{1`h|x&Be1u~ni4}?u6{l=GOCrq<=a2NyRx_cyVCiA$ zERcsXP2WLes?pMP;Eg~E8{>)WtwRXG53E36B$%Eno`+_x?eTPu63I=qoKIOdz(o(9 z3PBvId<9Fo4aoJsA(N{ot?0Vmyme*deUa%zzc&`EbuLoZ^xEVR)gl47Siso(@~GcK z?b&CUeKFuJ47Krl+v9L`Kt1PTqZ{kUO1j$J z;C!Wa+Q&I;hI{tSV(pS0U6mpw*PJE`)_&hF(Rp=wez08uE3lXpgtjjFINkNV$o?|J zbe+)e&{P+dvdZ1o_3uH&WrjI0KzBw&9zJfO4#1;d4kPDq$|0D{V z2uZ5G<-Y(;pS^q{BnT)AdmP9MMma477Qf8SZj(=WFzaP=vku_Gn{s!!iOlE^{QcFP z_&-Jeg_>=)P)&^lQA?V5j?h2in(|+dc``UE=4yMp_DxUTXA(2^!Q}C3`P3*sR7$m6 zv7oh;hfmwYxRTYoarnTXS`EeKPt;%2dZG}M651iEn?bvN`t9I!!H&K`+N+XlOcc10 zg#X!x-Z%Xbf2Z7eJX|dV=k;7(aj#h~fFNMyYbl;3cy48GjJ#u08U=8V{S zi;AzWp7E&H=zHKNP7J02qJ~|64j@U4(Q3pa`3qX`GX<-}>^1?Dx;V*}B=)(T8ILte zObeQ+Sq~N+K=G`=n-&Y+i6ubJ)Mwd==FN9J@r+AK=V6}?qeX~LR3AZBfRW9*+&!E3rIDS#7byy_ih+RGd_}`-e1*2r5 zK4pZLb0p0cv)}oJd_rEZySEwjv{*-urIpSpS7u}df^)EgLi)XsAlh&m|uGGkE2{qn_16Q zp2uhU(>8Q@pc1*1|CdAV@~cW`l>jc$8~3+x{Yd`(>1)c=G2@2=$o|UDhR&t6_y|5{ z{fjIrpo=Xk^bo~Lj52Ov$cynT?0GXUQ}FB^U%7g65ZQ44-$~_I?-f7Yz^C8-bQj;x z7Mrc>kwe0$ITz6DPq4=WICw;;ADP+2clW0A6CjjTa}Vu*2R_;o^v5GB!tnRjET@wK zNa-c4f^pfm=>R=;4ZgE|GAzC+n6dMjooGys&Z{dH=u{p=e<^CGt1EW0gN5+2`KM~0 z8yUXYAA)P!tP3Nup@Ypi7N)HLFGRf-Ylp@vGUR?5aV0!hS@Rup1kd(RN&D!-4tQS9 zN*&>1k%Ha4$J49nYSf-a{yz%&0EC3xZg!a0YlJ=bUgK`cXSkiy65o+qG8=_628-^$ zX=^n$4wvwcV9u(n-8sF+!zvlt^OQ9`{)Q|3^+mKO11Ll7NJ18jN31Uz)Iduz`h%p| zUAwh?GLG>Q>Vs`6zDe+8zYk}xa~9|5P&kPvvpuFP;IP(pV$;Nedt9?OiUg0T zUa!Q&p7eYAhU+&US^Zx{EDxvf?C;avGoU)Z@+O%3U~HtQHSztgPgcUn7GIbk|XJpZn7-Q}kN z|1V}8-K9YDMrARFO+q~Vr1!SFYrPoS(~LTEQdkFfSnZ%SDy^;Uyr1Rr2<{=@a>E#I zCWe|%QS#r3k>auX&%^+>!5yM{u4n>OJ8vxl_uk35?Cx@HI^@!szc&WvGoPK@{-xR4 z_FChH8IwrTT?n)Xhclf={nk@VJpKJ;vZpz+j(>;>(RK7AD9N(|8RFD(+p7q$_QZ~s zL>5e4R(cUO2O`onQM?)lj?gvtmI$k6M{nb{%QjDY`Ktc=y}WlQZO?meEqjO@McV!O z9&h|f_1r3}$1`uQ^zJ;oUTe6Vs`{5f6L0ojZYWg2f%wOrby?(_eNH!5)$8yOLW1*t zGFpdwcTylL3)#4Ye=WhVn2O0&?Xv37!?^S|R6XH>`$|uz`{l@SG{z%qfdQmpS*rVNHp)xzPb1h?fclJ zvsz322Y4QQT&fijhBXECIB)dv2fU6}PO3Qq6z0)g$H*t!jR)^8_!T$e6=uX9{4p7$ z+liiwkai}SISbd19SbBT@P!wQJCYEqW)4f-YUN)S2Y^m>EJ4+yPs2Ww))EA z{cfZ&-{QSwigMD43VCyTy3geq5vUe&WBblCjB1c5+__)Sf~^J$MO;%Sp6lS}nv9+V z17@T%aZTRX8A7PE;zewsk1Mk9lf+2WvQ)5Tj~5X?)$| z{Tgbw4Y)`>uH;Vc?r8e&=S|}Y-u?oH3vfh;%q2cxV zD+5h!yUL8I66iaelE6IJ#kjm(YvIs#MUOYlAG3Id;;yFVD{el2ZkphLhr~-8xl1R? zOWGk96Ky!@lFJfgp{a-1S0n;9JWXijrE+Z}{NId@(I!}R2RCxCob=9YQ9lQ=*U;;J zVwwWP5^_miE*jB;W-OnvY7F!cswiwxfN9nm7?=H$?Iv&fGY@*M0DeO8eaD}j zXjY0@3*?1ERGbq2p>PRk=?t0%8vb{i(KV6ZVU^YXcQbY(36y3y$iddSsrVoProR@e z?41~eqKIJ^L%WbAx9`Q71YcJZUCp_v|r#!9WJ6(A( zFXUTzyO|6C>W_fDFE5Apm7JC4CdbGVkZ z45&6?Ly_u8twdfVM~t=^~1zVx9{U-1_#!cDkuTy3t$9dp(F?mPw!2w5q(`J<}$jg zn5fx+U*4)yRZ7}3fHCTDIRf~-mYITjX+3$r`;l_S!HG6-0X=BEU zg#NaOi5wOpN*!~5^i9EZee2i})?%v7cVh>vzOP7WQM`2Sbqeb{Ys~InzM9CU>dG2O zp3YXWSuWLkUEvf0nIY}yRFC>yg45;15@@$@EJ!`9Eo4dmSwYN=d13d8o-z4~g81?M zTn)22H3Ky@#jjZD6o6suU1uE>xSVJ~V;%4ZSk8|^||N#rIkl zzlm;O_iw+Y&nVt53*H}OwUg|$W`D0sXr>-q9Js7vGn>21LpSuVCc7q*UJuLG_N3an ziExn88}aQFN(vj}K9h52E7?Ff8)IP;MrvC2IfMrSs1z0p#33II#m%Mkb1R1Tr3Kf* z?4pX|V)z^ARA|Sw2HCImfMV{ogHClnffz6{C!j71uqli#b-ESm<(*h{K^X-i>tcDB zfq&;Pxv#Jy$r)Yaqe&IO=hxxYAnftNI!V;I9*5mZzXVemldrmqMeaXd5uxj7I>}im zpGQr$zODG4223ORP#Io5`jUn_oht02#*nYM;m!pu3l~A);_s?}oT)9%vn;YznBC2- zOztcy?QCfBIqO^ck0+r#qeJ>s5s`-27M*K8%BJ8gEzsQIBG^eON`?!@If@-L-qw9t zV5__$^B2mxQVB*T;w5nq#prv;1>D8v(00q4m?^EkuSipfMP6h2ah2IDi$3y{hsGN3 zNi=!?O6Sw6AI^s&>OR<$dpu;W3n$!-{fYC(C$kiyuYJx9@qcIYU7KMMDZXq%%~F(y z{SKSDR5fm0$v;0{2|IZq=AP;H@+U_SfmmRtzi&|g(L&IfF?~TQ!9_5_ep#w#|A+Un z&4g)!I|S*4f09^*mBkTpb%1^40(2r9b>IP7yU63=fx^SHaXX$x1=CI#VuMMTg{y1!cu>ZA$mXgk2%(P5j^G=jELC96Z9^d zD5kmUV-9z=6!D+dB5I!%f6~HKfPU1#zn4S^SJY?cjXVX}8o35_@8W?#1s&V zZ~hM2!uoHMEtsq!ki1B5gEcJv#S(blqNpRR*kfoBF=K7Ocmvc6j0r$47aQqE)ToAQ zRQKYjV{uc-#mzkuIg{Mz7I~3PjLZ3UKC&>y7Av^3=}jX(HL^L*Dc%hC^-zIfO|D3E z+IwB^(RSQxdXnndS5c-7_?fnIGuLa$Z`(eY0^i}Obb)Sg@hn_!w zVPnWN7RU!Cs|?7#6f|m z;r84Q^&J6X&NKl(l=}9o4UsZ7|4=(`f+!l+-y3D{QsX^(y~6u*ulKhjA00#ykk6{= z&x9^+Hp=+tAWcQiR<2WWYL!1W#_GPorn8t;Y%`tj$TpyM=_hh2B<*!2LCUPyM!n+U$9H53x9QiPAh?0^~u|ME&i8)dPj) z6xP9Ai0uAFW_kaTm(Ep?uE2p)vE6chu7VMoYMUM3b3Y!f6Q-Nn9Ap#X3tj@ANYtYNc_!xz4jq&D zzKP3Yoq%~O1w{L?K$_3*hmC!DF07y>w_weWh?ng=`bo252rB`1k4GF9*|2tm5Q#nK zLLUE5L_4nAkH_C{juguSnTUdDQ7UuwevQ+JySkVO%2MpQT0OX&8=8y9OY#Yg-?eZi zd{2x;S{z$F=loe}q4lfOvWUQRuhZ#ZV3YHsGzks)W)Tu`@O1XADQ24b`&n@N!vH;~ z6?#0WUWQJe9X%Pf)K@j*1K(@DD}Z7Uv42Z~ZlIBbth{E^#YPC&Z@H(OCpjjs$~w-% zFEF-+YWm7tHMu= z^~<5Y7wn4;dBV-ym$`?oD>%^>LUFy-7x|8eOOeAhFWVm;Uf%U)3#xh(ouN4vn$QlH zrU(6C@X*N)o~2pXRoBlU(y!%9K4&1FTaQ6AV&vfWJl4AqPbb-ME0y%W<;#mf<|2L;({qS=XL5c7OU^R%}NU)T+w7pTkpxbtvgt>ih9D+>Gu`Y*7~rl-RHgXw_qw6LE z37K=Ms2Zl3%pyF!q-2z+&+$V!h z!CzR0Y|x} z`V9)8`EN(=O=|u>sLDU5$^N@!Q8X<9Xf;Z0Q$J=bc7@+nu01UmjA>PNn*Kp>3FyjrA{;4sV z+)%;_6~@E>&FGyK3Nr}#k%R(qBq^;i@LwM@d`tBUiwg0?8b?79+wDwaaw;q`^=jEo z;|26tD34UVYqFVa7?sJYtfXl`>R=T|&k9mVaIn&Tkr{*-3(obycjqCELhV{BE)k4L0H|ZF@EXV|1>UjAOAUz#5P${Tbd$a zDLL2BetRUQNNhrlI3dXf-N>wjKsSAf4J`7CK#V>O%6%myjR-hLg(3$rMuj+URQd`y z<355zP&e};PA!JN;=I^n&n$U>iTlCnOZ_mUDxe44NdPtfJX*3zp)l^l==nw=SO<)a4qa zJqlFond}X3!r48N8?KY4`&x9_^So4LN|+_EsK_Qs**K04ce63CtK0dvKtQcVQ2I+5 zz7Xagqx$V~a!@FswKwYnnnkEtDQI`4QNWf`c`N0?;O1bptK{isM^;z+Emr$o2ojGKSn0=KSrkSh?+*IBr9`*s-gK)>&~;f@DiDyHm5HJf-p7T ztHYpCNIbW(lSm4-e81ro6O7HwkH7&5JHDR6D{sKam52Q2Nqf z3;4OseYbGl^mzM>b|XEIRT%j`-9jujjk`M=YV}}nauy&(B?ZF1Qqya&-c^zJ(VV!% zguL5own&Xk$@yf6GKl)?V{)}f&{vyU!PDFG)-Jm3GrksOTNIA;bKftsR1cDIvFP0D zel8IDha;)#^+RgM2TUE^Zvv7T$LtWxnoriJ5QFxsrXjOg(Y+AgKMfC6XTtx=-fZU7 zDkp7{N-E2`G6^sL09y?C@WdJY@W$9Q7UcWww7vigtkC}@@8QGTGF~dO{Nkkp>)+%@ z_Jb>`N8s7c|IC`56*2m0fs*?NG2#HhpQfAMNOr^*A;FiBy!Z|nuUlOIA4cn=#Y?k% z58lhKoSC<3tMnO)Y?S$E_?#-eTWMB!0)>X1-Y}bt|45kS-$5Z}wt%;iyftVhIZB{S zCOLZk=?z)o|JBHOxHXw=Yh0yD46d^GpT`8eA>EY}!&b@QyxzF752PDt_l5em5u6Mt`6>#?PK`a24 z1cg(Ib{5}R^+K@5Rv=f#eN6W|UrFDE@7@g6)oj`TENhsuL4VcBHoD-TjjK;*o2ni{9(fbWy`G`c~ znjio{jJQx8-7vu5c$5=q;je`2j@&3S)3#4BcG$|sKDPUMxo*tWBXI5R1)A3I#W4g3 z#bxW)m}fw&Eo* z^!ofqN<(b0K#yk#Kze;(;Yl)2OQvJmbI6x%U?hiRtOu&W%ad^u2B>QfvVF?f)5YLi zOSqGj6?=gkS_lD)DsXeX_UHy{gy`!*IGsLSxCX;X2wMfu1EkEw8-|7OH!V4eh%RGh zI3-mz=m(gY5vst*m@#M&8$LZD1GxyKhxO?XXFwJ|qxB5`jsS+A7XiI(x~S)O>15%A zWW3w)uK04HrO0TVyDbc7&t?%DHIe99*74HF?O7oP;75US69J z$v{iR?CjIl)cfpE32*-Qc-(uUG}ngryt@RpT2N zSwtIaB%Y;ho+sXT$wokcgIymMuW`d;Wv|=o^5Bzr$PwIbtmKT#P?JYL=RhT^+Teez#f^ z1iR|XH1B$5tj|lvkjS%WJR+3Bh#l&pD{uLV+7w#!xPVtObm; zskwO*h4PwGw3#rn$zHph;BGi**RVveqH_1DZU{-$Z{937pi%LGwC_g%jNKqp<<*fR zTZ3z|F;z>AtOMJuQdPfVZE7h-_{K%*!lH4Q%)tk?iNb9g`wMQt*@zG(bvZ%Bw4}D` zd1rD(DE-Kf-#(oYPM-+SS6j_1Cn!3?hHj-<(t%&ZuZ#!TE)~yb>3^7xj!yE<<~lws zL0H*0&vnI*61JXig?-*K_NSZhHN4X5h|2Ob#HXNE1z@ZDnSP_drtrG<1{%iWU)rAC zH5G(cJ|Qhc8btK)-tnOb0&R=#zs?0S7o=|NQ%C$)IwS`8nFVy)-#?l>nex5jW=Y;l z1Lge{1?!EOT+b|$(@?He!;E)ttNVD z=lRt!-6dx;*>morZLdw+utqI06qC4<7vXx~LI59U zm%CSpZ#HxAu0GSV!gril$0sD%r#{kl-__+08yxwri6l+ri@n~k01>?Eq6;k~n3K#* z?z2wBCfR+kw#QVs&ql6`Qu!r%>X_e#$PcMMkO*b7$f@CzI-D8YAM~|hS#&J6bVFbW zax+lBT>L$*=kZ&Q?G90;c)!mPm9 zL+lPMV=}%56pCM6QQ0XToEwiNrz_i`X)XsAJzn!HtRG>iX+h|f?wj&_3tS0!7@7rc zcL+vzR4?>QQ-(r^eYGWSNQ8JtOcAxDdYjEOc(kK*dD72Gi*>-W0ri$PTTD!b8u zS`W0VhwlPe(QjTR`0ewg$`_?N^ymE#ODi&pO--!$r7~1XYqd0wWD>0A8}zaguV!LclGSQ3H2}3~ z){1NgtLh=_S+1s$ro{$PCrr17H=3=3JejjbEOTF}9yQW+f*MuMVA`x{RnalAp}&0FiG8SPE9D)XJD*0wYH#H=E%ngm zKKtUtW4W1a)p#Y7lfD(qcMT9eHl|hc-qb_BPY1u5DnB)r4>eN{mmuw86u{2Rr#&J` zu~%tIXy6O<-EhEgz|^bvk8r!JkMSY%&I5s95fU4VnX8^#Cw#}6vujR_I$Bo_-&ACp z+WmUlXfs++;=_yMO)GvPc9nYiL(D-vt*p2FnnyxR5(=ve4D3%R9G=6;Q%4o9{+rqBQMZi!r!X--gz%%iFYN+8>Tj7rJYfhWD|n|3nF8ts`@Ks(XQ{ z91oIVrb3v$o#bo!nlDtDej}`tX@Fsh8_R}DnE^fDvK-t@Od51*8Z^pgf2LFhV$)^j zyb)!VZEaG>DfNdy8&g!&c%cfM5N=_}`+MdJQ92@MqrY6)j@Q!GliS;hWV4k^)(N=M zMUXm7mV~nYpasrbr7#ZN;IThmBwA@iIvK^lRG^awEKX8sYoOA^ugA9qx)|IL#U+y( z8LBS-nKR$HB3Z3Oka4q>RB1H<#GWgTDtHV+n=?WEV&}tlL03$QboDXhRRt0$gL}hK zzy_0frgc)7gb~%C5+n6R?7kd3ZHEgSlnwT|f|PkuD10Fbb$~EgA^sj#1m|v1VzL3W z)`6zJ`mO%Z2^aorCgdONik}m7ewuvi()OK>V31AOD?nAy7^ho%{l0Cz=fW;pSfmiH zJ~sB67_ZqX9S16DQ zbCMaF>8xYolvlEA#U3R&VT)`=#+*Ns+?+;6*T*kJZF`f5O3%y8q)q*E(dTO2Alj!nf~Q@wdVYPO$O?AC z7H*2rPFqC^CC%golr(Yb{zF4X!X$?*wCR^<*Ob9jox1lE7CmkLLkiVbGBB2V*Z1-ojt|rac zSl+aKTmJIozRA%m1KXpQ?%^d6r^1tzY`L6lGdc7L?HO{R0rXQWnl{_@eAzcJSZ7WtX-k$Lo^@E<T0cCz*aO=1lEXEpEevin6ib?Br zC$Bs6eU#~fCRBC03p{j6z$6+Ka}<X{NM2!)`PT6nv zm3^dXOf}N4d;E2&9uy6QIiUaHI&(e0-}=n`f1D;idx5sQw8F~GWQ5 ef;!Z&&sldJ*1~)fGpCq4*xg6xKUOB diff --git a/docs/build-insights/tutorials/media/include-tree-view-expanded.png b/docs/build-insights/tutorials/media/include-tree-view-expanded.png index faf85ed935026280a0771b3beb1c4159820eaceb..d011bb41eef8958a3c83dc150207952a5c90f840 100644 GIT binary patch literal 42426 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 uOs%V9xUkARZj^JfqMLR>$p%Kvf@euhN= literal 36677 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 literal 35170 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 R{#S)X|CaI1VqN=}{{tu8aOVI3 diff --git a/docs/build-insights/tutorials/media/precompiled-header-settings.png b/docs/build-insights/tutorials/media/precompiled-header-settings.png index 0fe4060a8cc454eb04c5eaa39f1623de57817eff..4198430bce4d8e57a3a831b0926e1cf0b4f864ee 100644 GIT binary patch literal 25727 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 literal 23629 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 Date: Wed, 1 May 2024 15:17:17 -0700 Subject: [PATCH 0171/1239] draft cleanup --- docs/build-insights/toc.yml | 4 +- .../tutorials/build-insights-function-view.md | 8 +-- .../build-insights-included-files-view.md | 60 ++++++++++--------- 3 files changed, 38 insertions(+), 34 deletions(-) diff --git a/docs/build-insights/toc.yml b/docs/build-insights/toc.yml index 5afd5982cd..9845654422 100644 --- a/docs/build-insights/toc.yml +++ b/docs/build-insights/toc.yml @@ -6,9 +6,9 @@ items: - name: "Tutorials" expanded: true items: - - name: "Build Insights: Functions view" + - name: "Tutorial: Troubleshoot function inlining on build time" href: ../build-insights/tutorials/build-insights-function-view.md - - name: "Build Insights: Included Files view" + - name: "Tutorial: Troubleshoot header file impact on build time" href: ../build-insights/tutorials/build-insights-included-files-view.md - name: "vcperf and Windows Performance Analyzer" href: ../build-insights/tutorials/vcperf-and-wpa.md diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 3fdb88daaa..d15555335c 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -1,10 +1,10 @@ --- -title: "Tutorial: Troubleshoot build time with Build Insights functions view" +title: "# Tutorial: Troubleshoot function inlining on build time" description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of function inlining on build time in your C++ projects." ms.date: 5/1/2024 helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] --- -# Tutorial: Troubleshoot build time with Build Insights functions view +# Tutorial: Troubleshoot function inlining on build time Use Build Insights **Functions** view to troubleshoot the impact of function inlining on build time in your C++ projects. @@ -23,7 +23,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, designed to help you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). +Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. @@ -87,4 +87,4 @@ We can see that the `foo` function is taking the most time to compile. Investiga ## See also [Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ -[Tutorial: Use Build Insights to troubleshoot #include build time](build-insights-included-files-view.md) \ No newline at end of file +[Troubleshoot header file impact on build time](build-insights-included-files-view.md) \ No newline at end of file diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 3e2f2127d5..555de3d43c 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -1,10 +1,10 @@ --- -title: "Tutorial: Troubleshoot build time with Build Insights Includes views" +title: "Tutorial: Troubleshoot header file impact on build time" description: "Tutorial on how to use Build Insights Includes Files and Includes Tree views to troubleshoot the impact of #include files on build time." ms.date: 5/1/2024 helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree view", "#include analysis", "build time analysis"] --- -# Tutorial: Troubleshoot build time with Build Insights Includes views +# Tutorial: Troubleshoot header file impact on build time Use Build Insights **Included Files** and **Include Tree** views to troubleshoot the impact of `#include` files on C and C++ build times. @@ -25,11 +25,11 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, is designed to help you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and particularly when it is repeatedly parsed, there's an impact on build time. +Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and particularly when it is repeatedly parsed, there's an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of parsing `#include` files in your project. It displays the time it takes to parse each header file and a view of the relationships between header files. -In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to the most expensive header files to parse and how to optimize build time by creating a precompiled header file. +In this article, learn how to use the Build Insights **Included Files** and **Include Tree** views to identify the most expensive header files to parse and how to optimize build time by creating a precompiled header file. ## Set build options @@ -44,7 +44,7 @@ Before gathering Build Insights data, set the build options for the type of buil ## Run Build Insights -This articles examines a solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We use Build Insights to investigate by selecting the slow building project in the **Solution Explorer** and then run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +This articles uses a hypothetical solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We use Build Insights to investigate by selecting the slow building project in the **Solution Explorer** and then run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: @@ -52,7 +52,7 @@ When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the ## Included Files View -The trace file shows the build time--which for this example was 16.404 seconds. The **Diagnostics Session** is the overall time to run the Build Insights session. Choose the **Included Files** tab. +The trace file shows the build time--which for this example was 16.404 seconds. The **Diagnostics Session** is the overall time taken to run the Build Insights session. Choose the **Included Files** tab. This view shows the time spent processing `#include` files. @@ -60,11 +60,11 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time." :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time spent parsing the header file. The **Parse Count** column shows how many time the header file was parsed. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time spent parsing the header file and what percentage of the overall time it took. The **Parse Count** column shows how many time the header file was parsed. The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. -To see which file includes `winrtHeaders.h`, click the chevron next to it. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file. +To see which file includes `winrtHeaders.h`, click the chevron next to it. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file or refactoring. The **Translation Unit** column shows which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included while `Grapher.cpp` was compiled: @@ -72,7 +72,7 @@ The **Translation Unit** column shows which file was being processed when the in An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. Its child node is Grapher.cpp, which is also listed as the translation unit." :::image-end::: -We know that `winrtHeaders.h` is expensive to parse, but we can find out more. We can use the **Include Tree** view to see which files `winrtHeaders.h` includes. Choose the **Include Tree** tab to see this view. +We know that `winrtHeaders.h` is expensive to parse, but we can learn more. ## Include Tree view @@ -86,19 +86,21 @@ Shows the include tree for a project. In the file path column, each file that in In this view, the **File Path** column shows each file that includes other files. The **Include Count** lists how many files this header file includes. The time to parse this file is listed, and when expanded, lists the time to parse each individual header file that this header file includes. -Earlier, we saw that parsing `winrtHeaders.h` is time consuming. In the **Filter Files** text box, if we enter `winrtHeaders` we can filter the view to only the entries that contain `winrtHeaders` in the name. Clicking the chevron next to `winrtHeaders` shows which files it includes: +Earlier, we saw that parsing `winrtHeaders.h` is time consuming. In the **Filter Files** text box, if we enter `winrtHeaders.h`, we can filter the view to only the entries that contain `winrtHeaders.h` in the name. Clicking the chevron next to `winrtHeaders.h` shows which files it includes: :::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the expanded Include Tree view"::: The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show `Windows.UI.Xaml.Interop.h` that is expanded to show the header files it includes. :::image-end::: -We see that `winrtHeaders` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also time consuming to parse. Click the chevron next to `Windows.UI.Xaml.Interop.h` to see that it includes `Windows.UI.Xaml.h`, which includes 21 other header files, two of which are also on the hot list. Having identified some of the most expensive header files to parse, and seeing that `winrtHeaders` is responsible for bringing them all in, the technique we'll turn to is precompiled headers to make including `winrtHeaders` faster. +We see that `winrtHeaders.h` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also time consuming to parse. Click the chevron next to `Windows.UI.Xaml.Interop.h` to see that it includes `Windows.UI.Xaml.h`, which includes 21 other header files, two of which are also on the hot list. + +Having identified some of the most expensive header files to parse, and seeing that `winrtHeaders.h` is responsible for bringing them in, suggests that we can use a precompiled header to make including `winrtHeaders.h` faster. ## Improve build time with precompiled headers -Because we know from the **Included Files** view that `winrtHeaders` is time consuming to parse, and because we know from the **Include Tree** view that `winrtHeaders` includes several other header files that are time consuming to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. +Because we know from the **Included Files** view that `winrtHeaders.h` is time consuming to parse, and because we know from the **Include Tree** view that `winrtHeaders.h` includes several other header files that are time consuming to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. -We add a `pch.h` to include these headers, which would look like this: +We add a `pch.h` to include `winrtHeaders.h`, which would look like this: ```cpp #ifndef CALC_PCH @@ -109,44 +111,46 @@ We add a `pch.h` to include these headers, which would look like this: #endif // CALC_PCH ``` -PCH files must be compiled before they can be used. So we add a file to the project, arbitrarily named `pch.cpp`, that includes `pch.h`. It looks like this: +PCH files must be compiled before they can be used, so we add a file to the project, arbitrarily named `pch.cpp`, that includes `pch.h`. It contains one line: ```cpp #include "pch.h" ``` -Then we set our project to use the PCH. That's done in the project properties via **C/C++** > **Precompiled Headers** and setting **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. +Then we set our project to use the PCH. That's done in project properties via **C/C++** > **Precompiled Headers** and setting **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. :::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: Precompiled Header is set to: Use (/Yu). The Precompiled Header File is set to pch.h. :::image-end::: -To use the PCH, we include it as the first line in the source files that use `winrtHeaders`. It must come before any other include files. Or, for simplicity, we could modify the project properties to include `pch.h` at the beginning of every file in the solution by setting the project property: **C/C++** > **Advanced** > **Forced Include File** to `pch.h`: +To use the PCH, we include it as the first line in the source files that use `winrtHeaders.h`. It must come before any other include files. Or, for simplicity, we could modify the project properties to include `pch.h` at the beginning of every file in the solution by setting the project property: **C/C++** > **Advanced** > **Forced Include File** to `pch.h`: :::image type="complex" source="./media/precompiled-header-settings-force-include.png" alt-text="Screenshot of the project properties dialog with the Advanced settings open"::: Forced Include File is set to pch.h. :::image-end::: -Since the PCH includes `winrtHeaders`, we could remove `winrtHeaders` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders` is already included and not parse it again. Some developers prefer to keep the #includes in the source file for clarity, or in case the PCH changes to no longer include that header file. +Since the PCH includes `winrtHeaders.h`, we could remove `winrtHeaders.h` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders.h` is already included and not parse it again. Some developers prefer to keep the `#include` in the source file for clarity, or in case the PCH is refactored and no longer includes that header file. ## Test the changes -We first clean the project to make sure we're comparing the same build motion as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** > **Clean only \**. +We first clean the project to make sure we're comparing building the same files as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** > **Clean only \**. Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. -Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. When the ETL files appears, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in via the precompiled header. +Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. We don't want **Rebuild** this time because that will rebuild the PCH, which we don't want to measure. We cleaned the project earlier which means that a normal build will compile all the project files we want to measure. + +When the ETL files appears, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders.h` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in via the precompiled header. :::image type="content" source="./media/included-files-after-fix.png" alt-text="Screenshot of the Include Tree pane in the trace file. winrtHeaders is no longer listed."::: -This example uses precompiled headers because they're a common solution before C++ 20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. For more information, see [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md). +This example uses precompiled headers because they're a common solution before C++20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. For more information, see [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md). ## Navigate between views -Some navigation tips for the **Included Files** and **Include Tree** views: +There are some navigation features for both the **Included Files** and **Include Tree** views: -- Double-click a file (or press **Enter**) in either the **Included Files** or **Include Tree** view the source code for that file. -- Right click on a header file to find that file to go to other view. For example, in the **Included File**s view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see it in that view. +- Double-click a file (or press **Enter**) in either the **Included Files** or **Include Tree** to open the source code for that file. +- Right-click on a header file to find that file in the other view. For example, in the **Included File**s view, right-click on `winrtHeaders.h` and choose **Find in Include Tree** to see it in the **Include Tree** view. :::image type="content" source="./media/included-files-show-in-include-tree.png" alt-text="Screenshot of a right-click on a file in the Included Files view. The menu option Show in Include Tree View is highlighted."::: @@ -154,22 +158,22 @@ Conversely, you can right-click a file in the **Include Tree** view to jump to i ## Tips -- You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can compare it to future builds to see if your changes are improving build time. -- To dig into the data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. +- You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. +- To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. - **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. - Sometimes the parse time reported for a header file differs depending on which file includes it. This can be due to the interplay of different `#define`s that affect which parts of the header are expanded, file caching, and other system factors. -- If you forget what the **Included Files** or **Include Tree** views shows, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." - If you closed the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. +- If you forget what the **Included Files** or **Include Tree** view is trying to show you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds. +- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds which may be the case if no files have changed since the last build. - If a header file you're interested in doesn't appear in the **Included Files** or **Include Tree** views, it either didn't build or its build time isn't significant enough to be listed. ## See also [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ [Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ -[Tutorial: Troubleshoot build time with Build Insights functions view](build-insights-function-view.md)\ +[Tutorial: Troubleshoot function inlining on build time](build-insights-function-view.md)\ [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md) \ No newline at end of file From 9aae4576faaa230388a4d047aeda0c83bcc3c484 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 May 2024 15:27:44 -0700 Subject: [PATCH 0172/1239] draft cleanup --- .../tutorials/build-insights-included-files-view.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 555de3d43c..6af28b4131 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -72,6 +72,8 @@ The **Translation Unit** column shows which file was being processed when the in An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. Its child node is Grapher.cpp, which is also listed as the translation unit." :::image-end::: +The translation unit column can help disambiguate which file was being compiled in cases where a header file is included many times and you want to find out where that happens the most. + We know that `winrtHeaders.h` is expensive to parse, but we can learn more. ## Include Tree view @@ -160,11 +162,12 @@ Conversely, you can right-click a file in the **Include Tree** view to jump to i - You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. - To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. -- Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. +- Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. - **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. - Sometimes the parse time reported for a header file differs depending on which file includes it. This can be due to the interplay of different `#define`s that affect which parts of the header are expanded, file caching, and other system factors. - If you closed the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. - If you forget what the **Included Files** or **Include Tree** view is trying to show you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." +- You may see cases (like `Windows.h`) where the aggregated duration of all the times for a header file is longer than the duration of the entire build. What’s happening is that headers are parsed on many threads at the same time, adding seconds to the aggregated duration beyond what’s physically possible. ## Troubleshooting From f36f340b5ff9bd2310468cc1f744490c705940b7 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 May 2024 18:13:53 -0700 Subject: [PATCH 0173/1239] draft work on function view --- .../tutorials/build-insights-function-view.md | 31 +++++++++++------- .../build-insights-included-files-view.md | 6 ++-- ...ld-options.png => build-options-debug.png} | Bin .../tutorials/media/build-options-release.png | Bin 0 -> 6245 bytes .../media/functions-view-before-fix.png | Bin 0 -> 22279 bytes .../media/max-optimization-setting.png | Bin 0 -> 14685 bytes 6 files changed, 22 insertions(+), 15 deletions(-) rename docs/build-insights/tutorials/media/{build-options.png => build-options-debug.png} (100%) create mode 100644 docs/build-insights/tutorials/media/build-options-release.png create mode 100644 docs/build-insights/tutorials/media/functions-view-before-fix.png create mode 100644 docs/build-insights/tutorials/media/max-optimization-setting.png diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index d15555335c..e3f33ecd80 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -25,18 +25,20 @@ The list of installed components is shown. C++ Build Insights is highlighted and Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). -The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code is a significant contributor to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large and complex enough to put pressure on the optimizer and noticeably slow down your builds. +The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. -In this article, learn how to use the Build Insights **Functions** view to identify bottlenecks in your build process and improve build time and function inlining. +For optimized builds, the time spent generating code contributes significantly to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large enough and complex enough to put pressure on the optimizer and noticeably slow down your builds. + +In this article, learn how to use the Build Insights **Functions** view to inlining bottlenecks in your build. ## Set build options -To measure the results of `__forceinline`, use a **Release** build where optimizations for `__forceinline` impact release build times the most. Set the build for **Release** and **x64**: +To measure the results of `__forceinline`, use a **Release** build because optimizations for `__forceinline` impact release build times the most. Set the build for **Release** and **x64**: - In the **Solution Configurations** dropdown, choose **Release**. - In the **Solution Platforms** dropdown, choose **x64**. -:::image type="content" source="./media/" alt-text="Screenshot showing the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64"::: +:::image type="content" source="./media/build-options-release.png" alt-text="Screenshot showing the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64"::: Set the optimization level to maximum optimizations: @@ -44,17 +46,19 @@ Set the optimization level to maximum optimizations: - In the project properties, navigate to **C/C++** > **Optimization**. - Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) (/O2)**. -:::image type="content" source="./media/" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: +:::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: - Click **OK** to close the dialog. -## Run build insights +## Run Build Insights + +On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. -On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing **Build** > **Run Build Insights on Solution** > **Build**. You can run Build Insights on a specific project in a multi-project solution by right-clicking the project in Solution Explorer and selecting **Run Build Insights**. +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. -When the build finishes, an Event Trace Log (ETL) file opens similar to the example that follows. It's saved in the `%temp%` folder on your machine. The generated name is based on the time of collection. This file shows the time spent processing `#include` files, the build time for each function, and how much `__forceinline` impacted the size of the function. +This file shows the time spent processing `#include` files, the build time for each function, and how `__forceinline` impacted the size of each function. -:::image type="complex" source="./media/" alt-text="alt text stuff"::: +:::image type="complex" source="./media/build-" alt-text="alt text stuff"::: big ole’ long description :::image-end::: @@ -62,11 +66,14 @@ big ole’ long description In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. -:::image type="complex" source="./media/" alt-text="alt text stuff"::: -Just show the functions tab portion of the dialog with the Forceinline size column, Time column +:::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Functions view."::: +In the Function Name column, performPhysicsCalcuations() is highlighted and marked with a fire icon.::: :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. These numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. +, indicating that the cost of generating that function is high and is worth investigating. The Time column shows how long it took to compile each function. The Forceinline Size column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. + + +The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows how roughly how many intermediate instructions were generated for the function. If you click the chevron before the function nameThese numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. The `Project` column indicates which project the function belongs to. Double click the **File** column to go to the source file where the function is defined. diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 6af28b4131..730e05e6bc 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -38,13 +38,13 @@ Before gathering Build Insights data, set the build options for the type of buil - In the **Solution Configurations** dropdown, choose **Debug**. - In the **Solution Platforms** dropdown, choose **x64**. - :::image type="complex" source="./media/build-options.png" alt-text="Screenshot showing the Solution Configuration dropdowns."::: + :::image type="complex" source="./media/build-options-debug.png" alt-text="Screenshot showing the Solution Configuration dropdowns."::: The Solution Configuration dropdown is shown. It has options for Debug, Release, and Configuration manager. The Solution Platform dropdown is set to x64 :::image-end::: ## Run Build Insights -This articles uses a hypothetical solution consisting of several projects for a calculator project. One of the projects takes suspiciously long to build. We use Build Insights to investigate by selecting the slow building project in the **Solution Explorer** and then run Build Insights from the Visual Studio main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +On a project of your choosing, and using the **Debug** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: @@ -57,7 +57,7 @@ The trace file shows the build time--which for this example was 16.404 seconds. This view shows the time spent processing `#include` files. :::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: -In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time." +In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. :::image-end::: In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time spent parsing the header file and what percentage of the overall time it took. The **Parse Count** column shows how many time the header file was parsed. diff --git a/docs/build-insights/tutorials/media/build-options.png b/docs/build-insights/tutorials/media/build-options-debug.png similarity index 100% rename from docs/build-insights/tutorials/media/build-options.png rename to docs/build-insights/tutorials/media/build-options-debug.png diff --git a/docs/build-insights/tutorials/media/build-options-release.png b/docs/build-insights/tutorials/media/build-options-release.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe4589daf8214886fa0b1b936043d41d4518ce0 GIT binary patch literal 6245 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 literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/functions-view-before-fix.png b/docs/build-insights/tutorials/media/functions-view-before-fix.png new file mode 100644 index 0000000000000000000000000000000000000000..109d81e391db265cda39625d47f379d8c0af8ad5 GIT binary patch literal 22279 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 MbzQYG6`Sz?0jYjZr2qf` literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/max-optimization-setting.png b/docs/build-insights/tutorials/media/max-optimization-setting.png new file mode 100644 index 0000000000000000000000000000000000000000..78510f0af38d1c038cb1c500924b69217db4eb3c GIT binary patch literal 14685 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 literal 0 HcmV?d00001 From 7aaa116afddd7ac978c6dc46fab0c7157e3fac12 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 2 May 2024 12:16:00 -0700 Subject: [PATCH 0174/1239] Update compiler-warning-level-2-c4150.md --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index a8adf8d148..2f39b2d5bd 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -23,7 +23,7 @@ void NoDestruct( IncClass* pIncClass ) } ``` -To fix the issue, put the definition of `IncClass` in the same translation unit or file as the `delete`. If the class is declared in a header file, it can be included in the translation unit. If the class isn't declared in a header file, the `NoDestruct` definition may need to be moved into the same file as the `IncClass` definition. +To fix the issue, put the definition of `IncClass` in the same file as the `delete`. If the class is declared in a header file, it can be added to the file using `#include`. If the class isn't declared in a header file, the `NoDestruct` function definition may need to be moved into the same file as the `IncClass` definition. ```cpp // compile with: /W2 @@ -35,7 +35,7 @@ void NoDestruct( IncClass* pIncClass ) } ``` -C4150 can also occur when the class is defined after the destructor call in the same translation unit. In the following example `IncClass` is declared before being used, but not defined until after: +C4150 will be emitted when the class is defined after the destructor call in the same file. In the following example `IncClass` is declared before being used, but defined after the `delete`: ```cpp // C4150.cpp From 2b294e3bc7410f50155a682c29136e3f2c81f8ed Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 3 May 2024 15:50:18 -0700 Subject: [PATCH 0175/1239] draft --- .../tutorials/build-insights-function-view.md | 70 ++++++++++++++---- .../build-insights-included-files-view.md | 6 +- .../media/functions-view-after-fix.png | Bin 0 -> 3729 bytes .../media/functions-view-expanded.png | Bin 0 -> 171181 bytes .../media/functions-view-goto-file.png | Bin 0 -> 12476 bytes 5 files changed, 60 insertions(+), 16 deletions(-) create mode 100644 docs/build-insights/tutorials/media/functions-view-after-fix.png create mode 100644 docs/build-insights/tutorials/media/functions-view-expanded.png create mode 100644 docs/build-insights/tutorials/media/functions-view-goto-file.png diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index e3f33ecd80..b858c35551 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -25,9 +25,9 @@ The list of installed components is shown. C++ Build Insights is highlighted and Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). -The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but it can increase the size of the binary and impact your build times. +The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but the tradeoff is that it can increase the size of the binary and impact your build times. -For optimized builds, the time spent generating code contributes significantly to the total build time. In general, C++ function optimization happens quickly. But in exceptional cases, some functions can become large enough and complex enough to put pressure on the optimizer and noticeably slow down your builds. +For optimized builds, the time spent generating code contributes significantly to the total build time. In general, C++ function optimization happens quickly. In exceptional cases, some functions can become large enough and complex enough to put pressure on the optimizer and noticeably slow down your builds. In this article, learn how to use the Build Insights **Functions** view to inlining bottlenecks in your build. @@ -66,30 +66,74 @@ big ole’ long description In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. -:::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Functions view."::: -In the Function Name column, performPhysicsCalcuations() is highlighted and marked with a fire icon.::: +:::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Build Insights Functions view file."::: +In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -, indicating that the cost of generating that function is high and is worth investigating. The Time column shows how long it took to compile each function. The Forceinline Size column shows the impact of each `__forceinline` function in terms of roughly how many intermediate instructions were generated for the inlined function. +The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. +You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. Excessive use of `__forceinline` functions can significantly slow compilation. -The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows how roughly how many intermediate instructions were generated for the function. If you click the chevron before the function nameThese numbers are summed, and the impact for all the inlined functions is listed for the containing function. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. +You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. -The `Project` column indicates which project the function belongs to. Double click the **File** column to go to the source file where the function is defined. +## Improve build time by adjusting function inlining -Select the chevron next to a function to expand the function and see the list of inline functions that were expanded inside it. The functions that were inlined inside this function are listed and their individual size is shown in terms of generated instructions. Higher is worse. Highlighting `__forceinline` information is important because excessive use of `__forceinline` functions can significantly slow compilation. +In this example, the `performPhysicsCalculations` function is taking the most time to compile. -You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. +:::image type="complex" source="./media/functions-view-performPhysicsCalculationsUnexpanded.png" alt-text="Screenshot of the Build Insights Functions view."::: +In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: +:::image-end::: + + Investigating further, by selecting the chevron before that function, and then sorting the **Forceinline Size** column from highest to lowest, we see the biggest contributors to the problem. + +There are some larger inlined functions, such as `Vector2D::complexOperation()` and `Vector2D::recursiveHelper()` that are contributing to the problem. But there are many instances (not all shown here) of `Vector2d::sin(float)`, `Vector2d::cos(float)`, `Vector2D::power(float,int)`, and `Vector2D::factorial(int)`. When you add those up, they quickly dwarf the few larger generated functions. + +Looking at those functions in the source code, we see that execution time is going to be spent inside loops. For example, here's the code for `factorial()`: + +```cpp +static __forceinline T factorial(int n) +{ + T result = 1; + for (int i = 1; i <= n; ++i) { + for (int j = 0; j < i; ++j) { + result *= (i - j) / (T)(j + 1); + } + } + return result; +} +``` + +Perhaps the cost of calling this function is insignicant compared to the cost of the function itself. We can try removing the `__forceinline` directive from it to see if it helps. The code for `power`, `sin()` and `cos()` is similar in that the code is inside a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. + +We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. + +The build time goes from 25.181 seconds to 13.376 seconds and the `performPhysicsCalculations` function doesn't even show up any longer in the **Functions** view because it doesn't contribute enough to the build time to be counted. + +:::image type="complex" source="./media/functions-view-after-fix.png" alt-text="Screenshot of the 2D vector header file."::: +In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: +:::image-end::: + +The next step would be to profile the application to see if the performance of the application has been impacted by the change. If it has, we can selectively add `__forceinline` back to the functions we see after profiling could benefit from it. + +## Navigate to the source code + +- Double-click, right-click, or press **Enter** while on a file in the **Functions** view to open the source code for that file. + +:::image type="content" source="./media/functions-view-goto-file.png" alt-text="Screenshot of a right-click on a file in the Functions view. The menu option Go To Source File is highlighted."::: -## Improve build time and function inlining +## Tips -We can see that the `foo` function is taking the most time to compile. Investigating further, by opening the function, we see that the `foo2` function is marked with `__forceinline`. This function is inlined into many other functions, which is causing the build time to increase. We can remove the `__forceinline` directive from the `foo` function to reduce the build time. +- You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. +- If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. +- To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. +- Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. +- The **Functions** view provides a filter box to find a function that you're interested in. It does partial matches on the name you provide. +- If you forget what the **Functions** view is trying to show you, hover over the tab to see a tooltip that describes the view. If you hover over the **Functions** tab, the tooltip says: "View that shows statistics for functions where the children nodes are force-inlined functions." ## Troubleshooting +- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds; which may be the case if no files have changed since the last build. - If the Functions view doesn't show any functions, you may not be building with the right optimization settings. Ensure that you're building Release with full optimizations, as described in [Set build options](#set-build-options). Also, if a function's code generation time is too small, it doesn't appear in the list. -- If the Build Insights window doesn't appear, do a rebuild instead of a build: **Build** > **Run Build Insights on Solution** > **Rebuild**. -- If you closed the Build Insights window, reopen it by finding the `.etl` file in your `%temp%` folder, where `%temp%` is a Windows environment variable that contains the path to your temporary files folder. ## See also diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 730e05e6bc..5e25424784 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -161,17 +161,17 @@ Conversely, you can right-click a file in the **Include Tree** view to jump to i ## Tips - You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. +- If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. - To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. - **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. - Sometimes the parse time reported for a header file differs depending on which file includes it. This can be due to the interplay of different `#define`s that affect which parts of the header are expanded, file caching, and other system factors. -- If you closed the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. -- If you forget what the **Included Files** or **Include Tree** view is trying to show you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says, "View that shows include statistics for every file where the children nodes are the files included by the parent node." +- If you forget what the **Included Files** or **Include Tree** view is trying to show you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says: "View that shows include statistics for every file where the children nodes are the files included by the parent node." - You may see cases (like `Windows.h`) where the aggregated duration of all the times for a header file is longer than the duration of the entire build. What’s happening is that headers are parsed on many threads at the same time, adding seconds to the aggregated duration beyond what’s physically possible. ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds which may be the case if no files have changed since the last build. +- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds; which may be the case if no files have changed since the last build. - If a header file you're interested in doesn't appear in the **Included Files** or **Include Tree** views, it either didn't build or its build time isn't significant enough to be listed. ## See also diff --git a/docs/build-insights/tutorials/media/functions-view-after-fix.png b/docs/build-insights/tutorials/media/functions-view-after-fix.png new file mode 100644 index 0000000000000000000000000000000000000000..254223a34c4634920c0c9129ba492a1297779bdf GIT binary patch literal 3729 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 Pp}&;m)Ss5gya@VVlR8a8 literal 0 HcmV?d00001 diff --git a/docs/build-insights/tutorials/media/functions-view-goto-file.png b/docs/build-insights/tutorials/media/functions-view-goto-file.png new file mode 100644 index 0000000000000000000000000000000000000000..378c33578199b0a2a0d78e862feee954d438e078 GIT binary patch literal 12476 zcmcJW1yEbv`{#oPEdg4fP@thW1gE$)6fKkruEmNwEfSm(ikD(Vf=ek-EV!29#VIaD z3IumZkPYwqoB7ZDcXwuYXErnB=G=SEJ@+1Yp3n0=hluBz%H$;XNdN!sN0^dgAnF0V%5leb$PJm4lyQt{9W3&Fa{ln>Y zF0upw1hiG53a{Rq>|{7b8BKaGmNxL)MvCBkYEv59bqMiO4a8L##oejRc{`l*cBCT_ z-thdm!}yZ|RYNpye-O!pwIR}~`pM~&5%4F*s#oB*;etWKxQg2MtdwT*X&64S8CF8$ zse1KzW<+d1%uNvS{N6lDpIlG(9n46TdRO=E-8J52oA1z;d#3N6_qF?=@t|_c>8K&< z<2$wv33Mr3aKT-1(hiU#I_G0vY;@IR0-PvDDn~{Lb zX`Nkp+nH{c_c*5>Cd83``#_Dl&bx_~J60<&>i63@Lan&heqFpUV0R{2^?Q?L|2wj~ zb#L6KfDr(gleT^ZC9^Ln&RFTVa=05HGvyIu~W;Uxn^XIEo1JTTDBZvBjM0 zK<)qlU*(~ewsz}vE^?HhPex{<^3dCMXz0QRcMyJN#atfRH8ov*kgR+HY5pkb1OD8d z>fYSEG$Zq3AT2?mt}KRQ=W((LlI=K|VG(^b+V-U!;LAtj4 zj*J;bvsT_jyY1kxZ`Gd9^F7c}Hw;M=JlfCq@SGVTT$Z-xmt*&=8Z1WiO{>8Ccbs z7hacir6fss^Mw}oh(THW`CXKDt3MU*@Awoq|H@;}(d+Qz?iEi9XR_M)*8wv}aJ#f@ zhvE#^8RoqVAazs%3vPyw350lxU$rQr2<&7=+1PX$TZ&+%3$#KDJ^Ly&^w&$<{oId`PQDZtKFI zU#QR;S4a>@P4nph<+pha>WngOrdv}QzI}$hKDAJFS};o^3FxxL#8x?T)`A0EM^42k z730^RL;wg(;o}AiIZjT*uRT>`&X$Y3&|z*_izPZ6(+;pM-Yg#<)Z1}>2{P~ZKgl*c zX&znh`Vh3IaIb3DG-LO&>}S{`N9-+ERx^N3wS{}G4mJS5n*vtwQv?5Zn0m3jaoI0s zKP}mD-90aw$GwU*4V?6Re2iL`DW5G^v^&0=KuA~y98P5@Fo=JVcY<`#H>A8M^ zfxnPqtzCpdDGkJ@kb40v#Awf;jG+)?O~!pxu&w=6Wa5t*!h|{o z7l7ygY;A5&-~ZnmqyOdQC(urM&vU1*?*+dwmRhhrRvimu*V zVi0|awq3nf?x>g_HkIB9Ak$hk=JLzTh9A*f^_i@RBi`?df0T!c>};7kdXco05smjc zm^|1N7BpZuG+A94^(^l{lJ?A+y6L?-Eo>4!5dGL=^h8)p7jf7EIRciA_2<2db7pKY zocBI|cH+c-2QbXU3Wpnge=BscfdBrJy=Y)+ASe_sgL${W>?4aDW0F|E;Kq{RD*A4J z3i9u+Y}P5q+0Wj>VABGQm>Ekd5U30Cv%N@z8?4E6?@XMOBw(l;xyEJsWVcb-Vk9Ve zW=FfR94+|>BIMaX0>uYB4zEzc7w&`Ba#cgXUkJZAwJXd=0KJXgyia}D{t?emS+@{( z2M%XHo67@(!6<|ygQv!XeNPD;27%6$;kY?2Dy@l=J8pOfgaZLi6w%Po^t#o&?(PdK z9jEU6m%iao;sj3+#1|u>yjvi!fD+8L;rf)Z&y7-p!;&HfvY6MsvyNL>_L79kO<&?m z&zRWJ6|`N_qII*IP--N3h=EJbeR22x;Q`KJz`n7lS+qd`qedV2(O&rb?R<>2qABPw zvp%Hd7ZIra#K`wYu%-0r+i#mEl1;LhC=jz7OAdpZH(G(YZn;!b zL%OZZ3a-oC3%KC|k^&6!UV|RSZ%R^PA_fTw1?xXV%&w-YPBZo+>mRr~g@ipj12&!; z&17K?#Po8A>!K>OV}evr=oUA}d*}lk6(Xfg8zzKQZBYBfI&zLq`MVs`yHTC-Sc}g> z^_Y&|td>hLJ=1AM!usq+dwG5@O(T4}j9$9$mS_Ab>0W5{`lcXFwRzrIzs<^6cve@j zm~n>|RBz9EbZ+n&wO*FJITqbdBw{;|1n;`tCIi7KkObQc-S7tY>PqAB^li@ z>8&xosJYJUz6}krO&e@&TldqLlrYf70aPowgW^*e=R4Op^o-fZo|?Nw4;AxCCGeIfB584%IFbQm$GZ4(c{yQ zTJvv01OWzl2(X*~l5hLPPP=3W`z z{)rsN!E@#3i#k5!zpj>*h+^#rcF3xNDRpS*knQE%;(CwbuBH=XGHem6toGsh5#rRu zWbT?)UZ0qA{pY<1YgN6JO6~yyk#8S?#Z~HhxxP?Z?H^DVrF?r3)+;JouKC^PO@gf$ z=S756Z>%GaR-KVkH4D{@>W*e_O=`h2E$C-+a_@ z@%>Sa8K8_p3$D5KYjNSH`eiD;HpC~6Y%4ueFN}%lz2@l;d7OEk8#aB?u6&5ly!GLh zm<$JB9q5z@v z5KHi9M|IyyOAc#0!-8Hxw~I%>*F7~{qf_h;raT%)hosrxLAutDLdoj|wS6YE2u~x* z6JojxX#3xfVwUMWU*K;P`4dl?T5ZRmP9`;$OI8a zm%j8V*7OwSk-X?cF+ zJwWvPK#?*M#6-Rld`>(}k(%pmZ-&%^180F&%fupsRbHzzyvHj_(EKPy>e$ya?1S~1 zZZaw3kZ4ZYvIIJ^^hV}ITfWvDsE2-N{07GW1ZNz>=aKZoZb95m5 zHYv|q4X^XRYM7atx=jM;==s29#*In8@NZL`|Che(KimzChSy~gHvZsu7P^|K)|mZP zbUhb*KfQlVv^~b$mQA(L-|NnJ7$^B{6)OTzXf^%t(Kp^_FVj;5dE?^Xn13IQ-HILB zY33=fsQ8iapJz9F(M1a?xq9y_pNSA|_p$PBcM9q}(HE#IjSpKR9l1!SKs9BI=<<{~ zIt{H+D>zKK&AnsOqUvgcxguIxXhBBo#}B)$@hQ&kqU!{fr;H@A)qgjpU&#P6h=fM~ zK~T@O8t+5BH@G!Yv|z0r zK_%6nkSaNTqTf02EUz)=W5&8?UpNa@haRZ5F8qcx+`0g&9Glbl3VCD{p#3>;sN(r+;;Ilr4)&t)jG6_^r_(^(q02}hsuRq z1pbN`L#T@!y$k4uyFs8(Tk;})#?l#^j9XbgwLsSHzFXPa2hLyI^ zo=M&5Q^DE#^HMSN6+dd`p-N^oUNG4O*d? zy{-u!R0VBosY$(ylJV8fP;m*-S;@_{vQ5=mAvqME=-ifoQ+YI;V#Z4&I@r$l?Lqwc zS-kMcsfH;w?zDg7V!@^5^YR|ZMEv>pX3LOLikKCm8>AV?HF1Z|f(pTYr&aYV@`!+x zg!!_>|4lp9;fmLJ3;OUWWt348!O?hkFK(6?XIXq8OJhu;gL$Kb%R43L_fkc17qbOS zRD+crET#?BfObDTP|moiHva2<=&#iug>RgOgm#wJE_}WIvxCqMIG98X{Eh89C@(MG z3b?FpIPJO7;b^_cGzi#wcCyJSW%TTkN#f4T6&z=2=V z7n#Mb(>TB#7r&@Mruh=_>q-FYh{`N=TYV^_jL)m96|L>p0h^Q8oQBqPmyphytu0jF z&E*iPx%F%eg_*q8Xr(>a)tb+N+;kbEs9P~#(TDcQ$D}FsXzS5fj!ET>*+@hGzZN$j zYES7+cZS`n>`bR8(7GMK^|}8R`VWhF)dp+w&>Ee_g-)L?5`)4iO zwMvJb_&3?1b9)zRPJsDau@Ii^KSB#hKA=CdE|bYHZgfl;tZUKMtQ;-4a>uEAHbvo- zb+<7amanLgsqB5oBqlJu>Q;Y*Ji3K0J6U$rUC zameVg=6u5oi2mdIwj@glUxqXQl9~LS&0PuRyz*62$^DDT#l<5TUB{2WYeqSLqpPZb zTJ@`*a+!EO-R=PN4`I~RiRZ}z|F!YSu9iR4*wkC66d{uv%YQXGRCKf`nzQV#6-q3b z&kY>FFXV6oQP!nP-SHg2e=wQ6PQH}&ocPf53JyRWX~1mVSysC@A@9SaWto46S4?Vj zvhzcv24Y7>TOIqOg^}SHj~(_?7Z;ay9$VJqI1!xp;2DIE zjhmGKxAqyHtGCf0;g#Kk6%HoELa>XY@b(=;Em9IDB4&(`y$@UPdb*Jr!0eS}+^*y| zJlRz~Iu0^D@j7>y#?T*9oma!c%er9B^1GmR1T}|dQ9#9t=1Fd=53ivZ(T!DCqi$J= zeZW4(Kt!M^-}R*RGD-GtA~Dla^rXq_5@+K@^A85_$>4t?4NLP6ou z`tLjrPqxtJjiYz8LNAs$yFrC%s&a6g4oty#IPVIo*I)T0_m}$2$D=W?QhGEiT4e{c zUMVB-Tkjj4;&d=`z46z((^_X*N&x61FWv30nRt z&vmCntIHb%*>>ABFr;0V{q!X*c}{*U*15S8Mu!g`w5K(F3Wn_&eVl z3}P*&2DKAOnC|xn$Jb>GR>0qPHbXi4gd{-mX@NK@({^VAdEn)j&evHoAlJiH)e~nY zOei{Hz7@fjwsPaQ7HlAQ^nsT0Qw`!mu;%(y-}5Rp0euCRgRRd_i%E-I_}x%ZwdnHD?G5kjS z3H}q4s#kY$>n~0ryF|uAnMW0j>OM}cr`vodITJmXxLC!HPTy8N+Lww^JB%ak8%!XdaOr!By9-0nrZ_zLeg+~4vOa@lX% zX(pVdhC`;XSMHvz1oIjiNwASS<|(yHjS+6}x81L0<})ZYeuDX0%n%(L>qxJJbKv=h z)zp+o{~`DjGQWAwL=_74^h>QXc4w0Po7TwrV`p00wtQAifSG$M1c{jvS&R+q7Xg7* z-TecCVLK=kEw7`qwCoL2sMKJR{unhkwi!D9X@c%pMgj}>Lut7=Y8ZGxSzLxYnekvnC#$HRdEnrirmD>w>Vw#%majxEn~2LC zf7<0P^?)2*rr-W()9A3Ke2eWq$p=02o+Nq@960>B)N9D00e)WJ={=`TQNa13FUs_4F}dml05H3c73d2bYJ9B? zZ%K56DuV{ZPca^2qV?<7Fa3Mtqoi9Gl@giaMLycFej9`?e|rDtAy7?4UQ9Ye?u~6i z%${!21aalw2<*tN`^Vmf;NbyGYwkJ!DykM*xSI;P4LSmoHq+t5IF-yqj%tm25$p<= z!KlUhBJ>K7^6$^wM{h#OJr5ZuuxkjnrIO%!+GpDP{?#?kSL8~a zKn0(dLGZWGl3Va?6P3yKdJ2uAY0{@Ve&w9U_c02-BzvhNZ<}VR1pCl8cRGBbK?ylS z5IT96#WI`d)LwYiXLwistUkgTUmu^lmOWx>?OKV~O?+W3?0M8@19U2&c;90cBr|4rSrFodf3_?QFuMO9>rJPA7jp69M z$Dd4kA}+AoPzUF&>=~G)4$h$w(bq_M2i6&f(O4p)aQE5>P2&GX;1$_-6L^16Qu%Vv zLWga4Offjd^9BrvY~v3RUtbGpuotd!O!$cR6c}4H*TVziz2DgvVO?kv#1-o;BI!C5 zg@Y9Y0o59X(9r9WC_9&VBap&**8C^9iY_A~f$MW~2hhl1-xD>C-BiK`;7h}Z}l_83SWrPjky%-=M`xa$ECYbQSkkh9tWG_)!$EoDxmmh zqUBD$oSP*C4Q@kGw?ZVg-bpBaZb$`;7RFzAqwUsiTM@Q0AvGZ6qusHv2|5Ynhr4x07$52#9K_uLwJEnMR zvfSpVV6Z;OU`pmW?T59410&PYJS!(59(8v+^9w~WXG>I4(z6Lq`KkDJ>(H~mwR_#cPeohWpU<=LuldPsBmy>guOrcBwEfq{11 z>@4{HF!Vv87B$LUD`lIONv{02<3iZlqwg;OMzU!$()bPK9t@4i6Y3tV{18Org(U0}KUWy+}8Ay8!|u79ln@nU%8__@t{=Wj>OD#6q)7L7)Z=N&E}^xf01Z@~vOB}7_z*I$5#jF|LyJu)ne+693P>iaNrYLDCO8;@&{4t< z&`cN4_S%`rAIy+S<}+l^*uR+5)Y-)67}|l-6H`3)E?nEL$b8Qe#F@(YAS~;(1_yW0 zV`2zo>Y#!@S?OH9px;#$Y8p?TWMpu6cZ@*pPl6?5c4=^Qv0QzNbFxY~wegQ{@MRyj zZxIh-^q?+_j5N@I;G%EGRvFPC0%oiJUf%`@MhBkBnC+d42Re)!n3;^iGhi~Cl=!gq ztXjW1bbj2_t%S9K!)G<23faQC`Ggeskg~4DJ~j;Jrl##EH4#69_CzWep4H+Vnai#6 z)v8_w4iq59dez{0zrUG<-eK`AxflAa_OlW!vx&I3_ z4sq|yzaUu^%l?UHX!^QL8ZHV7agq2i5e5N92tOAsuAXPpU2d3Oj$mV;t?Q;y@?dUT zx_W=y5rX)64)X^`p6QhH)UCoR>++YMOl=#77yDjt>-FLC8R3EHEk>TEF?a2uOIi^| z8P)R#OIeJa!MS$joXWEMi~A3J(l3x|lWmkJ7sOz>pV4MW*)PenUpEEV)z;bL>*TA? zp*W;j`!CpDLKwPib)?n!jokFHew^taY6wQCR#CZ{%*P#t`qRGA=EEd&|Ed~mfQx${ z<~3ZM&QA36x2E$MeqfJF1B1U_MJck;LEEEdHG)(6Bm3?;@UU=f15J}T-k85^r``Om z1mWwL8Mtahsv~I}$B|*OmWDBsrsvY}1*(_Df6%G+eXysK15`D9=&~y9+BHlfR!ZA+ zfvv-Y+39Zt80mh9;ZX+*U~J#BFh87sgO+3_@Ml`lJA;lBVfdP@J;A|!k$hyTI?(;| z;_`Fss%FSfXhTQ)W^M!!(8Weu-PrXU1adU*9MUWS2NQI5bSQ>kffKJHec#F~CZswu zYu>VxI)Mz1p3~HH8>Q-&gck&D;G^d3@p>M1{2 zQMr;gq$hDl`({nb?9z^Td%x2KjQ4Oj=Yux#-Z^+9g)g1tj$( zzYzz!-O%zOk9VrQSZEHM#m>=V6YWpxy(wOZMeBZ1!3k-+Pt!QN{GkfKOP1rN~nx841XQx1Vy<1!RV z%}xc1l{wWTy|G}!dJeu-RN~5lZ;9<@ZGekAmJ+JE3L@ZMx47Uzgq_*;4z9Oa=R6J= zci{f5W<5-Wt@!u9IB}c(DbK&)hRy4)k%RZ03Y#1Ew&1=D0t;T)a@Z|2SpIaLWu~eM zxNhvcu{9`T1d#uGhm9}rI&pzkhrR&9y-^(^JWuV8{N2i%z{2%=PC#Mj4dgf0JJYvH@Ax_)6?!;4 znwOg*|Au!vpg9!@9Gvxt28Q^*b}#l_y|E$p*wc6fj(H&UyTjQ=Bo6}A5SFLGbqdq& zkNz>i-*_`L?<4+uXu|e zM*Vn`-``E&|6=&^MN!F1qFUYSyF;4K8J6_P@(drCV{*CW550Mz=)zv+7RD6OW3|ru zT)WB3Ce)VcrUoLB@$Y&Y2Nmd&CzFVRF=by@n&HJ`!Dm9Y;g8ycqA_;-bx(O7 z>IYC<%-{XWs?=4jgg+~Fic;axP=H#_I5Y`OEW>zoRk*>y*)8|Z$i^>%`E`=c8S1F% z4dtO5t$hM#??qed;ltfN>OZcw`U3T#k-!H2>bRx#^`|EA^3!)CN6R`q22>#BSf&X% zBL9oSHHXwcQ}S&J9enx?5!@MmtMxJ_*%7}c`U&BA~fMA554dt`B_<~h*aqCL>{q$=DnUbB$ElVB@ z$(vG3Jylq(>TGeKk9|=!q8mF^UD4Fy(@9ZP#`#&v)dQ2%cJp_Zt z4d;PhY6cmK|f#LDPV z?r0BXI9-S^fd{D);S@)@Kllm3~aV~xZpXwoGtg9cGGXe>q852 zLV65xVJolLXx)fEKxhITc5m-s0TT3YhS>SH6eeAA6C|hU9vy2uclplzFxEL?iQnafACTv-E1J3l9-;G z?dv)%+RIR_Pp+Xz60w5oRdkCnxLMPKybAnrtG9yPOZ*L}9p?U=@`^a8ax~df>?w`k zXFiU-&A%?+OO2!|YrDPlT(kD<-(@ba8YOKn5kH*OF)#t63a$?~p&nYtJsdWUFs!zI zk5ZAv1vbeywOy&2!i6Dl->k{ePk(4T03pv1k>>Wn&?RPBvK}TTs@y? zd6HEg)!mqaslfQoi8Q(rZM@nvAg{>Wvn6*_mk)TraasrZ-wEug<^Z7_S3Y&RwAK-j z`BCK>iv5brD3+;d4xfpL=>Id2;QY+)PIWHvAScVFINQAJ>rRy2nEB?uc!c#bk#`x<4Sb8` zjE2&h;agIBX@b4y;eXobkn|~(q0?GF@GgLx_r@kKIQNg}x*IrhWT%`rMN6nbuS^`w zRVu;3-CD4pdr%h!UiQ(u6q<a#eGK@x}ghHZ=b&i^$s4L~O2 zSz6}i4JRExp_r$QR!3)!83k1G)=qSI5zcOKaHH(CGfCa7P7os2x)10YT5Dhsgr86( zSkc*Hs8X)6Kt zaQJoqPes-7eu568n>V~{tvwzbyl%FM*StQ`sw}Z6>V<{iSU>MsO`}$qjFcjo$o}$G ztFmdzkKo{FZV&Admc4?~8X_eGbkboVKFx6e$R~ zly4$rxon_z+?)&bL^7gR^m#Y{v!f*m!N()G-;GCjK&dw7H0<|4m+Kh`S8~`Ls%FTz z65SZzz0!jG#q0K8|FB3JJDACLyW-w;w;ERCl7Dy0B3N|6%3V`VSoKRE?-o1^uq*ig zN7#bhs#Z*jm4}pAz-`|IBPed^1b~%SQbhk{k=xV%Eb#MTzpcq{RkgRox0G|M@W`us zynr^zJdbSN?=Mupw6Csr%UH^hYzPn7%?Ma%{?a;w;Qu?(eu6HX43A2~n25Air~M+5 z_z&f97DhMNb9R7+U1RDtQx|IS0fuO(nOt^Uq^nf%?gk;&5H#d}NR~ttSgVb0bkpW~tClyU(&Dl%TPH8zJWmY$xZ40sV1)+7Ip53U_~eJj{D^A2(lfT@78YoR_OnV!O# z-ZtwY{dV59jHI(2R?jf*cV--E%2pf&td6zz+#i_mZB`9Ue+aP)+o{>%uNRsn`=>!8 zAQ3<;F3tL}$By7CI*@PtOG_Gnm?Oy7petnAEWJWek5JQ>EJyC7J0&AzKePMz&oB3ZJqB-9_Rel|~dZY(G)*73FNe~hJ`L1TBBT>YU zjA%(sHr*uygMlB6zHkjGNPT<1T^%e>Lh@3RG;m(3hVl?Mbmk*L^hWqBTt^YeM<>n) zdx00AA_Rr_$1h{!$8+{jD&Dg&*;#zzwPF zr4Z+heuvy~2b&EK-vL7gO)_GvJQ+$$5CPzf08$A%iDor$3w?#N+)Op_s1wy_MZE{U z$-!=VINHJcN1uZhLh-XhYTi#OM226>8|NKm&(b%B$j5mX7?XSnY4N_$uI0%Nv__rH1*pB+~L4Kg&z40HG!V*M9Ju=Y)C$;G?H-g{k%gqY1&$j zR-EJA)qhUf?<7qL%KfJWgUcd-Pe}o1ZdtI@k<|k`Xu}#MiWd^E;$lb;Px+AZZ9#w} zw_y8Xb>sfhCxh=`#R3dpOpy~W*keDD2UiigA+LFAi+RUaoIg)$em9#1oGvi(CaCXF zyq{mkO{zm~_lhvX2Kpf&`$ckogF#@OI~;EQufQ7lk3+Q7rRU`Z&(-c5$)?c%JGrc% zKvV9L-3;QT*#3J0*$f|^rMp~D5G|oGEBJRlO+mo8f!hCu7q?b~@SoPhZixRsoc#Y~ zZGzXK0PE Date: Fri, 3 May 2024 16:01:14 -0700 Subject: [PATCH 0176/1239] draft --- .../tutorials/build-insights-function-view.md | 12 ++++-------- .../tutorials/build-insights-included-files-view.md | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index b858c35551..6ea355577d 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -54,17 +54,13 @@ Set the optimization level to maximum optimizations: On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. -When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. - -This file shows the time spent processing `#include` files, the build time for each function, and how `__forceinline` impacted the size of each function. +:::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: -:::image type="complex" source="./media/build-" alt-text="alt text stuff"::: -big ole’ long description -:::image-end::: +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. ## Function view -In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't be displayed because build events with negligible impact are discarded to avoid degrading build event collection performance. +In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't appear in the list because build events with negligible impact are discarded to avoid degrading build event collection performance. :::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Build Insights Functions view file."::: In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: @@ -107,7 +103,7 @@ Perhaps the cost of calling this function is insignicant compared to the cost of We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. -The build time goes from 25.181 seconds to 13.376 seconds and the `performPhysicsCalculations` function doesn't even show up any longer in the **Functions** view because it doesn't contribute enough to the build time to be counted. +The build time goes from 25.181 seconds to 13.376 seconds and the `performPhysicsCalculations` function doesn't show up in the **Functions** view because it doesn't contribute enough to the build time to be counted. :::image type="complex" source="./media/functions-view-after-fix.png" alt-text="Screenshot of the 2D vector header file."::: In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 5e25424784..20e57e2759 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -50,7 +50,7 @@ On a project of your choosing, and using the **Debug** build options set in the When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. -## Included Files View +## Included Files view The trace file shows the build time--which for this example was 16.404 seconds. The **Diagnostics Session** is the overall time taken to run the Build Insights session. Choose the **Included Files** tab. From 0514913ae599e97a00c236c19a49cb72ad2cab5a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 3 May 2024 16:04:06 -0700 Subject: [PATCH 0177/1239] draft --- docs/build-insights/tutorials/build-insights-function-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 6ea355577d..dc4d2fe31a 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -76,7 +76,7 @@ You can search for a specific function by using the **Filter Functions** box. If In this example, the `performPhysicsCalculations` function is taking the most time to compile. -:::image type="complex" source="./media/functions-view-performPhysicsCalculationsUnexpanded.png" alt-text="Screenshot of the Build Insights Functions view."::: +:::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Build Insights Functions view."::: In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: From 2d9c07d4f4aeb70c98e6861e90c5e377291a81eb Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 3 May 2024 16:29:53 -0700 Subject: [PATCH 0178/1239] draft --- .../tutorials/build-insights-function-view.md | 40 +++++++++++------- .../build-insights-included-files-view.md | 6 +-- .../media/functions-view-after-fix.png | Bin 3729 -> 5096 bytes 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index dc4d2fe31a..590eb37041 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -23,13 +23,13 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose slow code generation time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). +Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like AAA games. Build Insights provides analytics such as **Functions** view, which helps diagnose expensive code generation during build time. It displays the time it takes to generate code for each function, and shows the impact of [`__forceinline`](../../cpp/inline-functions-cpp.md#inline-__inline-and-__forceinline). -The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function, but the tradeoff is that it can increase the size of the binary and impact your build times. +The `__forceinline` directive tells the compiler to inline a function regardless of its size or complexity. Inlining a function can improve runtime performance by reducing the overhead of calling the function. The tradeoff is that it can increase the size of the binary and impact your build times. For optimized builds, the time spent generating code contributes significantly to the total build time. In general, C++ function optimization happens quickly. In exceptional cases, some functions can become large enough and complex enough to put pressure on the optimizer and noticeably slow down your builds. -In this article, learn how to use the Build Insights **Functions** view to inlining bottlenecks in your build. +In this article, learn how to use the Build Insights **Functions** view to find inlining bottlenecks in your build. ## Set build options @@ -52,11 +52,11 @@ Set the optimization level to maximum optimizations: ## Run Build Insights -On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. Choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: -When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the Windows `TEMP` environment variable. The generated name is based on the collection time. ## Function view @@ -70,19 +70,23 @@ The **Time [sec, %]** column shows how long it took to compile each function. Th You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. Excessive use of `__forceinline` functions can significantly slow compilation. -You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the Functions View. +You can search for a specific function by using the **Filter Functions** box. If a function's code generation time is too small, it doesn't appear in the **Functions** View. ## Improve build time by adjusting function inlining In this example, the `performPhysicsCalculations` function is taking the most time to compile. :::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Build Insights Functions view."::: -In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: +In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon. :::image-end::: - Investigating further, by selecting the chevron before that function, and then sorting the **Forceinline Size** column from highest to lowest, we see the biggest contributors to the problem. +Investigating further, by selecting the chevron before that function, and then sorting the **Forceinline Size** column from highest to lowest, we see the biggest contributors to the problem. + +:::image type="complex" source="./media/functions-view-expanded.png" alt-text="Screenshot of the Build Insights Functions view with an expanded function."::: +performPhysicsCalculations() is expanded and shows a long list of functions that were inlined inside it. There are mutliple instances of functions such as complexOperation(), recursiveHelper(), and sin() shown. The Forceinline Size column shows that complexOperation() is the largest inlined function at 315 instructions. recursiveHelper() has 119 instructions. Sin() has 75 instructions but there are many instances of than the other functions. +:::image-end::: -There are some larger inlined functions, such as `Vector2D::complexOperation()` and `Vector2D::recursiveHelper()` that are contributing to the problem. But there are many instances (not all shown here) of `Vector2d::sin(float)`, `Vector2d::cos(float)`, `Vector2D::power(float,int)`, and `Vector2D::factorial(int)`. When you add those up, they quickly dwarf the few larger generated functions. +There are some larger inlined functions, such as `Vector2D::complexOperation()` and `Vector2D::recursiveHelper()` that are contributing to the problem. But there are many more instances (not all shown here) of `Vector2d::sin(float)`, `Vector2d::cos(float)`, `Vector2D::power(float,int)`, and `Vector2D::factorial(int)`. When you add those up, the total number of generated instructions quickly exceeds the few larger generated functions. Looking at those functions in the source code, we see that execution time is going to be spent inside loops. For example, here's the code for `factorial()`: @@ -99,28 +103,30 @@ static __forceinline T factorial(int n) } ``` -Perhaps the cost of calling this function is insignicant compared to the cost of the function itself. We can try removing the `__forceinline` directive from it to see if it helps. The code for `power`, `sin()` and `cos()` is similar in that the code is inside a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. +Perhaps the cost of calling this function is insignificant compared to the cost of the function itself. We can try removing the `__forceinline` directive from it to see if it helps the build time. The code for `power`, `sin()` and `cos()` is similar in that the code consists of a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. -We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project, as before, and not for just the few files may be dirty right now. -The build time goes from 25.181 seconds to 13.376 seconds and the `performPhysicsCalculations` function doesn't show up in the **Functions** view because it doesn't contribute enough to the build time to be counted. +The build time goes from 25.181 seconds to 13.376 seconds and the `performPhysicsCalculations` function doesn't show up anymore in the **Functions** view because it doesn't contribute enough to the build time to be counted. :::image type="complex" source="./media/functions-view-after-fix.png" alt-text="Screenshot of the 2D vector header file."::: In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -The next step would be to profile the application to see if the performance of the application has been impacted by the change. If it has, we can selectively add `__forceinline` back to the functions we see after profiling could benefit from it. +The Diagnostics Session time is the overall time it took do the build plus any overhead for gathering the Build Insights data. + +The next step would be to profile the application to see if the performance of the application is negatively impacted by the change. If it has, we can selectively add `__forceinline` back as needed. ## Navigate to the source code -- Double-click, right-click, or press **Enter** while on a file in the **Functions** view to open the source code for that file. +Double-click, right-click, or press **Enter** while on a file in the **Functions** view to open the source code for that file. :::image type="content" source="./media/functions-view-goto-file.png" alt-text="Screenshot of a right-click on a file in the Functions view. The menu option Go To Source File is highlighted."::: ## Tips - You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. -- If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. +- If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. - To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. - The **Functions** view provides a filter box to find a function that you're interested in. It does partial matches on the name you provide. @@ -134,4 +140,6 @@ The next step would be to profile the application to see if the performance of t ## See also [Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ -[Troubleshoot header file impact on build time](build-insights-included-files-view.md) \ No newline at end of file +[Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ +[Troubleshoot header file impact on build time](build-insights-included-files-view.md)\ +[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md) \ No newline at end of file diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 20e57e2759..d0014dfcac 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -44,11 +44,11 @@ Before gathering Build Insights data, set the build options for the type of buil ## Run Build Insights -On a project of your choosing, and using the **Debug** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +On a project of your choosing, and using the **Debug** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. Choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: -When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the `TEMP` environment variable. The generated name is based on the collection time. +When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the folder pointed to by the Windows `TEMP` environment variable. The generated name is based on the collection time. ## Included Files view @@ -161,7 +161,7 @@ Conversely, you can right-click a file in the **Include Tree** view to jump to i ## Tips - You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. -- If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. +- If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. - To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. - Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. - **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. diff --git a/docs/build-insights/tutorials/media/functions-view-after-fix.png b/docs/build-insights/tutorials/media/functions-view-after-fix.png index 254223a34c4634920c0c9129ba492a1297779bdf..9df70ef0b9ce5319196e41664afe2159ddfa9b33 100644 GIT binary patch literal 5096 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 literal 3729 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 Date: Fri, 3 May 2024 16:58:04 -0700 Subject: [PATCH 0179/1239] update metadata --- .../tutorials/build-insights-function-view.md | 6 ++++-- .../tutorials/build-insights-included-files-view.md | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 590eb37041..194131b33c 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -1,5 +1,5 @@ --- -title: "# Tutorial: Troubleshoot function inlining on build time" +title: "Tutorial: Troubleshoot function inlining on build time" description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of function inlining on build time in your C++ projects." ms.date: 5/1/2024 helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] @@ -142,4 +142,6 @@ Double-click, right-click, or press **Enter** while on a file in the **Functions [Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ [Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ [Troubleshoot header file impact on build time](build-insights-included-files-view.md)\ -[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md) \ No newline at end of file +[Functions View for Build Insights in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/functions-view-for-build-insights-in-visual-studio-2022-17-8/)\ +[Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ +[Improving code generation time with C++ Build Insights](https://devblogs.microsoft.com/cppblog/improving-code-generation-time-with-cpp-build-insights) \ No newline at end of file diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index d0014dfcac..f3dd42ffa0 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -2,7 +2,7 @@ title: "Tutorial: Troubleshoot header file impact on build time" description: "Tutorial on how to use Build Insights Includes Files and Includes Tree views to troubleshoot the impact of #include files on build time." ms.date: 5/1/2024 -helpviewer_keywords: ["C++ Build Insights", "included files view", "include tree view", "#include analysis", "build time analysis"] +helpviewer_keywords: ["C++ Build Insights", "header file build time", "included files view", "include tree view", "#include analysis", "build time analysis"] --- # Tutorial: Troubleshoot header file impact on build time From d60e42729f92bc1b5d3acfc6e7599755c32b16c5 Mon Sep 17 00:00:00 2001 From: Diana Richards <103777760+v-dirichards@users.noreply.github.com> Date: Mon, 6 May 2024 15:21:29 -0500 Subject: [PATCH 0180/1239] preexisting acrolinx --- .../compiler-errors-2/compiler-errors-c3300-through-c3399.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md index 867bde6228..fa4967f500 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md @@ -54,7 +54,7 @@ The articles in this section of the documentation explain a subset of the error | Compiler error C3336 | This operation must be performed at class scope | | Compiler error C3337 | '*identifier*': defaultvtable must be an event source for a coclass '*class*' | | Compiler error C3338 | '*identifier*': There can be at most one default interface that is also an event source for a coclass '*class*' | -| Compiler error C3339 | template template parameter requires either 'class' or 'typename' after the parameter list | +| Compiler error C3339 | template parameter requires either 'class' or 'typename' after the parameter list | | [Compiler error C3340](compiler-error-c3340.md) | '*identifier*': interface cannot be both 'restricted' and 'default' in coclass '*class*' | | Compiler error C3341 | '*interface*': a defaultvtable interface must be either 'dual' or 'custom' | | [Compiler error C3342](compiler-error-c3342.md) | '*identifier*': ambiguous attribute | From 55193b956a54ede80bc9acae04b460f7affdae8e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 6 May 2024 15:51:24 -0700 Subject: [PATCH 0181/1239] address user feedback 252709 --- docs/cpp/char-wchar-t-char16-t-char32-t.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/cpp/char-wchar-t-char16-t-char32-t.md b/docs/cpp/char-wchar-t-char16-t-char32-t.md index 3b18753f07..ac74969f45 100644 --- a/docs/cpp/char-wchar-t-char16-t-char32-t.md +++ b/docs/cpp/char-wchar-t-char16-t-char32-t.md @@ -2,7 +2,6 @@ description: "Learn more about: char, wchar_t, char8_t, char16_t, char32_t" title: "char, wchar_t, char8_t, char16_t, char32_t" ms.date: 04/23/2021 -ms.assetid: 6b33e9f5-455b-4e49-8f12-a150cbfe2e5b --- # char, wchar_t, char8_t, char16_t, char32_t @@ -19,7 +18,7 @@ char32_t ch4{ U'a' }; ## Remarks -The **`char`** type was the original character type in C and C++. The **`char`** type can be used to store characters from the ASCII character set or any of the ISO-8859 character sets, and individual bytes of multi-byte characters such as Shift-JIS or the UTF-8 encoding of the Unicode character set. In the Microsoft compiler, **`char`** is an 8-bit type. It's a distinct type from both **`signed char`** and **`unsigned char`**. By default, variables of type **`char`** get promoted to **`int`** as if from type **`signed char`** unless the [`/J`](../build/reference/j-default-char-type-is-unsigned.md) compiler option is used. Under **`/J`**, they're treated as type **`unsigned char`** and get promoted to **`int`** without sign extension. +The **`char`** type was the original character type in C and C++. The **`char`** type stores characters from the ASCII character set or any of the ISO-8859 character sets, and individual bytes of multi-byte characters such as Shift-JIS or the UTF-8 encoding of the Unicode character set. In the Microsoft compiler, **`char`** is an 8-bit type. It's a distinct type from both **`signed char`** and **`unsigned char`**. By default, variables of type **`char`** get promoted to **`int`** as if from type **`signed char`** unless the [`/J`](../build/reference/j-default-char-type-is-unsigned.md) compiler option is used. Under **`/J`**, they're treated as type **`unsigned char`** and get promoted to **`int`** without sign extension. The type **`unsigned char`** is often used to represent a *byte*, which isn't a built-in type in C++. @@ -27,4 +26,6 @@ The **`wchar_t`** type is an implementation-defined wide character type. In the The **`char8_t`**, **`char16_t`**, and **`char32_t`** types represent 8-bit, 16-bit, and 32-bit wide characters, respectively. (**`char8_t`** is new in C++20 and requires the [`/std:c++20`](../build/reference/std-specify-language-standard-version.md) or **`/std:c++latest`** compiler option.) Unicode encoded as UTF-8 can be stored in the **`char8_t`** type. Strings of **`char8_t`** and **`char`** type are referred to as *narrow* strings, even when used to encode Unicode or multi-byte characters. Unicode encoded as UTF-16 can be stored in the **`char16_t`** type, and Unicode encoded as UTF-32 can be stored in the **`char32_t`** type. Strings of these types and **`wchar_t`** are all referred to as *wide* strings, though the term often refers specifically to strings of **`wchar_t`** type. -In the C++ standard library, the `basic_string` type is specialized for both narrow and wide strings. Use `std::string` when the characters are of type **`char`**, `std::u8string` when the characters are of type **`char8_t`**, `std::u16string` when the characters are of type **`char16_t`**, `std::u32string` when the characters are of type **`char32_t`**, and `std::wstring` when the characters are of type **`wchar_t`**. Other types that represent text, including `std::stringstream` and `std::cout` have specializations for narrow and wide strings. +In the C++ standard library, the [`basic_string`](/cpp/standard-library/basic-string-class) type is specialized for both narrow and wide strings. Use `std::string` when the characters are of type **`char`**, `std::u8string` when the characters are of type **`char8_t`**, `std::u16string` when the characters are of type **`char16_t`**, `std::u32string` when the characters are of type **`char32_t`**, and `std::wstring` when the characters are of type **`wchar_t`**. + +Other types that represent text, including [`std::stringstream`](/cpp/standard-library/sstream-typedefs/#stringstream) and [`std::cout`](/cpp/standard-library/iostream#cout) have specializations for narrow and wide strings. From 5865bd7c9a5b6b2a87d26d142a192df49d27a370 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 6 May 2024 16:22:42 -0700 Subject: [PATCH 0182/1239] acrolinx --- docs/cpp/char-wchar-t-char16-t-char32-t.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cpp/char-wchar-t-char16-t-char32-t.md b/docs/cpp/char-wchar-t-char16-t-char32-t.md index ac74969f45..5df11da266 100644 --- a/docs/cpp/char-wchar-t-char16-t-char32-t.md +++ b/docs/cpp/char-wchar-t-char16-t-char32-t.md @@ -5,7 +5,7 @@ ms.date: 04/23/2021 --- # char, wchar_t, char8_t, char16_t, char32_t -The types **`char`**, **`wchar_t`**, **`char8_t`**, **`char16_t`**, and **`char32_t`** are built-in types that represent alphanumeric characters, non-alphanumeric glyphs, and non-printing characters. +The types **`char`**, **`wchar_t`**, **`char8_t`**, **`char16_t`**, and **`char32_t`** are built-in types that represent alphanumeric characters, nonalphanumeric glyphs, and nonprinting characters. ## Syntax From 1065424921f20d7fdd6c4d326870b573c980ee3c Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Tue, 7 May 2024 12:58:02 -0700 Subject: [PATCH 0183/1239] Update compiler-warning-level-2-c4150.md --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index 2f39b2d5bd..2faef2beb7 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -11,6 +11,8 @@ helpviewer_keywords: ["C4150"] The `delete` operator is called to delete a type that was declared but not defined. The compiler can't find the destructor to call because the definition isn't in the same translation unit as the `delete`. +## Example + The following sample generates C4150 by declaring but not defining `class IncClass`: ```cpp @@ -75,3 +77,8 @@ void NoDestruct( IncClass* pIncClass ) } ``` + +## See Also + +* [Projects and build systems](../../build/projects-and-build-systems-cpp.md) +* [Source files and source programs](../../c-language/source-files-and-source-programs.md) From 1ad0ecbbd9806a832807025c6dd02042bea2ac1d Mon Sep 17 00:00:00 2001 From: Omotola Date: Wed, 8 May 2024 09:48:09 -0700 Subject: [PATCH 0184/1239] Update clang-tidy.md Added information for new tool directory property --- docs/code-quality/clang-tidy.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/code-quality/clang-tidy.md b/docs/code-quality/clang-tidy.md index 6f1c46f002..cbf56039f4 100644 --- a/docs/code-quality/clang-tidy.md +++ b/docs/code-quality/clang-tidy.md @@ -3,7 +3,7 @@ title: Using Clang-Tidy in Visual Studio description: "How to use Clang-Tidy in Visual Studio for Microsoft C++ code analysis." ms.date: 03/1/2022 ms.topic: "conceptual" -f1_keywords: ["vs.codeanalysis.clangtidy"] +f1_keywords: ["vs.codeanalysis.clangtidy","vs.codeanalysis.propertypages.ClangTidyToolPath"] --- # Using Clang-Tidy in Visual Studio @@ -90,6 +90,10 @@ Clang-Tidy runs result in warnings displayed in the Error List, and as in-editor By default, Clang-Tidy does not set any checks when enabled. To see the list of checks in the command-line version, run `clang-tidy -list-checks` in a developer command prompt. You can configure the checks that Clang-Tidy runs inside Visual Studio. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Enter checks to run in the **Clang-Tidy Checks** property. A good default set is `clang-analyzer-*`. This property value is provided to the **`--checks`** argument of the tool. Any further configuration can be included in custom *`.clang-tidy`* files. For more information, see the [Clang-Tidy documentation on LLVM.org](https://clang.llvm.org/extra/clang-tidy/). +## Clang-Tidy Tool Directory + +If you'd like to have custom rules built into your clang-tidy executable and run it in VS, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or Browse and select the path under the **Clang-Tidy Tool Directory** property. Once the change is saved, the new executable will be used after the next succesful compilation. + ## See also [Clang/LLVM support for MSBuild projects](https://devblogs.microsoft.com/cppblog/clang-llvm-support-for-msbuild-projects/)\ From d31e24c9becd2c9a5a16cf048d4de7dd8cd3e3e7 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Mon, 13 May 2024 10:52:22 +0800 Subject: [PATCH 0185/1239] Remove extra double quote --- docs/build/launch-vs-schema-reference-cpp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/launch-vs-schema-reference-cpp.md b/docs/build/launch-vs-schema-reference-cpp.md index ca7dcc9b70..1140ae533d 100644 --- a/docs/build/launch-vs-schema-reference-cpp.md +++ b/docs/build/launch-vs-schema-reference-cpp.md @@ -18,7 +18,7 @@ To create the file, right-click on an executable file in **Solution Explorer** a | `buildConfigurations` | array | A key-value pair that specifies the name of the build mode to apply the configurations. For example, `Debug` or `Release` and the configurations to use according to the selected build mode. | | `currentDir` | string | Specifies the full directory path to the Build Target. The directory is detected automatically unless this parameter is set. | | `cwd` | string | Full path to the directory on the remote system where the program will run. Defaults to `"${debugInfo.defaultWorkingDirectory}"` | -| `debugType` | string | Specifies the debugging mode according to the type of code (native, managed, or mixed). The mode is automatically detected unless this parameter is set. Allowed values: `"native"`", `"managed"`, `"mixed"`. | +| `debugType` | string | Specifies the debugging mode according to the type of code (native, managed, or mixed). The mode is automatically detected unless this parameter is set. Allowed values: `"native"`, `"managed"`, `"mixed"`. | | `env` | array | Specifies a key-value list of custom environment variables. For example: `env:{"myEnv":"myVal"}`. | | `inheritEnvironments` | array | Specifies a set of environment variables inherited from multiple sources. You can define some variables in files like *`CMakeSettings.json`* or *`CppProperties.json`* and make them available to debug context. **Visual Studio 16.4:** Specify environment variables on a per-target basis using the `env.VARIABLE_NAME` syntax. To unset a variable, set it to `"null"`. | | `name` | string | Specifies the name of the entry in the **Startup Item** dropdown. | From c3b959c605a677dfd4af36430301d94fce0c10cc Mon Sep 17 00:00:00 2001 From: David Matson Date: Wed, 15 May 2024 16:05:04 -0700 Subject: [PATCH 0186/1239] Clarify that _O_TEXT is ANSI. This constant was originally added before such a distinction was made; make it clear that _O_TEXT means ANSI text. --- docs/c-runtime-library/reference/open-osfhandle.md | 2 +- docs/c-runtime-library/reference/open-wopen.md | 2 +- docs/c-runtime-library/reference/pipe.md | 2 +- docs/c-runtime-library/reference/setmode.md | 2 +- docs/c-runtime-library/reference/sopen-s-wsopen-s.md | 2 +- docs/c-runtime-library/reference/sopen-wsopen.md | 2 +- docs/c-runtime-library/text-and-binary-mode-file-i-o.md | 2 +- docs/c-runtime-library/translation-mode-constants.md | 8 ++++---- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/c-runtime-library/reference/open-osfhandle.md b/docs/c-runtime-library/reference/open-osfhandle.md index cc52f6cf30..6ea534a28c 100644 --- a/docs/c-runtime-library/reference/open-osfhandle.md +++ b/docs/c-runtime-library/reference/open-osfhandle.md @@ -44,7 +44,7 @@ These manifest constants are defined in ``: |--|--| | `_O_APPEND` | Positions a file pointer to the end of the file before every write operation. | | `_O_RDONLY` | Opens the file for reading only. | -| `_O_TEXT` | Opens the file in text (translated) mode. | +| `_O_TEXT` | Opens the file in ANSI text (translated) mode. | | `_O_WTEXT` | Opens the file in Unicode (translated UTF-16) mode. | The **`_open_osfhandle`** call transfers ownership of the Win32 file handle to the file descriptor. To close a file opened by using **`_open_osfhandle`**, call [`_close`](close.md). The underlying OS file handle is also closed by a call to **`_close`**. Don't call the Win32 function `CloseHandle` on the original handle. If the file descriptor is owned by a `FILE *` stream, then a call to [`fclose`](fclose-fcloseall.md) closes both the file descriptor and the underlying handle. In this case, don't call **`_close`** on the file descriptor or `CloseHandle` on the original handle. diff --git a/docs/c-runtime-library/reference/open-wopen.md b/docs/c-runtime-library/reference/open-wopen.md index 487b3a3f0b..6b72d3b25f 100644 --- a/docs/c-runtime-library/reference/open-wopen.md +++ b/docs/c-runtime-library/reference/open-wopen.md @@ -79,7 +79,7 @@ The **`_open`** function opens the file specified by *`filename`* and prepares i | `_O_RDONLY` | Opens a file for reading only. Can't be specified with `_O_RDWR` or `_O_WRONLY`. | | `_O_RDWR` | Opens a file for both reading and writing. Can't be specified with `_O_RDONLY` or `_O_WRONLY`. | | `_O_SEQUENTIAL` | Specifies that caching is optimized for, but not restricted to, sequential access from disk. | -| `_O_TEXT` | Opens a file in text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) | +| `_O_TEXT` | Opens a file in ANSI text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) | | `_O_TRUNC` | Opens a file and truncates it to zero length; the file must have write permission. Can't be specified with `_O_RDONLY`. `_O_TRUNC` used with `_O_CREAT` opens an existing file or creates a file. **Note:** The `_O_TRUNC` flag destroys the contents of the specified file. | | `_O_WRONLY` | Opens a file for writing only. Can't be specified with `_O_RDONLY` or `_O_RDWR`. | | `_O_U16TEXT` | Opens a file in Unicode UTF-16 mode. | diff --git a/docs/c-runtime-library/reference/pipe.md b/docs/c-runtime-library/reference/pipe.md index 54a8510fc8..084b7d4666 100644 --- a/docs/c-runtime-library/reference/pipe.md +++ b/docs/c-runtime-library/reference/pipe.md @@ -59,7 +59,7 @@ The standard output descriptor of `PROGRAM1` is attached to the pipe's write des The **`_pipe`** function returns two file descriptors to the pipe in the *`pfds`* argument. The element *`pfds`*[0] contains the read descriptor, and the element *`pfds`*[1] contains the write descriptor. Pipe file descriptors are used in the same way as other file descriptors. (The low-level input and output functions **`_read`** and **`_write`** can read from and write to a pipe.) To detect the end-of-pipe condition, check for a **`_read`** request that returns 0 as the number of bytes read. -The *`psize`* argument specifies the amount of memory, in bytes, to reserve for the pipe. The *`textmode`* argument specifies the translation mode for the pipe. The manifest constant `_O_TEXT` specifies a text translation, and the constant `_O_BINARY` specifies binary translation. (See [`fopen`, `_wfopen`](fopen-wfopen.md) for a description of text and binary modes.) If the *`textmode`* argument is 0, **`_pipe`** uses the default translation mode that's specified by the default-mode variable [`_fmode`](../fmode.md). +The *`psize`* argument specifies the amount of memory, in bytes, to reserve for the pipe. The *`textmode`* argument specifies the translation mode for the pipe. The manifest constant `_O_TEXT` specifies an ANSI text translation, and the constant `_O_BINARY` specifies binary translation. (See [`fopen`, `_wfopen`](fopen-wfopen.md) for a description of text and binary modes.) If the *`textmode`* argument is 0, **`_pipe`** uses the default translation mode that's specified by the default-mode variable [`_fmode`](../fmode.md). In multithreaded programs, no locking is performed. The file descriptors that are returned are newly opened and shouldn't be referenced by any thread until after the **`_pipe`** call is complete. diff --git a/docs/c-runtime-library/reference/setmode.md b/docs/c-runtime-library/reference/setmode.md index 6cf30c8844..009bc3bdff 100644 --- a/docs/c-runtime-library/reference/setmode.md +++ b/docs/c-runtime-library/reference/setmode.md @@ -41,7 +41,7 @@ For more information about these and other return codes, see [`errno`, `_doserrn ## Remarks -The **`_setmode`** function sets to *`mode`* the translation mode of the file given by *`fd`*. Passing `_O_TEXT` as *`mode`* sets text (that is, translated) mode. Carriage return-line feed (CR-LF) combinations are translated into a single line feed character on input. Line feed characters are translated into CR-LF combinations on output. Passing `_O_BINARY` sets binary (untranslated) mode, in which these translations are suppressed. +The **`_setmode`** function sets to *`mode`* the translation mode of the file given by *`fd`*. Passing `_O_TEXT` as *`mode`* sets ANSI text (that is, translated) mode. Carriage return-line feed (CR-LF) combinations are translated into a single line feed character on input. Line feed characters are translated into CR-LF combinations on output. Passing `_O_BINARY` sets binary (untranslated) mode, in which these translations are suppressed. You can also pass `_O_U16TEXT`, `_O_U8TEXT`, or `_O_WTEXT` to enable Unicode mode, as demonstrated in the second example later in this document. diff --git a/docs/c-runtime-library/reference/sopen-s-wsopen-s.md b/docs/c-runtime-library/reference/sopen-s-wsopen-s.md index d6e46d00ef..3b1480c69a 100644 --- a/docs/c-runtime-library/reference/sopen-s-wsopen-s.md +++ b/docs/c-runtime-library/reference/sopen-s-wsopen-s.md @@ -95,7 +95,7 @@ The integer expression *`oflag`* is formed by combining one or more manifest con | `_O_RDONLY` | Opens a file for reading only. Can't be specified with `_O_RDWR` or `_O_WRONLY`. | | `_O_RDWR` | Opens a file for both reading and writing. Can't be specified with `_O_RDONLY` or `_O_WRONLY`. | | `_O_SEQUENTIAL` | Specifies that caching is optimized for, but not restricted to, sequential access from disk. | -| `_O_TEXT` | Opens a file in text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) | +| `_O_TEXT` | Opens a file in ANSI text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) | | `_O_TRUNC` | Opens a file and truncates it to zero length; the file must have write permission. Can't be specified with `_O_RDONLY`. `_O_TRUNC` used with `_O_CREAT` opens an existing file or creates a file. **Note:** The `_O_TRUNC` flag destroys the contents of the specified file. | | `_O_WRONLY` | Opens a file for writing only. Can't be specified with `_O_RDONLY` or `_O_RDWR`. | | `_O_U16TEXT` | Opens a file in Unicode UTF-16 mode. | diff --git a/docs/c-runtime-library/reference/sopen-wsopen.md b/docs/c-runtime-library/reference/sopen-wsopen.md index 9df104ac25..c3e9b3a0aa 100644 --- a/docs/c-runtime-library/reference/sopen-wsopen.md +++ b/docs/c-runtime-library/reference/sopen-wsopen.md @@ -88,7 +88,7 @@ The integer expression *`oflag`* is formed by combining one or more of the follo | `_O_RDONLY` | Opens a file for reading only. Can't be specified with `_O_RDWR` or `_O_WRONLY`. | | `_O_RDWR` | Opens a file for both reading and writing. Can't be specified with `_O_RDONLY` or `_O_WRONLY`. | | `_O_SEQUENTIAL` | Specifies that caching is optimized for, but not restricted to, sequential access from disk. | -| `_O_TEXT` | Opens a file in text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) | +| `_O_TEXT` | Opens a file in ANSI text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) | | `_O_TRUNC` | Opens a file and truncates it to zero length; the file must have write permission. Can't be specified with `_O_RDONLY`. `_O_TRUNC` used with `_O_CREAT` opens an existing file or creates a file. **Note:** The `_O_TRUNC` flag destroys the contents of the specified file. | | `_O_WRONLY` | Opens a file for writing only. Can't be specified with `_O_RDONLY` or `_O_RDWR`. | | `_O_U16TEXT` | Opens a file in Unicode UTF-16 mode. | diff --git a/docs/c-runtime-library/text-and-binary-mode-file-i-o.md b/docs/c-runtime-library/text-and-binary-mode-file-i-o.md index 7a3cde2713..f21bfaef2a 100644 --- a/docs/c-runtime-library/text-and-binary-mode-file-i-o.md +++ b/docs/c-runtime-library/text-and-binary-mode-file-i-o.md @@ -11,7 +11,7 @@ File I/O operations take place in one of two translation modes, *text* or *binar - Retain the current default setting and specify the alternative mode only when you open selected files. -- Use the function [`_set_fmode`](./reference/set-fmode.md) to change the default mode for newly opened files. Use [`_get_fmode`](./reference/get-fmode.md) to find the current default mode. The initial default setting is text mode (`_O_TEXT`). +- Use the function [`_set_fmode`](./reference/set-fmode.md) to change the default mode for newly opened files. Use [`_get_fmode`](./reference/get-fmode.md) to find the current default mode. The initial default setting is ANSI text mode (`_O_TEXT`). - Change the default translation mode directly by setting the global variable [`_fmode`](./fmode.md) in your program. The function `_set_fmode` sets the value of this variable, but it can also be set directly. diff --git a/docs/c-runtime-library/translation-mode-constants.md b/docs/c-runtime-library/translation-mode-constants.md index 1cd90a6225..b50e64e560 100644 --- a/docs/c-runtime-library/translation-mode-constants.md +++ b/docs/c-runtime-library/translation-mode-constants.md @@ -22,10 +22,10 @@ The allowed values are: | Value | Description | |---|---| -| `_O_TEXT` | Opens file in text (translated) mode. Carriage return-line feed (CR-LF) combinations are translated into a single line feed (LF) on input. Line feed characters are translated into CR-LF combinations on output. Also, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading, and for reading and writing, `fopen` checks for CTRL+Z at the end of the file and removes it, if possible. It's removed because using the `fseek` and `ftell` functions to move within a file ending with CTRL+Z may cause `fseek` to behave improperly near the end of the file. | -| `_O_WTEXT` | Opens file in UTF16 (translated) mode. The wide-character versions of the text translations of `_O_TEXT` are supported. | -| `_O_U16TEXT` | Opens file in UTF16 no BOM (translated) mode. The wide-character versions of the text translations of `_O_TEXT` are supported. | -| `_O_U8TEXT` | Opens file in UTF8 no BOM (translated) mode. The text translations of `_O_TEXT` are supported. | +| `_O_TEXT` | Opens file in ANSI text (translated) mode. Carriage return-line feed (CR-LF) combinations are translated into a single line feed (LF) on input. Line feed characters are translated into CR-LF combinations on output. Also, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading, and for reading and writing, `fopen` checks for CTRL+Z at the end of the file and removes it, if possible. It's removed because using the `fseek` and `ftell` functions to move within a file ending with CTRL+Z may cause `fseek` to behave improperly near the end of the file. | +| `_O_WTEXT` | Opens file in UTF-16 text (translated) mode. The wide-character versions of the text translations of `_O_TEXT` are supported. | +| `_O_U16TEXT` | Opens file in UTF-16 no BOM text (translated) mode. The wide-character versions of the text translations of `_O_TEXT` are supported. | +| `_O_U8TEXT` | Opens file in UTF-8 no BOM text (translated) mode. The text translations of `_O_TEXT` are supported. | | `_O_BINARY` | Opens file in binary (untranslated) mode. The above translations are suppressed. | | `_O_RAW` | Same as `_O_BINARY`. Supported for C 2.0 compatibility. | From bfdb8cdbd0210902877d567f19b747a856a6545e Mon Sep 17 00:00:00 2001 From: Jordan Geurten Date: Thu, 16 May 2024 17:56:59 -0400 Subject: [PATCH 0187/1239] Updated integritycheck to point to TSS --- docs/build/reference/integritycheck-require-signature-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/reference/integritycheck-require-signature-check.md b/docs/build/reference/integritycheck-require-signature-check.md index b11cada03e..2e154fe960 100644 --- a/docs/build/reference/integritycheck-require-signature-check.md +++ b/docs/build/reference/integritycheck-require-signature-check.md @@ -17,7 +17,7 @@ The **`/INTEGRITYCHECK`** linker option sets a flag, `IMAGE_DLLCHARACTERISTICS_F ### Signing `/INTEGRITYCHECK` files -Microsoft has new signing guidance for DLL and executable files linked by using **`/INTEGRITYCHECK`**. The guidance used to recommend a cross-signed certificate from the [cross-signing program](/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing). However, the [cross-signing program is now deprecated](/windows-hardware/drivers/install/deprecation-of-software-publisher-certificates-and-commercial-release-certificates). You must now sign your **`/INTEGRITYCHECK`** files by using the Microsoft [Azure Code Signing](https://techcommunity.microsoft.com/t5/security-compliance-and-identity/azure-code-signing-democratizing-trust-for-developers-and/ba-p/3604669) program instead. +Microsoft has new signing guidance for DLL and executable files linked by using **`/INTEGRITYCHECK`**. The guidance used to recommend a cross-signed certificate from the [cross-signing program](/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing). However, the [cross-signing program is now deprecated](/windows-hardware/drivers/install/deprecation-of-software-publisher-certificates-and-commercial-release-certificates). You must now sign your **`/INTEGRITYCHECK`** files by using the Microsoft [Trusted Signing service](/azure/trusted-signing/) program instead. ### To set this linker option in Visual Studio From ef2f3a17a8ccfe28c4af445c15f0dd0886ccd962 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 17 May 2024 10:07:30 -0700 Subject: [PATCH 0188/1239] update warning tables --- .../compiler-warnings-c4000-through-c4199.md | 34 +-- .../compiler-warnings-c4200-through-c4399.md | 2 +- .../compiler-warnings-c4600-through-c4799.md | 246 +++++++++--------- .../compiler-warnings-c4800-through-c4999.md | 88 +++---- .../compiler-warnings-c5000-through-c5199.md | 38 +-- .../compiler-warnings-c5200-through-c5399.md | 56 ++-- 6 files changed, 232 insertions(+), 232 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md index 676f0a60ce..f4d86b4ba3 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md @@ -16,8 +16,8 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |-------------|-------------| |Compiler warning C4000|UNKNOWN WARNING
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information| |[Compiler warning (level 4, no longer emitted) C4001](compiler-warning-level-4-c4001.md)|nonstandard extension 'single line comment' was used| -|[Compiler warning (level 1, Error) C4002](compiler-warning-level-1-c4002.md)|too many arguments for function-like macro invocation '*identifier*'| -|[Compiler warning (level 1, Error) C4003](compiler-warning-level-1-c4003.md)|not enough arguments for function-like macro invocation '*identifier*'| +|[Compiler warning (level 1, error) C4002](compiler-warning-level-1-c4002.md)|too many arguments for function-like macro invocation '*identifier*'| +|[Compiler warning (level 1, error) C4003](compiler-warning-level-1-c4003.md)|not enough arguments for function-like macro invocation '*identifier*'| |[Compiler warning (level 1) C4005](compiler-warning-level-1-c4005.md)|'*identifier*': macro redefinition| |[Compiler warning (level 1) C4006](compiler-warning-level-1-c4006.md)|`#undef` expected an identifier| |[Compiler warning (level 3) C4007](compiler-warning-level-2-c4007.md)|'*function*': must be '*attribute*'| @@ -28,10 +28,10 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 3) C4018](compiler-warning-level-3-c4018.md)|'*expression*': signed/unsigned mismatch| |[Compiler warning (level 4) C4019](compiler-warning-level-4-c4019.md)|empty statement at global scope| |[Compiler warning (level 1) C4020](compiler-warning-level-1-c4020.md)|'function': too many actual parameters| -|[Compiler warning (level 1) C4022](compiler-warning-level-1-c4022.md)|'*function*': pointer mismatch for actual parameter '*parameter_number*'| -|Compiler warning (level 1) C4023|'*function*': based pointer passed to unprototyped function: parameter '*parameter_number*'| -|[Compiler warning (level 1) C4024](compiler-warning-level-1-c4024.md)|'*function*': different types for formal and actual parameter '*parameter_number*'| -|[Compiler warning (level 1) C4025](compiler-warning-level-1-c4025.md)|'*function*': based pointer passed to function with variable arguments: parameter '*parameter_number*'| +|[Compiler warning (level 1) C4022](compiler-warning-level-1-c4022.md)|'*function*': pointer mismatch for actual parameter *parameter_number*| +|Compiler warning (level 1) C4023|'*function*': based pointer passed to unprototyped function: parameter *parameter_number*| +|[Compiler warning (level 1) C4024](compiler-warning-level-1-c4024.md)|'*function*': different types for formal and actual parameter *parameter_number*| +|[Compiler warning (level 1) C4025](compiler-warning-level-1-c4025.md)|'*function*': based pointer passed to function with variable arguments: parameter *parameter_number*| |[Compiler warning (level 1) C4026](compiler-warning-level-1-c4026.md)|function declared with formal parameter list| |[Compiler warning (level 1) C4027](compiler-warning-level-1-c4027.md)|function declared without formal parameter list| |[Compiler warning (level 1) C4028](compiler-warning-level-1-c4028.md)|formal parameter *parameter_number* different from declaration| @@ -69,7 +69,7 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 3) C4073](compiler-warning-level-3-c4073.md)|initializers put in library initialization area| |[Compiler warning (level 1) C4074](compiler-warning-level-1-c4074.md)|initializers put in compiler reserved initialization area| |[Compiler warning (level 1) C4075](compiler-warning-level-1-c4075.md)|initializers put in unrecognized initialization area| -|[Compiler warning (level 1) C4076](compiler-warning-level-1-c4076.md)|'*type_modifier*': can't be used with type '*typename*'| +|[Compiler warning (level 1) C4076](compiler-warning-level-1-c4076.md)|'*type_modifier*': cannot be used with type '*typename*'| |[Compiler warning (level 1) C4077](compiler-warning-level-1-c4077.md)|unknown check_stack option| |[Compiler warning (level 1) C4079](compiler-warning-level-1-c4079.md)|unexpected token '*token*'| |[Compiler warning (level 1) C4080](compiler-warning-level-1-c4080.md)|expected identifier for segment name; found '*symbol*'| @@ -78,8 +78,8 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 1) C4085](compiler-warning-level-1-c4085.md)|expected pragma parameter to be '`on`' or '`off`'| |[Compiler warning (level 1) C4086](compiler-warning-level-1-c4086.md)|expected pragma parameter to be '1', '2', '4', '8', or '16'| |[Compiler warning (level 1) C4087](compiler-warning-level-1-c4087.md)|'function': declared with '`void`' parameter list| -|[Compiler warning (level 1) C4088](compiler-warning-level-1-c4088.md)|'*function*': pointer mismatch in actual parameter '*parameter_number*', formal parameter '*parameter_number*'| -|[Compiler warning (level 1) C4089](compiler-warning-level-1-c4089.md)|'*function*': different types in actual parameter '*parameter_number*', formal parameter '*parameter_number*'| +|[Compiler warning (level 1) C4088](compiler-warning-level-1-c4088.md)|'*function*': pointer mismatch in actual parameter *parameter_number*, formal parameter *parameter_number*| +|[Compiler warning (level 1) C4089](compiler-warning-level-1-c4089.md)|'*function*': different types in actual parameter *parameter_number*, formal parameter *parameter_number*| |[Compiler warning (level 1) C4090](compiler-warning-level-1-c4090.md)|'*operation*': different '*modifier*' qualifiers| |[Compiler warning (level 1 and level 2) C4091](compiler-warning-level-1-c4091.md)|'*keyword*': ignored on left of '*type*' when no variable is declared| |[Compiler warning (level 4) C4092](compiler-warning-level-4-c4092.md)|sizeof returns 'unsigned long'| @@ -93,7 +93,7 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 3) C4102](compiler-warning-level-3-c4102.md)|'*label*': unreferenced label| |[Compiler warning (level 1) C4103](compiler-warning-level-1-c4103.md)|alignment changed after including header, may be due to missing `#pragma pack(pop)`| |[Compiler warning (level 1) C4109](compiler-warning-level-1-c4109.md)|unexpected identifier '*identifier*'| -|[Compiler warning (level 1 and level 4) C4112](compiler-warning-levels-1-and-4-c4112.md)|`#line` requires an integer between 1 and '*line_count*'| +|[Compiler warning (level 1 and level 4) C4112](compiler-warning-levels-1-and-4-c4112.md)|`#line` requires an integer between 1 and *line_count*| |[Compiler warning (level 1) C4113](compiler-warning-level-1-c4113.md)|'*identifier1*' differs in parameter lists from '*identifier2*'| |[Compiler warning (level 1) C4114](compiler-warning-level-1-c4114.md)|same type qualifier used more than once| |[Compiler warning (level 1 and level 4) C4115](compiler-warning-levels-1-and-4-c4115.md)|'*type*': named type definition in parentheses| @@ -114,7 +114,7 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 1 and level 3) C4133](compiler-warning-level-3-c4133.md)|'*expression*': incompatible types - from '*type1*' to '*type2*'| |Compiler warning C4137|'function': no return value from floating-point function| |[Compiler warning (level 1) C4138](compiler-warning-level-1-c4138.md)|'`*/`' found outside of comment| -|[Compiler warning (level 1, Error) C4141](compiler-warning-level-1-c4141.md)|'*modifier*': used more than once| +|[Compiler warning (level 1, error) C4141](compiler-warning-level-1-c4141.md)|'*modifier*': used more than once| |[Compiler warning (level 1) C4142](compiler-warning-level-1-c4142.md)|'*identifier*': benign redefinition of type| |[Compiler warning (level 1) C4143](compiler-warning-level-1-c4143.md)|`pragma` 'same_seg' not supported; use `__based` allocation| |[Compiler warning (level 1) C4144](compiler-warning-level-1-c4144.md)|'*expression*': relational expression as switch expression| @@ -127,10 +127,10 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 1) C4155](compiler-warning-level-1-c4155.md)|deletion of an array expression without using the array form of 'delete'| |[Compiler warning (level 2) C4156](compiler-warning-level-2-c4156.md)|deletion of an array expression without using the array form of 'delete'; array form substituted| |[Compiler warning (level 1) C4157](compiler-warning-level-1-c4157.md)|pragma was ignored by C compiler| -|[Compiler warning (level 1) C4158](compiler-warning-level-1-c4158.md)|assuming `#pragma pointers_to_members(full_generality, `'*inheritance_type*'`)`| -|[Compiler warning (level 3) C4159](compiler-warning-level-3-c4159.md)|`#pragma `'*pragma*'`(pop,...)`: has popped previously pushed identifier '*identifier*'| -|[Compiler warning (level 1) C4160](compiler-warning-level-1-c4160.md)|`#pragma `'*pragma*'`(pop,...)`: did not find previously pushed identifier '*identifier*'| -|[Compiler warning (level 3) C4161](compiler-warning-level-3-c4161.md)|`#pragma `'*pragma*'`(pop...)`: more pops than pushes| +|[Compiler warning (level 1) C4158](compiler-warning-level-1-c4158.md)|assuming `#pragma pointers_to_members(full_generality, `*inheritance_type*`)`| +|[Compiler warning (level 3) C4159](compiler-warning-level-3-c4159.md)|`#pragma `*pragma*`(pop,...)`: has popped previously pushed identifier '*identifier*'| +|[Compiler warning (level 1) C4160](compiler-warning-level-1-c4160.md)|`#pragma `*pragma*`(pop,...)`: did not find previously pushed identifier '*identifier*'| +|[Compiler warning (level 3) C4161](compiler-warning-level-3-c4161.md)|`#pragma `*pragma*`(pop...)`: more pops than pushes| |[Compiler warning (level 1) C4162](compiler-warning-level-1-c4162.md)|'*identifier*': no function with C linkage found| |[Compiler warning (level 1) C4163](compiler-warning-level-1-c4163.md)|'*identifier*': not available as an intrinsic function| |[Compiler warning (level 1) C4164](compiler-warning-level-1-c4164.md)|'*function*': intrinsic function not declared| @@ -149,8 +149,8 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |Compiler warning C4181|qualifier applied to reference type; ignored| |[Compiler warning (level 1) C4182](compiler-warning-level-1-c4182.md)|`#include` nesting level is *nest_count* deep; possible infinite recursion| |[Compiler warning (level 1) C4183](compiler-warning-level-1-c4183.md)|'*identifier*': missing return type; assumed to be a member function returning '`int`'| -|[Compiler warning (level 1) C4185](compiler-warning-level-1-c4185.md)|ignoring unknown `#import` attribute '*attribute*'| -|[Compiler warning (level 1) C4186](compiler-warning-level-1-c4186.md)|`#`*import* attribute '*attribute*' requires '*argument_count*' arguments; ignored| +|[Compiler warning (level 1) C4185](compiler-warning-level-1-c4185.md)|ignoring unknown `#`*import* attribute '*attribute*'| +|[Compiler warning (level 1) C4186](compiler-warning-level-1-c4186.md)|`#`*import* attribute '*attribute*' requires *argument_count* arguments; ignored| |[Compiler warning (level 1) C4187](compiler-warning-level-1-c4187.md)|`#import` attributes '*attribute1*' and '*attribute2*' are incompatible; both ignored| |Compiler warning (level 1) C4188|constant expression is not integral| |[Compiler warning (level 3 and level 4) C4189](compiler-warning-level-4-c4189.md)|'*identifier*': local variable is initialized but not referenced| diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 276cb8c9c9..e4696b1465 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -125,7 +125,7 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |[Compiler warning (level 4) C4336](compiler-warning-level-4-c4336.md)|import cross-referenced type library '*library1*' before importing '*library2*'| |[Compiler warning (level 4) C4337](compiler-warning-level-4-c4337.md)|cross-referenced type library '*library1*' in '*library2*' is being automatically imported| |Compiler warning (level 4) C4338|#pragma *directive*: standard section '*section*' is used| -|[Compiler warning (level 4, off) C4339](compiler-warning-level-4-c4339.md)|'*type*': use of undefined type detected in 'WinRT\|CLR' meta-data - use of this type may lead to a runtime exception| +|[Compiler warning (level 4, off) C4339](compiler-warning-level-4-c4339.md)|'*type*': use of undefined type detected in *WinRT/CLR* meta-data - use of this type may lead to a runtime exception| |[Compiler warning (level 1) C4340](compiler-warning-level-1-c4340.md)|'*value*': value wrapped from positive to negative value| |[Compiler warning (level 1, off, no longer emitted) C4342](compiler-warning-level-1-c4342.md)|behavior change: '*function*' called, but a member operator was called in previous versions| |[Compiler warning (level 4) C4343](compiler-warning-level-4-c4343.md)|`#pragma optimize("g",off)` overrides `/Og` option| diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md index 3bdb97c94b..a4996432c5 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md @@ -15,162 +15,162 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |Warning|Message| |-------------|-------------| -|[Compiler warning (level 1) C4600](../../error-messages/compiler-warnings/compiler-warning-level-1-c4600.md)|#pragma 'macro name': expected a valid non-empty string| -|[Compiler warning (level 1) C4602](compiler-warning-level-1-c4602.md)|#pragma pop_macro: 'macro name' no previous #pragma push_macro for this identifier| +|[Compiler warning (level 1) C4600](compiler-warning-level-1-c4600.md)|`#pragma `'*macro name*': expected a valid non-empty string| +|[Compiler warning (level 1) C4602](compiler-warning-level-1-c4602.md)|`#pragma pop_macro: `'*macro name*' no previous `#pragma push_macro` for this identifier| |[Compiler warning (level 1) C4603](compiler-warning-level-1-c4603.md)|'*identifier*': macro is not defined or definition is different after precompiled header use| -|Compiler warning (level 1) C4604|'*type*': passing argument by value across native and managed boundary requires valid copy constructor. Otherwise the runtime behavior is undefined| -|Compiler warning (level 1) C4605|'/D*macro*' specified on current command line, but was not specified when precompiled header was built| -|[Compiler warning (level 1) C4606](../../error-messages/compiler-warnings/compiler-warning-level-1-c4606.md)|#pragma warning: 'warning number' ignored; Code Analysis warnings are not associated with warning levels| -|[Compiler warning (level 3) C4608](../../error-messages/compiler-warnings/compiler-warning-level-3-c4608.md)|'union_member' has already been initialized by another union member in the initializer list, 'union_member'| -|Compiler warning (level 3, Error) C4609|'*type1*' derives from default interface '*interface*' on type '*type2*'. Use a different default interface for '*type1*', or break the base/derived relationship.| -|[Compiler warning (level 4) C4610](../../error-messages/compiler-warnings/compiler-warning-level-4-c4610.md)|object 'class' can never be instantiated - user defined constructor required| -|[Compiler warning (level 4) C4611](../../error-messages/compiler-warnings/compiler-warning-level-4-c4611.md)|interaction between 'function' and C++ object destruction is non-portable| +|Compiler warning (level 1) C4604|'*type*': passing an argument of this type by value across the native/managed boundary requires the type to be move- or copy-constructible. Otherwise, the runtime behavior is undefined| +|Compiler warning (level 1, off) C4605|'`/D`*macro*' specified on current command line, but was not specified when precompiled header was built| +|[Compiler warning (level 1) C4606](compiler-warning-level-1-c4606.md)|`#pragma warning:` '*warning number*' ignored; Code Analysis warnings are not associated with warning levels| +|[Compiler warning (level 3, off) C4608](compiler-warning-level-3-c4608.md)|Initializing multiple members of union: '*member1*' and '*member2*'| +|Compiler warning (level 3, error) C4609|'*type1*' derives from default interface '*interface*' on type '*type2*'. Use a different default interface for '*type1*', or break the base/derived relationship.| +|[Compiler warning (level 4) C4610](compiler-warning-level-4-c4610.md)|*class* '*name*' can never be instantiated - user defined constructor required| +|[Compiler warning (level 4) C4611](compiler-warning-level-4-c4611.md)|interaction between '*function*' and C++ object destruction is non-portable| |[Compiler warning (level 1) C4612](compiler-warning-level-1-c4612.md)|error in include filename| |[Compiler warning (level 1) C4613](compiler-warning-level-1-c4613.md)|'*symbol*': class of segment cannot be changed| -|[Compiler warning (level 1) C4615](../../error-messages/compiler-warnings/compiler-warning-level-1-c4615.md)|#pragma warning: unknown user warning type| -|[Compiler warning (level 1) C4616](../../error-messages/compiler-warnings/compiler-warning-level-1-c4616.md)|#pragma warning: warning number 'number' not a valid compiler warning| -|[Compiler warning (level 1) C4618](../../error-messages/compiler-warnings/compiler-warning-level-1-c4618.md)|pragma parameters included an empty string; pragma ignored| -|[Compiler warning (level 3) C4619](../../error-messages/compiler-warnings/compiler-warning-level-3-c4619.md)|#pragma warning: there is no warning number 'number'| -|[Compiler warning (level 1) C4620](compiler-warning-level-1-c4620.md)|no postfix form of 'operator ++' found for type 'type', using prefix form| -|[Compiler warning (level 1) C4621](../../error-messages/compiler-warnings/compiler-warning-level-1-c4621.md)|no postfix form of 'operator --' found for type 'type', using prefix form| -|[Compiler warning (level 3) C4622](compiler-warning-level-3-c4622.md)|overwriting debug information formed during creation of the precompiled header in object file: 'file'| -|[Compiler warning (level 4) C4623](../../error-messages/compiler-warnings/compiler-warning-level-4-c4623.md)|'derived class': default constructor was implicitly defined as deleted because a base class default constructor is inaccessible or deleted| -|[Compiler warning (level 1) C4624](../../error-messages/compiler-warnings/compiler-warning-level-1-c4624.md)|'derived class': destructor was implicitly defined as deleted because a base class destructor is inaccessible or deleted| -|[Compiler warning (level 4) C4625](../../error-messages/compiler-warnings/compiler-warning-level-4-c4625.md)|'derived class': copy constructor was implicitly defined as deleted because a base class copy constructor is inaccessible or deleted| -|[Compiler warning (level 4) C4626](../../error-messages/compiler-warnings/compiler-warning-level-4-c4626.md)|'derived class': assignment operator was implicitly defined as deleted because a base class assignment operator is inaccessible or deleted| -|[Compiler warning (level 1) C4627](../../error-messages/compiler-warnings/compiler-warning-level-1-c4627.md)|'\': skipped when looking for precompiled header use| -|[Compiler warning (level 1) C4628](../../error-messages/compiler-warnings/compiler-warning-level-1-c4628.md)|digraphs not supported with -Ze. Character sequence 'digraph' not interpreted as alternate token for '%s'| -|[Compiler warning (level 4) C4629](compiler-warning-level-4-c4629.md)|digraph used, character sequence 'digraph' interpreted as token 'char' (insert a space between the two characters if this is not what you intended)| -|[Compiler warning (level 1) C4630](../../error-messages/compiler-warnings/compiler-warning-level-1-c4630.md)|'symbol': 'extern' storage-class specifier illegal on member definition| -|Compiler warning (level 2) C4631|MSXML or XPath unavailable, XML document comments will not be processed. reason| -|[Compiler warning (level 1) C4632](../../error-messages/compiler-warnings/compiler-warning-level-1-c4632.md)|XML document comment: file - access denied: reason| -|[Compiler warning (level 3) C4633](../../error-messages/compiler-warnings/compiler-warning-level-3-c4633.md)|XML document comment target: error: reason| -|[Compiler warning (level 4) C4634](compiler-warning-level-4-c4634.md)|XML document comment target: cannot be applied: reason| -|[Compiler warning (level 3) C4635](compiler-warning-level-3-c4635.md)|XML document comment target: badly-formed XML: reason| -|[Compiler warning (level 3) C4636](compiler-warning-level-3-c4636.md)|XML document comment applied to construct: tag requires non-empty 'attribute' attribute.| -|[Compiler warning (level 3 and level 4) C4637](compiler-warning-level-3-c4637.md)|XML document comment target: \ tag discarded. Reason| -|[Compiler warning (level 3) C4638](compiler-warning-level-3-c4638.md)|XML document comment target: reference to unknown symbol 'symbol'.| -|[Compiler warning (level 4) C4639](../../error-messages/compiler-warnings/compiler-warning-level-4-c4639.md)|MSXML error, XML document comments will not be processed. Reason| -|[Compiler warning (level 3) C4640](../../error-messages/compiler-warnings/compiler-warning-level-3-c4640.md)|'instance': construction of local static object is not thread-safe| -|[Compiler warning (level 3) C4641](../../error-messages/compiler-warnings/compiler-warning-level-3-c4641.md)|XML document comment has an ambiguous cross reference:| +|[Compiler warning (level 1) C4615](compiler-warning-level-1-c4615.md)|`#pragma warning`: unknown user warning type| +|[Compiler warning (level 1) C4616](compiler-warning-level-1-c4616.md)|`#pragma warning`: warning number '*number*' not a valid compiler warning| +|[Compiler warning (level 1) C4618](compiler-warning-level-1-c4618.md)|pragma parameters included an empty string; pragma ignored| +|[Compiler warning (level 3, off) C4619](compiler-warning-level-3-c4619.md)|`#pragma warning`: there is no warning number '*number*'| +|[Compiler warning (level 1) C4620](compiler-warning-level-1-c4620.md)|no postfix form of '`operator ++`' found for type '*type*', using prefix form| +|[Compiler warning (level 1) C4621](compiler-warning-level-1-c4621.md)|no postfix form of '`operator --`' found for type '*type*', using prefix form| +|[Compiler warning (level 3) C4622](compiler-warning-level-3-c4622.md)|overwriting debug information formed during creation of the precompiled header in object file: '*file*'| +|[Compiler warning (level 1 and level 4, off) C4623](compiler-warning-level-4-c4623.md)|'*derived class*': default constructor was implicitly defined as deleted| +|[Compiler warning (level 1 and level 4) C4624](compiler-warning-level-1-c4624.md)|'*derived class*': destructor was implicitly defined as deleted| +|[Compiler warning (level 1 and level 4, off) C4625](compiler-warning-level-4-c4625.md)|'*derived class*': copy constructor was implicitly defined as deleted| +|[Compiler warning (level 1 and level 4, off) C4626](compiler-warning-level-4-c4626.md)|'*derived class*': assignment operator was implicitly defined as deleted| +|[Compiler warning (level 1, no longer emitted) C4627](compiler-warning-level-1-c4627.md)|'`identifier`': skipped when looking for precompiled header use| +|[Compiler warning (level 1, off) C4628](compiler-warning-level-1-c4628.md)|digraphs not supported with `-Ze`. Character sequence '*digraph*' not interpreted as alternate token for '*token*'| +|[Compiler warning (level 4, no longer emitted) C4629](compiler-warning-level-4-c4629.md)|digraph used, character sequence '*digraph*' interpreted as token '*char*' (insert a space between the two characters if this is not what you intended)| +|[Compiler warning (level 1) C4630](compiler-warning-level-1-c4630.md)|'*symbol*': '*extern*' storage-class specifier illegal on member definition| +|Compiler warning (level 2) C4631|`MSXML` or `XPath` unavailable, XML document comments will not be processed. *reason*| +|[Compiler warning (level 1) C4632](compiler-warning-level-1-c4632.md)|XML document comment: *file* - access denied: *reason*| +|[Compiler warning (level 3 and level 4) C4633](compiler-warning-level-3-c4633.md)|XML document comment *target*: error: *reason*| +|[Compiler warning (level 4) C4634](compiler-warning-level-4-c4634.md)|XML document comment *target*: cannot be applied: *reason*| +|[Compiler warning (level 3 and level 4) C4635](compiler-warning-level-3-c4635.md)|XML document comment *target*: badly-formed XML: *reason*| +|[Compiler warning (level 3) C4636](compiler-warning-level-3-c4636.md)|XML document comment *target*: tag requires non-empty '*attribute*' attribute.| +|[Compiler warning (level 3 and level 4) C4637](compiler-warning-level-3-c4637.md)|XML document comment *target*: `` tag discarded. *Reason*| +|[Compiler warning (level 3) C4638](compiler-warning-level-3-c4638.md)|XML document comment *target*: reference to unknown symbol '*symbol*'.| +|[Compiler warning (level 2) C4639](compiler-warning-level-4-c4639.md)|`MSXML` error, XML document comments will not be processed. *Reason*| +|[Compiler warning (level 3, off) C4640](compiler-warning-level-3-c4640.md)|'*instance*': construction of local static object is not thread-safe| +|[Compiler warning (level 3) C4641](compiler-warning-level-3-c4641.md)|XML document comment has an ambiguous cross reference:| |Compiler warning (level 1) C4642|'*class*': could not import the constraints for generic parameter '*name*'| |Compiler warning (level 4, off) C4643|Forward declaring '*identifier*' in namespace std is not permitted by the C++ Standard.| |Compiler warning (level 1) C4644|usage of the macro-based `offsetof` pattern in constant expressions is non-standard; use `offsetof` defined in the C++ standard library instead| -|[Compiler warning (level 3) C4645](compiler-warning-level-3-c4645.md)|function declared with __declspec(noreturn) has a return statement| -|[Compiler warning (level 3) C4646](compiler-warning-level-3-c4646.md)|function declared with __declspec(noreturn) has non-void return type| -|Compiler warning (level 3) C4647|behavior change: __is_pod(*type*) has different value in previous versions| -|Compiler warning (level 3) C4648|standard attribute 'carries_dependency' is ignored| +|[Compiler warning (level 3) C4645](compiler-warning-level-3-c4645.md)|function declared with '`noreturn`' has a return statement| +|[Compiler warning (level 3) C4646](compiler-warning-level-3-c4646.md)|function declared with '`noreturn`' has non-void return type| +|Compiler warning (level 3, off) C4647|behavior change: `__is_pod(`*type*`)` has different value in previous versions| +|Compiler warning (level 3) C4648|standard attribute `[[`*attribute*`]]` is ignored| |Compiler warning (level 3) C4649|attributes are ignored in this context| -|[Compiler warning (level 1) C4650](../../error-messages/compiler-warnings/compiler-warning-level-1-c4650.md)|debugging information not in precompiled header; only global symbols from the header will be available| -|[Compiler warning (level 1) C4651](../../error-messages/compiler-warnings/compiler-warning-level-1-c4651.md)|'definition' specified for precompiled header but not for current compile| -|[Compiler warning (level 1) C4652](../../error-messages/compiler-warnings/compiler-warning-level-1-c4652.md)|compiler option 'option' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header| -|[Compiler warning (level 2) C4653](../../error-messages/compiler-warnings/compiler-warning-level-2-c4653.md)|compiler option 'option' inconsistent with precompiled header; current command-line option ignored| -|Compiler warning (level 4) C4654|Code placed before include of precompiled header line will be ignored. Add code to precompiled header.| -|[Compiler warning (level 1) C4655](compiler-warning-level-1-c4655.md)|'symbol': variable type is new since the latest build, or is defined differently elsewhere| -|[Compiler warning (level 1) C4656](../../error-messages/compiler-warnings/compiler-warning-level-1-c4656.md)|'symbol': data type is new or has changed since the latest build, or is defined differently elsewhere| +|[Compiler warning (level 1) C4650](compiler-warning-level-1-c4650.md)|debugging information not in precompiled header; only global symbols from the header will be available| +|[Compiler warning (level 1) C4651](compiler-warning-level-1-c4651.md)|'`/D`*definition*' specified for precompiled header but not for current compile| +|[Compiler warning (level 1) C4652](compiler-warning-level-1-c4652.md)|compiler option '*option*' inconsistent with precompiled header; current command-line option will override that defined in the precompiled header| +|[Compiler warning (level 1) C4653](compiler-warning-level-2-c4653.md)|compiler option '*option*' inconsistent with precompiled header; current command-line option ignored| +|Compiler warning (level 4, off) C4654|Code placed before include of precompiled header line will be ignored. Add code to precompiled header.| +|[Compiler warning (level 1) C4655](compiler-warning-level-1-c4655.md)|'*symbol*': variable type is new since the latest build, or is defined differently elsewhere| +|[Compiler warning (level 1) C4656](compiler-warning-level-1-c4656.md)|'*symbol*': data type is new or has changed since the latest build, or is defined differently elsewhere| |[Compiler warning (level 1) C4657](compiler-warning-level-1-c4657.md)|expression involves a data type that is new since the latest build| -|Compiler warning (level 1) C4658|'function': function prototype is new since the latest build, or is declared differently elsewhere| -|[Compiler warning (level 1) C4659](../../error-messages/compiler-warnings/compiler-warning-level-1-c4659.md)|#pragma 'pragma': use of reserved segment 'segment' has undefined behavior, use #pragma comment(linker, ...)| -|[Compiler warning (level 1) C4661](../../error-messages/compiler-warnings/compiler-warning-level-1-c4661.md)|'identifier': no suitable definition provided for explicit template instantiation request| -|[Compiler warning (level 1) C4662](compiler-warning-level-1-c4662.md)|explicit instantiation; template-class 'identifier1' has no definition from which to specialize 'identifier2'| -|[Compiler warning (level 1) C4667](../../error-messages/compiler-warnings/compiler-warning-level-1-c4667.md)|'function': no function template defined that matches forced instantiation| -|[Compiler warning (level 4) C4668](../../error-messages/compiler-warnings/compiler-warning-level-4-c4668.md)|'symbol' is not defined as a preprocessor macro, replacing with '0' for 'directive'| -|[Compiler warning (level 1) C4669](../../error-messages/compiler-warnings/compiler-warning-level-1-c4669.md)|'cast': unsafe conversion: 'class' is a managed type object| -|[Compiler warning (level 4) C4670](compiler-warning-level-4-c4670.md)|'identifier': this base class is inaccessible| -|Compiler warning (level 4) C4671|'identifier': the copy constructor is inaccessible| -|[Compiler warning (level 4) C4672](compiler-warning-level-4-c4672.md)|'identifier1': ambiguous. First seen as 'identifier2'| -|[Compiler warning (level 4) C4673](../../error-messages/compiler-warnings/compiler-warning-level-4-c4673.md)|throwing 'identifier' the following types will not be considered at the catch site| -|[Compiler warning (level 1) C4674](compiler-warning-level-1-c4674.md)|'method' should be declared 'static' and have exactly one parameter| -|Compiler warning (level 4) C4676|'%s': the destructor is inaccessible| -|[Compiler warning (level 1) C4677](../../error-messages/compiler-warnings/compiler-warning-level-1-c4677.md)|'function': signature of non-private member contains assembly private type 'private_type'| -|[Compiler warning (level 1) C4678](compiler-warning-level-1-c4678.md)|base class 'base_type' is less accessible than 'derived_type'| -|[Compiler warning (level 1) C4679](../../error-messages/compiler-warnings/compiler-warning-level-1-c4679.md)|'member': could not import member| -|[Compiler warning (level 4) C4680](../../error-messages/compiler-warnings/compiler-warning-level-4-c4680.md)|'class': coclass does not specify a default interface| -|[Compiler warning (level 4) C4681](compiler-warning-level-4-c4681.md)|'class': coclass does not specify a default interface that is an event source| -|[Compiler warning (level 4) C4682](compiler-warning-level-4-c4682.md)|'parameter': no directional parameter attribute specified, defaulting to [in]| -|[Compiler warning (level 1) C4683](../../error-messages/compiler-warnings/compiler-warning-level-1-c4683.md)|'function': event source has an 'out'-parameter; exercise caution when hooking multiple event handlers| -|[Compiler warning (level 1) C4684](../../error-messages/compiler-warnings/compiler-warning-level-1-c4684.md)|'attribute': WARNING!! attribute may cause invalid code generation: use with caution| -|[Compiler warning (level 1) C4685](compiler-warning-level-1-c4685.md)|expecting '> >' found '>>' when parsing template parameters| -|[Compiler warning (level 3) C4686](../../error-messages/compiler-warnings/compiler-warning-level-3-c4686.md)|'user-defined type': possible change in behavior, change in UDT return calling convention| -|[Compiler warning (Error) C4687](../../error-messages/compiler-warnings/compiler-warning-c4687.md)|'class': a sealed abstract class cannot implement an interface 'interface'| -|[Compiler warning (level 1) C4688](../../error-messages/compiler-warnings/compiler-warning-level-1-c4688.md)|'constraint': constraint list contains assembly private type 'type'| -|Compiler warning (level 1) C4689|'%c': unsupported character in #pragma detect_mismatch; #pragma ignored| -|[Compiler warning (level 4) C4690](../../error-messages/compiler-warnings/compiler-warning-level-4-c4690.md)|[ emitidl( pop ) ]: more pops than pushes| -|[Compiler warning (level 1) C4691](../../error-messages/compiler-warnings/compiler-warning-level-1-c4691.md)|'type': type referenced was expected in unreferenced assembly 'file', type defined in current translation unit used instead| -|[Compiler warning (level 1) C4692](../../error-messages/compiler-warnings/compiler-warning-level-1-c4692.md)|'function': signature of non-private member contains assembly private native type 'native_type'| -|[Compiler warning (level 1, Error) C4693](../../error-messages/compiler-warnings/compiler-warning-c4693.md)|'class': a sealed abstract class cannot have any instance members 'instance member'| -|[Compiler warning (level 1, Error) C4694](../../error-messages/compiler-warnings/compiler-warning-c4694.md)|'class': a sealed abstract class cannot have a base-class 'base_class'| -|Compiler warning (level 1) C4695|#pragma execution_character_set: 'character set' is not a supported argument: currently only 'UTF-8' is supported| -|Compiler warning (level 1) C4696|/ZBvalue1 option out of range; assuming 'value2'| -| [Compiler warning (level 3) C4698](../../error-messages/compiler-warnings/c4698.md) | '*feature*' is for evaluation purposes only and is subject to change or removal in future updates. | -|[Compiler warning (level 1 and level 4) C4700](../../error-messages/compiler-warnings/compiler-warning-level-1-and-level-4-c4700.md)|uninitialized local variable 'name' used| -|[Compiler warning (level 4) C4701](../../error-messages/compiler-warnings/compiler-warning-level-4-c4701.md)|potentially uninitialized local variable 'name' used| -|[Compiler warning (level 4) C4702](../../error-messages/compiler-warnings/compiler-warning-level-4-c4702.md)|unreachable code| -|[Compiler warning (level 4) C4703](../../error-messages/compiler-warnings/compiler-warning-level-4-c4703.md)|potentially uninitialized local pointer variable '%s' used| -|[Compiler warning (level 4) C4706](../../error-messages/compiler-warnings/compiler-warning-level-4-c4706.md)|assignment within conditional expression| -|[Compiler warning (level 4) C4709](../../error-messages/compiler-warnings/compiler-warning-level-4-c4709.md)|comma operator within array index expression| -|[Compiler warning (level 4) C4710](../../error-messages/compiler-warnings/compiler-warning-level-4-c4710.md)|'function': function not inlined| -|[Compiler warning (level 1) C4711](../../error-messages/compiler-warnings/compiler-warning-level-1-c4711.md)|function 'function' selected for automatic inline expansion| -|[Compiler warning (level 4) C4714](../../error-messages/compiler-warnings/compiler-warning-level-4-c4714.md)|function 'function' marked as __forceinline not inlined| -|[Compiler warning (level 1) C4715](../../error-messages/compiler-warnings/compiler-warning-level-1-c4715.md)|'function': not all control paths return a value| -|[Compiler warning (level 1, Error) C4716](../../error-messages/compiler-warnings/compiler-warning-level-1-c4716.md)|'function': must return a value| -|[Compiler warning (level 1) C4717](../../error-messages/compiler-warnings/compiler-warning-level-1-c4717.md)|'function': recursive on all control paths, function will cause runtime stack overflow| +|Compiler warning (level 1) C4658|'*function*': function prototype is new since the latest build, or is declared differently elsewhere| +|[Compiler warning (level 1) C4659](compiler-warning-level-1-c4659.md)|`#pragma `'*pragma*': use of reserved segment '*segment*' has undefined behavior, use `#pragma comment(linker, ...)`| +|[Compiler warning (level 1) C4661](compiler-warning-level-1-c4661.md)|'*identifier*': no suitable definition provided for explicit template instantiation request| +|[Compiler warning (level 1) C4662](compiler-warning-level-1-c4662.md)|explicit instantiation; template-class '*identifier1*' has no definition from which to specialize '*identifier2*'| +|[Compiler warning (level 1) C4667](compiler-warning-level-1-c4667.md)|'*function*': cannot find a function template that matches the explicit instantiation| +|[Compiler warning (level 4, off) C4668](compiler-warning-level-4-c4668.md)|'*symbol*' is not defined as a preprocessor macro, replacing with '`0`' for '*directive*'| +|[Compiler warning (level 1) C4669](compiler-warning-level-1-c4669.md)|'*cast*': unsafe conversion: '*class*' is a *managed/WinRT* type object| +|[Compiler warning (level 4) C4670](compiler-warning-level-4-c4670.md)|'*identifier*': this base class is inaccessible| +|Compiler warning (level 4) C4671|'*identifier*': the copy constructor is inaccessible| +|[Compiler warning (level 4) C4672](compiler-warning-level-4-c4672.md)|'*identifier1*': ambiguous. First seen as '*identifier2*'| +|[Compiler warning (level 4) C4673](compiler-warning-level-4-c4673.md)|throwing '*identifier*' the following types will not be considered at the catch site| +|[Compiler warning (level 1) C4674](compiler-warning-level-1-c4674.md)|'*method*' should be declared '`static`' and have exactly one parameter| +|Compiler warning (level 4) C4676|'*class*': the destructor is inaccessible| +|[Compiler warning (level 1) C4677](compiler-warning-level-1-c4677.md)|'*function*': signature of non-private member contains assembly private type '*private_type*'| +|[Compiler warning (level 1) C4678](compiler-warning-level-1-c4678.md)|base class '*base_type*' is less accessible than '*derived_type*'| +|[Compiler warning (level 1 and level 4) C4679](compiler-warning-level-1-c4679.md)|'*member*': could not import item or its associated custom attribute| +|[Compiler warning (level 4) C4680](compiler-warning-level-4-c4680.md)|'*class*': `coclass` does not specify a default interface| +|[Compiler warning (level 4) C4681](compiler-warning-level-4-c4681.md)|'*class*': `coclass` does not specify a default interface that is an event source| +|[Compiler warning (level 4, off) C4682](compiler-warning-level-4-c4682.md)|'*parameter*': no directional parameter attribute specified, defaulting to `[in]`| +|[Compiler warning (level 1) C4683](compiler-warning-level-1-c4683.md)|'*function*': event source has an 'out'-parameter; exercise caution when hooking multiple event handlers| +|[Compiler warning (level 1) C4684](compiler-warning-level-1-c4684.md)|'*attribute*': WARNING!! attribute may cause invalid code generation: use with caution| +|[Compiler warning (level 1, no longer emitted) C4685](compiler-warning-level-1-c4685.md)|expecting '`> >`' found '`>>`' when parsing template parameters| +|[Compiler warning (level 3, off) C4686](compiler-warning-level-3-c4686.md)|'*user-defined type*': possible change in behavior, change in UDT return calling convention| +|[Compiler warning (level 1, error) C4687](compiler-warning-c4687.md)|'*class*': a sealed abstract class cannot implement an interface '*interface*'| +|[Compiler warning (level 1) C4688](compiler-warning-level-1-c4688.md)|'*constraint*': constraint list contains assembly private type '*type*'| +|Compiler warning (level 1) C4689|'*character*': unsupported character in `#pragma detect_mismatch`; `#pragma` ignored| +|[Compiler warning (level 4) C4690](compiler-warning-level-4-c4690.md)|`[ emitidl( pop ) ]`: more pops than pushes| +|[Compiler warning (level 1) C4691](compiler-warning-level-1-c4691.md)|'*type*': type referenced was expected in unreferenced *assembly* '*file*', type defined in current translation unit used instead| +|[Compiler warning (level 1, off) C4692](compiler-warning-level-1-c4692.md)|'*function*': signature of non-private member contains assembly private native type '*native_type*'| +|[Compiler warning (level 1, error) C4693](compiler-warning-c4693.md)|'*class*': a sealed abstract class cannot have any instance members '*instance member*'| +|[Compiler warning (level 1, error) C4694](compiler-warning-c4694.md)|'*class*': a sealed abstract class cannot have a base-class '*base_class*'| +|Compiler warning (level 1) C4695|`#pragma execution_character_set`: '*character set*' is not a supported argument: currently only '`UTF-8`' is supported| +|Compiler warning (level 1) C4696|`/ZBvalue1` option out of range; assuming 'value2'| +| [Compiler warning (level 3) C4698](c4698.md) | '*feature*' is for evaluation purposes only and is subject to change or removal in future updates. | +|[Compiler warning (level 1 and level 4) C4700](compiler-warning-level-1-and-level-4-c4700.md)|uninitialized local variable 'name' used| +|[Compiler warning (level 4) C4701](compiler-warning-level-4-c4701.md)|potentially uninitialized local variable 'name' used| +|[Compiler warning (level 4) C4702](compiler-warning-level-4-c4702.md)|unreachable code| +|[Compiler warning (level 4) C4703](compiler-warning-level-4-c4703.md)|potentially uninitialized local pointer variable '*identifier*' used| +|[Compiler warning (level 4) C4706](compiler-warning-level-4-c4706.md)|assignment used as a condition| +|[Compiler warning (level 4) C4709](compiler-warning-level-4-c4709.md)|comma operator within array index expression| +|[Compiler warning (level 4, off) C4710](compiler-warning-level-4-c4710.md)|'*function*': function not inlined| +|[Compiler warning (level 1) C4711](compiler-warning-level-1-c4711.md)|function 'function' selected for automatic inline expansion| +|[Compiler warning (level 4) C4714](compiler-warning-level-4-c4714.md)|function '*function*' marked as `__forceinline` not inlined| +|[Compiler warning (level 1) C4715](compiler-warning-level-1-c4715.md)|'function': not all control paths return a value| +|[Compiler warning (level 1, error) C4716](compiler-warning-level-1-c4716.md)|'function': must return a value| +|[Compiler warning (level 1) C4717](compiler-warning-level-1-c4717.md)|'function': recursive on all control paths, function will cause runtime stack overflow| |[Compiler warning (level 4) C4718](compiler-warning-level-4-c4718.md)|'function call': recursive call has no side effects, deleting| |Compiler warning (level 1) C4719|Double constant found when Qfast specified - use 'f' as a suffix to indicate single precision| |Compiler warning (level 2) C4720|in-line assembler reports: 'message'| |Compiler warning (level 1) C4721|'function': not available as an intrinsic| |[Compiler warning (level 1) C4722](compiler-warning-level-1-c4722.md)|'function': destructor never returns, potential memory leak| -|[Compiler warning (level 3) C4723](../../error-messages/compiler-warnings/compiler-warning-level-3-c4723.md)|potential divide by 0| +|[Compiler warning (level 3) C4723](compiler-warning-level-3-c4723.md)|potential divide by 0| |[Compiler warning (level 3) C4724](compiler-warning-level-3-c4724.md)|potential mod by 0| |Compiler warning (level 3) C4725|instruction may be inaccurate on some Pentiums| -|Compiler warning C4726|ARM arch4/4T supports only ' or ' with immediate value| -|[Compiler warning (level 1) C4727](../../error-messages/compiler-warnings/compiler-warning-level-1-c4727.md)|PCH named pch_file with same timestamp found in obj_file_1 and obj_file_2. Using first PCH.| -|Compiler warning (level 1) C4728|/Yl- option ignored because PCH reference is required| +|Compiler warning C4726|ARM arch4/4T supports only '`` or ``' with immediate value| +|[Compiler warning (level 1) C4727](compiler-warning-level-1-c4727.md)|PCH named pch_file with same timestamp found in obj_file_1 and obj_file_2. Using first PCH.| +|Compiler warning (level 1) C4728|`/Yl-` option ignored because PCH reference is required| |Compiler warning (level 4) C4729|function too big for flow graph based warnings| -|[Compiler warning (Level 1) C4730](../../error-messages/compiler-warnings/compiler-warning-level-1-c4730.md)|'main': mixing _m64 and floating point expressions may result in incorrect code| -|[Compiler warning (Level 1) C4731](../../error-messages/compiler-warnings/compiler-warning-level-1-c4731.md)|'pointer': frame pointer register 'register' modified by inline assembly code| -|Compiler warning (level 1) C4732|intrinsic '%s' is not supported in this architecture| -|[Compiler warning (Level 1) C4733](../../error-messages/compiler-warnings/compiler-warning-level-1-c4733.md)|Inline asm assigning to 'FS:0': handler not registered as safe handler| +|[Compiler warning (Level 1) C4730](compiler-warning-level-1-c4730.md)|'main': mixing `_m64` and floating point expressions may result in incorrect code| +|[Compiler warning (Level 1) C4731](compiler-warning-level-1-c4731.md)|'pointer': frame pointer register 'register' modified by inline assembly code| +|Compiler warning (level 1) C4732|intrinsic '*identifier*' is not supported in this architecture| +|[Compiler warning (Level 1) C4733](compiler-warning-level-1-c4733.md)|Inline asm assigning to '`FS:0`': handler not registered as safe handler| |Compiler warning C4734|More than 64k line numbers in a COFF debug info section; stop emitting COFF debug line numbers for module 'module'| |Compiler warning C4735|`align_function` attribute argument '*argument*' is not a power of two and is not positive. Ignoring attribute| |Compiler warning C4736|`align_function` attribute ignored because `/Gy` was not specified| -|[Compiler warning (Level 3) C4738](../../error-messages/compiler-warnings/compiler-warning-level-3-c4738.md)|storing 32-bit float result in memory, possible loss of performance| +|[Compiler warning (Level 3) C4738](compiler-warning-level-3-c4738.md)|storing 32-bit float result in memory, possible loss of performance| |[Compiler warning (level 1) C4739](compiler-warning-level-1-c4739.md)|reference to variable 'var' exceeds its storage space| -|[Compiler warning (Level 4) C4740](../../error-messages/compiler-warnings/compiler-warning-level-4-c4740.md)|flow in or out of inline asm code suppresses global optimization| -|[Compiler warning (Level 1) C4742](../../error-messages/compiler-warnings/compiler-warning-level-1-c4742.md)|'var' has different alignment in 'file1' and 'file2': number and number| -|[Compiler warning (Level 1) C4743](../../error-messages/compiler-warnings/compiler-warning-level-1-c4743.md)|'type' has different size in 'file1' and 'file2': number and number bytes| -|[Compiler warning (Level 1) C4744](../../error-messages/compiler-warnings/compiler-warning-level-1-c4744.md)|'var' has different type in 'file1' and 'file2': 'type1' and 'type2'| +|[Compiler warning (Level 4) C4740](compiler-warning-level-4-c4740.md)|flow in or out of inline asm code suppresses global optimization| +|[Compiler warning (Level 1) C4742](compiler-warning-level-1-c4742.md)|'var' has different alignment in 'file1' and 'file2': number and number| +|[Compiler warning (Level 1) C4743](compiler-warning-level-1-c4743.md)|'type' has different size in 'file1' and 'file2': number and number bytes| +|[Compiler warning (Level 1) C4744](compiler-warning-level-1-c4744.md)|'var' has different type in 'file1' and 'file2': 'type1' and 'type2'| |Compiler warning C4745|volatile access of 'name' cannot be honored due to its size| -|[Compiler warning C4746](../../error-messages/compiler-warnings/compiler-warning-c4746.md)|volatile access of '*expression*' is subject to /volatile:\ setting; consider using __iso_volatile_load/store intrinsic functions| -|[Compiler warning (level 1) C4747](../../error-messages/compiler-warnings/compiler-warning-level-1-c4747.md)|Calling managed 'entrypoint': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint| -|Compiler warning (level 4) C4749|conditionally supported: offsetof applied to non-standard-layout type '*type*'| -|[Compiler warning (level 1) C4750](compiler-warning-level-1-c4750.md)|'identifier': function with _alloca() inlined into a loop| -|Compiler warning (level 4) C4751|/arch:AVX does not apply to Intel(R) Streaming SIMD Extensions that are within inline ASM| -|Compiler warning (level 4) C4752|found Intel(R) Advanced Vector Extensions; consider using /arch:AVX| +|[Compiler warning C4746](compiler-warning-c4746.md)|volatile access of '*expression*' is subject to `/volatile:` setting; consider using `__iso_volatile_load/store intrinsic functions`| +|[Compiler warning (level 1) C4747](compiler-warning-level-1-c4747.md)|Calling managed 'entrypoint': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint| +|Compiler warning (level 4, off) C4749|conditionally supported: *message*| +|[Compiler warning (level 1) C4750](compiler-warning-level-1-c4750.md)|'identifier': function with `_alloca()` inlined into a loop| +|Compiler warning (level 4) C4751|`/arch:AVX` does not apply to Intel(R) Streaming SIMD Extensions that are within inline ASM| +|Compiler warning (level 4) C4752|found Intel(R) Advanced Vector Extensions; consider using `/arch:AVX`| |Compiler warning C4753|Cannot find bounds for pointer; MPX intrinsic function ignored| |[Compiler warning (level 4) C4754](compiler-warning-level-4-c4754.md)|Conversion rules for arithmetic operations in the comparison at %s(%d) mean that one branch cannot be executed. Cast '%s' to '%s' (or similar type of %d bytes).| |Compiler warning C4755|Conversion rules for arithmetic operations in the comparison at %s(%d) mean that one branch cannot be executed in an inlined function. Cast '%s' to '%s' (or similar type of %d bytes).| -|[Compiler warning (level 2) C4756](../../error-messages/compiler-warnings/compiler-warning-level-2-c4756.md)|overflow in constant arithmetic| +|[Compiler warning (level 2) C4756](compiler-warning-level-2-c4756.md)|overflow in constant arithmetic| |Compiler warning (level 4) C4757|subscript is a large unsigned value, did you intend a negative constant?| |Compiler warning C4761|integral size mismatch in argument; conversion supplied| |[Compiler warning (level 4) C4764](compiler-warning-level-4-c4764.md)|Can not align catch objects to greater than 16 bytes| -|Compiler warning (level 4) C4767|section name '%s' is longer than 8 characters and will be truncated by the linker| -|[Compiler warning (level 3) C4768](c4768.md)|__declspec attributes before linkage specification are ignored| +|Compiler warning (level 4, off) C4767|section name '%s' is longer than 8 characters and will be truncated by the linker| +|[Compiler warning (level 3, off) C4768](c4768.md)|`__declspec` attributes before linkage specification are ignored| | [Compiler warning (level 4) C4770](./c4770.md) | partially validated enum '*name*' used as index | |Compiler warning C4771|Bounds must be created using a simple pointer; MPX intrinsic function ignored| -|[Compiler warning (level 1, Error) C4772](../../error-messages/compiler-warnings/compiler-warning-level-1-c4772.md)|#import referenced a type from a missing type library; 'missing_type' used as a placeholder| -|Compiler warning (level 4) C4774|'*string*' : format string expected in argument *number* is not a string literal| +|[Compiler warning (level 1, error) C4772](compiler-warning-level-1-c4772.md)|`#import` referenced a type from a missing type library; '*missing_type*' used as a placeholder| +|Compiler warning (level 4, off) C4774|'*string*' : format string expected in argument *number* is not a string literal| |Compiler warning (level 3) C4775|nonstandard extension used in format string '*string*' of function '*function*'| -|Compiler warning (level 1) C4776|'%*character*' is not allowed in the format string of function '*function*'| -|Compiler warning (level 4) C4777|'*function*' : format string '*string*' requires an argument of type '*type1*', but variadic argument *number* has type '*type2*'| +|Compiler warning (level 1) C4776|'`%`*character*' is not allowed in the format string of function '*function*'| +|Compiler warning (level 4, off) C4777|'*function*' : format string '*string*' requires an argument of type '*type1*', but variadic argument *number* has type '*type2*'| |Compiler warning (level 3) C4778|'*function*' : unterminated format string '*string*'| -|[Compiler warning (Level 1) C4788](../../error-messages/compiler-warnings/compiler-warning-level-1-c4788.md)|'identifier': identifier was truncated to 'number' characters| -|[Compiler warning (Level 1) C4789](../../error-messages/compiler-warnings/compiler-warning-level-1-c4789.md)|buffer 'identifier' of size N bytes will be overrun; M bytes will be written starting at offset L| -|Compiler warning (level 2) C4792|function '%s' declared using sysimport and referenced from native code; import library required to link| -|[Compiler warning (level 1 and 3) C4793](../../error-messages/compiler-warnings/compiler-warning-level-1-and-3-c4793.md)|'function': function compiled as native: 'reason'| +|[Compiler warning (Level 1) C4788](compiler-warning-level-1-c4788.md)|'identifier': identifier was truncated to 'number' characters| +|[Compiler warning (Level 1) C4789](compiler-warning-level-1-c4789.md)|buffer 'identifier' of size N bytes will be overrun; M bytes will be written starting at offset L| +|Compiler warning (level 2) C4792|function '%s' declared using `sysimport` and referenced from native code; import library required to link| +|[Compiler warning (level 1 and level 3) C4793](compiler-warning-level-1-and-3-c4793.md)|'*function*': function compiled as native:
*reason*| |[Compiler warning (level 1) C4794](compiler-warning-level-1-c4794.md)|segment of thread local storage variable '%s' changed from '%s' to '%s'| |Compiler warning C4798|native code generated for p-code function 'name' with exception handler or unwind semantics| -|[Compiler warning (level 1) C4799](../../error-messages/compiler-warnings/compiler-warning-level-1-c4799.md)|function 'function' has no EMMS instruction| +|[Compiler warning (level 1) C4799](compiler-warning-level-1-c4799.md)|function 'function' has no `EMMS` instruction| ## See also diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index 8d8e2533ee..b6b193531b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -24,124 +24,124 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | [Compiler warning (level 1) C4807](compiler-warning-level-1-c4807.md) | '*operation*': unsafe mix of type '*type1*' and signed bit field of type '*type2*' | | Compiler warning (level 1) C4808 | `case` '*value*' is not a valid value for `switch` condition of type '`bool`' | | Compiler warning (level 1) C4809 | `switch` statement has redundant '`default`' label; all possible '`case`' labels are given | -| [Compiler warning (level 1) C4810](compiler-warning-level-1-c4810.md) | value of `pragma pack(show)` == n | +| [Compiler warning (level 1) C4810](compiler-warning-level-1-c4810.md) | value of `pragma pack(show)` == *number* | | [Compiler warning (level 1) C4811](compiler-warning-level-1-c4811.md) | value of `pragma conform(forScope, show)` == *value* | | [Compiler warning (level 1) C4812](compiler-warning-level-1-c4812.md) | obsolete declaration style: please use '*new_syntax*' instead | | [Compiler warning (level 1) C4813](compiler-warning-level-1-c4813.md) | '*function*': a friend function of a local class must have been previously declared | | Compiler warning (level 4) C4815 | '*object name*': zero-sized array in stack object will have no elements (unless the object is an aggregate that has been aggregate initialized) | | [Compiler warning (level 4) C4816](compiler-warning-level-4-c4816.md) | '*param*': parameter has a zero-sized array which will be truncated (unless the object is passed by reference) | -| [Compiler warning (level 1) C4817](compiler-warning-level-1-c4817.md) | '*member*': illegal use of '.' to access this member; compiler replaced with '->' | -| [Compiler warning (level 1) C4819](compiler-warning-level-1-c4819.md) | The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss | -| [Compiler warning (level 4, off) C4820](compiler-warning-level-4-c4820.md) | '*bytes*' bytes padding added after construct '*member_name*' | +| [Compiler warning (level 1) C4817](compiler-warning-level-1-c4817.md) | '*member*': illegal use of '`.`' to access this member; compiler replaced with '`->`' | +| [Compiler warning (level 1) C4819](compiler-warning-level-1-c4819.md) | The file contains a character that cannot be represented in the current code page (*number*). Save the file in Unicode format to prevent data loss | +| [Compiler warning (level 4, off) C4820](compiler-warning-level-4-c4820.md) |'*type*': '*bytes*' bytes padding added after *class* '*member_name*'| | [Compiler warning (level 1) C4821](compiler-warning-level-1-c4821.md) | Unable to determine Unicode encoding type, please save the file with signature (BOM) | -| [Compiler warning (level 1, off) C4822](compiler-warning-level-1-c4822.md) | 'member function': local class member function does not have a body | +| [Compiler warning (level 4, off) C4822](compiler-warning-level-1-c4822.md) | '*member function*': local class member function does not have a body | | [Compiler warning (level 3) C4823](compiler-warning-level-3-c4823.md) | '*function*': uses pinning pointers but unwind semantics are not enabled. Consider using `/EHa` | | Compiler warning (level 2, off) C4826 | Conversion from '*type1*' to '*type2*' is sign-extended. This may cause unexpected runtime behavior. | | Compiler warning (level 3) C4827 | A public '`ToString`' method with 0 parameters should be marked as `virtual` and `override` | -| Compiler warning (level 1) C4828 | The file contains a character starting at offset 0x*HexOffset* that is illegal in the current source character set (codepage *codepage*). | +| Compiler warning (level 1) C4828 | The file contains a character starting at offset `0x`*HexOffset* that is illegal in the current source character set (codepage *codepage*). | | [Compiler warning (level 1) C4829](compiler-warning-level-1-c4829.md) | Possibly incorrect parameters to function `main`. Consider '`int main(Platform::Array^ argv)`' | -| [Compiler warning (level 1) C4834](c4834.md) | discarding return value of function with 'nodiscard' attribute | +| [Compiler warning (level 1) C4834](c4834.md) |discarding return value of function with `[[nodiscard]]` attribute| | [Compiler warning (level 1) C4835](compiler-warning-level-1-c4835.md) | '*variable*': the initializer for exported data will not be run until managed code is first executed in the host assembly | | Compiler warning (level 4, off) C4837 | trigraph detected: '`??`*character*' replaced by '*character*' | | [Compiler warning (level 1) C4838](compiler-warning-level-1-c4838.md) | conversion from '*type_1*' to '*type_2*' requires a narrowing conversion | -| [Compiler warning (level 3) C4839](compiler-warning-level-3-c4839.md) | non-standard use of class '*type*' as an argument to a variadic function | +| [Compiler warning (level 3, error) C4839](compiler-warning-level-3-c4839.md) | non-standard use of class '*type*' as an argument to a variadic function | | [Compiler warning (level 4) C4840](compiler-warning-level-4-c4840.md) | non-portable use of class '*type*' as an argument to a variadic function | -| [Compiler warning (level 4, off) C4841](c4841.md) | non-standard extension used: compound member designator used in `offsetof` | +| [Compiler warning (level 4, off) C4841](c4841.md) | non-standard extension used: *message* | | Compiler warning (level 4, off) C4842 | the result of '`offsetof`' applied to a type using multiple inheritance is not guaranteed to be consistent between compiler releases | | [Compiler warning (level 4) C4843](c4843.md) | '*type1*': An exception handler of reference to array or function type is unreachable, use '*type2*' instead | | Compiler warning (level 1) C4844 | '`export module` *`module_name`*`;`' is now the preferred syntax for declaring a module interface | -| Compiler warning (level 4) C4845 | '`__declspec(no_init_all)`' is ignored if '`/d1initall[0|1|2|3]`' was not specified on the command line | +| Compiler warning (level 4) C4845 |'`__declspec(no_init_all)`' is ignored unless '`/d1initall[0|1|2|3]`' or '`/presetPadding`' is specified on the command line| | Compiler warning (level 4) C4846 | '*value*' is not a valid argument for '`/d1initall`': command-line flag ignored | -| Compiler warning (level 4) C4847 | '`__declspec(no_init_all)`' can only be applied to a function, a class type, or a local variable: ignored | -| Compiler warning (level 1) C4848 | support for standard attribute '`no_unique_address`' in C++17 and earlier is a vendor extension | +| Compiler warning (level 4) C4847 |'*identifier*': '`__declspec(no_init_all)`' can only be applied to a function, a class type, or a local variable: ignored | +| Compiler warning (level 1) C4848 | support for attribute `[[`*attribute*`]]` in C++17 and earlier is a vendor extension | | Compiler warning (level 1) C4849 | OpenMP '*clause*' clause ignored in '*directive*' directive | | Compiler warning (Level 1, error) C4854 | binding dereferenced null pointer to reference has undefined behavior | -| Compiler warning (level 1, off) C4855 | implicit capture of '`this`' via '`[=]`' is deprecated in 'version' | -| Compiler warning (level 4) C4856 | '*value*' is not a valid argument for '`/d1initAll:FillPattern`' (value must be between 0 and 255). Command-line flag ignored | -| Compiler warning (level 1) C4857 | C++/CLI mode does not support C++ versions newer than C++17; setting language to `/std:c++17` | +| Compiler warning (level 1, off) C4855 | implicit capture of '`this`' via '`[=]`' is deprecated in '*version*' | +| Compiler warning (level 4) C4856 | '*value*' is not a valid argument for '`/d1initAll:FillPattern`' (value must be between `0` and `255`). Command-line flag ignored | +| Compiler warning (level 1) C4857 | C++/CLI mode does not support C++ versions newer than C++*ver*; setting language to `/std:c++`*ver* | | Compiler warning (level 1) C4858 | discarding return value: *function name* | | Compiler warning (level 4) C4859 | '*value*' is not a valid argument for '`/presetWarn`': it must be a decimal value > 0. Command-line flag ignored | | Compiler warning (level 4) C4860 | '*object name*': compiler zero initialized '*number*' bytes of storage | | Compiler warning (level 4) C4861 | compiler zero initialized '*number*' bytes of storage | | [Compiler warning (level 4) C4866](c4866.md) | compiler may not enforce left-to-right evaluation order for call to *operator_name* | -| [Compiler warning (level 1, error) C4867](compiler-warning-c4867.md) | '*function*': function call missing argument list; use '*call*' to create a pointer to member | +| [Compiler warning (level 1, error) C4867](compiler-warning-c4867.md) |'*function name*': non-standard syntax; use '`&`' to create a pointer to member| | [Compiler warning (level 4) C4868](compiler-warning-c4868.md) | '*file*(*line_number*)' compiler may not enforce left-to-right evaluation order in braced initialization list | | Compiler warning (level 3) C4869 | '`nodiscard`' may only be applied to classes, enumerations, and functions | | Compiler warning (level 2) C4872 | floating point division by zero detected when compiling the call graph for the `concurrency::parallel_for_each` at: '*location*' | -| Compiler warning (level 1) C4880 | casting from 'const *type_1*' to '*type_2*': casting away constness from a pointer or reference may result in undefined behavior in an amp restricted function | +| Compiler warning (level 1) C4880 | casting from '*const type_1*' to '*type_2*': casting away constness from a pointer or reference may result in undefined behavior in an `amp` restricted function | | Compiler warning (level 4) C4881 | the constructor and/or the destructor will not be invoked for `tile_static` variable '*variable-name*' | | Compiler warning (level 1) C4882 | passing functors with non-const call operators to `concurrency::parallel_for_each` is deprecated | | Compiler warning C4883 | '*function name*': function size suppresses optimizations | | [Compiler warning C4900](compiler-warning-level-1-c4900.md) | Il mismatch between '*tool1*' version '*version1*' and '*tool2*' version '*version2*' | -| [Compiler warning (level 1, off) C4905](compiler-warning-level-1-c4905.md) | wide string literal cast to '`LPSTR`' | -| [Compiler warning (level 1, off) C4906](compiler-warning-level-1-c4906.md) | string literal cast to '`LPWSTR`' | -| Compiler warning (Error) C4907 | multiple calling conventions cannot be specified; last given will be used | -| [Compiler warning (level 1) C4910](compiler-warning-level-1-c4910.md) | '\: '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation | +| [Compiler warning (level 1, off) C4905](compiler-warning-level-1-c4905.md) | wide string literal cast to '*type*' | +| [Compiler warning (level 1, off) C4906](compiler-warning-level-1-c4906.md) | string literal cast to '*type*' | +| Compiler warning (error) C4907 | multiple calling conventions cannot be specified; last given will be used | +| [Compiler warning (level 1) C4910](compiler-warning-level-1-c4910.md) |'*identifier*': '`__declspec(dllexport)`' and '`extern`' are incompatible on an explicit instantiation| | [Compiler warning (level 1) C4912](compiler-warning-level-1-c4912.md) | '*attribute*': attribute has undefined behavior on a nested UDT | | [Compiler warning (level 4) C4913](compiler-warning-level-4-c4913.md) | user defined binary operator '`,`' exists but no overload could convert all operands, default built-in binary operator '`,`' used | | Compiler warning (level 1) C4916 | in order to have a `dispid`, '*description*': must be introduced by an interface | | [Compiler warning (level 1, off) C4917](compiler-warning-level-1-c4917.md) | '*declarator*': a GUID can only be associated with a class, interface or namespace | | [Compiler warning (level 4) C4918](compiler-warning-level-4-c4918.md) | '*character*': invalid character in pragma optimization list | -| [Compiler warning (level 1) C4920](compiler-warning-level-1-c4920.md) | enum *enum-name* member *member_1*=*value_1* already seen in enum *enum-name* as *member_2*=*value_2* | +| [Compiler warning (level 1) C4920](compiler-warning-level-1-c4920.md) | `enum` *enum-name* member *member_1*`=`*value_1* already seen in `enum` *enum-name* as *member_2*`=`*value_2* | | Compiler warning (level 3) C4921 | '*description*': attribute value '*attribute*' should not be multiply specified | -| [Compiler warning (level 1) C4925](compiler-warning-level-1-c4925.md) | '*method*': dispinterface method cannot be called from script | +| [Compiler warning (level 1) C4925](compiler-warning-level-1-c4925.md) | '*method*': `dispinterface` method cannot be called from script | | [Compiler warning (level 1) C4926](compiler-warning-level-1-c4926.md) | '*identifier*': symbol is already defined: attributes ignored | | [Compiler warning (level 1) C4927](compiler-warning-level-1-c4927.md) | illegal conversion; more than one user-defined conversion has been implicitly applied | | [Compiler warning (level 1, off) C4928](compiler-warning-level-1-c4928.md) | illegal copy-initialization; more than one user-defined conversion has been implicitly applied | -| [Compiler warning (level 1) C4929](compiler-warning-level-1-c4929.md) | '*file*': typelibrary contains a union; ignoring the 'embedded_idl' qualifier | +| [Compiler warning (level 1) C4929](compiler-warning-level-1-c4929.md) | '*file*': `typelibrary` contains a union; ignoring the '`embedded_idl`' qualifier | | [Compiler warning (level 1) C4930](compiler-warning-level-1-c4930.md) | '*prototype*': prototyped function not called (was a variable definition intended?) | | [Compiler warning (level 4, off) C4931](compiler-warning-level-4-c4931.md) | we are assuming the type library was built for *number*-bit pointers | | [Compiler warning (level 4) C4932](compiler-warning-level-4-c4932.md) | `__identifier(`*identifier*`)` and `__identifier(`*identifier*`)` are indistinguishable | | Compiler warning (level 1) C4934 | '`__delegate(multicast)`' is deprecated, use '`__delegate`' instead | | [Compiler warning (level 1) C4935](compiler-warning-level-1-c4935.md) | assembly access specifier modified from '*access*' | -| [Compiler warning (level 1, Error) C4936](compiler-warning-c4936.md) | this __declspec is supported only when compiled with `/clr` or `/clr:pure` | +| [Compiler warning (level 1, error) C4936](compiler-warning-c4936.md) | this `__declspec` is supported only when compiled with `/clr` or `/clr:pure` | | [Compiler warning (level 4) C4937](compiler-warning-level-4-c4937.md) | '*text1*' and '*text2*' are indistinguishable as arguments to '*directive*' | | [Compiler warning (level 4) C4938](compiler-warning-level-4-c4938.md) | '*var*': Floating point reduction variable may cause inconsistent results under `/fp:strict` or `#pragma fenv_access` | -| [Compiler warning C4939](compiler-warning-level-1-c4939.md) | #pragma vtordisp is deprecated and will be removed in a future release of Visual C++ | +| [Compiler warning (level 1) C4939](compiler-warning-level-1-c4939.md) | `#pragma vtordisp` is deprecated and will be removed in a future release of Visual C++ | | [Compiler warning (level 1) C4944](compiler-warning-level-1-c4944.md) | '*symbol*': cannot import symbol from '*assembly1*': as '*symbol*' already exists in the current scope | | [Compiler warning (level 1) C4945](compiler-warning-level-1-c4945.md) | '*symbol*': cannot import symbol from '*assembly1*': as '*symbol*' has already been imported from another assembly '*assembly2*' | | [Compiler warning (level 1, off) C4946](compiler-warning-level-1-c4946.md) | `reinterpret_cast` used between related classes: '*class1*' and '*class2*' | | [Compiler warning (level 1) C4947](compiler-warning-level-1-c4947.md) | '*type_or_member*': marked as obsolete | | [Compiler warning (level 2) C4948](compiler-warning-level-2-c4948.md) | return type of '*accessor*' does not match the last parameter type of the corresponding setter | -| [Compiler warning (level 1 and level 4) C4949](compiler-warning-level-1-and-level-4-c4949.md) | pragmas '`managed`' and '`unmanaged`' are meaningful only when compiled with '`/clr[:option]`' | -| [Compiler warning (level 1, Error) C4950](compiler-warning-c4950.md) | '*type_or_member*': marked as obsolete | +| [Compiler warning (level 1 and level 4) C4949](compiler-warning-level-1-and-level-4-c4949.md) | `pragma` '*pragma*' is meaningful only when compiled with '`/clr[:option]`'| +| [Compiler warning (level 1, error) C4950](compiler-warning-c4950.md) | '*type_or_member*': marked as obsolete | | [Compiler warning (level 1) C4951](compiler-warning-level-1-c4951.md) | '*function*' has been edited since profile data was collected, function profile data not used | | [Compiler warning (level 1) C4952](compiler-warning-level-1-c4952.md) | '*function*': no profile data found in program database '*pgd-file*' | | [Compiler warning (level 1) C4953](compiler-warning-level-1-c4953.md) | Inlinee '*function*' has been edited since profile data was collected, profile data not used | | Compiler warning C4954 | '*function*': not profiled (contains `__int64` switch expression) | | Compiler warning C4955 | '*import2*': import ignored; already imported from '*import1*' | -| [Compiler warning (level 1, Error) C4956](compiler-warning-c4956.md) | '*type*': this type is not verifiable | -| [Compiler warning (level 1, Error) C4957](compiler-warning-c4957.md) | '*cast*': explicit cast from '*cast_from*' to '*cast_to*' is not verifiable | -| [Compiler warning (level 1, Error) C4958](compiler-warning-c4958.md) | '*operation*': pointer arithmetic is not verifiable | -| [Compiler warning (level 1, Error) C4959](compiler-warning-c4959.md) | cannot define unmanaged type '*type*' in `/clr:safe` because accessing its members yields unverifiable code | +| [Compiler warning (level 1, error) C4956](compiler-warning-c4956.md) | '*type*': this type is not verifiable | +| [Compiler warning (level 1, error) C4957](compiler-warning-c4957.md) | '*cast*': explicit cast from '*cast_from*' to '*cast_to*' is not verifiable | +| [Compiler warning (level 1, error) C4958](compiler-warning-c4958.md) | '*operation*': pointer arithmetic is not verifiable | +| [Compiler warning (level 1, error) C4959](compiler-warning-c4959.md) | cannot define unmanaged *type* '*identifier*' in `/clr:safe` because accessing its members yields unverifiable code | | [Compiler warning (level 4) C4960](compiler-warning-level-4-c4960.md) | '*function*' is too big to be profiled | | [Compiler warning (level 1) C4961](compiler-warning-c4961.md) | No profile data was merged into '*pgd-file*', profile-guided optimizations disabled | | [Compiler warning (level 4, off) C4962](compiler-warning-c4962.md) | '*function*': Profile-guided optimizations disabled because optimizations caused profile data to become inconsistent | | Compiler warning (level 1) C4963 | '*description*': no profile data found; different compiler options were used in instrumented build | | [Compiler warning (level 1) C4964](compiler-warning-level-1-c4964.md) | No optimization options were specified; profile info will not be collected | -| [Compiler warning (level 1) C4965](compiler-warning-level-1-c4965.md) | implicit box of integer 0; use nullptr or explicit cast | +| [Compiler warning (level 1) C4965](compiler-warning-level-1-c4965.md) | implicit box of integer `0`; use `nullptr` or explicit cast | | Compiler warning (level 1) C4966 | '*function*' has `__code_seg` annotation with unsupported segment name, annotation ignored | | Compiler warning C4970 | delegate constructor: target object ignored since '*type*' is static | -| Compiler warning (level 1) C4971 | Argument order: \, \ for delegate constructor is deprecated, use \, \ | -| [Compiler warning (level 1, Error) C4972](compiler-warning-c4972.md) | Directly modifying or treating the result of an unbox operation as an lvalue is unverifiable | +| Compiler warning (level 1, no longer emitted) C4971 |Argument order: ``, `` for delegate constructor is deprecated, use ``, ``| +| [Compiler warning (level 1, error) C4972](compiler-warning-c4972.md) | Directly modifying or treating the result of an unbox operation as an lvalue is unverifiable | | Compiler warning (level 1) C4973 | '*symbol*': marked as deprecated | | Compiler warning (level 1) C4974 | '*symbol*': marked as deprecated | | Compiler warning (level 1) C4975 | modopt '[*modifier*]' was ignored for formal parameter '*parameter*' | -| Compiler warning (level 1) C4976 | invalid value '*value*' for '`/W`'; assuming '1' | -| Compiler warning (level 3) C4981 | Warbird: function '*function*' marked as __forceinline not inlined because it contains exception semantics | -| Compiler warning (level 3) C4983 | '/analyze:sarif:hashname' ignored because the argument to '/analyze:log' is a single file rather than a directory | -| [Compiler warning C4984](compiler-warning-c4984.md) | '`if constexpr`' is a C++17 language extension | -| [Compiler warning (level 4) C4985](compiler-warning-level-4-c4985.md) | '*symbol_name*': attributes not present on previous declaration. | -| [Compiler warning (level 4, off) C4986](compiler-warning-c4986.md) | '*declaration*': exception specification does not match previous declaration | +| Compiler warning (level 1) C4976 | invalid value '*value*' for '`/W`'; assuming '`1`' | +| Compiler warning (level 3) C4981 | Warbird: function '*function*' marked as `__forceinline` not inlined because it contains exception semantics | +| Compiler warning (level 3) C4983 | '`/analyze:sarif:hashname`' ignored because the argument to '`/analyze:log`' is a single file rather than a directory | +| [Compiler warning (level 1) C4984](compiler-warning-c4984.md) | '`if constexpr`' is a C++17 language extension | +| [Compiler warning (level 3) C4985](compiler-warning-level-4-c4985.md) | '*symbol_name*': attributes not present on previous declaration. | +| [Compiler warning (level 2 and level 4, off) C4986](compiler-warning-c4986.md) | '*declaration*': exception specification does not match previous declaration | | Compiler warning (level 4, off) C4987 | nonstandard extension used: '`throw (...)`' | | Compiler warning (level 4, off) C4988 | '*variable*': variable declared outside class/function scope | | Compiler warning (level 4) C4989 | '*type*': type has conflicting definitions. | | Compiler warning (level 3) C4990 | Warbird: *message* | | Compiler warning (level 3) C4991 | Warbird: function '*function*' marked as `__forceinline` not inlined because protection level of inlinee is greater than the parent | | Compiler warning (level 3) C4992 | Warbird: function '*function-name*' marked as `__forceinline` not inlined because it contains inline assembly which cannot be protected | -| [Compiler warning (level 3) C4995](compiler-warning-level-3-c4995.md) | '*function*': name was marked as #pragma deprecated | -| [Compiler warning (level 3) C4996](compiler-warning-level-3-c4996.md) | '*deprecated-declaration*': *deprecation-message* (or "was declared deprecated") | -| [Compiler warning (level 1) C4997](compiler-warning-level-1-c4997.md) | '*class*': coclass does not implement a COM interface or pseudo-interface | +| [Compiler warning (level 3) C4995](compiler-warning-level-3-c4995.md) | '*function*': name was marked as `#pragma deprecated` | +| [Compiler warning (level 3) C4996](compiler-warning-level-3-c4996.md) | '*deprecated-declaration*': *deprecation-message* | +| [Compiler warning (level 1) C4997](compiler-warning-level-1-c4997.md) | '*class*': `coclass` does not implement a COM interface or pseudo-interface | | Compiler warning (level 1) C4998 | EXPECTATION FAILED: *expectation*(*value*) | | [Compiler warning C4999](compiler-warning-level-1-c4999.md) | UNKNOWN WARNING Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md index 5fd8d8a5fd..38f4e44895 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md @@ -23,39 +23,39 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | Compiler warning (level 1 and level 4, off) C5027 | '*type*': move assignment operator was implicitly defined as deleted | | Compiler warning (level 1) C5028 | '*name*': Alignment specified in prior declaration (*number*) not specified in definition | | Compiler warning (level 4, off) C5029 | nonstandard extension used: alignment attributes in C++ apply to variables, data members and tag types only | -| Compiler warning (level 3) C5030 | attribute '*attribute-name*' is not recognized | +| Compiler warning (level 3) C5030 | attribute `[[`*attribute_name*`]]` is not recognized | | Compiler warning (level 4, off) C5031 | `#pragma warning(pop)`: likely mismatch, popping warning state pushed in different file | | Compiler warning (level 4, off) C5032 | detected `#pragma warning(push)` with no corresponding `#pragma warning(pop)` | | [Compiler warning (level 1) C5033](c5033.md) | '*storage-class*' is no longer a supported storage class | -| Compiler warning (level 5, off) C5034 | use of intrinsic '*intrinsic*' causes function *function-name* to be compiled as guest code | -| Compiler warning (level 5, off) C5035 | use of feature '*feature*' causes function *function-name* to be compiled as guest code | -| Compiler warning (level 1) C5036 | varargs function pointer conversion when compiling with `/hybrid:x86arm64` '*type1*' to '*type2*' | -| [Compiler warning (error) C5037](c5037.md) | '*member-function*': an out-of-line definition of a member of a class template cannot have default arguments | -| [Compiler warning (level 4, off) C5038](c5038.md) | data member '*member1*' will be initialized after data member '*member2*' | -| Compiler warning (level 4, off) C5039 | '*function*': pointer or reference to potentially throwing function passed to `extern C` function under `-EHc`. Undefined behavior may occur if this function throws an exception. | +| Compiler warning (level 4, off) C5034 | use of intrinsic '*intrinsic*' causes function *function-name* to be compiled as guest code | +| Compiler warning (level 4, off) C5035 | use of feature '*feature*' causes function *function-name* to be compiled as guest code | +| Compiler warning (level 1) C5036 | `varargs` function pointer conversion when compiling with /hybrid:x86arm64 from type '*type1*' to type '*type2*' | +| [Compiler warning (level 3, error) C5037](c5037.md) | '*member-function*': an out-of-line definition of a member of a class template cannot have default arguments | +| [Compiler warning (level 4, off) C5038](c5038.md) | *data member* '*member1*' will be initialized after *data member* '*member2*' | +| Compiler warning (level 4, off) C5039 | '*function*': pointer or reference to potentially throwing function passed to '`extern "C"`' function under `-EHc`. Undefined behavior may occur if this function throws an exception. | | Compiler warning (level 3) C5040 | dynamic exception specifications are valid only in C++14 and earlier; treating as noexcept(false) | -| Compiler warning (level 1, off) C5041 | '*definition*': out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 | -| Compiler warning (level 3, off) C5042 | '*declaration*': function declarations at block scope cannot be specified 'inline' in standard C++; remove 'inline' specifier | +| Compiler warning (level 4, off) C5041 | '*definition*': out-of-line definition for `constexpr` static data member is not needed and is deprecated in C++17 | +| Compiler warning (level 3, off) C5042 | '*declaration*': function declarations at block scope cannot be specified '`inline`' in standard C++; remove '`inline`' specifier | | Compiler warning (level 2) C5043 | '*specification*': exception specification does not match previous declaration | | Compiler warning (level 4) C5044 | An argument to command-line option *option-name* points to a path '*path-name*' that does not exist | -| [Compiler warning (level 4) C5045](c5045.md) | Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified | +| [Compiler warning (level 4) C5045](c5045.md) | Compiler will insert Spectre mitigation for memory load if `/Qspectre` switch specified | | [Compiler warning (level 2) C5046](c5046.md) | '*function*': Symbol involving type with internal linkage not defined | -| Compiler warning (level 1) C5047 | use of nonstandard `__if_exists` with modules is not supported | +| Compiler warning (level 1, error) C5047 | use of nonstandard '*keyword*' with modules is not supported | | Compiler warning (level 1) C5048 | Use of macro '*macroname*' may result in non-deterministic output | | Compiler warning (level 1) C5049 | '*string*': Embedding a full path may result in machine-dependent output | | [Compiler warning (level 1) C5050](c5050.md) | Possible incompatible environment while importing module '*module_name*': *issue* | -| Compiler warning (level 1) C5051 | attribute 'attribute-name' requires at least 'standard-level'; ignored | -| Compiler warning (level 3, off) C5052 | Keyword 'keyword-name' was introduced in C++\ and requires use of the 'option-name' command-line option | +| Compiler warning (level 1) C5051 | attribute `[[`*attribute-name*`]]` requires at least '*standard_version*'; ignored | +| Compiler warning (level 3, off) C5052 | Keyword '*keyword-name*' was introduced in `C++`*version* and requires use of the '*switch*' command-line option | | Compiler warning (level 1) C5053 | support for '`explicit()`' in C++17 and earlier is a vendor extension | -| [Compiler warning (level 4) C5054](c5054.md) | operator 'operator-name': deprecated between enumerations of different types | -| [Compiler warning (level 1) C5055](c5055.md) | operator 'operator-name': deprecated between enumerations and floating-point types | -| [Compiler warning (level 1) C5056](c5056.md) | operator 'operator-name': deprecated for array types | -| Compiler warning (level 1) C5057 | header unit reference to 'name' already exists. Ignoring header unit 'header-name' | -| Compiler warning (level 1) C5058 | file system error: cannot find header file 'file-name' for header unit 'unit-name' | +| [Compiler warning (level 4) C5054](c5054.md) | operator '*operator-name*': deprecated between enumerations of different types | +| [Compiler warning (level 1) C5055](c5055.md) | operator '*operator-name*': deprecated between enumerations and floating-point types | +| [Compiler warning (level 1) C5056](c5056.md) | operator '*operator-name*': deprecated for array types | +| Compiler warning (level 1) C5057 | header unit reference to '*name*' already exists. Ignoring header unit '*header-name*' | +| Compiler warning (level 1) C5058 | file system error: cannot find header file '*file-name*' for header unit '*unit-name*' | | Compiler warning C5059 | runtime checks and address sanitizer is not currently supported - disabling runtime checks | | Compiler warning (level 4) C5060 | `/Qpar` and address sanitizer not currently supported - disabling auto-parallelization | | Compiler warning (level 4) C5061 | the use of a comma operator as a subscript expression has been deprecated | -| Compiler warning (level 4) C5062 | enum direct list initialization between 'type-1' and 'type-2' is no longer supported | +| Compiler warning (level 4) C5062 | `enum` direct list initialization between '*type-1*' and '*type-2*' is no longer supported | | Compiler warning (level 1) C5063 | '`std::is_constant_evaluated`' always evaluates to true in manifestly constant-evaluated expressions | | [Compiler warning (level 1) C5072](compiler-warning-c5072.md) | ASAN enabled without debug information emission. Enable debug info for better ASAN error reporting | | Compiler warning (level 1) C5081 | Secure hotpatch is not supported with `/GENPROFILE`, `/FASTGENPROFILE` or `/LTCG:PGI`, disabling secure hotpatch. | diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md index 43dea219e0..7b05bf6697 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md @@ -15,29 +15,29 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | Warning | Message | |--|--| -| Compiler warning (level 1) C5200 | feature 'feature-name' requires compiler flag 'option-name' | +| Compiler warning (level 1) C5200 | *feature* '*feature-name*' requires compiler flag '*option-name*' | | Compiler warning (level 1) C5201 | a module declaration can appear only at the start of a translation unit unless a global module fragment is used | | Compiler warning (level 1) C5202 | a global module fragment can only contain preprocessor directives | -| Compiler warning (level 1) C5203 | a parenthesized declarator name after 'explicit' will be considered an explicit-specifier in C++20 | -| Compiler warning (level 3, off) C5204 | 'type-name': class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly | -| Compiler warning (level 4) C5205 | delete of an abstract class 'type-name' that has a non-virtual destructor results in undefined behavior | +| Compiler warning (level 1) C5203 | a parenthesized declarator name after '`explicit`' will be considered an explicit-specifier in C++20 | +| Compiler warning (level 3, off) C5204 | '*type-name*': class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly | +| Compiler warning (level 4) C5205 | delete of an abstract class '*type-name*' that has a non-virtual destructor results in undefined behavior | | Compiler warning (level 3) C5206 | deduced return types for coroutines is a non-standard extension | | Compiler warning (level 1) C5207 | the simple requirement asserts the validity of expression '`e->id`'. Did you mean '`{ e } -> id`'? You can suppress the warning using '`{ e->id }`' | -| [Compiler warning (level 1) C5208](c5208.md) | unnamed class used in `typedef` name cannot declare members other than non-static data members, member enumerations, or member classes | -| Compiler warning (level 1) C5209 | the C++20 syntax for an init-capture has changed to '& ...opt identifier initializer' | +| [Compiler warning (level 1, error) C5208](c5208.md) | unnamed class used in `typedef` name cannot declare members other than non-static data members, member enumerations, or member classes | +| Compiler warning (level 1) C5209 | the C++20 syntax for an init-capture has changed to '`& ...opt identifier initializer`' | | Compiler warning (level 1) C5210 | '*name*' is not a valid header unit reference; ignoring | | Compiler warning (level 1) C5212 | '*name*' is not a valid named reference; treating as reference to file | -| Compiler warning (level 1) C5213 | '*name*' named reference is treated as a named partition but the name is not specified; treating as reference to file | +| Compiler warning (level 1) C5213 | '*name*' named reference is treated as a named partition but the *module* name is not specified; treating as reference to file | | Compiler warning (level 4, off) C5214 | applying '*modifier*' to an operand with a volatile qualified type is deprecated in C++20 | | Compiler warning (level 4, off) C5215 | '*name*' a function parameter with a volatile qualified type is deprecated in C++20 | | Compiler warning (level 4, off) C5216 | '*name*' a volatile qualified return type is deprecated in C++20 | | Compiler warning (level 4, off) C5217 | a structured binding declaration that includes volatile is deprecated in C++20 | | Compiler warning (level 1) C5218 | destroying delete may not behave as intended when non-conforming switches '`/Zc:sizedDealloc-`' or '`/Zc:alignedNew-`' are used | | Compiler warning (level 2, off) C5219 | implicit conversion from '*type-1*' to '*type-2*', possible loss of data | -| Compiler warning (level 4, off) C5220 | '*name*': a non-static data member with a volatile qualified type no longer implies that compiler generated copy/move constructors and copy/move assignment operators are not trivial | -| Compiler warning (level 1) C5221 | xfg::rename is deprecated. | +| Compiler warning (level 4, off) C5220 | '*name*': a non-static data member with a volatile qualified type no longer implies
that compiler generated copy/move constructors and copy/move assignment operators are not trivial | +| Compiler warning (level 1) C5221 | `xfg::rename` is deprecated. | | Compiler warning (level 3) C5222 | '*attribute-name*': all unscoped attribute names are reserved for future standardization | -| Compiler warning (level 3) C5223 | all attribute names in the attribute namespace 'msvc' are reserved for the implementation | +| Compiler warning (level 3) C5223 | all attribute names in the attribute namespace '`msvc`' are reserved for the implementation | | Compiler warning (level 3) C5224 | all attribute names in the attribute namespace '*namespace-name*' are reserved for future standardization | | Compiler warning (level 1) C5225 | '*symbol*': exported inline function defined in a private module fragment is a non-standard extension | | Compiler warning (level 1) C5226 | '*symbol*': exported template defined in private module fragment has no reachable instantiation | @@ -45,7 +45,7 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | Compiler warning (level 4) C5228 | nonstandard extension, '*identifier*' resolved to a member of a dependent base. This lookup is not allowed under `/permissive-`. | | Compiler warning (level 4) C5229 | nonstandard extension, the hidden friend function '*function-name*' was found by name lookup which isn't allowed under `/permissive-`. | | Compiler warning C5230 | nonstandard extension, '*identifier*' was resolved to '*symbol-1*' under `/permissive`. Under `/permissive-` it would resolve to '*symbol-2*'. | -| Compiler warning (level 3) C5231 | the expression '`co_await promise.final_suspend()`' must be non-throwing | +| Compiler warning (level 3, error) C5231 | the expression '`co_await promise.final_suspend()`' must be non-throwing | | Compiler warning (level 1) C5232 | in C++20 this comparison calls '*name*' recursively | | Compiler warning (level 4, off) C5233 | explicit lambda capture '*identifier*' is not used | | Compiler warning (level 1) C5234 | file system error: '*filename*' is not a valid header-name; ignoring | @@ -53,35 +53,35 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | Compiler warning (level 1) C5236 | JSON ill-formed: *message*; ignoring '*filename*' | | Compiler warning (level 1) C5237 | cannot resolve header unit entry '*name*' to a header file in '*filename*'; ignoring entry | | Compiler warning (level 1) C5238 | file system error: cannot open '*filename*' for reading; ignoring | -| Compiler warning (level 4) C5239 | '*symbol*': potentially throwing function called from a function declared `__declspec(nothrow)`. Undefined behavior may occur if an exception is thrown. | -| [Compiler warning (level 4) C5240](c5240.md) | '*attribute-name*': attribute is ignored in this syntactic position | -| Compiler warning (level 1) C5241 | '`/exportHeader`' usage to lookup header-name is deprecated; prefer '/headerName:name value=filename' | +| Compiler warning (level 4) C5239 | '*symbol*': potentially-throwing function called from a function declared `__declspec(nothrow)`. Undefined behavior may occur if an exception is thrown. | +| [Compiler warning (level 4, off) C5240](c5240.md) | '*attribute-name*': attribute is ignored in this syntactic position | +| Compiler warning (level 1) C5241 | '`/exportHeader`' usage to lookup header-name is deprecated; prefer '`/headerName:`*name* *value*`=`*filename*' | | Compiler warning (level 1) C5242 | syntax error in pragma '*identifier*' | -| [Compiler warning (level 1, off) C5243](c5243.md) | '*type-name*': using incomplete class 'class-name' can cause potential one definition rule violation due to ABI limitation | -| Compiler warning (level 1) C5244 | '#include \<*filename*>' in the purview of module '*module-name-1*' appears erroneous. Consider moving that directive before the module declaration, or replace the textual inclusion with 'import \<*module-name-2*>;'. | +| [Compiler warning (level 1, off) C5243](c5243.md) | '*type-name*': using incomplete class '*class-name*' can cause potential one definition rule violation due to ABI limitation | +| Compiler warning (level 1) C5244 | '`#include <`*filename*`>`' in the purview of module '*module-name-1*' appears erroneous. Consider moving that directive before the module declaration, or replace the textual inclusion with '`import <`*module-name-2*`>;`'. | | Compiler warning (level 4, off) C5245 | '*function*': unreferenced function with internal linkage has been removed | | Compiler warning (level 1, off) C5246 | '*member*': the initialization of a subobject should be wrapped in braces | | [Compiler warning (level 1, off) C5247](c5247.md) | section '*section-name*' is reserved for C++ dynamic initialization. Manually creating the section will interfere with C++ dynamic initialization and may lead to undefined behavior | -| [Compiler warning (level 1, off) C5248](c5248.md) | section '*section-name*' is reserved for C++ dynamic initialization. Variables manually put into the section may be optimized out and their order relative to compiler generated dynamic initializers is unspecified. | +| [Compiler warning (level 1, off) C5248](c5248.md) | section '*section-name*' is reserved for C++ dynamic initialization. Variables manually put into the section may be optimized out and their order relative to compiler generated dynamic initializers is unspecified | | Compiler warning (level 1, off) C5249 | '*bitfield*' of type '*enumeration_name*' has named enumerators with values that cannot be represented in the given bit field width of '*bitfield_width*'. | -| Compiler warning (level 3, off) C5250 | '*function_name*': intrinsic function not declared. | +| Compiler warning (level 3, off) C5250 | '*function_name*': intrinsic function not declared | | Compiler warning (level 4, off) C5251 | *segment-name* changed after including header | | Compiler warning (level 4) C5252 | Multiple different types resulted in the same XFG type-hash *hash-value*; the PDB will only record information for one of them | | Compiler warning (level 4) C5253 | a non-local lambda cannot have a capture default | -| Compiler warning (level 4, off) C5254 | language feature 'terse static assert' requires compiler flag '/std:c++17' | -| Compiler warning (level 3) C5255 | unterminated bidirectional character encountered: 'U+XXXX' | +| Compiler warning (level 4, off) C5254 | language feature 'terse static assert' requires compiler flag '*/std:c++17*' | +| Compiler warning (level 3) C5255 | unterminated bidirectional character encountered: '`U+`*XXXX*' | | Compiler warning (level 1, off) C5256 | '*enumeration*': a non-defining declaration of an enumeration with a fixed underlying type is only permitted as a standalone declaration | -| Compiler warning (level 1 or 4) C5257 | '*enumeration*': enumeration was previously declared without a fixed underlying type | +| Compiler warning (level 1 and level 4) C5257 | '*enumeration*': enumeration was previously declared without a fixed underlying type | | Compiler warning (level 4, off) C5258 | explicit capture of '*symbol*' is not required for this use | | Compiler warning (level 4, off) C5259 | '*specialized-type*': explicit specialization requires 'template <>' | | Compiler warning (level 1) C5260 | the constant variable '*variable-name*' has internal linkage in an included header file context, but external linkage in imported header unit context; consider declaring it 'inline' as well if it will be shared across translation units, or 'static' to express intent to use it local to this translation unit | | Compiler warning (level 2) C5261 | no integer type can represent all enumerator values in enumeration '*enum-name*' | -| [Compiler warning (level 1, error, off) C5262](c5262.md) | implicit fall-through occurs here; are you missing a break statement? Use `[[fallthrough]]` when a `break` statement is intentionally omitted between cases | +| [Compiler warning (level 1, off) C5262](c5262.md) | implicit fall-through occurs here; are you missing a break statement? Use `[[fallthrough]]` when a `break` statement is intentionally omitted between cases | | Compiler warning (level 4, off) C5263 | calling '`std::move`' on a temporary object prevents copy elision | | Compiler warning (level 4, off) C5264 | '*variable-name*': 'const' variable is not used | | Compiler warning (level 1) C5265 | cannot open search path '*path*' | -| [Compiler warning (level 4, off) C5266](compiler-warning-level-4-c5266.md) | 'const' qualifier on return type has no effect | -| [Compiler warning C5267](c5267.md) | definition of implicit copy constructor/assignment operator for '*type*' is deprecated because it has a user-provided assignment operator/copy constructor | +| [Compiler warning (level 4, off) C5266](compiler-warning-level-4-c5266.md) | '*const*' qualifier on return type has no effect | +| [Compiler warning (level 4, off) C5267](c5267.md) | definition of implicit *copy constructor/assignment operator* for '*type*' is deprecated because it has a user-provided *assignment operator/copy constructor* | | Compiler warning (level 1) C5268 | Failed to allocate memory at fixed address 0x*address*. Use `/Yb` to specify a specific address base if bit-identical .pch files are required. | | Compiler warning (level 1) C5269 | Failed to allocate PCH memory at fixed address 0x*address*. Use `/Ym` to specify a specific address base if bit-identical .pch files are required. | | Compiler warning (level 3) C5270 | '*value*' is not allowed for option '*switch name*'; allowed values are: *value list* | @@ -89,10 +89,10 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | Compiler warning (level 1) C5272 | throwing an object of non-copyable type '*type*' is non-standard. If a copy is needed at runtime it will be made as if by `memcpy`. | | Compiler warning (level 1) C5273 | behavior change: `_Alignas` on anonymous type no longer ignored (promoted members will align) | | Compiler warning (level 1) C5274 | behavior change: `_Alignas` no longer applies to the type '*type*' (only applies to declared data objects) | -| Compiler warning (Error) C5275 | facade assembly '*name*' being imported under '`/clr`'; missing option '`/clr:netcore`'? | -| Compiler warning (level 1, error) C5300 | '#pragma omp atomic': left operand of '*operator*' must match left hand side of assignment-expression | -| [Compiler warning (level 1) C5301](c5301-c5302.md) | '#pragma omp for': '*loop-index*' increases while loop condition uses '*comparison*'; non-terminating loop? | -| [Compiler warning (level 1) C5302](c5301-c5302.md) | '#pragma omp for': '*loop-index*' decreases while loop condition uses '*comparison*'; non-terminating loop? | +| Compiler warning (error) C5275 | assembly '*name*' being imported under '*/clr*' does not contain the required fundamental types | +| Compiler warning (error) C5300 | '`#pragma omp atomic` *clause*': expression mismatch for lvalue being updated | +| [Compiler warning (level 1) C5301](c5301-c5302.md) | '`#pragma omp for`': '*loop-index*' increases while loop condition uses '*comparison*'; non-terminating loop? | +| [Compiler warning (level 1) C5302](c5301-c5302.md) | '`#pragma omp for`': '*loop-index*' decreases while loop condition uses '*comparison*'; non-terminating loop? | | Compiler warning (level 1) C5303 | function marked with `[[msvc::intrinsic]]` did not result in a no-op cast | | Compiler warning (level 1) C5304 | a declaration designated by the using-declaration '*name1*' exported from this module has internal linkage and using such a name outside the module is ill-formed; consider declaring '*name2*' '`inline`' to use it outside of this module | | Compiler warning (level 1) C5305 | '*name*': an explicit instantiation declaration that follows an explicit instantiation definition is ignored | From 23f32f4ecadc2d0f40517d724df2cb23eaa072e3 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 17 May 2024 12:45:42 -0700 Subject: [PATCH 0189/1239] Update compiler-warning-level-2-c4150.md --- .../compiler-warnings/compiler-warning-level-2-c4150.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md index 2faef2beb7..9d0fbe858c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4150.md @@ -78,7 +78,7 @@ void NoDestruct( IncClass* pIncClass ) ``` -## See Also +## See also * [Projects and build systems](../../build/projects-and-build-systems-cpp.md) * [Source files and source programs](../../c-language/source-files-and-source-programs.md) From 930414f2fef3b6e51bebf08bd40438b3eef48f06 Mon Sep 17 00:00:00 2001 From: Omotola Date: Tue, 21 May 2024 15:23:19 -0700 Subject: [PATCH 0190/1239] Update clang-tidy.md minor corrections --- docs/code-quality/clang-tidy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/code-quality/clang-tidy.md b/docs/code-quality/clang-tidy.md index cbf56039f4..ed3834365d 100644 --- a/docs/code-quality/clang-tidy.md +++ b/docs/code-quality/clang-tidy.md @@ -92,7 +92,7 @@ By default, Clang-Tidy does not set any checks when enabled. To see the list of ## Clang-Tidy Tool Directory -If you'd like to have custom rules built into your clang-tidy executable and run it in VS, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or Browse and select the path under the **Clang-Tidy Tool Directory** property. Once the change is saved, the new executable will be used after the next succesful compilation. +If you'd like to have custom rules built into your clang-tidy executable and run it in Microsoft Visual Studio, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or **Browse** and select the path under the **Clang-Tidy Tool Directory** property. Once the change is saved, the new executable will be used after the next succesful compilation. ## See also From 2523ec14d94abb518907ca099598c5ae851676c7 Mon Sep 17 00:00:00 2001 From: Omotola Date: Tue, 21 May 2024 15:29:27 -0700 Subject: [PATCH 0191/1239] Update clang-tidy.md grammar correction --- docs/code-quality/clang-tidy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/code-quality/clang-tidy.md b/docs/code-quality/clang-tidy.md index ed3834365d..9bbed167eb 100644 --- a/docs/code-quality/clang-tidy.md +++ b/docs/code-quality/clang-tidy.md @@ -92,7 +92,7 @@ By default, Clang-Tidy does not set any checks when enabled. To see the list of ## Clang-Tidy Tool Directory -If you'd like to have custom rules built into your clang-tidy executable and run it in Microsoft Visual Studio, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or **Browse** and select the path under the **Clang-Tidy Tool Directory** property. Once the change is saved, the new executable will be used after the next succesful compilation. +If you'd like to have custom rules built into your clang-tidy executable and run it in Microsoft Visual Studio, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or **Browse** and select the path under the **Clang-Tidy Tool Directory** property. Once the change is saved, the new executable is used once the change is saved and the app is recompiled. ## See also From 6cbac1878456560eadb777956f70f16de3bdbd57 Mon Sep 17 00:00:00 2001 From: Jak Koke Date: Wed, 22 May 2024 14:24:10 -0700 Subject: [PATCH 0192/1239] Update docs/code-quality/clang-tidy.md --- docs/code-quality/clang-tidy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/code-quality/clang-tidy.md b/docs/code-quality/clang-tidy.md index 9bbed167eb..7427e96a45 100644 --- a/docs/code-quality/clang-tidy.md +++ b/docs/code-quality/clang-tidy.md @@ -92,7 +92,7 @@ By default, Clang-Tidy does not set any checks when enabled. To see the list of ## Clang-Tidy Tool Directory -If you'd like to have custom rules built into your clang-tidy executable and run it in Microsoft Visual Studio, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or **Browse** and select the path under the **Clang-Tidy Tool Directory** property. Once the change is saved, the new executable is used once the change is saved and the app is recompiled. +If you'd like to have custom rules built into your clang-tidy executable and run it in Microsoft Visual Studio, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or **Browse** and select the path under the **Clang-Tidy Tool Directory** property. The new executable is used once the change is saved, and the app is recompiled. ## See also From ccfce32c54084b58c542bc0b2e09c1622c880c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonin=20D=C3=A9cimo?= Date: Thu, 23 May 2024 16:30:18 +0200 Subject: [PATCH 0193/1239] Document that `__fastfail` is `noreturn` --- docs/intrinsics/fastfail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/intrinsics/fastfail.md b/docs/intrinsics/fastfail.md index 592749c4e0..ffafc9ee25 100644 --- a/docs/intrinsics/fastfail.md +++ b/docs/intrinsics/fastfail.md @@ -13,7 +13,7 @@ Immediately terminates the calling process with minimum overhead. ## Syntax ```C -void __fastfail(unsigned int code); +__declspec(noreturn) void __fastfail(unsigned int code); ``` ### Parameters From e0e0b4473e3361004b93541ba6b54dccc0f218aa Mon Sep 17 00:00:00 2001 From: Michelle Matias <38734287+michelleangela@users.noreply.github.com> Date: Fri, 24 May 2024 15:02:01 -0700 Subject: [PATCH 0194/1239] ARM64 arch and feature options --- docs/build/reference/arch-arm64.md | 25 +++++++--- .../compiler-options-listed-alphabetically.md | 5 +- .../compiler-options-listed-by-category.md | 5 +- docs/build/reference/feature-arm64.md | 46 +++++++++++++++++++ docs/build/toc.yml | 2 + 5 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 docs/build/reference/feature-arm64.md diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index 873f808dad..b2fd9591b7 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -1,24 +1,31 @@ --- description: "Learn more about: /arch (ARM64)" title: "/arch (ARM64)" -ms.date: 08/30/2022 +ms.date: 05/24/2024 --- # `/arch` (ARM64) -Specifies the architecture for code generation on ARM64. For more information on **`/arch`** for other target architectures, see [`/arch` (x86)](arch-x86.md), [`/arch` (x64)](arch-x64.md), and [`/arch` (ARM)](arch-arm.md). +Specifies the Arm A-Profile architecture extension for code generation on ARM64. For more information on **`/arch`** for other target architectures, see [`/arch` (x86)](arch-x86.md), [`/arch` (x64)](arch-x64.md), and [`/arch` (ARM)](arch-arm.md). ## Syntax -> **`/arch:`**\[**`armv8.0`**-**`armv8.8`**] +>**`/arch:`**[[+feature]](feature-arm64.md)\ +>**`/arch:`**[[+feature]](feature-arm64.md) ## Arguments -**`/arch:armv8.0`** through **`/arch:armv8.8`**\ -Optional. Specifies minimum CPU extension requirements for ARMv8.x-A. The default is **`/arch:armv8.0`**. +**`/arch:armv8.x`**\ +Specifies the Armv8-A architecture, where **`x`** is a required extension value from **`0`** to **`9`**1. By default, the compiler uses the **`/arch:armv8.0`** behavior if no architecture is specified. + +**`/arch:armv9.x`**2\ +Specifies the Armv9-A architecture, where **`x`** is a required extension value from **`0`** to **`4`**. By default, the compiler uses the **`/arch:armv8.0`** behavior if no architecture is specified. ## Remarks -You may specify a CPU extension requirement from Armv8.0-A through Armv8.8-A. However, depending on your version of Visual Studio, the compiler may not yet generate instructions from all feature sets required by the extension level you specify. For example, **`/arch:armv8.1`** allows the `_Interlocked*` intrinsic functions to use the appropriate atomic instruction that was introduced with the ARMv8.1 extension, FEAT_LSE, but compiler support requires Visual Studio 2022 version 17.2 or later. +You may specify an ARM64 extension from Armv8.0-A through Armv8.9-A and Armv9.0-A through Armv9.4-A. Optionally, one or more architecture features can be enabled by appending a feature argument to the option3. For example, in order to target Armv8.0-A and enable feature FEAT_LSE, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. + +> [!NOTE] +> Depending on your version of Visual Studio, the compiler may not yet generate instructions from all feature sets required by the extension level you specify. For example, **`/arch:armv8.1`** allows the `*Interlocked*` intrinsic functions to use the appropriate atomic instruction that was introduced with the Armv8.1-A extension feature FEAT_LSE, but compiler support requires Visual Studio 2022 version 17.2 or later. The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md). @@ -30,12 +37,16 @@ When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, ** 1. Select the **Configuration Properties** > **C/C++** > **Command Line** property page. -1. In the **Additional options** box, add *`/arch:armv8.0`* or higher. Choose **OK** to save your changes. +1. In the **Additional options** box, add *`/arch:armv8.0`* or replace `armv8.0` with a different ARM64 extension. Choose **OK** to save your changes. ### To set this compiler option programmatically - See . +1 Armv8-A architecture extension `armv8.9` is available starting in Visual Studio 2022 version 17.10.\ +2 Armv9-A architecture extensions are available starting in Visual Studio 2022 version 17.10.\ +3 ARM architecture feature enablement is available starting in Visual Studio 2022 version 17.10. + ## See also [`/arch` (Minimum CPU architecture)](arch-minimum-cpu-architecture.md)\ diff --git a/docs/build/reference/compiler-options-listed-alphabetically.md b/docs/build/reference/compiler-options-listed-alphabetically.md index 8e9f1572ed..d79416cb8e 100644 --- a/docs/build/reference/compiler-options-listed-alphabetically.md +++ b/docs/build/reference/compiler-options-listed-alphabetically.md @@ -16,7 +16,7 @@ This table contains an alphabetical list of compiler options. For a list of comp | [`/?`](help-compiler-command-line-help.md) | Lists the compiler options. | | [`/AI

`](ai-specify-metadata-directories.md) | Specifies a directory to search to resolve file references passed to the [`#using`](../../preprocessor/hash-using-directive-cpp.md) directive. | | [`/analyze`](analyze-code-analysis.md) | Enables code analysis. | -| [`/arch:`](arch-x86.md) | Minimum CPU architecture requirements. IA32, SSE, and SSE2 are x86 only. | +| [`/arch`](arch-minimum-cpu-architecture.md) | Minimum CPU architecture requirements. | | `/arm64EC` | Generate code compatible with the arm64EC ABI. | | [`/await`](await-enable-coroutine-support.md) | Enable coroutines (resumable functions) extensions. | | [`/await:strict`](await-enable-coroutine-support.md) | Enable standard C++20 coroutine support with earlier language versions. | @@ -65,6 +65,7 @@ This table contains an alphabetical list of compiler options. For a list of comp | [`/FC`](fc-full-path-of-source-code-file-in-diagnostics.md) | Displays the full path of source code files passed to *cl.exe* in diagnostic text. | | [`/Fd`](fd-program-database-file-name.md) | Renames program database file. | | [`/Fe`](fe-name-exe-file.md) | Renames the executable file. | +| [`/feature`](feature-arm64.md) | Enable architecture features.17.10 | | [`/FI`](fi-name-forced-include-file.md) | Preprocesses the specified include file. | | [`/Fi`](fi-preprocess-output-file-name.md) | Specifies the preprocessed output file name. | | [`/Fm`](fm-name-mapfile.md) | Creates a mapfile. | @@ -257,6 +258,8 @@ This table contains an alphabetical list of compiler options. For a list of comp | [`/Zs`](zs-syntax-check-only.md) | Checks syntax only. | | [`/ZW`](zw-windows-runtime-compilation.md) | Produces an output file to run on the Windows Runtime. | +17.10 This option is available starting in Visual Studio 2022 version 17.10. + ## See also [MSVC compiler options](compiler-options.md)\ diff --git a/docs/build/reference/compiler-options-listed-by-category.md b/docs/build/reference/compiler-options-listed-by-category.md index 141f35bcfd..f78d94bc7d 100644 --- a/docs/build/reference/compiler-options-listed-by-category.md +++ b/docs/build/reference/compiler-options-listed-by-category.md @@ -28,7 +28,7 @@ This article contains a categorical list of compiler options. For an alphabetica | Option | Purpose | |--|--| -| [`/arch:`](arch-x86.md) | Minimum CPU architecture requirements. IA32, SSE, and SSE2 are x86 only. | +| [`/arch`](arch-minimum-cpu-architecture.md) | Minimum CPU architecture requirements. | | [`/clr`](clr-common-language-runtime-compilation.md) | Produces an output file to run on the common language runtime. | | [`/clr:implicitKeepAlive-`](clr-common-language-runtime-compilation.md) | Turn off implicit emission of `System::GC::KeepAlive(this)`. | | [`/clr:initialAppDomain`](clr-common-language-runtime-compilation.md) | Enable initial AppDomain behavior of Visual C++ 2002. | @@ -42,6 +42,7 @@ This article contains a categorical list of compiler options. For an alphabetica | [`/EHc`](eh-exception-handling-model.md) | `extern "C"` defaults to `nothrow`. | | [`/EHr`](eh-exception-handling-model.md) | Always generate `noexcept` runtime termination checks. | | [`/EHs`](eh-exception-handling-model.md) | Enable C++ exception handling (no SEH exceptions). | +| [`/feature`](feature-arm64.md) | Enable architecture features.17.10 | | [`/fp:contract`](fp-specify-floating-point-behavior.md) | Consider floating-point contractions when generating code. | | [`/fp:except[-]`](fp-specify-floating-point-behavior.md) | Consider floating-point exceptions when generating code. | | [`/fp:fast`](fp-specify-floating-point-behavior.md) | "fast" floating-point model; results are less predictable. | @@ -325,6 +326,8 @@ Experimental options may only be supported by certain versions of the compiler. | [`/Ze`](za-ze-disable-language-extensions.md) | Deprecated. Enables language extensions. | | [`/Zg`](zg-generate-function-prototypes.md) | Removed in Visual Studio 2015. Generates function prototypes. | +17.10 This option is available starting in Visual Studio 2022 version 17.10. + ## See also [C/C++ building reference](c-cpp-building-reference.md)\ diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md new file mode 100644 index 0000000000..b1814ee6d2 --- /dev/null +++ b/docs/build/reference/feature-arm64.md @@ -0,0 +1,46 @@ +--- +description: "Learn more about: /feature (ARM64)" +title: "/feature (ARM64)" +ms.date: 05/24/2024 +--- +# `/feature` (ARM64) + +Optionally specify one or more Arm A-Profile architecture features to enable for an ARM64 extension specified by **`/arch`** (ARM64). For more information on **`/arch`** (ARM64), see [`/arch` (ARM64)](arch-arm64.md). + +## Syntax + +> **`/feature:`**[**`+arg2`**] + +## Arguments +Specify one or more of the following available features to enable if a targeted ARM64 extension supports it. + +| Feature argument | Feature identifier | Optional from | Enabled by default | Description | +|--|--|--|--|--| +|**`lse`** | FEAT_LSE | Armv8.0 | Armv8.1 | Large System Extensions. | +|**`rcpc`** | FEAT_LRCPC | Armv8.2 | Armv8.3 | Load-Acquire RCpc instructions. | + +## Remarks + +Example usage: to enable FEAT_LSE, use feature argument **`lse`** so that the option is **`/feature:lse`**. + +If there are conflicting feature arguments specified by **`/feature`**, the right-most feature is enabled. Enabling a feature that is not supported by a targeted architecture may cause unexpected behavior, especially if a CPU does not implement the feature. + +You can use either **`/feature`** or only **`/arch`** (ARM64) to specify features. For example, if you want to enable FEAT_LSE when targeting Armv8.0-A, you can either use both **`/feature:lse`** and **`/arch:armv8.0`** or only use **`/arch:armv8.0+lse`**. **`/feature`** exists as another way to specify features without having to specify them in **`/arch`** (ARM64). + +### To set the `/feature` compiler option in Visual Studio + +1. Open the **Property Pages** dialog box for the project. For more information, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md). + +1. Select the **Configuration Properties** > **C/C++** > **Command Line** property page. + +1. In the **Additional options** box, add *`/feature:lse`* or replace `lse` with the feature to enable. Choose **OK** to save your changes. + +### To set this compiler option programmatically + +- See . + +## See also + +[`/arch` (Minimum CPU architecture)](arch-minimum-cpu-architecture.md)\ +[MSVC compiler options](compiler-options.md)\ +[MSVC compiler command-line syntax](compiler-command-line-syntax.md) diff --git a/docs/build/toc.yml b/docs/build/toc.yml index 5c58c09557..e86f96782b 100644 --- a/docs/build/toc.yml +++ b/docs/build/toc.yml @@ -560,6 +560,8 @@ items: href: ../build/reference/favor-optimize-for-architecture-specifics.md - name: /FC (Full path of source code file in diagnostics) href: ../build/reference/fc-full-path-of-source-code-file-in-diagnostics.md + - name: /feature (Enable architecture features) + href: ../build/reference/feature-arm64.md - name: /fp (Specify floating-point behavior) href: ../build/reference/fp-specify-floating-point-behavior.md - name: /fpcvt (Floating-point to unsigned integer conversion behavior) From 2d9a44909df0c3f1d76db96cb63fbae28fc3ac30 Mon Sep 17 00:00:00 2001 From: Michelle Matias <38734287+michelleangela@users.noreply.github.com> Date: Fri, 24 May 2024 15:25:57 -0700 Subject: [PATCH 0195/1239] Remove ARM --- docs/build/reference/arch-arm64.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index b2fd9591b7..fcb6c88ae9 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -45,7 +45,7 @@ When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, ** 1 Armv8-A architecture extension `armv8.9` is available starting in Visual Studio 2022 version 17.10.\ 2 Armv9-A architecture extensions are available starting in Visual Studio 2022 version 17.10.\ -3 ARM architecture feature enablement is available starting in Visual Studio 2022 version 17.10. +3 Architecture feature enablement is available starting in Visual Studio 2022 version 17.10. ## See also From e838fc490e3798c73f2656e76b013d3185a16355 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 24 May 2024 16:39:33 -0700 Subject: [PATCH 0196/1239] Update arch-arm64.md - small edits --- docs/build/reference/arch-arm64.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index fcb6c88ae9..77d41f29bc 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -22,10 +22,10 @@ Specifies the Armv9-A architecture, where **`x`** is a required extension value ## Remarks -You may specify an ARM64 extension from Armv8.0-A through Armv8.9-A and Armv9.0-A through Armv9.4-A. Optionally, one or more architecture features can be enabled by appending a feature argument to the option3. For example, in order to target Armv8.0-A and enable feature FEAT_LSE, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. +You may specify an ARM64 extension from Armv8.0-A through Armv8.9-A, and Armv9.0-A through Armv9.4-A. Optionally, enable one or more architecture features by appending a feature argument to the option3. For example, in order to target Armv8.0-A and enable feature `FEAT_LSE`, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. > [!NOTE] -> Depending on your version of Visual Studio, the compiler may not yet generate instructions from all feature sets required by the extension level you specify. For example, **`/arch:armv8.1`** allows the `*Interlocked*` intrinsic functions to use the appropriate atomic instruction that was introduced with the Armv8.1-A extension feature FEAT_LSE, but compiler support requires Visual Studio 2022 version 17.2 or later. +> Depending on your version of Visual Studio, the compiler may not yet generate instructions from all feature sets required by the extension level you specify. For example, **`/arch:armv8.1`** allows the `*Interlocked*` intrinsic functions to use the appropriate atomic instruction introduced with the Armv8.1-A extension feature `FEAT_LSE`, but compiler support requires Visual Studio 2022 version 17.2 or later. The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md). From f6e4d319ae6bf480cc688f37918ea43015ed2c62 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 24 May 2024 16:45:33 -0700 Subject: [PATCH 0197/1239] Update feature-arm64.md --- docs/build/reference/feature-arm64.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md index b1814ee6d2..9d1c0ed586 100644 --- a/docs/build/reference/feature-arm64.md +++ b/docs/build/reference/feature-arm64.md @@ -5,27 +5,27 @@ ms.date: 05/24/2024 --- # `/feature` (ARM64) -Optionally specify one or more Arm A-Profile architecture features to enable for an ARM64 extension specified by **`/arch`** (ARM64). For more information on **`/arch`** (ARM64), see [`/arch` (ARM64)](arch-arm64.md). +Enable one or more Arm A-Profile architecture features for an ARM64 extension as specified by **`/arch`** (ARM64). For more information on **`/arch`** (ARM64), see [`/arch` (ARM64)](arch-arm64.md). ## Syntax > **`/feature:`**[**`+arg2`**] ## Arguments -Specify one or more of the following available features to enable if a targeted ARM64 extension supports it. +Specify one or more of the following ARM64 extension features to enable if the targeted ARM64 extension supports it. | Feature argument | Feature identifier | Optional from | Enabled by default | Description | |--|--|--|--|--| -|**`lse`** | FEAT_LSE | Armv8.0 | Armv8.1 | Large System Extensions. | -|**`rcpc`** | FEAT_LRCPC | Armv8.2 | Armv8.3 | Load-Acquire RCpc instructions. | +|**`lse`** | `FEAT_LSE` | Armv8.0 | Armv8.1 | Large System Extensions. | +|**`rcpc`** | `FEAT_LRCPC` | Armv8.2 | Armv8.3 | Load-Acquire RCpc instructions. | ## Remarks -Example usage: to enable FEAT_LSE, use feature argument **`lse`** so that the option is **`/feature:lse`**. +Example usage: to enable `FEAT_LSE`, specify **`/feature:lse`**. If there are conflicting feature arguments specified by **`/feature`**, the right-most feature is enabled. Enabling a feature that is not supported by a targeted architecture may cause unexpected behavior, especially if a CPU does not implement the feature. -You can use either **`/feature`** or only **`/arch`** (ARM64) to specify features. For example, if you want to enable FEAT_LSE when targeting Armv8.0-A, you can either use both **`/feature:lse`** and **`/arch:armv8.0`** or only use **`/arch:armv8.0+lse`**. **`/feature`** exists as another way to specify features without having to specify them in **`/arch`** (ARM64). +Use either **`/feature`** or only **`/arch`** (ARM64) to specify features. For example, to enable `FEAT_LSE` when targeting Armv8.0-A, use either both **`/feature:lse`** and **`/arch:armv8.0`**, or specify **`/arch:armv8.0+lse`**. **`/feature`** exists as another way to specify features without specifying them in **`/arch`** (ARM64). ### To set the `/feature` compiler option in Visual Studio From fd5ccdbba5a83cebaa161cff5dc0fecc376efe7c Mon Sep 17 00:00:00 2001 From: Michelle Matias <38734287+michelleangela@users.noreply.github.com> Date: Fri, 24 May 2024 17:12:48 -0700 Subject: [PATCH 0198/1239] Improve tone and clarity --- docs/build/reference/feature-arm64.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md index 9d1c0ed586..39313adb52 100644 --- a/docs/build/reference/feature-arm64.md +++ b/docs/build/reference/feature-arm64.md @@ -12,7 +12,7 @@ Enable one or more Arm A-Profile architecture features for an ARM64 extension as > **`/feature:`**[**`+arg2`**] ## Arguments -Specify one or more of the following ARM64 extension features to enable if the targeted ARM64 extension supports it. +To enable one or more features a targeted ARM64 extension supports, specify one or more of the following feature arguments. | Feature argument | Feature identifier | Optional from | Enabled by default | Description | |--|--|--|--|--| @@ -23,7 +23,7 @@ Specify one or more of the following ARM64 extension features to enable if the t Example usage: to enable `FEAT_LSE`, specify **`/feature:lse`**. -If there are conflicting feature arguments specified by **`/feature`**, the right-most feature is enabled. Enabling a feature that is not supported by a targeted architecture may cause unexpected behavior, especially if a CPU does not implement the feature. +If there are conflicting feature arguments specified by **`/feature`**, the right-most feature is enabled. Enabling a feature a targeted ARM64 extension doesn't support may cause unexpected behavior, especially if a CPU doesn't implement the feature. Use either **`/feature`** or only **`/arch`** (ARM64) to specify features. For example, to enable `FEAT_LSE` when targeting Armv8.0-A, use either both **`/feature:lse`** and **`/arch:armv8.0`**, or specify **`/arch:armv8.0+lse`**. **`/feature`** exists as another way to specify features without specifying them in **`/arch`** (ARM64). From b7befb225d3214e54e5602befdef6a0fcb05d34b Mon Sep 17 00:00:00 2001 From: Michelle Matias <38734287+michelleangela@users.noreply.github.com> Date: Fri, 24 May 2024 18:00:14 -0700 Subject: [PATCH 0199/1239] Use "the" --- docs/build/reference/feature-arm64.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md index 39313adb52..c0d89ac9af 100644 --- a/docs/build/reference/feature-arm64.md +++ b/docs/build/reference/feature-arm64.md @@ -12,7 +12,7 @@ Enable one or more Arm A-Profile architecture features for an ARM64 extension as > **`/feature:`**[**`+arg2`**] ## Arguments -To enable one or more features a targeted ARM64 extension supports, specify one or more of the following feature arguments. +To enable one or more features the targeted ARM64 extension supports, specify one or more of the following feature arguments. | Feature argument | Feature identifier | Optional from | Enabled by default | Description | |--|--|--|--|--| From ae8551c336f9ea93ca2095571ec01bab877e5b15 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Tue, 28 May 2024 09:21:16 -0700 Subject: [PATCH 0200/1239] Update feature-arm64.md minor edit --- docs/build/reference/feature-arm64.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md index c0d89ac9af..0cff61d52c 100644 --- a/docs/build/reference/feature-arm64.md +++ b/docs/build/reference/feature-arm64.md @@ -1,18 +1,18 @@ --- description: "Learn more about: /feature (ARM64)" title: "/feature (ARM64)" -ms.date: 05/24/2024 +ms.date: 05/28/2024 --- # `/feature` (ARM64) -Enable one or more Arm A-Profile architecture features for an ARM64 extension as specified by **`/arch`** (ARM64). For more information on **`/arch`** (ARM64), see [`/arch` (ARM64)](arch-arm64.md). +Enable one or more Arm A-Profile architecture features for an ARM64 extension as specified by **`/arch`** (ARM64). For more information about **`/arch`** (ARM64), see [`/arch` (ARM64)](arch-arm64.md). ## Syntax > **`/feature:`**[**`+arg2`**] ## Arguments -To enable one or more features the targeted ARM64 extension supports, specify one or more of the following feature arguments. +To enable one or more features the targeted ARM64 extension supports, specify one or more of the following feature arguments: | Feature argument | Feature identifier | Optional from | Enabled by default | Description | |--|--|--|--|--| @@ -23,9 +23,9 @@ To enable one or more features the targeted ARM64 extension supports, specify on Example usage: to enable `FEAT_LSE`, specify **`/feature:lse`**. -If there are conflicting feature arguments specified by **`/feature`**, the right-most feature is enabled. Enabling a feature a targeted ARM64 extension doesn't support may cause unexpected behavior, especially if a CPU doesn't implement the feature. +If there are conflicting feature arguments specified by **`/feature`**, the right-most feature is enabled. Enabling a feature the targeted ARM64 extension doesn't support may cause unexpected behavior, especially if a CPU doesn't implement the feature. -Use either **`/feature`** or only **`/arch`** (ARM64) to specify features. For example, to enable `FEAT_LSE` when targeting Armv8.0-A, use either both **`/feature:lse`** and **`/arch:armv8.0`**, or specify **`/arch:armv8.0+lse`**. **`/feature`** exists as another way to specify features without specifying them in **`/arch`** (ARM64). +Use either **`/feature`** or only **`/arch`** (ARM64) to specify features. For example, to enable `FEAT_LSE` when targeting Armv8.0-A, use both **`/feature:lse`** and **`/arch:armv8.0`**, or specify **`/arch:armv8.0+lse`**. **`/feature`** is a way to specify features without specifying them in **`/arch`** (ARM64). ### To set the `/feature` compiler option in Visual Studio From 30a0411e78fbeb39a9c5b70d011f26cb66af1ea4 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Tue, 28 May 2024 09:24:35 -0700 Subject: [PATCH 0201/1239] Update arch-arm64.md minor edits --- docs/build/reference/arch-arm64.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index 77d41f29bc..c986a3e04e 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -5,7 +5,7 @@ ms.date: 05/24/2024 --- # `/arch` (ARM64) -Specifies the Arm A-Profile architecture extension for code generation on ARM64. For more information on **`/arch`** for other target architectures, see [`/arch` (x86)](arch-x86.md), [`/arch` (x64)](arch-x64.md), and [`/arch` (ARM)](arch-arm.md). +Specifies the Arm A-Profile architecture extension for code generation on ARM64. For more information about **`/arch`** for other target architectures, see [`/arch` (x86)](arch-x86.md), [`/arch` (x64)](arch-x64.md), and [`/arch` (ARM)](arch-arm.md). ## Syntax @@ -22,14 +22,14 @@ Specifies the Armv9-A architecture, where **`x`** is a required extension value ## Remarks -You may specify an ARM64 extension from Armv8.0-A through Armv8.9-A, and Armv9.0-A through Armv9.4-A. Optionally, enable one or more architecture features by appending a feature argument to the option3. For example, in order to target Armv8.0-A and enable feature `FEAT_LSE`, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. +You may specify an ARM64 extension from Armv8.0-A through Armv8.9-A, and Armv9.0-A through Armv9.4-A. Optionally, enable one or more architecture features by appending a feature argument to the option3. For example, to target Armv8.0-A and enable feature `FEAT_LSE`, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. > [!NOTE] > Depending on your version of Visual Studio, the compiler may not yet generate instructions from all feature sets required by the extension level you specify. For example, **`/arch:armv8.1`** allows the `*Interlocked*` intrinsic functions to use the appropriate atomic instruction introduced with the Armv8.1-A extension feature `FEAT_LSE`, but compiler support requires Visual Studio 2022 version 17.2 or later. The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md). -When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, **`/arch`** has no effect on code generation for managed functions. **`/arch`** only affects code generation for native functions. +**`/arch`** only affects code generation for native functions. When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, **`/arch`** has no effect on code generation for managed functions. ### To set the `/arch` compiler option in Visual Studio From a45379edc63a10577f10981bcbf6ffac5555f4de Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 28 May 2024 10:17:21 -0700 Subject: [PATCH 0202/1239] note 2013 no longer supported --- docs/windows/latest-supported-vc-redist.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/windows/latest-supported-vc-redist.md b/docs/windows/latest-supported-vc-redist.md index c8c45290c3..097ad119de 100644 --- a/docs/windows/latest-supported-vc-redist.md +++ b/docs/windows/latest-supported-vc-redist.md @@ -1,7 +1,7 @@ --- title: "Latest supported Visual C++ Redistributable downloads" description: "This article lists the download links for the latest versions of Visual C++ Redistributable packages." -ms.date: 02/26/2024 +ms.date: 5/28/2024 helpviewer_keywords: [ "redist", @@ -52,7 +52,7 @@ Download other versions, including long term servicing release channel (LTSC) ve - The Visual C++ Redistributable supports several command-line options. For more information, see [Command-line options for the Redistributable packages](./redistributing-visual-cpp-files.md#command-line-options-for-the-redistributable-packages). -## Visual Studio 2013 (VC++ 12.0) +## Visual Studio 2013 (VC++ 12.0) (no longer supported) These links download the latest supported en-US Microsoft Visual C++ Redistributable packages for Visual Studio 2013. You can download other versions and languages from [Update for Visual C++ 2013 Redistributable Package](https://support.microsoft.com/topic/update-for-visual-c-2013-redistributable-package-d8ccd6a5-4e26-c290-517b-8da6cfdf4f10) or from [my.visualstudio.com](https://my.visualstudio.com/). From 0b17fa8d50f6980ef186665651d69df6f2998c69 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 28 May 2024 10:47:45 -0700 Subject: [PATCH 0203/1239] edit latest version --- docs/windows/latest-supported-vc-redist.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/windows/latest-supported-vc-redist.md b/docs/windows/latest-supported-vc-redist.md index 097ad119de..d1f479d58c 100644 --- a/docs/windows/latest-supported-vc-redist.md +++ b/docs/windows/latest-supported-vc-redist.md @@ -28,7 +28,8 @@ This table lists the latest supported English (en-US) Microsoft Visual C++ Redis Unlike older versions of Visual Studio, which have infrequent redist updates, the version number isn't listed in the following table for Visual Studio 2015-2022 because the redist is updated frequently. To find the version number of the latest redist, download the redist you're interested in using one of the following links. Then, look at its properties using Windows File Explorer. In the **Details** pane, the **File version** contains the version of the redist. ## Latest Microsoft Visual C++ Redistributable Version -The latest version is `14.38.33135.0` + +The latest version is `14.40.33810.0` Use the following links to download this version for each supported architecture: @@ -44,7 +45,7 @@ Download other versions, including long term servicing release channel (LTSC) ve - The Visual C++ Redistributable for Visual Studio 2015-2022 doesn't have separate packages for different languages. It contains EULAs for all supported languages. -- Some of the downloads that are mentioned in this article are currently available on [my.visualstudio.com](https://my.visualstudio.com/). Log in using a Visual Studio Subscription account so that you can access the download links. If you're asked for credentials, use your existing Visual Studio subscription account. Or, create a free account by choosing the **No account? Create one!** link. +- Some of the downloads that are mentioned in this article are currently available on [my.visualstudio.com](https://my.visualstudio.com/). Log in using a Visual Studio Subscription account so that you can access the download links. If you're asked for credentials, use your existing Visual Studio subscription account. Or, create a free account by choosing the **No account? Create one!** link. - Visual Studio versions since Visual Studio 2015 share the same Redistributable files. For example, any apps built by the Visual Studio 2015, 2017, 2019, or 2022 toolsets can use the latest Microsoft Visual C++ Redistributable. However, the version of the Microsoft Visual C++ Redistributable installed on the machine must be the same or higher than the version of the Visual C++ toolset used to create your application. For more information about which version of the Redistributable to install, see [Determining which DLLs to redistribute](determining-which-dlls-to-redistribute.md). For more information about binary compatibility, see [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md). @@ -54,7 +55,7 @@ Download other versions, including long term servicing release channel (LTSC) ve ## Visual Studio 2013 (VC++ 12.0) (no longer supported) -These links download the latest supported en-US Microsoft Visual C++ Redistributable packages for Visual Studio 2013. +These links download the latest available en-US Microsoft Visual C++ Redistributable packages for Visual Studio 2013. You can download other versions and languages from [Update for Visual C++ 2013 Redistributable Package](https://support.microsoft.com/topic/update-for-visual-c-2013-redistributable-package-d8ccd6a5-4e26-c290-517b-8da6cfdf4f10) or from [my.visualstudio.com](https://my.visualstudio.com/). | Architecture | Version | Link | From 212118752bb8ec6e55e1d2f9e96ca234d7ee18c2 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 28 May 2024 15:38:10 -0700 Subject: [PATCH 0204/1239] draft /voltilemetadata --- .../compiler-options-listed-alphabetically.md | 2 +- .../compiler-options-listed-by-category.md | 2 +- docs/build/reference/volatile.md | 40 +++++++++++++++++++ docs/build/toc.yml | 2 + 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 docs/build/reference/volatile.md diff --git a/docs/build/reference/compiler-options-listed-alphabetically.md b/docs/build/reference/compiler-options-listed-alphabetically.md index 8e9f1572ed..7395bb4630 100644 --- a/docs/build/reference/compiler-options-listed-alphabetically.md +++ b/docs/build/reference/compiler-options-listed-alphabetically.md @@ -196,7 +196,7 @@ This table contains an alphabetical list of compiler options. For a list of comp | [`/vmv`](vmm-vms-vmv-general-purpose-representation.md) | Declares virtual inheritance. | | [`/volatile:iso`](volatile-volatile-keyword-interpretation.md) | Acquire/release semantics not guaranteed on volatile accesses. | | [`/volatile:ms`](volatile-volatile-keyword-interpretation.md) | Acquire/release semantics guaranteed on volatile accesses. | -| `/volatileMetadata` | Generate metadata on volatile memory accesses. | +| [`/volatileMetadata`](volatile.md) | Generate metadata on volatile memory accesses. | | [`/w`](compiler-option-warning-level.md) | Disable all warnings. | | [`/W0`, `/W1`, `/W2`, `/W3`, `/W4`](compiler-option-warning-level.md) | Set output warning level. | | [`/w1`, `/w2`, `/w3`, `/w4`](compiler-option-warning-level.md) | Set warning level for the specified warning. | diff --git a/docs/build/reference/compiler-options-listed-by-category.md b/docs/build/reference/compiler-options-listed-by-category.md index 141f35bcfd..863bbd1b5d 100644 --- a/docs/build/reference/compiler-options-listed-by-category.md +++ b/docs/build/reference/compiler-options-listed-by-category.md @@ -261,7 +261,7 @@ This article contains a categorical list of compiler options. For an alphabetica | [`/utf-8`](utf-8-set-source-and-executable-character-sets-to-utf-8.md) | Set source and execution character sets to UTF-8. | | [`/V`](v-version-number.md) | Deprecated. Sets the version string. | | [`/validate-charset`](validate-charset-validate-for-compatible-characters.md) | Validate UTF-8 files for only compatible characters. | -| `/volatileMetadata` | Generate metadata on volatile memory accesses. | +| [`/volatileMetadata`](volatile.md) | Generate metadata on volatile memory accesses. | | [`/Yc`](yc-create-precompiled-header-file.md) | Create *`.PCH`* file. | | [`/Yd`](yd-place-debug-information-in-object-file.md) | Deprecated. Places complete debugging information in all object files. Use [`/Zi`](z7-zi-zi-debug-information-format.md) instead. | | [`/Yl`](yl-inject-pch-reference-for-debug-library.md) | Injects a PCH reference when creating a debug library. | diff --git a/docs/build/reference/volatile.md b/docs/build/reference/volatile.md new file mode 100644 index 0000000000..4612bb9201 --- /dev/null +++ b/docs/build/reference/volatile.md @@ -0,0 +1,40 @@ +--- +description: "Learn more about: /volatilemetadata" +title: "/volatilemetadata (Generate metadata on volatile memory accesses)" +ms.date: 5/28/2024 +f1_keywords: ["/volatilemetadata"] +helpviewer_keywords: ["/volatilemetadata", "-volatilemetadata compiler option", "/volatilemetadata compiler option", "volatilemetadata"] +--- +# `/volatilemetadata` (Generate metadata on volatile memory accesses) + +Generate metadata on volatile memory accesses to improve performance when running x64 code on ARM. + +## Syntax + +```cpp +/volatilemetdata[-] +``` + +## Arguments + +**`-`**\ +Turns off `/volatileMetadata`. This may result in worse performance if your code is run in emulation mode on ARM because the emulator will pessimistically assume that every load/store needs a barrier. + +## Remarks + +Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code meant to run on ARM. It improves the emulation performance of x64 code on ARM by generating metadata that identifies volatile memory addresses. This metadata can be used by an emulator to improve performance because it then knows which addresses aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile, and uses acquire and release semantics to access them. + +One side effect `/volatileMetadata` is you may see `npad` macros in the generated code. This macro expands to a specified number of NOP instructions to create an address to associate with the memory barrier. That address is then recorded in the metadata. + +`/volatileMetadata` can be disabled by using `/volatileMetadata-`. + +`/volatileMetadata` is ignored when targeting x86. + +## Requirements + +Visual Studio 16.10 or later. + +## See also + +[MSVC Compiler Options](compiler-options.md)\ +[MSVC Compiler Command-Line Syntax](compiler-command-line-syntax.md) diff --git a/docs/build/toc.yml b/docs/build/toc.yml index 5c58c09557..0f765f34c6 100644 --- a/docs/build/toc.yml +++ b/docs/build/toc.yml @@ -744,6 +744,8 @@ items: href: ../build/reference/vmm-vms-vmv-general-purpose-representation.md - name: /volatile (volatile keyword interpretation) href: ../build/reference/volatile-volatile-keyword-interpretation.md + - name: /volatilemetadata + href: ../build/reference/volatile.md - name: /w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning level) href: ../build/reference/compiler-option-warning-level.md - name: /WL (Enable one-line diagnostics) From 6ac46cda5c36492191a502ea9ab7f934db443db9 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 28 May 2024 15:49:01 -0700 Subject: [PATCH 0205/1239] acrolinx --- docs/build/reference/volatile.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build/reference/volatile.md b/docs/build/reference/volatile.md index 4612bb9201..bfeabaf7c7 100644 --- a/docs/build/reference/volatile.md +++ b/docs/build/reference/volatile.md @@ -18,13 +18,13 @@ Generate metadata on volatile memory accesses to improve performance when runnin ## Arguments **`-`**\ -Turns off `/volatileMetadata`. This may result in worse performance if your code is run in emulation mode on ARM because the emulator will pessimistically assume that every load/store needs a barrier. +Turns off `/volatileMetadata`. This may result in worse performance when your code runs in emulation mode on ARM because the emulator pessimistically assumes that every load/store needs a barrier. ## Remarks -Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code meant to run on ARM. It improves the emulation performance of x64 code on ARM by generating metadata that identifies volatile memory addresses. This metadata can be used by an emulator to improve performance because it then knows which addresses aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile, and uses acquire and release semantics to access them. +Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code. It improves the emulation performance of x64 code on ARM by generating metadata that identifies volatile memory addresses. An emulator can use this metadata improve performance by not using acquire/release semantics on accesses it knows aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile, and uses acquire and release semantics to access them. -One side effect `/volatileMetadata` is you may see `npad` macros in the generated code. This macro expands to a specified number of NOP instructions to create an address to associate with the memory barrier. That address is then recorded in the metadata. +One side effect `/volatileMetadata` is you may see `npad` macros in the generated code. This macro expands to a specified number of `NOP` instructions that create an address to associate with the memory barrier. That address is then recorded in the metadata. `/volatileMetadata` can be disabled by using `/volatileMetadata-`. @@ -32,7 +32,7 @@ One side effect `/volatileMetadata` is you may see `npad` macros in the generate ## Requirements -Visual Studio 16.10 or later. +Visual Studio 2019 version 16.10 or later. ## See also From 8396cf55e3aad4caa9bc6488f4e8f623790d204e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 28 May 2024 17:02:48 -0700 Subject: [PATCH 0206/1239] tech review --- docs/build/reference/headerunit.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build/reference/headerunit.md b/docs/build/reference/headerunit.md index bd107a2083..6ee2d63554 100644 --- a/docs/build/reference/headerunit.md +++ b/docs/build/reference/headerunit.md @@ -1,7 +1,7 @@ --- title: "/headerUnit (Use header unit IFC)" description: "Use the /headerUnit compiler option to associate a header file with the header unit to import in its place." -ms.date: 02/01/2022 +ms.date: 5/28/2024 f1_keywords: ["/headerUnit"] helpviewer_keywords: ["/headerUnit", "Use header unit IFC"] author: "tylermsft" @@ -14,8 +14,8 @@ Imports a header unit. Tells the compiler where to find the *`.ifc`* file (the b ## Syntax > **`/headerUnit`** *`header-filename`*=*`ifc-filename`*\ -> **`/headerUnit:quote`** \[*`header-filename`*=*`ifc-filename`*\]\ -> **`/headerUnit:angle`** \[*`header-filename`*=*`ifc-filename`*\] +> **`/headerUnit:quote`** *`header-filename`*=*`ifc-filename`*\ +> **`/headerUnit:angle`** *`header-filename`*=*`ifc-filename`* ### Arguments @@ -39,7 +39,7 @@ When the compiler comes across `import "file";` or `import ;` this compile - **`/headerUnit:angle`** looks up the compiled header unit file using the same rules as `#include `. -The compiler can't map a single *`header-name`* to multiple *`.ifc`* files. Mapping multiple *`header-name`* arguments to a single *`.ifc`* is possible, but it isn't recommended. The contents of the *`.ifc`* are imported as if it was only the header specified by *`header-name`*. +The compiler can't map a single *`header-name`* to multiple *`.ifc`* files. You can map multiple *`header-name`* arguments to a single *`.ifc`*. The contents of the *`.ifc`* are imported as if it was only the header specified by *`header-name`*. The compiler implicitly enables the new preprocessor when this option is used. If any form of `/headerUnit` is specified on the command line, then [`/Zc:preprocessor`](zc-preprocessor.md) is added to the command line by the compiler. To opt out of the implicit `/Zc:preprocessor`, specify: `/Zc:preprocessor-` From 7824663ba0f152db855a228d9fe6d1342d6a898d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 11:29:10 -0700 Subject: [PATCH 0207/1239] tech review --- docs/build/reference/volatile.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/build/reference/volatile.md b/docs/build/reference/volatile.md index bfeabaf7c7..6bbc0a8ad1 100644 --- a/docs/build/reference/volatile.md +++ b/docs/build/reference/volatile.md @@ -1,13 +1,13 @@ --- description: "Learn more about: /volatilemetadata" title: "/volatilemetadata (Generate metadata on volatile memory accesses)" -ms.date: 5/28/2024 +ms.date: 5/29/2024 f1_keywords: ["/volatilemetadata"] helpviewer_keywords: ["/volatilemetadata", "-volatilemetadata compiler option", "/volatilemetadata compiler option", "volatilemetadata"] --- # `/volatilemetadata` (Generate metadata on volatile memory accesses) -Generate metadata on volatile memory accesses to improve performance when running x64 code on ARM. +Generate metadata for volatile memory accesses to improve performance when running x64 code on ARM64. ## Syntax @@ -18,13 +18,15 @@ Generate metadata on volatile memory accesses to improve performance when runnin ## Arguments **`-`**\ -Turns off `/volatileMetadata`. This may result in worse performance when your code runs in emulation mode on ARM because the emulator pessimistically assumes that every load/store needs a barrier. +Turns off `/volatileMetadata`. This may result in worse performance when your code runs in emulation mode on ARM64 because the emulator pessimistically assumes that every load/store needs a barrier. ## Remarks -Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code. It improves the emulation performance of x64 code on ARM by generating metadata that identifies volatile memory addresses. An emulator can use this metadata improve performance by not using acquire/release semantics on accesses it knows aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile, and uses acquire and release semantics to access them. +Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code. It improves the emulation performance of x64 code on ARM64 by generating metadata that identifies volatile memory addresses. An emulator can use this metadata to improve performance by not using acquire/release semantics on those accesses it knows aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile and uses acquire and release semantics. -One side effect `/volatileMetadata` is you may see `npad` macros in the generated code. This macro expands to a specified number of `NOP` instructions that create an address to associate with the memory barrier. That address is then recorded in the metadata. +One side effect of `/volatileMetadata` is you may see `npad` macros in the generated code. This macro expands to a specified number of `NOP` instructions that create an address to associate with a memory barrier. That address is then recorded in the metadata to indicate that acquire/release semantics should be used to access it. + +`/volatileMetadata` is ignored when targeting x86. `/volatileMetadata` can be disabled by using `/volatileMetadata-`. From 3a07362ad5f3323e6e533c2114cbe28bead7c13d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 13:54:45 -0700 Subject: [PATCH 0208/1239] typo --- docs/build/reference/volatile.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/build/reference/volatile.md b/docs/build/reference/volatile.md index 6bbc0a8ad1..9836b6455e 100644 --- a/docs/build/reference/volatile.md +++ b/docs/build/reference/volatile.md @@ -1,18 +1,18 @@ --- -description: "Learn more about: /volatilemetadata" -title: "/volatilemetadata (Generate metadata on volatile memory accesses)" +description: "Learn more about: /volatileMetadata" +title: "/volatileMetadata (Generate metadata on volatile memory accesses)" ms.date: 5/29/2024 -f1_keywords: ["/volatilemetadata"] -helpviewer_keywords: ["/volatilemetadata", "-volatilemetadata compiler option", "/volatilemetadata compiler option", "volatilemetadata"] +f1_keywords: ["/volatileMetadata"] +helpviewer_keywords: ["/volatileMetadata", "-volatileMetadata compiler option", "/volatileMetadata compiler option", "volatileMetadata"] --- -# `/volatilemetadata` (Generate metadata on volatile memory accesses) +# `/volatileMetadata` (Generate metadata on volatile memory accesses) Generate metadata for volatile memory accesses to improve performance when running x64 code on ARM64. ## Syntax ```cpp -/volatilemetdata[-] +/volatileMetadata[-] ``` ## Arguments @@ -24,7 +24,7 @@ Turns off `/volatileMetadata`. This may result in worse performance when your co Starting with Visual Studio 2019 16.10, `/volatileMetadata` is on by default when generating x64 code. It improves the emulation performance of x64 code on ARM64 by generating metadata that identifies volatile memory addresses. An emulator can use this metadata to improve performance by not using acquire/release semantics on those accesses it knows aren't volatile. Without this metadata, the emulator assumes that all addresses are volatile and uses acquire and release semantics. -One side effect of `/volatileMetadata` is you may see `npad` macros in the generated code. This macro expands to a specified number of `NOP` instructions that create an address to associate with a memory barrier. That address is then recorded in the metadata to indicate that acquire/release semantics should be used to access it. +One side effect of `/volatileMetadata` is you may see `npad` macros used in the generated code. This macro expands to a specified number of `NOP` instructions that create an address to associate with a memory barrier. That address is then recorded in the metadata to indicate that acquire/release semantics should be used to access it. `/volatileMetadata` is ignored when targeting x86. From 4f2e56df6be59b3995f2401815465fe8c90c667a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 13:57:10 -0700 Subject: [PATCH 0209/1239] fix casing --- docs/build/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/toc.yml b/docs/build/toc.yml index 0f765f34c6..a0e19ef1de 100644 --- a/docs/build/toc.yml +++ b/docs/build/toc.yml @@ -744,7 +744,7 @@ items: href: ../build/reference/vmm-vms-vmv-general-purpose-representation.md - name: /volatile (volatile keyword interpretation) href: ../build/reference/volatile-volatile-keyword-interpretation.md - - name: /volatilemetadata + - name: /volatileMetadata href: ../build/reference/volatile.md - name: /w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning level) href: ../build/reference/compiler-option-warning-level.md From cc1d1a4851e95cce6db2597c68cc1f8cee2a1683 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 16:04:43 -0700 Subject: [PATCH 0210/1239] tech review --- .../tutorials/build-insights-function-view.md | 11 ++++++----- .../tutorials/build-insights-included-files-view.md | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 194131b33c..75f10bc1c8 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -1,7 +1,7 @@ --- title: "Tutorial: Troubleshoot function inlining on build time" description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of function inlining on build time in your C++ projects." -ms.date: 5/1/2024 +ms.date: 5/29/2024 helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] --- # Tutorial: Troubleshoot function inlining on build time @@ -33,7 +33,7 @@ In this article, learn how to use the Build Insights **Functions** view to find ## Set build options -To measure the results of `__forceinline`, use a **Release** build because optimizations for `__forceinline` impact release build times the most. Set the build for **Release** and **x64**: +To measure the results of `__forceinline`, use a **Release** build because debug builds don't inline `__forceinline` since debug builds use the [`/Ob0`](../build/reference/ob-inline-function-expansion.md) compiler switch, which disables that optimization. Set the build for **Release** and **x64**: - In the **Solution Configurations** dropdown, choose **Release**. - In the **Solution Platforms** dropdown, choose **x64**. @@ -60,13 +60,13 @@ When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the ## Function view -In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If a function's code generation time is too small, it won't appear in the list because build events with negligible impact are discarded to avoid degrading build event collection performance. +In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If the amount of code generated for a function is negligible, it won't appear in the list to avoid degrading build event collection performance. :::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Build Insights Functions view file."::: In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function. The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. +The **Time [sec, %]** column shows how long it took to compile each function in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. Excessive use of `__forceinline` functions can significantly slow compilation. @@ -103,7 +103,7 @@ static __forceinline T factorial(int n) } ``` -Perhaps the cost of calling this function is insignificant compared to the cost of the function itself. We can try removing the `__forceinline` directive from it to see if it helps the build time. The code for `power`, `sin()` and `cos()` is similar in that the code consists of a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. +Perhaps the overall cost of calling this function is insignificant compared to the cost of the function itself. Making a function inline is most beneficial when the time it takes to call the function (pushing arguments on the stack, jumping to the function, popping return arguments, and returning from the function) is roughly similar to the time it takes to execute the function, and when calling the function happens a lot. When that's not the case, or the function isn't called very often, there may be diminishing returns on making it inline. We can try removing the `__forceinline` directive from it to see if it helps the build time. The code for `power`, `sin()` and `cos()` is similar in that the code consists of a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project, as before, and not for just the few files may be dirty right now. @@ -140,6 +140,7 @@ Double-click, right-click, or press **Enter** while on a file in the **Functions ## See also [Inline functions (C++)](../../cpp/inline-functions-cpp.md)\ +[Faster C++ builds, simplified: a new metric for time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time)\ [Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ [Troubleshoot header file impact on build time](build-insights-included-files-view.md)\ [Functions View for Build Insights in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/functions-view-for-build-insights-in-visual-studio-2022-17-8/)\ diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index f3dd42ffa0..c9e4279226 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -1,7 +1,7 @@ --- title: "Tutorial: Troubleshoot header file impact on build time" description: "Tutorial on how to use Build Insights Includes Files and Includes Tree views to troubleshoot the impact of #include files on build time." -ms.date: 5/1/2024 +ms.date: 5/29/2024 helpviewer_keywords: ["C++ Build Insights", "header file build time", "included files view", "include tree view", "#include analysis", "build time analysis"] --- # Tutorial: Troubleshoot header file impact on build time @@ -60,7 +60,7 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time spent parsing the header file and what percentage of the overall time it took. The **Parse Count** column shows how many time the header file was parsed. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. The **Parse Count** column shows how many time the header file was parsed. The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. @@ -178,5 +178,6 @@ Conversely, you can right-click a file in the **Include Tree** view to jump to i [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md)\ [Build Insights in Visual Studio video - Pure Virtual C++ 2023](/events/pure-virtual-cpp-2023/build-insights-in-visual-studio)\ +[Faster C++ builds, simplified: a new metric for time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time)\ [Tutorial: Troubleshoot function inlining on build time](build-insights-function-view.md)\ [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md) \ No newline at end of file From 5d390dd9ea431d63f7a41bedc83b8f5c217e1b72 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 16:51:23 -0700 Subject: [PATCH 0211/1239] better explanation for wall clock time --- docs/build-insights/tutorials/build-insights-function-view.md | 4 +++- .../tutorials/build-insights-included-files-view.md | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 75f10bc1c8..34f11707be 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -66,7 +66,9 @@ In the window for the ETL file, choose the **Functions** tab. It shows the funct In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. +The **Time [sec, %]** column shows how long it took to compile each function in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). Wall clock time aggregates the time it takes to compile a function across multiple compiler threads. It may only take a second to compile a function by your watch, but if the work to compile that function during that second was split across 3 threads, then the wall clock time is 3 seconds. + +The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. You can sort the list by clicking on the **Time** column to see which functions are taking the most time to compile. A 'fire' icon indicates that cost of generating that function is high and is worth investigating. Excessive use of `__forceinline` functions can significantly slow compilation. diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index c9e4279226..39edf9a3c1 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -60,7 +60,9 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. The **Parse Count** column shows how many time the header file was parsed. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. Wall clock time aggregates the time it takes to compile a function across multiple compiler threads. It may only take a second to compile a function by your watch, but if the work to compile that function during that second was split across 3 threads, then the wall clock time is 3 seconds. + +The **Parse Count** column shows how many time the header file was parsed. The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. From 6ae1d4c8ccf94b0b9af02ea1e395685b95a4a2d5 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 16:52:35 -0700 Subject: [PATCH 0212/1239] start 17.10 changes --- docs/overview/cpp-conformance-improvements.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 892778e11f..8d369d797c 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -1,7 +1,7 @@ --- title: "C++ conformance improvements in Visual Studio 2022" description: "Microsoft C++ in Visual Studio is improving standards conformance and fixing bugs regularly." -ms.date: 02/20/2024 +ms.date: 05/29/2024 ms.service: "visual-cpp" ms.subservice: "cpp-lang" --- @@ -15,6 +15,16 @@ For changes in Visual Studio 2019, see [C++ conformance improvements in Visual S For changes in Visual Studio 2017, see [C++ conformance improvements in Visual Studio 2017](cpp-conformance-improvements-2017.md).\ For changes in older versions, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). +## Conformance improvements in Visual Studio 2022 version 17.10 + +Visual Studio 2022 version 17.10 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. + +For a broader summary of changes made to the Standard Template Library, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). + + + + + ## Conformance improvements in Visual Studio 2022 version 17.9 Visual Studio 2022 version 17.9 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. From 92ad523966f3bd7dda34e928b20223388d394644 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 16:54:03 -0700 Subject: [PATCH 0213/1239] fix to address header files --- .../tutorials/build-insights-included-files-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 39edf9a3c1..c024c44eb3 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -60,7 +60,7 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. Wall clock time aggregates the time it takes to compile a function across multiple compiler threads. It may only take a second to compile a function by your watch, but if the work to compile that function during that second was split across 3 threads, then the wall clock time is 3 seconds. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. Wall clock time aggregates the time it takes to parse the header file across multiple compiler threads. It may only take a second to parse a header file by your watch, but if the work to parse that header during that second was split across 3 threads, then the wall clock time is 3 seconds. The **Parse Count** column shows how many time the header file was parsed. From 6c54399903aeabe03aca922982d6d56754479c36 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 16:56:40 -0700 Subject: [PATCH 0214/1239] fix link --- docs/build-insights/tutorials/build-insights-function-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 34f11707be..45eea554a5 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -33,7 +33,7 @@ In this article, learn how to use the Build Insights **Functions** view to find ## Set build options -To measure the results of `__forceinline`, use a **Release** build because debug builds don't inline `__forceinline` since debug builds use the [`/Ob0`](../build/reference/ob-inline-function-expansion.md) compiler switch, which disables that optimization. Set the build for **Release** and **x64**: +To measure the results of `__forceinline`, use a **Release** build because debug builds don't inline `__forceinline` since debug builds use the [`/Ob0`](../../build/reference/ob-inline-function-expansion.md) compiler switch, which disables that optimization. Set the build for **Release** and **x64**: - In the **Solution Configurations** dropdown, choose **Release**. - In the **Solution Platforms** dropdown, choose **x64**. From 139fb5295ff5ebc90e5080b94ebdd45c007bbec5 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 29 May 2024 19:03:44 -0700 Subject: [PATCH 0215/1239] tech feedback --- .../tutorials/build-insights-function-view.md | 6 +++--- .../tutorials/build-insights-included-files-view.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 45eea554a5..47e9a86cc6 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -44,7 +44,7 @@ Set the optimization level to maximum optimizations: - In the **Solution Explorer**, right-click the project name and select **Properties**. - In the project properties, navigate to **C/C++** > **Optimization**. -- Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) (/O2)**. +- Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) ([`/O2`](../../build/reference/ob-inline-function-expansion.md))**. :::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: @@ -60,13 +60,13 @@ When the build finishes, an Event Trace Log (ETL) file opens. It's saved in the ## Function view -In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to compile each function. If the amount of code generated for a function is negligible, it won't appear in the list to avoid degrading build event collection performance. +In the window for the ETL file, choose the **Functions** tab. It shows the functions that were compiled and the time it took to generate the code for each function. If the amount of code generated for a function is negligible, it won't appear in the list to avoid degrading build event collection performance. :::image type="complex" source="./media/functions-view-before-fix.png" alt-text="Screenshot of the Build Insights Functions view file."::: In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). Wall clock time aggregates the time it takes to compile a function across multiple compiler threads. It may only take a second to compile a function by your watch, but if the work to compile that function during that second was split across 3 threads, then the wall clock time is 3 seconds. +The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). Wall clock responsibility time aggregates the time it takes to compile a function across multiple compiler threads. It may only take a second to compile a function by your watch, but if the work to compile that function during that second was split across 3 threads, then the reported time is 3 seconds. The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index c024c44eb3..392dcec583 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -60,7 +60,7 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock time](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. Wall clock time aggregates the time it takes to parse the header file across multiple compiler threads. It may only take a second to parse a header file by your watch, but if the work to parse that header during that second was split across 3 threads, then the wall clock time is 3 seconds. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. Wall clock responsibility time aggregates the time it takes to parse the header file across multiple compiler threads. It may only take a second to parse a header file by your watch, but if the work to parse that header during that second was split across 3 threads, then the reported time is 3 seconds. The **Parse Count** column shows how many time the header file was parsed. From 725368ac60b7a6c557a0b639e339ec22d6f85e77 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Thu, 30 May 2024 09:47:05 -0700 Subject: [PATCH 0216/1239] Update docs/build-insights/tutorials/build-insights-function-view.md Co-authored-by: Nelson Daniel Troncoso <13109662+NelsonDaniel@users.noreply.github.com> --- docs/build-insights/tutorials/build-insights-function-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 47e9a86cc6..8856a54ed9 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -66,7 +66,7 @@ In the window for the ETL file, choose the **Functions** tab. It shows the funct In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). Wall clock responsibility time aggregates the time it takes to compile a function across multiple compiler threads. It may only take a second to compile a function by your watch, but if the work to compile that function during that second was split across 3 threads, then the reported time is 3 seconds. +The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time among functions based on their use of parallel compiler threads. For example, if two functions are being compiled simultaneously by two different threads within a one-second period, each function’s WCTR would be recorded as 0.5 seconds. This reflects each function’s proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each function has on the overall build time in environments where multiple compilation activities occur simultaneously. The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. From 94c0ed1994b35e27f15f67a52663a4e7b5c803e8 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Thu, 30 May 2024 09:48:32 -0700 Subject: [PATCH 0217/1239] Update docs/build-insights/tutorials/build-insights-included-files-view.md Co-authored-by: Nelson Daniel Troncoso <13109662+NelsonDaniel@users.noreply.github.com> --- .../tutorials/build-insights-included-files-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 392dcec583..a671ad02c2 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -60,7 +60,7 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows the time in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism) spent parsing the header file and what percentage of the overall time it took. Wall clock responsibility time aggregates the time it takes to parse the header file across multiple compiler threads. It may only take a second to parse a header file by your watch, but if the work to parse that header during that second was split across 3 threads, then the reported time is 3 seconds. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time it takes to parse files based on their use of parallel threads. For example, if two files are being parsed simultaneously by two different threads within a one-second period, each file's WCTR would be recorded as 0.5 seconds. This reflects each file's proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each file has on the overall build time in environments where multiple compilation activities occur simultaneously. The **Parse Count** column shows how many time the header file was parsed. From 5629043fc6da256900a95315326eb8de8962bcd9 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 11:10:42 -0700 Subject: [PATCH 0218/1239] last edit pass-acrolinx --- .../tutorials/build-insights-function-view.md | 12 ++++++------ .../build-insights-included-files-view.md | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 8856a54ed9..42ebaebf14 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -14,11 +14,11 @@ Use Build Insights **Functions** view to troubleshoot the impact of function inl - C++ Build insights is enabled by default if you install either the Desktop development with C++ workload or the Game development with C++ workload. :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. +The list of installed components is shown. C++ Build Insights is highlighted and is selected which means it's installed. :::image-end::: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. +The list of installed components is shown. C++ Build Insights is highlighted and is selected which means it's installed. :::image-end::: ## Overview @@ -66,7 +66,7 @@ In the window for the ETL file, choose the **Functions** tab. It shows the funct In the Function Name column, performPhysicsCalculations() is highlighted and marked with a fire icon.::: :::image-end::: -The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time among functions based on their use of parallel compiler threads. For example, if two functions are being compiled simultaneously by two different threads within a one-second period, each function’s WCTR would be recorded as 0.5 seconds. This reflects each function’s proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each function has on the overall build time in environments where multiple compilation activities occur simultaneously. +The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time among functions based on their use of parallel compiler threads. For example, if two different threads are compiling two different functions simultaneously within a one-second period, each function’s WCTR is recorded as 0.5 seconds. This reflects each function’s proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each function has on the overall build time in environments where multiple compilation activities occur simultaneously. The **Forceinline Size** column shows roughly how many instructions were generated for the function. Click the chevron before the function name to see the individual inlined functions that were expanded in that function how roughly how many instructions were generated for each. @@ -85,7 +85,7 @@ In the Function Name column, performPhysicsCalculations() is highlighted and mar Investigating further, by selecting the chevron before that function, and then sorting the **Forceinline Size** column from highest to lowest, we see the biggest contributors to the problem. :::image type="complex" source="./media/functions-view-expanded.png" alt-text="Screenshot of the Build Insights Functions view with an expanded function."::: -performPhysicsCalculations() is expanded and shows a long list of functions that were inlined inside it. There are mutliple instances of functions such as complexOperation(), recursiveHelper(), and sin() shown. The Forceinline Size column shows that complexOperation() is the largest inlined function at 315 instructions. recursiveHelper() has 119 instructions. Sin() has 75 instructions but there are many instances of than the other functions. +performPhysicsCalculations() is expanded and shows a long list of functions that were inlined inside it. There are multiple instances of functions such as complexOperation(), recursiveHelper(), and sin() shown. The Forceinline Size column shows that complexOperation() is the largest inlined function at 315 instructions. recursiveHelper() has 119 instructions. Sin() has 75 instructions, but there are many more instances of it than the other functions. :::image-end::: There are some larger inlined functions, such as `Vector2D::complexOperation()` and `Vector2D::recursiveHelper()` that are contributing to the problem. But there are many more instances (not all shown here) of `Vector2d::sin(float)`, `Vector2d::cos(float)`, `Vector2D::power(float,int)`, and `Vector2D::factorial(int)`. When you add those up, the total number of generated instructions quickly exceeds the few larger generated functions. @@ -105,7 +105,7 @@ static __forceinline T factorial(int n) } ``` -Perhaps the overall cost of calling this function is insignificant compared to the cost of the function itself. Making a function inline is most beneficial when the time it takes to call the function (pushing arguments on the stack, jumping to the function, popping return arguments, and returning from the function) is roughly similar to the time it takes to execute the function, and when calling the function happens a lot. When that's not the case, or the function isn't called very often, there may be diminishing returns on making it inline. We can try removing the `__forceinline` directive from it to see if it helps the build time. The code for `power`, `sin()` and `cos()` is similar in that the code consists of a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. +Perhaps the overall cost of calling this function is insignificant compared to the cost of the function itself. Making a function inline is most beneficial when the time it takes to call the function (pushing arguments on the stack, jumping to the function, popping return arguments, and returning from the function) is roughly similar to the time it takes to execute the function, and when the function is called a lot. When that's not the case, there may be diminishing returns on making it inline. We can try removing the `__forceinline` directive from it to see if it helps the build time. The code for `power`, `sin()` and `cos()` is similar in that the code consists of a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project, as before, and not for just the few files may be dirty right now. @@ -136,7 +136,7 @@ Double-click, right-click, or press **Enter** while on a file in the **Functions ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds; which may be the case if no files have changed since the last build. +- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds; which may be the case if no files changed since the last build. - If the Functions view doesn't show any functions, you may not be building with the right optimization settings. Ensure that you're building Release with full optimizations, as described in [Set build options](#set-build-options). Also, if a function's code generation time is too small, it doesn't appear in the list. ## See also diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index a671ad02c2..c62a8e5939 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -14,18 +14,18 @@ Use Build Insights **Included Files** and **Include Tree** views to troubleshoot - C++ Build Insights is enabled by default if you install either the Desktop development with C++ workload using the Visual Studio installer: :::image type="complex" source="./media/installer-desktop-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Desktop development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. +The list of installed components is shown. C++ Build Insights is highlighted and is selected which means it's installed. :::image-end::: Or the Game development with C++ workload: :::image type="complex" source="./media/installer-gamedev-cpp-build-insights.png" alt-text="Screenshot of the Visual Studio Installer with the Game development with C++ workload selected."::: -The list of installed components is shown. C++ Build Insights is highlighted and is selected to indicate it's installed. +The list of installed components is shown. C++ Build Insights is highlighted and is selected which means it's installed. :::image-end::: ## Overview -Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and particularly when it is repeatedly parsed, there's an impact on build time. +Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and particularly when it's repeatedly parsed, there's an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of parsing `#include` files in your project. It displays the time it takes to parse each header file and a view of the relationships between header files. @@ -57,10 +57,10 @@ The trace file shows the build time--which for this example was 16.404 seconds. This view shows the time spent processing `#include` files. :::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: -In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404 second build time. +In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404-second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time it takes to parse files based on their use of parallel threads. For example, if two files are being parsed simultaneously by two different threads within a one-second period, each file's WCTR would be recorded as 0.5 seconds. This reflects each file's proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each file has on the overall build time in environments where multiple compilation activities occur simultaneously. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time it takes to parse files based on their use of parallel threads. For example, if two different threads are parsing two different files simultaneously within a one-second period, each file's WCTR is recorded as 0.5 seconds. This reflects each file's proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each file has on the overall build time in environments where multiple compilation activities occur simultaneously. The **Parse Count** column shows how many time the header file was parsed. @@ -141,9 +141,9 @@ We first clean the project to make sure we're comparing building the same files Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. -Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. We don't want **Rebuild** this time because that will rebuild the PCH, which we don't want to measure. We cleaned the project earlier which means that a normal build will compile all the project files we want to measure. +Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. We don't want **Rebuild** this time because that will rebuild the PCH, which we don't want to measure. We cleaned the project earlier, which means that a normal build compiles all the project files we want to measure. -When the ETL files appears, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders.h` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in via the precompiled header. +When the ETL files appear, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders.h` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in via the precompiled header. :::image type="content" source="./media/included-files-after-fix.png" alt-text="Screenshot of the Include Tree pane in the trace file. winrtHeaders is no longer listed."::: @@ -173,7 +173,7 @@ Conversely, you can right-click a file in the **Include Tree** view to jump to i ## Troubleshooting -- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds; which may be the case if no files have changed since the last build. +- If the Build Insights window doesn't appear, do a rebuild instead of a build. The Build Insights window doesn't appear if nothing actually builds; which may be the case if no files changed since the last build. - If a header file you're interested in doesn't appear in the **Included Files** or **Include Tree** views, it either didn't build or its build time isn't significant enough to be listed. ## See also From 6c58303bcd445dac1bfb424bdaabb18aa2f88c6c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 13:24:25 -0700 Subject: [PATCH 0219/1239] edits before publish --- .../tutorials/build-insights-function-view.md | 14 ++++---- .../build-insights-included-files-view.md | 36 ++++++++++--------- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 42ebaebf14..90176f7e7f 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -1,7 +1,7 @@ --- title: "Tutorial: Troubleshoot function inlining on build time" description: "Tutorial on how to use Build Insights function view to troubleshoot the impact of function inlining on build time in your C++ projects." -ms.date: 5/29/2024 +ms.date: 5/30/2024 helpviewer_keywords: ["C++ Build Insights", "inline function analysis", "build time analysis", "__forceinline analysis", "inlines analysis"] --- # Tutorial: Troubleshoot function inlining on build time @@ -52,7 +52,7 @@ Set the optimization level to maximum optimizations: ## Run Build Insights -On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. Choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +On a project of your choosing, and using the **Release** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. You can also right-click a project in the solution explorer and choose **Run Build Insights** > **Rebuild**. Choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: @@ -107,7 +107,7 @@ static __forceinline T factorial(int n) Perhaps the overall cost of calling this function is insignificant compared to the cost of the function itself. Making a function inline is most beneficial when the time it takes to call the function (pushing arguments on the stack, jumping to the function, popping return arguments, and returning from the function) is roughly similar to the time it takes to execute the function, and when the function is called a lot. When that's not the case, there may be diminishing returns on making it inline. We can try removing the `__forceinline` directive from it to see if it helps the build time. The code for `power`, `sin()` and `cos()` is similar in that the code consists of a loop that will execute many times. We can try removing the `__forceinline` directive from those functions as well. -We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project, as before, and not for just the few files may be dirty right now. +We rerun Build Insights from the main menu by choosing **Build** > **Run Build Insights on Selection** > **Rebuild**. You can also right-click a project in the solution explorer and choose **Run Build Insights** > **Rebuild**. We choose **Rebuild** instead of **Build** to measure the build time for the entire project, as before, and not for just the few files may be dirty right now. The build time goes from 25.181 seconds to 13.376 seconds and the `performPhysicsCalculations` function doesn't show up anymore in the **Functions** view because it doesn't contribute enough to the build time to be counted. @@ -117,7 +117,7 @@ In the Function Name column, performPhysicsCalculations() is highlighted and mar The Diagnostics Session time is the overall time it took do the build plus any overhead for gathering the Build Insights data. -The next step would be to profile the application to see if the performance of the application is negatively impacted by the change. If it has, we can selectively add `__forceinline` back as needed. +The next step would be to profile the application to see if the performance of the application is negatively impacted by the change. If it is, we can selectively add `__forceinline` back as needed. ## Navigate to the source code @@ -127,12 +127,12 @@ Double-click, right-click, or press **Enter** while on a file in the **Functions ## Tips -- You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. +- You can **File** > **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. - If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. - To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. -- Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. +- Drag columns to change the order of the columns. For instance, you may prefer moving the **Time** column to be the first column. You can hide columns by right-clicking on the column header and deselecting the columns you don't want to see. - The **Functions** view provides a filter box to find a function that you're interested in. It does partial matches on the name you provide. -- If you forget what the **Functions** view is trying to show you, hover over the tab to see a tooltip that describes the view. If you hover over the **Functions** tab, the tooltip says: "View that shows statistics for functions where the children nodes are force-inlined functions." +- If you forget how to interpret what the **Functions** view is trying to show you, hover over the tab to see a tooltip that describes the view. If you hover over the **Functions** tab, the tooltip says: "View that shows statistics for functions where the children nodes are force-inlined functions." ## Troubleshooting diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index c62a8e5939..01bf5f4416 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -1,7 +1,7 @@ --- title: "Tutorial: Troubleshoot header file impact on build time" description: "Tutorial on how to use Build Insights Includes Files and Includes Tree views to troubleshoot the impact of #include files on build time." -ms.date: 5/29/2024 +ms.date: 5/30/2024 helpviewer_keywords: ["C++ Build Insights", "header file build time", "included files view", "include tree view", "#include analysis", "build time analysis"] --- # Tutorial: Troubleshoot header file impact on build time @@ -25,7 +25,7 @@ The list of installed components is shown. C++ Build Insights is highlighted and ## Overview -Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and particularly when it's repeatedly parsed, there's an impact on build time. +Build Insights, now integrated into Visual Studio, helps you optimize your build times--especially for large projects like triple-A games. When a large header file is parsed, and especially when it's repeatedly parsed, there's an impact on build time. Build Insights provides analytics in the **Included Files** view, which helps diagnose the impact of parsing `#include` files in your project. It displays the time it takes to parse each header file and a view of the relationships between header files. @@ -44,7 +44,7 @@ Before gathering Build Insights data, set the build options for the type of buil ## Run Build Insights -On a project of your choosing, and using the **Debug** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. Choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. +On a project of your choosing, and using the **Debug** build options set in the previous section, run Build Insights by choosing from the main menu **Build** > **Run Build Insights on Selection** > **Rebuild**. You can also right-click a project in the solution explorer and choose **Run Build Insights** > **Rebuild**. Choose **Rebuild** instead of **Build** to measure the build time for the entire project and not for just the few files may be dirty right now. :::image type="content" source="./media/build-insights-rebuild-project.png" alt-text="Screenshot of the main menu with Run Build Insights on Selection > Rebuild selected."::: @@ -60,11 +60,13 @@ This view shows the time spent processing `#include` files. In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404-second build time. :::image-end::: -In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time it takes to parse files based on their use of parallel threads. For example, if two different threads are parsing two different files simultaneously within a one-second period, each file's WCTR is recorded as 0.5 seconds. This reflects each file's proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each file has on the overall build time in environments where multiple compilation activities occur simultaneously. +In the **File Path** column, some files have a fire icon next to them to indicate that they take up 10% or more of the build time. + +The **Time [sec, %]** column shows how long it took to compile each function in [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). This metric distributes the wall clock time it takes to parse files based on their use of parallel threads. For example, if two different threads are parsing two different files simultaneously within a one-second period, each file's WCTR is recorded as 0.5 seconds. This reflects each file's proportional share of the total compilation time, taking into account the resources each consumed during parallel execution. Thus, WCTR provides a better measure of the impact each file has on the overall build time in environments where multiple compilation activities occur simultaneously. The **Parse Count** column shows how many time the header file was parsed. -The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h` and then `Windows.Xaml.h`. +The first header file highlighted in this list is `winrtHeaders.h` It takes 8.581 seconds of the overall 16.404-second build time, or 52.3% of the build time. The next most expensive is `Windows.UI.Xaml.Interop.h`, and then `Windows.Xaml.h`. To see which file includes `winrtHeaders.h`, click the chevron next to it. The **Parse Count** column can be helpful by pointing out how many times a header file is included by other files. Perhaps a header file is included multiple times, which could be a sign that it's a good candidate for a precompiled header file or refactoring. @@ -102,7 +104,7 @@ Having identified some of the most expensive header files to parse, and seeing t ## Improve build time with precompiled headers -Because we know from the **Included Files** view that `winrtHeaders.h` is time consuming to parse, and because we know from the **Include Tree** view that `winrtHeaders.h` includes several other header files that are time consuming to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to reduce the number of times these files are parsed. +Because we know from the **Included Files** view that `winrtHeaders.h` is time consuming to parse, and because we know from the **Include Tree** view that `winrtHeaders.h` includes several other header files that are time consuming to parse, we build a [Precompiled header file](../../build/creating-precompiled-header-files.md) (PCH) to speed that up by only parsing them once into a PCH. We add a `pch.h` to include `winrtHeaders.h`, which would look like this: @@ -133,21 +135,21 @@ To use the PCH, we include it as the first line in the source files that use `wi Forced Include File is set to pch.h. :::image-end::: -Since the PCH includes `winrtHeaders.h`, we could remove `winrtHeaders.h` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders.h` is already included and not parse it again. Some developers prefer to keep the `#include` in the source file for clarity, or in case the PCH is refactored and no longer includes that header file. +Since the PCH includes `winrtHeaders.h`, we could remove `winrtHeaders.h` from all the files that currently include it. It's not strictly necessary because the compiler realizes that `winrtHeaders.h` is already included and doesn't parse it again. Some developers prefer to keep the `#include` in the source file for clarity, or in case the PCH is likely to be refactored and may not include that header file anymore. ## Test the changes We first clean the project to make sure we're comparing building the same files as before. To clean just one project, right-click the project in the **Solution Explorer** and choose **Project only** > **Clean only \**. -Because this project uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. +Because this project now uses a precompiled header (PCH), we don't want to measure the time spent building the PCH because that only happens once. We do this by loading the `pch.cpp` file and choosing **Ctrl+F7** to build just that file. We could also compile this file by right-clicking `pch.cpp` in the Solution Explorer and choosing `Compile`. -Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. We don't want **Rebuild** this time because that will rebuild the PCH, which we don't want to measure. We cleaned the project earlier, which means that a normal build compiles all the project files we want to measure. +Now we rerun Build Insights in the **Solution Explorer** by right-clicking the project and choosing **Project Only** > **Run Build Insights on Build**. You can also right-click a project in the solution explorer and choose **Run Build Insights** > **Build**. We don't want **Rebuild** this time because that will rebuild the PCH, which we don't want to measure. We cleaned the project earlier, which means that a normal build compiles all the project files we want to measure. -When the ETL files appear, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders.h` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in via the precompiled header. +When the ETL files appear, we see that build time went from 16.404 seconds to 6.615 seconds. Put `winrtHeaders.h` into the filter box and nothing appears. This is because the time spent parsing it is now negligible since it's being pulled in by the precompiled header. :::image type="content" source="./media/included-files-after-fix.png" alt-text="Screenshot of the Include Tree pane in the trace file. winrtHeaders is no longer listed."::: -This example uses precompiled headers because they're a common solution before C++20. However, starting with C++20, there are other faster, less brittle ways to include header files such as header units and modules. For more information, see [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md). +This example uses precompiled headers because they're a common solution before C++20. However, starting with C++20, there are other, faster, less brittle, ways to include header files--such as header units and modules. For more information, see [Compare header units, modules, and precompiled headers](../../build/compare-inclusion-methods.md). ## Navigate between views @@ -158,18 +160,18 @@ There are some navigation features for both the **Included Files** and **Include :::image type="content" source="./media/included-files-show-in-include-tree.png" alt-text="Screenshot of a right-click on a file in the Included Files view. The menu option Show in Include Tree View is highlighted."::: -Conversely, you can right-click a file in the **Include Tree** view to jump to it in the **Included Files** view. +Or, you can right-click a file in the **Include Tree** view to jump to it in the **Included Files** view. ## Tips -- You can **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. +- You can **File** > **Save As** the ETL file to a more permanent location to keep a record of the build time. You can then compare it to future builds to see if your changes are improving build time. - If you inadvertently close the Build Insights window, reopen it by finding the `.etl` file in your temporary folder. The `TEMP` Windows environment variable provides the path of your temporary files folder. - To dig into the Build Insights data with Windows Performance Analyzer (WPA), click the **Open in WPA** button in the bottom right of the ETL window. -- Drag columns to change the order of the columns. For instance, you may prefer moving the Time column to be the first column. You can also hide some columns by right-clicking on the column header and deselecting the columns you don't want to see. -- **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. -- Sometimes the parse time reported for a header file differs depending on which file includes it. This can be due to the interplay of different `#define`s that affect which parts of the header are expanded, file caching, and other system factors. +- Drag columns to change the order of the columns. For instance, you may prefer moving the **Time** column to be the first column. You can hide columns by right-clicking on the column header and deselecting the columns you don't want to see. +- The **Included Files** and **Include Tree** views provide a filter box to find a header file that you're interested in. It does partial matches on the name you provide. +- Sometimes the parse time reported for a header file is different depending on which file includes it. This can be due to the interplay of different `#define`s that affect which parts of the header are expanded, file caching, and other system factors. - If you forget what the **Included Files** or **Include Tree** view is trying to show you, hover over the tab to see a tooltip that describes the view. For example, if you hover over the **Include Tree** tab, the tooltip says: "View that shows include statistics for every file where the children nodes are the files included by the parent node." -- You may see cases (like `Windows.h`) where the aggregated duration of all the times for a header file is longer than the duration of the entire build. What’s happening is that headers are parsed on many threads at the same time, adding seconds to the aggregated duration beyond what’s physically possible. +- You may see cases (like `Windows.h`) where the aggregated duration of all the times for a header file is longer than the duration of the entire build. What’s happening is that headers are being parsed on multiple threads at the same time. If two threads simultaneously spend one second parsing a header file, that's 2 seconds of build time even though only one second of wall clock time has gone by. For more information, see [wall clock responsibility time (WCTR)](https://devblogs.microsoft.com/cppblog/faster-cpp-builds-simplified-a-new-metric-for-time/#:~:text=Today%2C%20we%E2%80%99d%20like%20to%20teach%20you%20about%20a,your%20build%2C%20even%20in%20the%20presence%20of%20parallelism). ## Troubleshooting From f643748821fcbd4b69a6b223f2f417af2ea4141e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 14:46:16 -0700 Subject: [PATCH 0220/1239] remove duplicate line --- docs/build/reference/volatile.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/build/reference/volatile.md b/docs/build/reference/volatile.md index 9836b6455e..fb3cced847 100644 --- a/docs/build/reference/volatile.md +++ b/docs/build/reference/volatile.md @@ -1,7 +1,7 @@ --- description: "Learn more about: /volatileMetadata" title: "/volatileMetadata (Generate metadata on volatile memory accesses)" -ms.date: 5/29/2024 +ms.date: 5/30/2024 f1_keywords: ["/volatileMetadata"] helpviewer_keywords: ["/volatileMetadata", "-volatileMetadata compiler option", "/volatileMetadata compiler option", "volatileMetadata"] --- @@ -30,8 +30,6 @@ One side effect of `/volatileMetadata` is you may see `npad` macros used in the `/volatileMetadata` can be disabled by using `/volatileMetadata-`. -`/volatileMetadata` is ignored when targeting x86. - ## Requirements Visual Studio 2019 version 16.10 or later. From ee5e2eb89780d5bf2f2838048326f27e284670b5 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 14:56:55 -0700 Subject: [PATCH 0221/1239] add 17.10 conformance changes --- docs/overview/cpp-conformance-improvements.md | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 8d369d797c..5d49231394 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -21,9 +21,156 @@ Visual Studio 2022 version 17.10 contains the following conformance improvements For a broader summary of changes made to the Standard Template Library, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). +---------------------- TW +### Conversion operator specialization with explicitly specified return type +This is a source code breaking change. The compiler used to specialize these conversion operators incorrectly in some cases which can lead to mismatched return type. These invalid specializations no longer happen. +#### Example (before/after) + +```cpp +// Example 1 +struct S +{ + template operator const T*(); +}; + +void test() +{ + S{}.operator int*(); // this is invalid now + S{}.operator const int*(); // this is valid +} +``` + +```cpp +// Example 2 +// In some cases, the overload resolution result may change +struct S +{ + template operator T*(); // overload 1 + template operator const T*(); // overload 2 +}; + +void test() { + S{}.operator int*(); // this used to call overload 2, now it calls overload 1 +} +``` + +### Added Support for `#elifdef` and `#elifndef` + +Support added for WG21 p2334r1 (C++23) and WG14 n2645 (C23) which introduced the `#elifdef` and `#elifndef` preprocessor directives. +Requires `/std:clatest` or `/std:c++latest`. + +#### Example (before/after) + +Before: + +```cpp +#ifdef __cplusplus + #include +#elif !defined(__STDC_NO_ATOMICS__) + #include +#else + #include +#endif +``` + +After: + +```cpp +#ifdef __cplusplus + #include +#elifndef __STDC_NO_ATOMICS__ + #include +#else + #include +#endif +``` + +# Application of `_Alignas` on a structured type in C (also added to 17.9) + + +| Source/Binary Breaking Change? | Compiler mode | Backward compatible? | EDG Behavior | Commit | +| ------------------------------ | ------------- | -------------------- | ------------ | ------ | +| Yes | C (C17 and later) | No | Unchanged | fe_20231031.02| + +### Description/Rationale +In versions of Visual C++ before Visual Studio 2022 version 17.9, when the `_Alignas` specifier appeared adjacent to a structured type in a declaration, it was not applied correctly according to the ISO-C Standard. + +### Example +``` +// compile with /std:c17 +#include +struct Outer { + _Alignas(32) struct Inner { int i; } member1; + struct Inner member2; +}; +static_assert(offsetof(struct Outer, member2)==4, "incorrect alignment"); +``` + +According to the ISO-C Standard, this code should compile without the 'static_assert' emitting a diagnostic. The '_Alignas' directive applies only to the member variable 'member1'. It must not change the alignment of 'struct Inner'. However, before release 17.9.1 of Visual Studio, the diagnostic "incorrect alignment" would be emitted. The compiler would align 'member2' to an offset of 32 bytes within the 'struct Outer' type. + +Since fixing this bug is a binary breaking change, a warning is now emitted when this change takes effect. Warning C5274 is now emitted at warning level 1 for the code above: +``` +warning C5274: behavior change: _Alignas no longer applies to the type 'Inner' (only applies to declared data objects) +``` +A second fix was made to _Alignof in this release. In previous versions of Visual Studio, when the _Alignas specifier appeared adjacent to an anonymous type declaration, it was ignored. +###Example +``` +// compile with /std:c17 +#include +struct S { + _Alignas(32) struct { int anon_member; }; + int k; +}; +static_assert(offsetof(struct S, k)==4, "incorrect offsetof"); +static_assert(sizeof(struct S)==32, "incorrect size"); +``` +Previously, both `static_assert` statements would fail when this code was compiled. Now the code will compile, but with the following level 1 warnings emitted: +``` +warning C5274: behavior change: _Alignas no longer applies to the type '' (only applies to declared data objects) +warning C5273: behavior change: _Alignas on anonymous type no longer ignored (promoted members will align) +``` +The previous behavior can be achieved by replacing uses of `_Alignas(N)` with `__declspec(align(N))`. This declspec is a documented feature of Visual C and C++ for many releases. Unlike `_Alignas`, use of `declspec(align)` will apply to the type. + +# Improved Warning C4706 + + +| Source/Binary Breaking Change? | Compiler mode | Backward compatible? | EDG Behavior | Commit | +| ------------------------------ | ------------- | -------------------- | ------------ | ------ | +| Yes | All | Yes | N/A | fe_20240221.03 | + +### Description/Rationale + +Previously this warning was emitted by the optimizer, c2.dll: one side-effect of this was that the compiler could not detect the convention for suppressing the warning: i.e., wrapping the assignment in parentheses (if an assignment really was intended). By moving the warning from the optimizer to the parser, c1.dll or c1xx.dll, the compiler can now detect the parentheses and hence suppress the warning in these cases. + +When the warning was in the optimizer it would only check functions that were, in some way, referenced and hence passed to the optimizer to process. If a function was not referenced, then the optimizer would never see it and the warning would not be emitted. + +Now that the warning is in the parser it will be emitted for all functions regardless of whether they are referenced or not. + +### Example +``` +#pragma warning(error: 4706) + +struct S { + auto mf() { + if (value = 9) + return value + 4; + else + return value; + } + + int value = 9; +}; +``` +Previously, as 'mf' is an inline function that is never referenced, it would not be passed to the optimizer and hence warning C4706 would not be emitted for this code: but now that the parser is being used to detect this situation the warning is emitted. +``` +t.cpp(5): error C4706: assignment used as a condition +t.cpp(5): note: if an assignment is intended you can enclose it in parentheses, '(e1 = e2)', to silence this warning +``` +The fix is to either switch to an equality operator, 'value == 9', if this is what was intended, or to wrap the assignment in parentheses, '(value = 9)', if an assignment really was intended. Or, as the function is unreferenced, it can be removed. +---------------------- /TW ## Conformance improvements in Visual Studio 2022 version 17.9 From 80315058e081501853567531cc1ba0987af81c2b Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 15:01:50 -0700 Subject: [PATCH 0222/1239] PR review feedback --- .../tutorials/build-insights-function-view.md | 14 +++++++------- .../build-insights-included-files-view.md | 18 +++++++++--------- docs/build-insights/tutorials/image.png | Bin 85774 -> 0 bytes 3 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 docs/build-insights/tutorials/image.png diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 90176f7e7f..c7d5755011 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -35,18 +35,18 @@ In this article, learn how to use the Build Insights **Functions** view to find To measure the results of `__forceinline`, use a **Release** build because debug builds don't inline `__forceinline` since debug builds use the [`/Ob0`](../../build/reference/ob-inline-function-expansion.md) compiler switch, which disables that optimization. Set the build for **Release** and **x64**: -- In the **Solution Configurations** dropdown, choose **Release**. -- In the **Solution Platforms** dropdown, choose **x64**. +1. In the **Solution Configurations** dropdown, choose **Release**. +1. In the **Solution Platforms** dropdown, choose **x64**. -:::image type="content" source="./media/build-options-release.png" alt-text="Screenshot showing the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64"::: +:::image type="content" source="./media/build-options-release.png" alt-text="Screenshot of the Solution Configuration dropdown set to Release, and the Solution Platform dropdown set to x64."::: Set the optimization level to maximum optimizations: -- In the **Solution Explorer**, right-click the project name and select **Properties**. -- In the project properties, navigate to **C/C++** > **Optimization**. -- Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) ([`/O2`](../../build/reference/ob-inline-function-expansion.md))**. +1. In the **Solution Explorer**, right-click the project name and select **Properties**. +1. In the project properties, navigate to **C/C++** > **Optimization**. +1. Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) ([`/O2`](../../build/reference/ob-inline-function-expansion.md))**. -:::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot showing the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)"::: +:::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot of the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)."::: - Click **OK** to close the dialog. diff --git a/docs/build-insights/tutorials/build-insights-included-files-view.md b/docs/build-insights/tutorials/build-insights-included-files-view.md index 01bf5f4416..b74f0384c8 100644 --- a/docs/build-insights/tutorials/build-insights-included-files-view.md +++ b/docs/build-insights/tutorials/build-insights-included-files-view.md @@ -38,8 +38,8 @@ Before gathering Build Insights data, set the build options for the type of buil - In the **Solution Configurations** dropdown, choose **Debug**. - In the **Solution Platforms** dropdown, choose **x64**. - :::image type="complex" source="./media/build-options-debug.png" alt-text="Screenshot showing the Solution Configuration dropdowns."::: - The Solution Configuration dropdown is shown. It has options for Debug, Release, and Configuration manager. The Solution Platform dropdown is set to x64 + :::image type="complex" source="./media/build-options-debug.png" alt-text="Screenshot of the Solution Configuration dropdowns."::: + The Solution Configuration dropdown is shown. It has options for Debug, Release, and Configuration manager. The Solution Platform dropdown is set to x64. :::image-end::: ## Run Build Insights @@ -56,7 +56,7 @@ The trace file shows the build time--which for this example was 16.404 seconds. This view shows the time spent processing `#include` files. -:::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view"::: +:::image type="complex" source="./media/included-files-before-fix.png" alt-text="Screenshot of the included files view."::: In the file path column, several files with a fire icon are highlighted because they take over 10% of the build time to parse. winrtHeaders.h is the biggest one at 8.581 seconds or 52.3% of the 16.404-second build time. :::image-end::: @@ -72,7 +72,7 @@ To see which file includes `winrtHeaders.h`, click the chevron next to it. The * The **Translation Unit** column shows which file was being processed when the included file was processed. In this example, `winrtHeaders.h` was included while `Grapher.cpp` was compiled: -:::image type="complex" source="./media/included-files-translation-unit.png" alt-text="Screenshot of the Included Files view"::: +:::image type="complex" source="./media/included-files-translation-unit.png" alt-text="Screenshot of the Included Files view."::: An example ETL file showing the includes files for a sample project. In the file path column, winrtHeaders.h is selected and expanded. It takes 8.219 seconds to build which is 50.1% of the build time. Its child node is Grapher.cpp, which is also listed as the translation unit." :::image-end::: @@ -86,7 +86,7 @@ In this view, the children nodes are the files included by the parent node. This Select the **Include Tree** tab in the ETL file to see the Include Tree view: -:::image type="complex" source="./media/include-tree-view.png" alt-text="Screenshot of the Include Tree view"::: +:::image type="complex" source="./media/include-tree-view.png" alt-text="Screenshot of the Include Tree view."::: Shows the include tree for a project. In the file path column, each file that includes other files is listed, along with how many files it includes and the time to parse it. :::image-end::: @@ -94,8 +94,8 @@ In this view, the **File Path** column shows each file that includes other files Earlier, we saw that parsing `winrtHeaders.h` is time consuming. In the **Filter Files** text box, if we enter `winrtHeaders.h`, we can filter the view to only the entries that contain `winrtHeaders.h` in the name. Clicking the chevron next to `winrtHeaders.h` shows which files it includes: -:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the expanded Include Tree view"::: -The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show `Windows.UI.Xaml.Interop.h` that is expanded to show the header files it includes. +:::image type="complex" source="./media/include-tree-view-expanded.png" alt-text="Screenshot of the expanded Include Tree view."::: +The file path column lists each file that includes other files, along with how many files it includes and the time it took to parse it. winrtHeaders.h is selected and expanded to show the files it includes. Windows.UI.Xaml.Interop.h is one of those files and is expanded to show Windows.UI.Xaml.Interop.h that is expanded to show the header files it includes. :::image-end::: We see that `winrtHeaders.h` includes `Windows.UI.Xaml.Interop.h`. Remember from the **Included Files** view that this was also time consuming to parse. Click the chevron next to `Windows.UI.Xaml.Interop.h` to see that it includes `Windows.UI.Xaml.h`, which includes 21 other header files, two of which are also on the hot list. @@ -125,13 +125,13 @@ PCH files must be compiled before they can be used, so we add a file to the proj Then we set our project to use the PCH. That's done in project properties via **C/C++** > **Precompiled Headers** and setting **Precompiled Header** to **Use (/Yu)** and **Precompiled Header File** to **pch.h**. -:::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open"::: +:::image type="complex" source="./media/precompiled-header-settings.png" alt-text="Screenshot of the project properties dialog with the Precompiled Headers settings open."::: Precompiled Header is set to: Use (/Yu). The Precompiled Header File is set to pch.h. :::image-end::: To use the PCH, we include it as the first line in the source files that use `winrtHeaders.h`. It must come before any other include files. Or, for simplicity, we could modify the project properties to include `pch.h` at the beginning of every file in the solution by setting the project property: **C/C++** > **Advanced** > **Forced Include File** to `pch.h`: -:::image type="complex" source="./media/precompiled-header-settings-force-include.png" alt-text="Screenshot of the project properties dialog with the Advanced settings open"::: +:::image type="complex" source="./media/precompiled-header-settings-force-include.png" alt-text="Screenshot of the project properties dialog with the Advanced settings open."::: Forced Include File is set to pch.h. :::image-end::: diff --git a/docs/build-insights/tutorials/image.png b/docs/build-insights/tutorials/image.png deleted file mode 100644 index 60b0288d5d14257cde0eda13db7d44d1898c6e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85774 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 P`%qEPcu*i``tpAO-EcKt From 1f32fa03eef7564793dc3ea7e52642fde61ad510 Mon Sep 17 00:00:00 2001 From: Stacyrch140 <102548089+Stacyrch140@users.noreply.github.com> Date: Thu, 30 May 2024 19:12:43 -0400 Subject: [PATCH 0223/1239] pencil edit --- docs/build-insights/tutorials/build-insights-function-view.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index c7d5755011..2d3a822b99 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -48,7 +48,7 @@ Set the optimization level to maximum optimizations: :::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot of the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)."::: -- Click **OK** to close the dialog. +1. Click **OK** to close the dialog. ## Run Build Insights @@ -147,4 +147,4 @@ Double-click, right-click, or press **Enter** while on a file in the **Functions [Troubleshoot header file impact on build time](build-insights-included-files-view.md)\ [Functions View for Build Insights in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/functions-view-for-build-insights-in-visual-studio-2022-17-8/)\ [Tutorial: vcperf and Windows Performance Analyzer](vcperf-and-wpa.md)\ -[Improving code generation time with C++ Build Insights](https://devblogs.microsoft.com/cppblog/improving-code-generation-time-with-cpp-build-insights) \ No newline at end of file +[Improving code generation time with C++ Build Insights](https://devblogs.microsoft.com/cppblog/improving-code-generation-time-with-cpp-build-insights) From 491f60dad6025bd98200840b4cf11c579729166a Mon Sep 17 00:00:00 2001 From: Stacyrch140 <102548089+Stacyrch140@users.noreply.github.com> Date: Thu, 30 May 2024 19:20:02 -0400 Subject: [PATCH 0224/1239] pencil edit --- docs/build-insights/tutorials/build-insights-function-view.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build-insights/tutorials/build-insights-function-view.md b/docs/build-insights/tutorials/build-insights-function-view.md index 2d3a822b99..612e5c3fd6 100644 --- a/docs/build-insights/tutorials/build-insights-function-view.md +++ b/docs/build-insights/tutorials/build-insights-function-view.md @@ -46,7 +46,7 @@ Set the optimization level to maximum optimizations: 1. In the project properties, navigate to **C/C++** > **Optimization**. 1. Set the **Optimization** dropdown to **Maximum Optimization (Favor Speed) ([`/O2`](../../build/reference/ob-inline-function-expansion.md))**. -:::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot of the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)."::: + :::image type="content" source="./media/max-optimization-setting.png" alt-text="Screenshot of the project property pages dialog. The settings are open to Configuration Properties > C/C++ > Optimization. The Optimization dropdown is set to Maximum Optimization (Favor Speed) (/O2)."::: 1. Click **OK** to close the dialog. From bba5a831c1246fb84fe1fddb71463dcc54219b42 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 17:17:43 -0700 Subject: [PATCH 0225/1239] draft --- docs/overview/cpp-conformance-improvements.md | 143 ++++++++++++------ 1 file changed, 98 insertions(+), 45 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 5d49231394..3f30cb6250 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -19,14 +19,13 @@ For changes in older versions, see [Visual C++ What's New 2003 through 2015](../ Visual Studio 2022 version 17.10 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. -For a broader summary of changes made to the Standard Template Library, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). +For an in-depth summary of changes made to the Standard Template Library, including bug fixes and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). ---------------------- TW -### Conversion operator specialization with explicitly specified return type -This is a source code breaking change. The compiler used to specialize these conversion operators incorrectly in some cases which can lead to mismatched return type. These invalid specializations no longer happen. +### Conversion operator specialization with explicitly specified return type -#### Example (before/after) +The compiler used to specialize conversion operators incorrectly in some cases which can lead to mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. ```cpp // Example 1 @@ -51,7 +50,8 @@ struct S template operator const T*(); // overload 2 }; -void test() { +void test() +{ S{}.operator int*(); // this used to call overload 2, now it calls overload 1 } ``` @@ -61,8 +61,6 @@ void test() { Support added for WG21 p2334r1 (C++23) and WG14 n2645 (C23) which introduced the `#elifdef` and `#elifndef` preprocessor directives. Requires `/std:clatest` or `/std:c++latest`. -#### Example (before/after) - Before: ```cpp @@ -87,73 +85,72 @@ After: #endif ``` -# Application of `_Alignas` on a structured type in C (also added to 17.9) +### Application of `_Alignas` on a structured type in C - -| Source/Binary Breaking Change? | Compiler mode | Backward compatible? | EDG Behavior | Commit | -| ------------------------------ | ------------- | -------------------- | ------------ | ------ | -| Yes | C (C17 and later) | No | Unchanged | fe_20231031.02| +Applies to the C language (C17 and later). Also added to Microsoft Visual Studio 17.9 -### Description/Rationale -In versions of Visual C++ before Visual Studio 2022 version 17.9, when the `_Alignas` specifier appeared adjacent to a structured type in a declaration, it was not applied correctly according to the ISO-C Standard. +In versions of Visual C++ before Visual Studio 2022 version 17.9, when the `_Alignas` specifier appeared adjacent to a structured type in a declaration, it wasn't applied correctly according to the ISO-C Standard. -### Example -``` +```cpp // compile with /std:c17 #include -struct Outer { + +struct Outer +{ _Alignas(32) struct Inner { int i; } member1; struct Inner member2; }; static_assert(offsetof(struct Outer, member2)==4, "incorrect alignment"); ``` -According to the ISO-C Standard, this code should compile without the 'static_assert' emitting a diagnostic. The '_Alignas' directive applies only to the member variable 'member1'. It must not change the alignment of 'struct Inner'. However, before release 17.9.1 of Visual Studio, the diagnostic "incorrect alignment" would be emitted. The compiler would align 'member2' to an offset of 32 bytes within the 'struct Outer' type. +According to the ISO-C Standard, this code should compile without `static_assert` emitting a diagnostic. -Since fixing this bug is a binary breaking change, a warning is now emitted when this change takes effect. Warning C5274 is now emitted at warning level 1 for the code above: -``` +The `_Alignas` directive applies only to the member variable `member1`. It must not change the alignment of `struct Inner`. However, before Visual Studio 17.9.1, the diagnostic "incorrect alignment" was emitted. The compiler aligned `member2` to an offset of 32 bytes within the `struct Outer` type. + +This is a binary breaking change, so a warning is now emitted when this change takes effect. Warning C5274 is now emitted at warning level 1 for the previous code: + +```cpp warning C5274: behavior change: _Alignas no longer applies to the type 'Inner' (only applies to declared data objects) ``` -A second fix was made to _Alignof in this release. In previous versions of Visual Studio, when the _Alignas specifier appeared adjacent to an anonymous type declaration, it was ignored. -###Example -``` + +Also, in previous versions of Visual Studio, when the `_Alignas` specifier appeared adjacent to an anonymous type declaration, it was ignored. + +```cpp // compile with /std:c17 #include -struct S { +struct S +{ _Alignas(32) struct { int anon_member; }; int k; }; + static_assert(offsetof(struct S, k)==4, "incorrect offsetof"); static_assert(sizeof(struct S)==32, "incorrect size"); ``` -Previously, both `static_assert` statements would fail when this code was compiled. Now the code will compile, but with the following level 1 warnings emitted: -``` + +Previously, both `static_assert` statements failed when compiling this code. Now the code compiles, but emits the following level 1 warnings: + +```cpp warning C5274: behavior change: _Alignas no longer applies to the type '' (only applies to declared data objects) warning C5273: behavior change: _Alignas on anonymous type no longer ignored (promoted members will align) ``` -The previous behavior can be achieved by replacing uses of `_Alignas(N)` with `__declspec(align(N))`. This declspec is a documented feature of Visual C and C++ for many releases. Unlike `_Alignas`, use of `declspec(align)` will apply to the type. - -# Improved Warning C4706 - - -| Source/Binary Breaking Change? | Compiler mode | Backward compatible? | EDG Behavior | Commit | -| ------------------------------ | ------------- | -------------------- | ------------ | ------ | -| Yes | All | Yes | N/A | fe_20240221.03 | -### Description/Rationale +To get the previous behavior, replace `_Alignas(N)` with `__declspec(align(N))`. Unlike `_Alignas`, `declspec(align)` applies to the type. -Previously this warning was emitted by the optimizer, c2.dll: one side-effect of this was that the compiler could not detect the convention for suppressing the warning: i.e., wrapping the assignment in parentheses (if an assignment really was intended). By moving the warning from the optimizer to the parser, c1.dll or c1xx.dll, the compiler can now detect the parentheses and hence suppress the warning in these cases. +### Improved warning C4706 -When the warning was in the optimizer it would only check functions that were, in some way, referenced and hence passed to the optimizer to process. If a function was not referenced, then the optimizer would never see it and the warning would not be emitted. +This is a source code breaking change. Previously, the compiler didn't detect the convention for suppressing the warning. That is, wrapping the assignment in parentheses (if an assignment really was intended). The compiler now detects the parentheses and suppresses the warning. -Now that the warning is in the parser it will be emitted for all functions regardless of whether they are referenced or not. +The compiler now also emits the warning in cases where the function isn't referenced. -### Example -``` +```cpp +// example #pragma warning(error: 4706) -struct S { - auto mf() { +struct S +{ + auto mf() + { if (value = 9) return value + 4; else @@ -163,13 +160,69 @@ struct S { int value = 9; }; ``` -Previously, as 'mf' is an inline function that is never referenced, it would not be passed to the optimizer and hence warning C4706 would not be emitted for this code: but now that the parser is being used to detect this situation the warning is emitted. -``` + +Previously, because `mf` is an inline function that isn't referenced, warning C4706 wasn't emitted for this code. Now the warning is emitted: + +```cpp t.cpp(5): error C4706: assignment used as a condition t.cpp(5): note: if an assignment is intended you can enclose it in parentheses, '(e1 = e2)', to silence this warning ``` -The fix is to either switch to an equality operator, 'value == 9', if this is what was intended, or to wrap the assignment in parentheses, '(value = 9)', if an assignment really was intended. Or, as the function is unreferenced, it can be removed. +To fix this warning, either use an equality operator, `value == 9`, if this is what was intended, or wrap the assignment in parentheses, `(value = 9)`, if assignment is what is intended. Or, since the function is unreferenced, remove it. + +---------------------- end /TW for compiler conformance. START FOR STL +### C++ Standard Library + +**LWG issue resolutions** + +[LWG-3749](https://wg21.link/lwg3749) `common_iterator` should handle integer-class difference types. Previously, given: + ```cpp + template + struct iterator_traits> + { + using iterator_concept = see below; + using iterator_category = see below; + using value_type = iter_value_t; + using difference_type = iter_difference_t; + using pointer = see below; + using reference = iter_reference_t; + }; + ``` + + Where `difference_type` is defined as `iter_difference_t` and `iterator_category` is defined as at least `input_iterator_tag`. However, when `difference_type` is an integer-class type, `common_iterator` didn't satisfy `Cpp17InputIterator`, defining `iterator_category` incorrectly as `input_iterator_tag`. This issue is resolved by defining `difference_type` as `ptrdiff_t` when `iter_difference_t` is an integer-class type. + +[LWG-3809](https://wg21.link/lwg3809) `subtract_with_carry_engine` now works. Previously, `subtract_with_carry_engine` didn't work because the `subtract_with_carry_engine` template was specialized for `uint32_t` and `uint64_t` only. This issue is resolved by adding a specialization for `uint16_t`. + +[LWG-3897](https://wg21.link/lwg3897) `inout_ptr` will not update raw pointer to null. Previously, the `std::inout_ptr_t` destructor didn't update a raw pointer to be `null`, but now it does. This change ensures that the raw pointer is correctly set to `nullptr` when the `std::inout_ptr_t` object goes out of scope. + +LWG-3946 #4187 The definition of const_iterator_t should be reworked + +**C++20 changes** + +- Defect report [P2905R2](https://wg21.link/P2905R2) Runtime Format Strings. Now `make_format_args` takes lvalue references instead of forwarding references, which means the following problematic code no longer compiles: + ```cpp + std::filesystem::path path = "path/etic/experience"; + auto args = std::make_format_args(path.string()); // undefined behavior because format arguments store a reference to a temporary that is destroyed before use. + ``` +- [P2909R4](https://wg21.link/P2909R4) Fix Formatting Of Code Units As Integers. When `std::format` formats `char` as an integer via `d` and `x`, it now takes the signedness of char into account. This is a breaking change that only affects the output of negative/large code units when output via opt-in format specifiers. The output is no longer implementation-defined making code porting more reliable. For example: + ```cpp + for (char c : std::string("🤷")) + { + std::print("\\x{:02x}", c); + } + ``` + + This code would output `\xf0\x9f\xa4\xb7` or `\x-10\x-61\x-5c\x-49` depending on platform. Now ... + +**C++23 changes** + +- [P2836R1](https://wg21.link/P2836R1) `basic_const_iterator` should follow its underlying type's convertibility. Now `basic_const_iterator` is implicitly convertible to any constant iterator that `I` can be implicitly and explicitly convertible to. +- [P2286R8](https://wg21.link/P2286R8) Formatting Ranges: Implemented `formatter::reference>`. + +**C++26 changes** + +- [P2510R3](https://wg21.link/P2510R3) Formatting Pointers: The number of formatting options for pointer types is limited when compared to integer types. This change makes formatting pointer types more useful, reducing the need for to write your own formatters or cast a pointer type to an integer type. +- [P2937R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2937r0.html) Remove `strtok` from the freestanding library. It is still available in the hosted environment. ---------------------- /TW ## Conformance improvements in Visual Studio 2022 version 17.9 From 949507b622f9e60aa6806eb29f1b2dc3706d96b8 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 18:00:18 -0700 Subject: [PATCH 0226/1239] draft --- docs/overview/cpp-conformance-improvements.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 3f30cb6250..2987f6695e 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -195,7 +195,12 @@ To fix this warning, either use an equality operator, `value == 9`, if this is w [LWG-3897](https://wg21.link/lwg3897) `inout_ptr` will not update raw pointer to null. Previously, the `std::inout_ptr_t` destructor didn't update a raw pointer to be `null`, but now it does. This change ensures that the raw pointer is correctly set to `nullptr` when the `std::inout_ptr_t` object goes out of scope. -LWG-3946 #4187 The definition of const_iterator_t should be reworked +[LWG-3946](https://wg21.link/lwg3946) The definition of `const_iterator_t` should be reworked. In the freestanding library, the definition of `template using const_iterator_t = const_iterator>` is now `template using const_iterator_t = decltype(ranges::cbegin(declval()))`. This change is because `const_iterator_t` doesn't necessarily provide the same type as `decltype(ranges::cbegin(r))`. + +[LWG-3947](https://wg21.link/lwg3947) Unexpected constraints on `adjacent_transform_view::base()`. In this change, the constraint on `adjacent_transform_view::base()` was relaxed from `adjacent_view` to just `V`. + +[LWG-3949](https://wg21.link/lwg3949) `atomic`'s trivial destructor dropped in C++17 spec wording. `std::atomic` was originally required to have a trivial default constructor and a trivial destructor. A wording change in C++17 removed the requirement for a trivial destructor. This change reinstates the trivial destructor. One outcome is that `std::atomic` now has the same guarantees as `std::atomic`. + **C++20 changes** From 4a778a747020562edb3cead9fc8bce5b5ad56764 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 19:56:29 -0700 Subject: [PATCH 0227/1239] trim for just compiler part --- docs/overview/cpp-conformance-improvements.md | 60 ------------------- 1 file changed, 60 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 2987f6695e..56133a50eb 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -170,66 +170,6 @@ t.cpp(5): note: if an assignment is intended you can enclose it in parentheses, To fix this warning, either use an equality operator, `value == 9`, if this is what was intended, or wrap the assignment in parentheses, `(value = 9)`, if assignment is what is intended. Or, since the function is unreferenced, remove it. ----------------------- end /TW for compiler conformance. START FOR STL -### C++ Standard Library - -**LWG issue resolutions** - -[LWG-3749](https://wg21.link/lwg3749) `common_iterator` should handle integer-class difference types. Previously, given: - ```cpp - template - struct iterator_traits> - { - using iterator_concept = see below; - using iterator_category = see below; - using value_type = iter_value_t; - using difference_type = iter_difference_t; - using pointer = see below; - using reference = iter_reference_t; - }; - ``` - - Where `difference_type` is defined as `iter_difference_t` and `iterator_category` is defined as at least `input_iterator_tag`. However, when `difference_type` is an integer-class type, `common_iterator` didn't satisfy `Cpp17InputIterator`, defining `iterator_category` incorrectly as `input_iterator_tag`. This issue is resolved by defining `difference_type` as `ptrdiff_t` when `iter_difference_t` is an integer-class type. - -[LWG-3809](https://wg21.link/lwg3809) `subtract_with_carry_engine` now works. Previously, `subtract_with_carry_engine` didn't work because the `subtract_with_carry_engine` template was specialized for `uint32_t` and `uint64_t` only. This issue is resolved by adding a specialization for `uint16_t`. - -[LWG-3897](https://wg21.link/lwg3897) `inout_ptr` will not update raw pointer to null. Previously, the `std::inout_ptr_t` destructor didn't update a raw pointer to be `null`, but now it does. This change ensures that the raw pointer is correctly set to `nullptr` when the `std::inout_ptr_t` object goes out of scope. - -[LWG-3946](https://wg21.link/lwg3946) The definition of `const_iterator_t` should be reworked. In the freestanding library, the definition of `template using const_iterator_t = const_iterator>` is now `template using const_iterator_t = decltype(ranges::cbegin(declval()))`. This change is because `const_iterator_t` doesn't necessarily provide the same type as `decltype(ranges::cbegin(r))`. - -[LWG-3947](https://wg21.link/lwg3947) Unexpected constraints on `adjacent_transform_view::base()`. In this change, the constraint on `adjacent_transform_view::base()` was relaxed from `adjacent_view` to just `V`. - -[LWG-3949](https://wg21.link/lwg3949) `atomic`'s trivial destructor dropped in C++17 spec wording. `std::atomic` was originally required to have a trivial default constructor and a trivial destructor. A wording change in C++17 removed the requirement for a trivial destructor. This change reinstates the trivial destructor. One outcome is that `std::atomic` now has the same guarantees as `std::atomic`. - - -**C++20 changes** - -- Defect report [P2905R2](https://wg21.link/P2905R2) Runtime Format Strings. Now `make_format_args` takes lvalue references instead of forwarding references, which means the following problematic code no longer compiles: - ```cpp - std::filesystem::path path = "path/etic/experience"; - auto args = std::make_format_args(path.string()); // undefined behavior because format arguments store a reference to a temporary that is destroyed before use. - ``` -- [P2909R4](https://wg21.link/P2909R4) Fix Formatting Of Code Units As Integers. When `std::format` formats `char` as an integer via `d` and `x`, it now takes the signedness of char into account. This is a breaking change that only affects the output of negative/large code units when output via opt-in format specifiers. The output is no longer implementation-defined making code porting more reliable. For example: - ```cpp - for (char c : std::string("🤷")) - { - std::print("\\x{:02x}", c); - } - ``` - - This code would output `\xf0\x9f\xa4\xb7` or `\x-10\x-61\x-5c\x-49` depending on platform. Now ... - -**C++23 changes** - -- [P2836R1](https://wg21.link/P2836R1) `basic_const_iterator` should follow its underlying type's convertibility. Now `basic_const_iterator` is implicitly convertible to any constant iterator that `I` can be implicitly and explicitly convertible to. -- [P2286R8](https://wg21.link/P2286R8) Formatting Ranges: Implemented `formatter::reference>`. - -**C++26 changes** - -- [P2510R3](https://wg21.link/P2510R3) Formatting Pointers: The number of formatting options for pointer types is limited when compared to integer types. This change makes formatting pointer types more useful, reducing the need for to write your own formatters or cast a pointer type to an integer type. -- [P2937R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2937r0.html) Remove `strtok` from the freestanding library. It is still available in the hosted environment. ----------------------- /TW - ## Conformance improvements in Visual Studio 2022 version 17.9 Visual Studio 2022 version 17.9 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. From b3914af6f6ac96eb05d2364f728ab9b29e2e2ce9 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 20:02:18 -0700 Subject: [PATCH 0228/1239] cleanup --- docs/overview/cpp-conformance-improvements.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 56133a50eb..e99e2379bb 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -21,8 +21,6 @@ Visual Studio 2022 version 17.10 contains the following conformance improvements For an in-depth summary of changes made to the Standard Template Library, including bug fixes and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). ----------------------- TW - ### Conversion operator specialization with explicitly specified return type The compiler used to specialize conversion operators incorrectly in some cases which can lead to mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. From 69977514abd12f942644af95f853c41967ebbb63 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 30 May 2024 21:23:12 -0700 Subject: [PATCH 0229/1239] edits --- docs/overview/cpp-conformance-improvements.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index e99e2379bb..d407a6845c 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -23,7 +23,7 @@ For an in-depth summary of changes made to the Standard Template Library, includ ### Conversion operator specialization with explicitly specified return type -The compiler used to specialize conversion operators incorrectly in some cases which can lead to mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. +The compiler used to specialize conversion operators incorrectly in some cases which could lead to mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. ```cpp // Example 1 @@ -56,7 +56,7 @@ void test() ### Added Support for `#elifdef` and `#elifndef` -Support added for WG21 p2334r1 (C++23) and WG14 n2645 (C23) which introduced the `#elifdef` and `#elifndef` preprocessor directives. +Support added for WG21 [P2334R1](https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2021/p2334r1.pdf) (C++23) and WG14 [N2645](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2645.pdf) (C23) which introduced the `#elifdef` and `#elifndef` preprocessor directives. Requires `/std:clatest` or `/std:c++latest`. Before: @@ -87,7 +87,7 @@ After: Applies to the C language (C17 and later). Also added to Microsoft Visual Studio 17.9 -In versions of Visual C++ before Visual Studio 2022 version 17.9, when the `_Alignas` specifier appeared adjacent to a structured type in a declaration, it wasn't applied correctly according to the ISO-C Standard. +In versions of Visual C++ before Visual Studio 2022 version 17.9, if the `_Alignas` specifier appeared adjacent to a structured type in a declaration, it wasn't applied correctly according to the ISO-C Standard. ```cpp // compile with /std:c17 @@ -137,12 +137,9 @@ To get the previous behavior, replace `_Alignas(N)` with `__declspec(align(N))`. ### Improved warning C4706 -This is a source code breaking change. Previously, the compiler didn't detect the convention for suppressing the warning. That is, wrapping the assignment in parentheses (if an assignment really was intended). The compiler now detects the parentheses and suppresses the warning. - -The compiler now also emits the warning in cases where the function isn't referenced. +This is a source code breaking change. Previously, the compiler didn't detect the convention of wrapping an assignment in parentheses, if assignment was intended, to suppress the warning. The compiler now detects the parentheses and suppresses the warning. ```cpp -// example #pragma warning(error: 4706) struct S @@ -159,14 +156,14 @@ struct S }; ``` -Previously, because `mf` is an inline function that isn't referenced, warning C4706 wasn't emitted for this code. Now the warning is emitted: +The compiler now also emits the warning in cases where the function isn't referenced. Previously, because `mf` is an inline function that isn't referenced, warning C4706 wasn't emitted for this code. Now the warning is emitted: ```cpp t.cpp(5): error C4706: assignment used as a condition t.cpp(5): note: if an assignment is intended you can enclose it in parentheses, '(e1 = e2)', to silence this warning ``` -To fix this warning, either use an equality operator, `value == 9`, if this is what was intended, or wrap the assignment in parentheses, `(value = 9)`, if assignment is what is intended. Or, since the function is unreferenced, remove it. +To fix this warning, either use an equality operator, `value == 9`, if this is what was intended. Or, wrap the assignment in parentheses, `(value = 9)`, if assignment is intended. Otherwise, since the function is unreferenced, remove it. ## Conformance improvements in Visual Studio 2022 version 17.9 From cdfe2a569d3b8772c5f082fdb442603178fd3e85 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 31 May 2024 12:03:31 -0700 Subject: [PATCH 0230/1239] last edits --- docs/overview/cpp-conformance-improvements.md | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index d407a6845c..997a7432b5 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -1,7 +1,7 @@ --- title: "C++ conformance improvements in Visual Studio 2022" description: "Microsoft C++ in Visual Studio is improving standards conformance and fixing bugs regularly." -ms.date: 05/29/2024 +ms.date: 05/31/2024 ms.service: "visual-cpp" ms.subservice: "cpp-lang" --- @@ -19,11 +19,11 @@ For changes in older versions, see [Visual C++ What's New 2003 through 2015](../ Visual Studio 2022 version 17.10 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. -For an in-depth summary of changes made to the Standard Template Library, including bug fixes and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). +For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). ### Conversion operator specialization with explicitly specified return type -The compiler used to specialize conversion operators incorrectly in some cases which could lead to mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. +The compiler used to specialize conversion operators incorrectly in some cases which could lead to a mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. ```cpp // Example 1 @@ -56,7 +56,7 @@ void test() ### Added Support for `#elifdef` and `#elifndef` -Support added for WG21 [P2334R1](https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2021/p2334r1.pdf) (C++23) and WG14 [N2645](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2645.pdf) (C23) which introduced the `#elifdef` and `#elifndef` preprocessor directives. +Support added for WG21 [P2334R1](https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2021/p2334r1.pdf) (C++23) and WG14 [N2645](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2645.pdf) (C++23) which introduced the `#elifdef` and `#elifndef` preprocessor directives. Requires `/std:clatest` or `/std:c++latest`. Before: @@ -103,13 +103,10 @@ static_assert(offsetof(struct Outer, member2)==4, "incorrect alignment"); According to the ISO-C Standard, this code should compile without `static_assert` emitting a diagnostic. -The `_Alignas` directive applies only to the member variable `member1`. It must not change the alignment of `struct Inner`. However, before Visual Studio 17.9.1, the diagnostic "incorrect alignment" was emitted. The compiler aligned `member2` to an offset of 32 bytes within the `struct Outer` type. +The `_Alignas` directive applies only to the member variable `member1`. It must not change the alignment of `struct Inner`. However, before Visual Studio 17.9.1, the diagnostic "incorrect alignment" was emitted. The compiler aligned `member2` to an offset of 32 bytes within the `struct Outer` type. -This is a binary breaking change, so a warning is now emitted when this change takes effect. Warning C5274 is now emitted at warning level 1 for the previous code: - -```cpp -warning C5274: behavior change: _Alignas no longer applies to the type 'Inner' (only applies to declared data objects) -``` +This is a binary breaking change, so a warning is now emitted when this change takes effect. Warning C5274 is now emitted at warning level 1 for the previous example: ` +warning C5274: behavior change: _Alignas no longer applies to the type 'Inner' (only applies to declared data objects)`. Also, in previous versions of Visual Studio, when the `_Alignas` specifier appeared adjacent to an anonymous type declaration, it was ignored. @@ -128,7 +125,7 @@ static_assert(sizeof(struct S)==32, "incorrect size"); Previously, both `static_assert` statements failed when compiling this code. Now the code compiles, but emits the following level 1 warnings: -```cpp +```c warning C5274: behavior change: _Alignas no longer applies to the type '' (only applies to declared data objects) warning C5273: behavior change: _Alignas on anonymous type no longer ignored (promoted members will align) ``` @@ -137,7 +134,7 @@ To get the previous behavior, replace `_Alignas(N)` with `__declspec(align(N))`. ### Improved warning C4706 -This is a source code breaking change. Previously, the compiler didn't detect the convention of wrapping an assignment in parentheses, if assignment was intended, to suppress the warning. The compiler now detects the parentheses and suppresses the warning. +This is a source code breaking change. Previously, the compiler didn't detect the convention of wrapping an assignment in parentheses, if assignment was intended, to suppress [warning C4706](../error-messages/compiler-warnings/compiler-warning-level-4-c4706.md) about assignment within a conditional expression. The compiler now detects the parentheses and suppresses the warning. ```cpp #pragma warning(error: 4706) @@ -159,8 +156,8 @@ struct S The compiler now also emits the warning in cases where the function isn't referenced. Previously, because `mf` is an inline function that isn't referenced, warning C4706 wasn't emitted for this code. Now the warning is emitted: ```cpp -t.cpp(5): error C4706: assignment used as a condition -t.cpp(5): note: if an assignment is intended you can enclose it in parentheses, '(e1 = e2)', to silence this warning +error C4706: assignment used as a condition +note: if an assignment is intended you can enclose it in parentheses, '(e1 = e2)', to silence this warning ``` To fix this warning, either use an equality operator, `value == 9`, if this is what was intended. Or, wrap the assignment in parentheses, `(value = 9)`, if assignment is intended. Otherwise, since the function is unreferenced, remove it. @@ -716,7 +713,7 @@ int main(void) In Visual Studio 2022 version 17.1 and later, if the expression associated with a `static_assert` isn't a dependent expression, the compiler evaluates the expression when it's parsed. If the expression evaluates to `false`, the compiler emits an error. Previously, if the `static_assert` was within the body of a function template (or within the body of a member function of a class template), the compiler wouldn't perform this analysis. -This change is a source breaking change. It applies in any mode that implies **`/permissive-`** or **`/Zc:static_assert`**. This change in behavior can be disabled by using the **`/Zc:static_assert-`** compiler option. +This change is a source breaking change. It applies in any mode that implies **`/permissive-`** or **`/Zc:static_assert`**. This change in behavior can be disabled by using the **`/Zc:static_assert-`** compiler option. #### Example From 2df046146ae88ec945096d2c4e79eb56824ec5fb Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 3 Jun 2024 14:41:43 -0700 Subject: [PATCH 0231/1239] draft --- .../reference/link-repro-full-path-rsp.md | 45 +++++++++++++++++++ docs/build/reference/linker-options.md | 3 +- docs/build/toc.yml | 2 + 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 docs/build/reference/link-repro-full-path-rsp.md diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md new file mode 100644 index 0000000000..c2ae1d3c29 --- /dev/null +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -0,0 +1,45 @@ +--- +description: "Learn more about: /ASSEMBLYDEBUG (Add DebuggableAttribute)" +title: "/LINKREPROFULLPATHRSP (Generate absolute paths for linked files)" +ms.date: 06/3/2024 +f1_keywords: ["VC.Project.VCLinkerTool.LinkReproFullPathRSP", "/LINKREPROFULLPATHRSP"] +helpviewer_keywords: ["/LINKREPROFULLPATHRSP linker option", "-LINKREPROFULLPATHRSP linker option", "LINKREPROFULLPATHRSP linker option"] +--- +# `/LINKREPROFULLPATHRSP` (Generate absolute paths for linked files) + + Generates a response file (.RSP) containing the absolute paths to all the files that the linker took as input. + +This flag was introduced in Visual Studio 2022 version 17.11 Preview 2. + +## Syntax + +> **`/LINKREPROFULLPATHRSP:filename`** + +## Remarks + +Rather than generating a full link repro like `/LINKREPRO` (copying all the files to a directory and creating a response file with relative paths to that directory), this option writes the names of the files used during linking to the specified file. + +For example, given a directory `c:\temp\test` which contains the files `test.cpp`, `f1.cpp`, `f2.cpp` and the linker command line: `link f1.obj f2.obj test.obj /out:test.exe /LINKREPROFULLPATHRSP:test.rsp`, the file `test.rsp` that the linker generates contains the following lines to reflect the fully qualified paths of the input files: + +```cmd +"c:\temp\test\f1.obj" +"c:\temp\test\f2.obj" +"c:\temp\test\test.obj" +``` + +### To set this linker option in the Visual Studio development environment + +1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md). + +1. Select the **Configuration Properties** > **Linker** > **Command Line** property page. + +1. Enter *`/LINKREPROFULLPATHRSP:file.rsp`* into **Additional Options**. Choose **OK** or **Apply** to apply the change. + +### To set this linker option programmatically + +- See . + +## See also + +[MSVC linker reference](linking.md)\ +[MSVC linker options](linker-options.md) diff --git a/docs/build/reference/linker-options.md b/docs/build/reference/linker-options.md index c463236a33..83076eda25 100644 --- a/docs/build/reference/linker-options.md +++ b/docs/build/reference/linker-options.md @@ -1,7 +1,7 @@ --- title: "MSVC Linker options" description: "A list of the options supported by the Microsoft LINK linker." -ms.date: 01/08/2024 +ms.date: 06/03/2024 f1_keywords: ["link"] helpviewer_keywords: ["linker [C++]", "linker [C++], options listed", "libraries [C++], linking to COFF", "LINK tool [C++], linker options"] --- @@ -78,6 +78,7 @@ You can use the [`comment`](../../preprocessor/comment-c-cpp.md) pragma to speci | [`/LARGEADDRESSAWARE`](largeaddressaware-handle-large-addresses.md) | Tells the compiler that the application supports addresses larger than 2 gigabytes | | [`/LIBPATH`](libpath-additional-libpath.md) | Specifies a path to search before the environmental library path. | | [`/LINKREPRO`](linkrepro.md) | Specifies a path to generate link repro artifacts in. | +| [`LINKREPROFULLPATHRSP`](link-repro-full-path-rsp.md) | Generates a response file containing the absolute paths to all the files that the linker took as input. | | [`/LINKREPROTARGET`](linkreprotarget.md) | Generates a link repro only when producing the specified target.16.1 | | [`/LTCG`](ltcg-link-time-code-generation.md) | Specifies link-time code generation. | | [`/MACHINE`](machine-specify-target-platform.md) | Specifies the target platform. | diff --git a/docs/build/toc.yml b/docs/build/toc.yml index d029477421..72081ec994 100644 --- a/docs/build/toc.yml +++ b/docs/build/toc.yml @@ -640,6 +640,8 @@ items: href: ../build/reference/kernel-create-kernel-mode-binary.md - name: /link (Pass options to linker) href: ../build/reference/link-pass-options-to-linker.md + - name: /LINKREPROFULLPATHRSP (Generate absolute paths for linked files) + href: ../build/reference/link-repro-full-path-rsp.md - name: /LN (Create MSIL module) href: ../build/reference/ln-create-msil-module.md - name: /MD, /MT, /LD (Use Run-time library) From 626f3c0c410686329f9c68e79990a3201af5747d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 3 Jun 2024 15:01:26 -0700 Subject: [PATCH 0232/1239] edit --- docs/build/reference/link-repro-full-path-rsp.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md index c2ae1d3c29..eca5c9fd75 100644 --- a/docs/build/reference/link-repro-full-path-rsp.md +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -1,5 +1,5 @@ --- -description: "Learn more about: /ASSEMBLYDEBUG (Add DebuggableAttribute)" +description: "Learn more about: /LINKREPROFULLPATHRSP (Generate absolute paths for linked files))" title: "/LINKREPROFULLPATHRSP (Generate absolute paths for linked files)" ms.date: 06/3/2024 f1_keywords: ["VC.Project.VCLinkerTool.LinkReproFullPathRSP", "/LINKREPROFULLPATHRSP"] @@ -9,7 +9,7 @@ helpviewer_keywords: ["/LINKREPROFULLPATHRSP linker option", "-LINKREPROFULLPATH Generates a response file (.RSP) containing the absolute paths to all the files that the linker took as input. -This flag was introduced in Visual Studio 2022 version 17.11 Preview 2. +This flag was introduced in Visual Studio 2022 version 17.11. ## Syntax From 5ca4cb15d9aceb9e138aefd30e6a4b29170b8ef7 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 3 Jun 2024 15:36:03 -0700 Subject: [PATCH 0233/1239] acrolinx --- docs/build/reference/link-repro-full-path-rsp.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md index eca5c9fd75..5bcc13999f 100644 --- a/docs/build/reference/link-repro-full-path-rsp.md +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -19,7 +19,10 @@ This flag was introduced in Visual Studio 2022 version 17.11. Rather than generating a full link repro like `/LINKREPRO` (copying all the files to a directory and creating a response file with relative paths to that directory), this option writes the names of the files used during linking to the specified file. -For example, given a directory `c:\temp\test` which contains the files `test.cpp`, `f1.cpp`, `f2.cpp` and the linker command line: `link f1.obj f2.obj test.obj /out:test.exe /LINKREPROFULLPATHRSP:test.rsp`, the file `test.rsp` that the linker generates contains the following lines to reflect the fully qualified paths of the input files: +For example, given: +- a directory `c:\temp\test`, that contains the files `test.cpp`, `f1.cpp`, `f2.cpp` +- the linker command line: `link f1.obj f2.obj test.obj /out:test.exe /LINKREPROFULLPATHRSP:test.rsp` +Then the linker produces the file `test.rsp` containing the following lines to reflect the fully qualified paths of the input files: ```cmd "c:\temp\test\f1.obj" From 3aaa8762e91d5454a61fceaa95ddcef05202d199 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 6 Jun 2024 15:27:44 -0700 Subject: [PATCH 0234/1239] updates for 17.10 --- docs/overview/cpp-conformance-improvements.md | 5 +- ...t-s-new-for-visual-cpp-in-visual-studio.md | 99 ++++++++++++------- 2 files changed, 65 insertions(+), 39 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 997a7432b5..e2c143fb98 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -1,9 +1,10 @@ --- title: "C++ conformance improvements in Visual Studio 2022" description: "Microsoft C++ in Visual Studio is improving standards conformance and fixing bugs regularly." -ms.date: 05/31/2024 +ms.date: 06/06/2024 ms.service: "visual-cpp" ms.subservice: "cpp-lang" +ai-usage: ai-assisted --- # C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 @@ -17,7 +18,7 @@ For changes in older versions, see [Visual C++ What's New 2003 through 2015](../ ## Conformance improvements in Visual Studio 2022 version 17.10 -Visual Studio 2022 version 17.10 contains the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. +Visual Studio 2022 version 17.10 has the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index efc3ac3f44..e80abd6770 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -1,7 +1,7 @@ --- title: "What's new for C++ in Visual Studio" description: "The new features and fixes in the Microsoft C/C++ compiler and tools in Visual Studio." -ms.date: 02/21/2024 +ms.date: 06/6/2024 ms.service: "visual-cpp" ms.subservice: "ide" ms.custom: intro-whats-new @@ -12,12 +12,42 @@ ms.custom: intro-whats-new Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler and tools. The Visual Studio IDE also offers significant improvements in performance and productivity, and now runs natively as a 64-bit application. - For more information on what's new in all of Visual Studio, see [What's new in Visual Studio 2022](/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022&preserve-view=true). -- For an overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023, see [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) - For information about what's new in the C++ docs, see [Microsoft C++ docs: What's new](./whats-new-cpp-docs.md). +- For information about version build dates, see [Visual Studio 2022 Release History](https://learn.microsoft.com/visualstudio/releases/2022/release-history). + +## What's new for C++ in Visual Studio version 17.10 + +*Released May 2024* + +Briefly, a few of the new features are: + +- **MSVC Toolset Update**: The MSVC toolset version is updated from 19.39 to 19.40. This may affect projects that have version assumptions. +- **Standard Library Enhancements**: The standard library now includes formatting pointers from C++26 and performance improvements such as vectorized `std::min_element`. +- **Build Insights**: Now provides template instantiation information. +- **Unreal Engine Plugin**: There is a new opt-in feature for the Unreal Engine Plugin to run in the background, reducing startup costs. +- **CMake Targets**: You can now pin targets in the CMake Targets View. +- **Connection Manager UX**: The user experience provides a more seamless experience when connecting to remote systems. +- **Pull Request Comments**: You can now view GitHub and Azure DevOps comments directly in your working file. +- **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. +- **Image Preview**: You can hover over an image path to see a preview with size details. +- **Breakpoint/Tracepoint Creation**: You can now create breakpoints and tracepoints directly from expressions in the source code. +- **Attach to Process Dialog**: The functionality provided by the Attach to Process dialog is improved and is more user-friendly. +- **GitHub Copilot Integration**: There is a unified experience with Copilot Chat in Visual Studio. + +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | +| Standard Library (STL): Merged C++26, C+23, C++20 defect reports, LWG issue resolutions, and fixed bugs | [STL Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | +| New features in the Visual Studio 17.10 IDE |[Visual Studio 2022 version 17.10 Release Notes](/visualstudio/releases/2022/release-notes) | +| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_1710) | ## What's new for C++ in Visual Studio version 17.9 -Briefly, some of the new features are: +*Released Feb 2024* + +For an overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023, see [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) + +Briefly, a few of the new features are: - `#include` diagnostics, which provides a detailed analysis of your `#include` directives. Activate this feature by right-clicking an `#include` and choosing **#include directives** > **Turn #include directive diagnostics on**. Above each `#include` is the number of times your code references that `#include` file. Click the **reference** link to navigate to where your code uses something from that header file. To view the build time of your `#include` directives, run Build Insights by navigating to **Build** > **Run Build Insights on Solution** > **Build**. :::image type="complex" source="media/include-diagnostics.png" alt-text="Screenshot of #include diagnostics"::: @@ -44,7 +74,9 @@ For a summary of new features in the Visual Studio 17.9 IDE, see [Visual Studio ## What's new for C++ in Visual Studio version 17.8 -Briefly, some of the new features are: +*Released Nov 2023* + +Briefly, a few of the new features are: - C++ structured diagnostics in the Output window and a new problem details window that provides more information about the error. For more information, see [Structured SARIF Output](../build/reference/sarif-output.md) and [Problem Details Window](/visualstudio/ide/reference/problem-details-window). - A feature that lets you visualize the size and alignment of your classes, structs, unions, base types, or enums even before the code is compiled. Hover over the identifier and a Quick Info displays the size and alignment information. @@ -63,9 +95,11 @@ For a summary of new features in the Visual Studio 17.8 IDE, see [Visual Studio ## What's new for C++ in Visual Studio version 17.7 +*Released Aug 2023* + For a summary of new C++ features in Visual Studio 17.7, see [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/). -Briefly, some of the new features are: +Briefly, *some* of the new features are: * Faster debugging sessions and faster project load times * Step-by-step visualization of macro expansion * One-click download for Windows Subsystem for Linux (WSL) @@ -80,6 +114,8 @@ For a summary of new features in the Visual Studio 17.7 IDE, see [Visual Studio ## What's new for C++ in Visual Studio version 17.6 +*Released May 2023* + For a summary of new C++ features in Visual Studio 17.6, see [What’s New for C++ Developers in Visual Studio 2022 17.6](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/). Briefly, some of the new features are: CMake script debugging, built-in support for High Level Shading Language (HLSL), an Unreal Engine Log viewer, initial support for C++20 in C++/CLI projects, VCPKG is now added by default, and some C++23 standard library features for ranges. To see a full list of new features added to the standard library, see the [STL changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-176). @@ -88,39 +124,28 @@ For a summary of new features in Visual Studio 17.6 IDE, see [Visual Studio 2022 ## What's new for C++ in Visual Studio version 17.5 +*Released Feb 2023* + For a summary of new C++ features in Visual Studio in version 17.5, see [What’s New for C++ Developers in Visual Studio 2022 17.5](https://devblogs.microsoft.com/cppblog/visual-studio-17-5-for-cpp-devs/). + For a summary of new features and bug fixes in the Visual Studio IDE version 17.5, see [Visual Studio 2022 version 17.5 Release Notes](/visualstudio/releases/2022/release-notes-v17.5). - `std::move`, `std::forward`, `std::move_if_noexcept`, and `std::forward_like` now don't produce function calls in generated code, even in debug mode. This change avoids named casts causing unnecessary overhead in debug builds. `/permissive-` (or an option that implies it, such as `/std:c++20` or `std:c++latest`) is required. -- Added [`[[msvc::intrinsic]]`](../cpp/attributes.md#msvcintrinsic) to support the above item. You can apply this attribute to nonrecursive functions consisting of a single cast, which take only one parameter. - +- Added [`[[msvc::intrinsic]]`](../cpp/attributes.md#msvcintrinsic). You can apply this attribute to nonrecursive functions consisting of a single cast, which take only one parameter. - Added support for Linux Console in the Integrated Terminal, which allows for terminal I/O. - - Added initial experimental support for C11 atomic primitives (``). You can enable this experimental feature with the `/experimental:c11atomics` option in `/std:c11` mode or later. - - Added a new set of experimental high-confidence checks to the Lifetime Checker for reduced noise. - - A new preview feature, Remote File Explorer, lets you view the file directory on your remote machines within VS, and upload and download files to it. - - Changed versioning of CMake executables shipped with Visual Studio to match Kitware versions. - - Added support for Hot Reload to the CMake Project template. - - Go To Definition for C++ now uses a more subtle indicator of the operation taking more time, replacing the modal dialog from previous versions. - - Started rollout of an experiment providing more smart results in the C++ autocompletion and member list. This functionality was previously known as Predictive IntelliSense but now uses a new presentation method. - - We now ship a native Arm64 Clang toolset with our LLVM workload, allowing native compilation on Arm64 machines. - - Added localization to the [Image Watch Extension](https://marketplace.visualstudio.com/items?itemName=VisualCPPTeam.ImageWatchForVisualStudio2022) (This extension is available in the Marketplace, and isn't bundled through the Visual Studio Installer). - - Added support for opening a Terminal window into the currently running Developer Container. - - Made several improvements to IntelliSense macro expansion. Notably, we enabled recursive expansion in more contexts, and we added options to the pop up to copy the expansion to the clipboard or expand the macro inline. - - Concurrent monitoring is now supported in the Serial Monitor. Concurrent monitoring allows you to monitor multiple ports at the same time side by side. Press the plus button to open another Serial Monitor and get started. - - You can now view properties from base classes modified in an Unreal Blueprint asset without leaving Visual Studio. Double-click in a Blueprint reference for a C++ class or property to open the UE Asset Inspector in Visual Studio. - Enabled running DevContainers on a remote Linux machine. - Enabled selection of multiple targets to build in the CMake Targets view. @@ -135,40 +160,31 @@ For a summary of new features and bug fixes in the Visual Studio IDE version 17. ## What's new for C++ in Visual Studio version 17.4 +*Released Nov 2022* + For a summary of new features and bug fixes in Visual Studio in version 17.4, see [Visual Studio 2022 version 17.4 Release Notes](/visualstudio/releases/2022/release-notes-v17.4) and [What’s New for C++ Developers in Visual Studio 2022 17.4](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-4/). -- Improved compiler error messages to provide more correct and useful information, especially for concepts. +For a summary of C++ backend updates, see [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/). +- Improved compiler error messages to provide more correct and useful information, especially for concepts. - Added experimental MSVC option [`/experimental:log`](../build/reference/experimental-log.md) to output [structured SARIF diagnostics](../build/reference/sarif-output.md) to the specified directory. - - Added support for C23 attributes to IntelliSense and continued progress in C++20 modules support. - - Improved indexing performance when opening a new solution. Large projects could see a 20-35% improvement from 17.3. - - Improved Named Return Value Optimization (NRVO): - NRVO is enabled for cases that involve exception handling or loops. - NRVO is enabled even under **`/Od`** if the user passes the **`/Zc:nrvo`** option, or **`/std:c++20`** or later, or **`/permissive-`**. - You can now disable NRVO with the **`/Zc:nrvo-`** option. - - Upgraded the version of LLVM shipped with Visual Studio to 15.0.1. For more information on what is available, see the [LLVM](https://releases.llvm.org/15.0.0/docs/ReleaseNotes.html) and [Clang](https://releases.llvm.org/15.0.0/tools/clang/docs/ReleaseNotes.html) release notes. - - Added support to Visual Studio for vcpkg artifacts with CMake projects. For projects that include a vcpkg manifest, the environment is activated automatically on project open. Learn more about this feature in the [vcpkg environment activation in Visual Studio](https://aka.ms/vsvcpkgenv) blog post. - - You can now use Dev Containers for your C++ projects. Learn more about this feature in our [Dev Containers for C++](https://aka.ms/vscppdevcontainer) blog post. - - IntelliSense now respects the order of preincluded headers when one of them is a PCH. Previously, when a PCH was used via **`/Yu`** and force-included via **`/FI`**, IntelliSense would always process it first, before any other headers included via **`/FI`**. This behavior didn't match the build behavior. With this change, **`/FI`** headers are processed in the order they're specified. - - Removed internal prefixes from CTest names in Test Explorer. - - Updated the version of CMake shipped with Visual Studio to version 3.24.1. For details of what is available, see the [CMake release notes](https://cmake.org/cmake/help/v3.24/release/3.24.html). - - Android SDK update: - Ant scripts were removed, so users no longer see Ant-based templates in the New Project dialog. For help migrating from Ant templates to Gradle templates, see [Migrating Builds From Apache Ant](https://docs.gradle.org/current/userguide/migrating_from_ant.html) - Added support for building with NDK 23 and 24 - Updated NDK component to the LTS version 23 - - Added vectorized implementations of `ranges::min_element()`, `ranges::max_element()`, and `ranges::minmax_element()` - - We continue to track the latest developments in C++ standardization. Support for these C++23 features is available by including [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md) in your compiler options: - [P2302R4](https://wg21.link/p2302r4) `ranges::contains`, `ranges::contains_subrange` - [P2499R0](https://wg21.link/p2499r0) `string_view` Range Constructor Should Be `explicit` @@ -182,15 +198,14 @@ For a summary of new features and bug fixes in Visual Studio in version 17.4, se - [P2441R2](https://wg21.link/p2441r2) `views::join_with` - Added an option "Navigation after Create Declaration/Definition" to allow you to choose the navigation behavior of the Create Declaration/Definition feature. You can select between peeking (the default) or opening the document, or no navigation. - - Arm64 builds of Visual Studio now bundle Arm64 versions of CMake and Ninja. - - Added support for CMake Presets version 4. For details of what is available, see the [CMake release notes](https://cmake.org/cmake/help/v3.23/release/3.23.html#id6). - - Remote system connections using the [Connection Manager](../linux/connect-to-your-remote-linux-computer.md) now support SSH ProxyJump. ProxyJump is used to access an SSH host via another SSH host (for example, to access a host behind a firewall). ## What's new for C++ in Visual Studio version 17.3 +*Released Aug 2022* + For a summary of new features and bug fixes in Visual Studio in version 17.3, see [Visual Studio 2022 version 17.3 Release Notes](/visualstudio/releases/2022/release-notes-v17.3) and [C++ improvements](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-3-is-now-available/#c-improvements). - The Arm64EC toolchain is no longer marked as experimental and is ready for production use. @@ -220,6 +235,8 @@ The responsiveness of **Go To All** is improved. Previously, results appeared af ## What's new for C++ in Visual Studio version 17.2 +*Released May 2022* + For a summary of new features and bug fixes in Visual Studio in version 17.2, see [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.2). - Added compiler support for C++23 feature [deducing `this`](https://wg21.link/p0847), available under the **`/std:c++latest`** option. @@ -245,6 +262,8 @@ For a summary of new features and bug fixes in Visual Studio in version 17.2, se ## What's new for C++ in Visual Studio version 17.1 +*Released Feb 2022* + For a summary of new features and bug fixes in Visual Studio in version 17.1, see [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.1). - A new **Configure Preset** template is added to configure and build CMake projects on a remote macOS system with *`CMakePresets.json`*. You can also launch CMake targets on a remote macOS system, and then debug remotely in the Visual Studio debugger backed by GDB or LLDB. @@ -256,6 +275,8 @@ For a summary of new features and bug fixes in Visual Studio in version 17.1, se ## What's new for C++ in Visual Studio version 17.0 +*Released Nov 2021* + For a summary of new features and bug fixes in Visual Studio, see [Visual Studio 2022 version 17.0 Release Notes](/visualstudio/releases/2022/release-notes-v17.0). - The Visual Studio IDE, *`devenv.exe`*, is now a native 64-bit application. @@ -352,7 +373,11 @@ Select Standard Library (STL) improvements are highlighted here. For a comprehen ## Release notes for older versions -Release notes for older C++ versions are also available. For information on what's new for C++ in Visual Studio 2019, see [What's new for C++ in Visual Studio 2019](what-s-new-for-cpp-2019.md). For information on what's new for C++ in Visual Studio 2017, see [What's new for C++ in Visual Studio 2017](what-s-new-for-cpp-2017.md). For information on what's new in earlier versions, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). +Release notes for older C++ versions are also available: + +- For information on what's new for C++ in Visual Studio 2019, see [What's new for C++ in Visual Studio 2019](what-s-new-for-cpp-2019.md). +- For information on what's new for C++ in Visual Studio 2017, see [What's new for C++ in Visual Studio 2017](what-s-new-for-cpp-2017.md). +- For information on what's new in earlier versions, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). ## Known issues From 36794bf9904b2a644dfc2631893fff350a970fb0 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 6 Jun 2024 16:01:18 -0700 Subject: [PATCH 0235/1239] backfitting table of changes --- ...t-s-new-for-visual-cpp-in-visual-studio.md | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index e80abd6770..daca258e92 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -13,7 +13,7 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a - For more information on what's new in all of Visual Studio, see [What's new in Visual Studio 2022](/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022&preserve-view=true). - For information about what's new in the C++ docs, see [Microsoft C++ docs: What's new](./whats-new-cpp-docs.md). -- For information about version build dates, see [Visual Studio 2022 Release History](https://learn.microsoft.com/visualstudio/releases/2022/release-history). +- For information about version build dates, see [Visual Studio 2022 Release History](/visualstudio/releases/2022/release-history). ## What's new for C++ in Visual Studio version 17.10 @@ -45,8 +45,6 @@ Briefly, a few of the new features are: *Released Feb 2024* -For an overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023, see [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) - Briefly, a few of the new features are: - `#include` diagnostics, which provides a detailed analysis of your `#include` directives. Activate this feature by right-clicking an `#include` and choosing **#include directives** > **Turn #include directive diagnostics on**. Above each `#include` is the number of times your code references that `#include` file. Click the **reference** link to navigate to where your code uses something from that header file. To view the build time of your `#include` directives, run Build Insights by navigating to **Build** > **Run Build Insights on Solution** > **Build**. @@ -68,9 +66,14 @@ Briefly, a few of the new features are: `` per [P0009R18](https://wg21.link/P0009R18) and subsequent wording changes that were applied to the C++23 Standard. Also, `format()` can format pointers per [P2510R3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf). -For a summary of C++ backend updates, see [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/). - -For a summary of new features in the Visual Studio 17.9 IDE, see [Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes). +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | +| Standard Library (STL): Merged C++26, C+23, C++20 defect reports, LWG issue resolutions, and fixed bugs | [STL Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | +| New features in the Visual Studio 17.9 IDE |[Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes-v17.9) | +| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | +| An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | +| Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | ## What's new for C++ in Visual Studio version 17.8 @@ -89,9 +92,14 @@ Briefly, a few of the new features are: - Build Insights is now integrated with Visual Studio 2022 and works with MSBuild and CMake projects using MSVC. You can now see additional information about the compilation of a function such as how long it took to compile and the number of ForceInlines. - Remote Linux unit test support now lets you run your CTest and GTest tests on your remote Linux machines from Visual Studio’s Test Explorer, just like your local tests. -For a comprehensive summary of new C++ features in Visual Studio 17.8, see [What’s New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8). - -For a summary of new features in the Visual Studio 17.8 IDE, see [Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes). +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | +| Standard Library (STL): Merged C++26, C+23, C++20 defect reports, LWG issue resolutions, and fixed bugs | [STL Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | +| New features in the Visual Studio 17.8 IDE |[Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes-v17.8) | +| C++ language conformance improvements in Visual Studio 2022 17.8 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_178) | +| An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | +| Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | ## What's new for C++ in Visual Studio version 17.7 From d6eb3645b9833fca5b1d8e9cadec5567f7b55896 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 6 Jun 2024 16:35:33 -0700 Subject: [PATCH 0236/1239] backfitting table of changes --- ...t-s-new-for-visual-cpp-in-visual-studio.md | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index daca258e92..43b74495cc 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -37,9 +37,9 @@ Briefly, a few of the new features are: | For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | -| Standard Library (STL): Merged C++26, C+23, C++20 defect reports, LWG issue resolutions, and fixed bugs | [STL Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | +| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | | New features in the Visual Studio 17.10 IDE |[Visual Studio 2022 version 17.10 Release Notes](/visualstudio/releases/2022/release-notes) | -| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_1710) | +| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_1710) | ## What's new for C++ in Visual Studio version 17.9 @@ -69,10 +69,9 @@ Briefly, a few of the new features are: | For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | -| Standard Library (STL): Merged C++26, C+23, C++20 defect reports, LWG issue resolutions, and fixed bugs | [STL Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | +| Standard Library (STL): Merged C++23 features, performance improvements, enhanced behavior, LWG issue resolutions, and fixed bugs | [STL Changelog 17.9](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | | New features in the Visual Studio 17.9 IDE |[Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes-v17.9) | -| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | -| An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | +| C++ language conformance improvements in Visual Studio 2022 17.9 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | | Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | ## What's new for C++ in Visual Studio version 17.8 @@ -95,18 +94,15 @@ Briefly, a few of the new features are: | For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | -| Standard Library (STL): Merged C++26, C+23, C++20 defect reports, LWG issue resolutions, and fixed bugs | [STL Changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | +| Standard Library (STL): Merged C++26, C++23 features, C++20 extensions, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.8](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | | New features in the Visual Studio 17.8 IDE |[Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes-v17.8) | | C++ language conformance improvements in Visual Studio 2022 17.8 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_178) | | An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | -| Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | ## What's new for C++ in Visual Studio version 17.7 *Released Aug 2023* -For a summary of new C++ features in Visual Studio 17.7, see [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/). - Briefly, *some* of the new features are: * Faster debugging sessions and faster project load times * Step-by-step visualization of macro expansion @@ -116,19 +112,27 @@ Briefly, *some* of the new features are: * Added [`/std:clatest`](../build/reference/std-specify-language-standard-version.md) for the C compiler. * Unreal Engine project improvements such as faster IntelliSense and syntax colorization, the ability to find all Unreal Engine Blueprint references, and more. -For a summary of new C++ features that are specific to game development, see [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/#:~:text=Unleashing%20the%20Power%20of%20Visual%20Studio%202022%20for,6%20Optimizing%20Build%20Times%20in%20Visual%20Studio%20) - -For a summary of new features in the Visual Studio 17.7 IDE, see [Visual Studio 2022 version 17.7 Release Notes](/visualstudio/releases/2022/release-notes). +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/) | +| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.7](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) | +| New features in the Visual Studio 17.7 IDE |[Visual Studio 2022 version 17.7 Release Notes](/visualstudio/releases/2022/release-notes-v17.7) | +| C++ language conformance improvements in Visual Studio 2022 17.7 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_177) | ## What's new for C++ in Visual Studio version 17.6 *Released May 2023* -For a summary of new C++ features in Visual Studio 17.6, see [What’s New for C++ Developers in Visual Studio 2022 17.6](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/). - Briefly, some of the new features are: CMake script debugging, built-in support for High Level Shading Language (HLSL), an Unreal Engine Log viewer, initial support for C++20 in C++/CLI projects, VCPKG is now added by default, and some C++23 standard library features for ranges. To see a full list of new features added to the standard library, see the [STL changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-176). -For a summary of new features in Visual Studio 17.6 IDE, see [Visual Studio 2022 version 17.6 Release Notes](/visualstudio/releases/2022/release-notes-v17.6). +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.6](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/) | +| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.6](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) | +| New features in the Visual Studio 17.6 IDE | [Visual Studio 2022 version 17.6 Release Notes](/visualstudio/releases/2022/release-notes-v17.6) | +| C++ language conformance improvements in Visual Studio 2022 17.6 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_176) | ## What's new for C++ in Visual Studio version 17.5 From 0dba830555cee28c0fdc602e4936439135cc3766 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 6 Jun 2024 17:30:20 -0700 Subject: [PATCH 0237/1239] backfitting table of changes. Went back to 17.0 --- ...t-s-new-for-visual-cpp-in-visual-studio.md | 97 +++++++++++-------- 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 43b74495cc..e29b75fd40 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -19,7 +19,7 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a *Released May 2024* -Briefly, a few of the new features are: +A partial list of new features: - **MSVC Toolset Update**: The MSVC toolset version is updated from 19.39 to 19.40. This may affect projects that have version assumptions. - **Standard Library Enhancements**: The standard library now includes formatting pointers from C++26 and performance improvements such as vectorized `std::min_element`. @@ -45,7 +45,7 @@ Briefly, a few of the new features are: *Released Feb 2024* -Briefly, a few of the new features are: +A partial list of new features: - `#include` diagnostics, which provides a detailed analysis of your `#include` directives. Activate this feature by right-clicking an `#include` and choosing **#include directives** > **Turn #include directive diagnostics on**. Above each `#include` is the number of times your code references that `#include` file. Click the **reference** link to navigate to where your code uses something from that header file. To view the build time of your `#include` directives, run Build Insights by navigating to **Build** > **Run Build Insights on Solution** > **Build**. :::image type="complex" source="media/include-diagnostics.png" alt-text="Screenshot of #include diagnostics"::: @@ -78,7 +78,7 @@ Briefly, a few of the new features are: *Released Nov 2023* -Briefly, a few of the new features are: +A partial list of new features: - C++ structured diagnostics in the Output window and a new problem details window that provides more information about the error. For more information, see [Structured SARIF Output](../build/reference/sarif-output.md) and [Problem Details Window](/visualstudio/ide/reference/problem-details-window). - A feature that lets you visualize the size and alignment of your classes, structs, unions, base types, or enums even before the code is compiled. Hover over the identifier and a Quick Info displays the size and alignment information. @@ -103,7 +103,8 @@ Briefly, a few of the new features are: *Released Aug 2023* -Briefly, *some* of the new features are: +A partial list of new features: + * Faster debugging sessions and faster project load times * Step-by-step visualization of macro expansion * One-click download for Windows Subsystem for Linux (WSL) @@ -124,7 +125,7 @@ Briefly, *some* of the new features are: *Released May 2023* -Briefly, some of the new features are: CMake script debugging, built-in support for High Level Shading Language (HLSL), an Unreal Engine Log viewer, initial support for C++20 in C++/CLI projects, VCPKG is now added by default, and some C++23 standard library features for ranges. To see a full list of new features added to the standard library, see the [STL changelog](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-176). +A partial list of new features includes: CMake script debugging, built-in support for High Level Shading Language (HLSL), an Unreal Engine Log viewer, initial support for C++20 in C++/CLI projects, VCPKG is now added by default, and some C++23 standard library features for ranges. | For more information about | See | |---|---| @@ -138,9 +139,7 @@ Briefly, some of the new features are: CMake script debugging, built-in support *Released Feb 2023* -For a summary of new C++ features in Visual Studio in version 17.5, see [What’s New for C++ Developers in Visual Studio 2022 17.5](https://devblogs.microsoft.com/cppblog/visual-studio-17-5-for-cpp-devs/). - -For a summary of new features and bug fixes in the Visual Studio IDE version 17.5, see [Visual Studio 2022 version 17.5 Release Notes](/visualstudio/releases/2022/release-notes-v17.5). +A partial list of new features includes: - `std::move`, `std::forward`, `std::move_if_noexcept`, and `std::forward_like` now don't produce function calls in generated code, even in debug mode. This change avoids named casts causing unnecessary overhead in debug builds. `/permissive-` (or an option that implies it, such as `/std:c++20` or `std:c++latest`) is required. @@ -170,13 +169,18 @@ For a summary of new features and bug fixes in the Visual Studio IDE version 17. - [P2322R6](https://wg21.link/P2322R6) `ranges::fold_left`, `ranges::fold_right`, and so on. - [P2321R2](https://wg21.link/P2321R2) `views::zip` (doesn't include `zip_transform`, `adjacent`, and `adjacent_transform`) +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.5](https://devblogs.microsoft.com/cppblog/visual-studio-17-5-for-cpp-devs/) | +| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.5](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) | +| New features in the Visual Studio 17.5 IDE | [Visual Studio 2022 version 17.5 Release Notes](/visualstudio/releases/2022/release-notes-v17.5) | + ## What's new for C++ in Visual Studio version 17.4 *Released Nov 2022* -For a summary of new features and bug fixes in Visual Studio in version 17.4, see [Visual Studio 2022 version 17.4 Release Notes](/visualstudio/releases/2022/release-notes-v17.4) and [What’s New for C++ Developers in Visual Studio 2022 17.4](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-4/). - -For a summary of C++ backend updates, see [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/). +A partial list of new features in 17.4: - Improved compiler error messages to provide more correct and useful information, especially for concepts. - Added experimental MSVC option [`/experimental:log`](../build/reference/experimental-log.md) to output [structured SARIF diagnostics](../build/reference/sarif-output.md) to the specified directory. @@ -214,69 +218,72 @@ For a summary of C++ backend updates, see [MSVC Backend updates since Visual Stu - Added support for CMake Presets version 4. For details of what is available, see the [CMake release notes](https://cmake.org/cmake/help/v3.23/release/3.23.html#id6). - Remote system connections using the [Connection Manager](../linux/connect-to-your-remote-linux-computer.md) now support SSH ProxyJump. ProxyJump is used to access an SSH host via another SSH host (for example, to access a host behind a firewall). +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.4](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-4/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.4](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) | +| New features in the Visual Studio 17.4 IDE | [Visual Studio 2022 version 17.4 Release Notes](/visualstudio/releases/2022/release-notes-v17.4) | +| C++ language conformance improvements in Visual Studio 2022 17.4 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_174) | + ## What's new for C++ in Visual Studio version 17.3 *Released Aug 2022* -For a summary of new features and bug fixes in Visual Studio in version 17.3, see [Visual Studio 2022 version 17.3 Release Notes](/visualstudio/releases/2022/release-notes-v17.3) and [C++ improvements](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-3-is-now-available/#c-improvements). +A partial list of new features in 17.3: - The Arm64EC toolchain is no longer marked as experimental and is ready for production use. - - The Visual Studio Terminal can now be used as an SSH client with your stored SSH connections. With the C++ for Linux Tools installed, open the Terminal tool window. The Terminal dropdown is populated with your stored connections. When you select a connection, a new Terminal window opens inside Visual Studio that shows a pseudo-terminal on your remote system. Control characters, colors, and cursor positional awareness are all supported. - - Visual Studio can now add Unreal Engine class templates for your UE projects. To try this feature, ensure **IDE support for Unreal Engine** is selected in the **Game development with C++** workload in the Visual Studio Installer. When you're working on a UE project, right-click in the project or a folder/filter and select **Add** > **UE Class**. - - **Go to Definition** now remembers the prior signature and navigates accordingly when a better match isn't available (for example, after you manually change the signature of one of the pair). The responsiveness of **Go To All** is improved. Previously, results appeared after you stopped typing. In the new experience, results show as you type. - - In contexts requiring `enum` type completion (for example, assignments to `enum` variables, case labels, returning `enum` type, and so on), the autocompletion list is now filtered to just the matching enumerators and related constructs. - - Added NuGet PackageReference support for C++/CLI MSBuild projects targeting .NET Core. This change was made to unblock mixed codebases from being able to adopt .NET Core. This support doesn't work for other C++ project types or any C++ project types targeting .NET Framework. There are no plans to extend PackageReference support to other C++ scenarios. The team is working on separate experiences involving vcpkg for non-MSBuild scenarios and to add greater functionality. - - Added a Serial Monitor window for embedded development, available through **Debug** > **Windows** > **Serial Monitor**. - - Improved C++ indexing by ~66% compared to 17.2. - - Updated the version of CMake shipped with Visual Studio to version 3.23. See the [CMake 3.23 release notes](https://cmake.org/cmake/help/v3.23/release/3.23.html) for details of what is available. - - Upgraded the versions of LLVM tools shipped with Visual Studio to v14. For details of what is available, see the [LLVM](https://releases.llvm.org/14.0.0/docs/ReleaseNotes.html) and [Clang](https://releases.llvm.org/14.0.0/tools/clang/docs/ReleaseNotes.html) release notes. - - Updated the side-by-side Dev 16.11 C++ Toolset to version 14.29.30145.00. The latest version of the Dev 16.11 C++ Toolset contains important bug fixes, including fixing all remaining C++20 defect reports. For more information about bug fixes, including C++20 defect reports in Dev 16.11, see [Visual Studio 2019 version 16.11.14 release notes](/visualstudio/releases/2019/release-notes#16.11.14). - - Made various improvements to the in-editor experience of C++ modules. We're continuously working on improving the quality of the experience but encourage you to try them in 17.3. Report remaining issues through [Developer Community](https://aka.ms/vsfeedback/browsecpp). +| For more information about | See | +|---|---| +| What's new for C++ developers | [C++ improvements in 17.3](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-3-is-now-available/#c-improvements) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.3](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) | +| New features in the Visual Studio 17.3 IDE | [Visual Studio 2022 version 17.3 Release Notes](/visualstudio/releases/2022/release-notes-v17.3) | +| C++ language conformance improvements in Visual Studio 2022 17.3 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_173) | + ## What's new for C++ in Visual Studio version 17.2 *Released May 2022* -For a summary of new features and bug fixes in Visual Studio in version 17.2, see [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.2). +A partial list of new features in 17.3: - Added compiler support for C++23 feature [deducing `this`](https://wg21.link/p0847), available under the **`/std:c++latest`** option. - - Added IntelliSense support for C++23 features [deducing `this`](https://wg21.link/p0847) and [`if consteval`](http://wg21.link/p1938). - - Added inline parameter name and type hint support, toggled by pressing **Alt+F1** or double-tapping **Ctrl**. This behavior can be customized under **Tools > Options > Text Editors > C/C++ > IntelliSense**. - - Added experimental support for C++20 modules in CMake projects. This support is currently only available with the Visual Studio (MSBuild) generator. - - In 17.1, we introduced peripheral register and RTOS views for embedded developers. We continue to improve the capabilities of those views with usability improvements in 17.2: - The RTOS tool window is now hidden by default. It prevents showing a tool window with error messages that aren't relevant when you're not using an RTOS. - When you double-click an RTOS object in the tool window, it adds a watch for the object. - When you select the start and end values for the stack pointer in the RTOS tool window, it opens in the memory window. - Added thread awareness for device targets to the call stack window. - Users can now select a pin icon next to peripherals, registers, or fields to pin them the top of the Peripheral View. - - Added implementations of the remaining C++20 defect reports (also known as *backports*). All C++20 features are now available under the **`/std:c++20`** option. For more information about the implemented backports, see the [C++20 Defect Reports project](https://github.com/microsoft/STL/projects/9) in the Microsoft/STL GitHub repository and the [MSVC's STL Completes `/std:c++20`](https://devblogs.microsoft.com/cppblog/msvcs-stl-completes-stdc20/) blog post. - - We added various C++23 Library features, available under the **`/std:c++latest`** option. For more information about the new features, see the [STL Repo changelog](https://github.com/microsoft/STL/wiki/Changelog). - - Improved performance of the initial C++ indexing by up to 20%, depending on the depth of the include graph. +| For more information about | See | +|---|---| +| What's new for C++ developers | [Visual Studio 2022 17.2 is now available!]((https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-2-is-now-available/) | +| Standard Library (STL): Merged C++20 defect reports, C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | +| New features in the Visual Studio 17.2 IDE | [Visual Studio 2022 version 17.2 Release Notes](/visualstudio/releases/2022/release-notes-v17.2) | +| C++ language conformance improvements in Visual Studio 2022 17.2 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_172) | + ## What's new for C++ in Visual Studio version 17.1 *Released Feb 2022* -For a summary of new features and bug fixes in Visual Studio in version 17.1, see [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.1). +A partial list of new features in 17.1: - A new **Configure Preset** template is added to configure and build CMake projects on a remote macOS system with *`CMakePresets.json`*. You can also launch CMake targets on a remote macOS system, and then debug remotely in the Visual Studio debugger backed by GDB or LLDB. - You can now debug core dumps on a remote macOS system from Visual Studio with LLDB or GDB. @@ -285,16 +292,28 @@ For a summary of new features and bug fixes in Visual Studio in version 17.1, se - New views that enable you to inspect and interact with peripheral registers on microcontrollers and real time operating systems (RTOS) objects, available through **Debug** > **Windows** > **Embedded Registers** - Added a new thread view for RTOS projects, available through **Debug** > **Windows** > **RTOS Objects**. For more information, see [Embedded Software Development in Visual Studio](https://devblogs.microsoft.com/cppblog/visual-studio-embedded-development/). +| For more information about | See | +|---|---| +| What's new for C++ developers | [Visual Studio 2022 17.1 is now available!](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-1-is-now-available/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | +| New features in the Visual Studio 17.1 IDE | [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.1) | +| C++ language conformance improvements in Visual Studio 2022 17.1 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_171) | + ## What's new for C++ in Visual Studio version 17.0 *Released Nov 2021* -For a summary of new features and bug fixes in Visual Studio, see [Visual Studio 2022 version 17.0 Release Notes](/visualstudio/releases/2022/release-notes-v17.0). +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | +| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | +| New features in the Visual Studio 17.0 IDE | [Visual Studio 2022 version 17.0 Release Notes](/visualstudio/releases/2022/release-notes-v17.0) | +| C++ language conformance improvements in Visual Studio 2022 17.0 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_170) | + +An overview of some of the new features in Visual Studio 2022 version 17.0: - The Visual Studio IDE, *`devenv.exe`*, is now a native 64-bit application. - - The MSVC toolset now defaults to SHA-256 source hashing in debug records. Previously, the toolset used MD5 for source hashing by default. - - The v143 build tools are now available through the Visual Studio installer and in the [standalone build tools](https://aka.ms/vs/17/pre/vs_BuildTools.exe). ### Hot Reload for native C++ @@ -350,7 +369,6 @@ Select Standard Library (STL) improvements are highlighted here. For a comprehen - LLVM tools shipped with Visual Studio are upgraded to LLVM 12. For more information, see the [LLVM release notes](https://releases.llvm.org/12.0.0/docs/ReleaseNotes.html). - Clang-cl support was updated to LLVM 12. - - You can now debug processes running on a remote system from Visual Studio by using LLDB. ### C++ AMP deprecated @@ -360,27 +378,20 @@ Select Standard Library (STL) improvements are highlighted here. For a comprehen ### IntelliSense improvements - We made improvements in C++ IntelliSense when providing navigation and syntax highlighting for types from imported Modules and Header Units. IntelliSense is an active area of investment for us. Help us improve: Share your feedback on Developer Community by using **Help** > **Send Feedback**. - - We improved C++ IntelliSense performance by optimizing cached header usage and symbol database access, providing improved load times to get into your code. - - The IntelliSense Code Linter for C++ is now on by default, providing instant as-you-type suggestions and fix suggestions for common code defects. - - C++ IntelliSense for CMake projects now works when using a preset with a display name. ### C++ Workload updates - Updated to NDK r21 LTS in the **C++ Mobile Development** workload. - - The **Game development with C++** workload now installs the latest Unreal Engine with support for Visual Studio 2022. ### Code analysis improvements - Code analysis now enforces that return values of functions annotated with `_Check_return_` or `_Must_inspect_result_` must be checked. - - Null pointer dereference detection is improved in our code analysis tooling. - - Added support for `gsl::not_null` to code analysis. - - Support for Libfuzzer under the **`/fsanitize=fuzzer`** compiler option. ## Release notes for older versions From 2e4162342a7462df63bb3e3f73441a5ce940c8c1 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 09:57:29 -0700 Subject: [PATCH 0238/1239] cleanup --- docs/overview/cpp-conformance-improvements.md | 11 +- ...t-s-new-for-visual-cpp-in-visual-studio.md | 158 +++++++++--------- 2 files changed, 85 insertions(+), 84 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index e2c143fb98..d3b8b4c9a5 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -4,7 +4,6 @@ description: "Microsoft C++ in Visual Studio is improving standards conformance ms.date: 06/06/2024 ms.service: "visual-cpp" ms.subservice: "cpp-lang" -ai-usage: ai-assisted --- # C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 @@ -20,11 +19,11 @@ For changes in older versions, see [Visual C++ What's New 2003 through 2015](../ Visual Studio 2022 version 17.10 has the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. -For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). +For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes, and performance improvements, see [STL Changelog VS 2022 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710). ### Conversion operator specialization with explicitly specified return type -The compiler used to specialize conversion operators incorrectly in some cases which could lead to a mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. +The compiler used to specialize conversion operators incorrectly in some cases, which could lead to a mismatched return type. These invalid specializations no longer happen. This is a source code breaking change. ```cpp // Example 1 @@ -88,7 +87,7 @@ After: Applies to the C language (C17 and later). Also added to Microsoft Visual Studio 17.9 -In versions of Visual C++ before Visual Studio 2022 version 17.9, if the `_Alignas` specifier appeared adjacent to a structured type in a declaration, it wasn't applied correctly according to the ISO-C Standard. +In versions of Visual C++ before Visual Studio 2022 version 17.9, if the `_Alignas` specifier appeared next to a structured type in a declaration, it wasn't applied correctly according to the ISO-C Standard. ```cpp // compile with /std:c17 @@ -109,7 +108,7 @@ The `_Alignas` directive applies only to the member variable `member1`. It must This is a binary breaking change, so a warning is now emitted when this change takes effect. Warning C5274 is now emitted at warning level 1 for the previous example: ` warning C5274: behavior change: _Alignas no longer applies to the type 'Inner' (only applies to declared data objects)`. -Also, in previous versions of Visual Studio, when the `_Alignas` specifier appeared adjacent to an anonymous type declaration, it was ignored. +Also, in previous versions of Visual Studio, when the `_Alignas` specifier appeared next to an anonymous type declaration, it was ignored. ```cpp // compile with /std:c17 @@ -591,7 +590,7 @@ This rounded DOWN. The C standard requires that a conforming C implementation defines `__STDC__` as `1`. Due to the behavior of the UCRT, which doesn't expose POSIX functions when `__STDC__` is `1`, it isn't possible to define this macro for C by default without introducing breaking changes to the stable language versions. Visual Studio 2022 version 17.2 and later add a conformance option [`/Zc:__STDC__`](../build/reference/zc-stdc.md) that defines this macro. There's no negative version of the option. Currently, we plan to use this option by default for future versions of C. -This change is a source breaking change. It applies when C11 or C17 mode is enabled, **`/std:c11`** or **`/std:c17`**, together with **`/Zc:__STDC__`**. +This change is a source breaking change. It applies when C11 or C17 mode is enabled (**`/std:c11`** or **`/std:c17`**) and **`/Zc:__STDC__`** is specified. #### Example diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index e29b75fd40..b9b6c28af4 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -5,6 +5,7 @@ ms.date: 06/6/2024 ms.service: "visual-cpp" ms.subservice: "ide" ms.custom: intro-whats-new +ai-usage: ai-assisted --- # What's new for C++ in Visual Studio 2022 @@ -19,32 +20,40 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a *Released May 2024* + For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | +| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | +| New features in the Visual Studio 17.10 IDE |[Visual Studio 2022 version 17.10 Release Notes](/visualstudio/releases/2022/release-notes) | +| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_1710) | + A partial list of new features: -- **MSVC Toolset Update**: The MSVC toolset version is updated from 19.39 to 19.40. This may affect projects that have version assumptions. +- **MSVC Toolset Update**: The MSVC toolset version is updated from 19.39 to 19.40. This may affect projects that have version assumptions. For more information about some ways in which this will affect projects that assume that MSVC versions are all 19.3X for Visual Studio 2022 releases, see [MSVC Toolset Minor Version Number 14.40 in VS 2022 v17.10](https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/). - **Standard Library Enhancements**: The standard library now includes formatting pointers from C++26 and performance improvements such as vectorized `std::min_element`. -- **Build Insights**: Now provides template instantiation information. -- **Unreal Engine Plugin**: There is a new opt-in feature for the Unreal Engine Plugin to run in the background, reducing startup costs. +- **Build Insights**: Now provides template instantiation information. See [Templates View for Build Insights in Visual Studio](https://devblogs.microsoft.com/cppblog/templates-view-for-build-insights-in-visual-studio-2/) or the [Pure Virtual C++ - Templates view for Build Insights in Visual Studio](https://youtu.be/68pOEQ5YA5s) recording. +- **Unreal Engine Plugin**: There's a new opt-in feature for the Unreal Engine Plugin to run in the background, reducing startup costs. - **CMake Targets**: You can now pin targets in the CMake Targets View. -- **Connection Manager UX**: The user experience provides a more seamless experience when connecting to remote systems. +- **Connection Manager UX**: The user experience provides a more seamless experience when connecting to remote systems. For more information, see [Usability Improvements in the Visual Studio Connection Manager](https://devblogs.microsoft.com/cppblog/usability-improvements-in-the-visual-studio-connection-manager/). - **Pull Request Comments**: You can now view GitHub and Azure DevOps comments directly in your working file. - **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. - **Image Preview**: You can hover over an image path to see a preview with size details. - **Breakpoint/Tracepoint Creation**: You can now create breakpoints and tracepoints directly from expressions in the source code. - **Attach to Process Dialog**: The functionality provided by the Attach to Process dialog is improved and is more user-friendly. -- **GitHub Copilot Integration**: There is a unified experience with Copilot Chat in Visual Studio. - -| For more information about | See | -|---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | -| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | -| New features in the Visual Studio 17.10 IDE |[Visual Studio 2022 version 17.10 Release Notes](/visualstudio/releases/2022/release-notes) | -| C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_1710) | +- **GitHub Copilot Integration**: There's a unified experience with Copilot Chat in Visual Studio. ## What's new for C++ in Visual Studio version 17.9 *Released Feb 2024* +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | +| Standard Library (STL): Merged C++23 features, performance improvements, enhanced behavior, LWG issue resolutions, and fixed bugs | [STL Changelog 17.9](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | +| New features in the Visual Studio 17.9 IDE |[Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes-v17.9) | +| C++ language conformance improvements in Visual Studio 2022 17.9 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | +| Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | + A partial list of new features: - `#include` diagnostics, which provides a detailed analysis of your `#include` directives. Activate this feature by right-clicking an `#include` and choosing **#include directives** > **Turn #include directive diagnostics on**. Above each `#include` is the number of times your code references that `#include` file. Click the **reference** link to navigate to where your code uses something from that header file. To view the build time of your `#include` directives, run Build Insights by navigating to **Build** > **Run Build Insights on Solution** > **Build**. @@ -66,18 +75,18 @@ A partial list of new features: `` per [P0009R18](https://wg21.link/P0009R18) and subsequent wording changes that were applied to the C++23 Standard. Also, `format()` can format pointers per [P2510R3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf). -| For more information about | See | -|---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | -| Standard Library (STL): Merged C++23 features, performance improvements, enhanced behavior, LWG issue resolutions, and fixed bugs | [STL Changelog 17.9](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | -| New features in the Visual Studio 17.9 IDE |[Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes-v17.9) | -| C++ language conformance improvements in Visual Studio 2022 17.9 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | -| Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | - ## What's new for C++ in Visual Studio version 17.8 *Released Nov 2023* +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | +| Standard Library (STL): Merged C++26, C++23 features, C++20 extensions, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.8](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | +| New features in the Visual Studio 17.8 IDE |[Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes-v17.8) | +| C++ language conformance improvements in Visual Studio 2022 17.8 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_178) | +| An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | + A partial list of new features: - C++ structured diagnostics in the Output window and a new problem details window that provides more information about the error. For more information, see [Structured SARIF Output](../build/reference/sarif-output.md) and [Problem Details Window](/visualstudio/ide/reference/problem-details-window). @@ -91,18 +100,18 @@ A partial list of new features: - Build Insights is now integrated with Visual Studio 2022 and works with MSBuild and CMake projects using MSVC. You can now see additional information about the compilation of a function such as how long it took to compile and the number of ForceInlines. - Remote Linux unit test support now lets you run your CTest and GTest tests on your remote Linux machines from Visual Studio’s Test Explorer, just like your local tests. -| For more information about | See | -|---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | -| Standard Library (STL): Merged C++26, C++23 features, C++20 extensions, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.8](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | -| New features in the Visual Studio 17.8 IDE |[Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes-v17.8) | -| C++ language conformance improvements in Visual Studio 2022 17.8 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_178) | -| An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | - ## What's new for C++ in Visual Studio version 17.7 *Released Aug 2023* +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/) | +| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.7](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) | +| New features in the Visual Studio 17.7 IDE |[Visual Studio 2022 version 17.7 Release Notes](/visualstudio/releases/2022/release-notes-v17.7) | +| C++ language conformance improvements in Visual Studio 2022 17.7 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_177) | + A partial list of new features: * Faster debugging sessions and faster project load times @@ -113,36 +122,37 @@ A partial list of new features: * Added [`/std:clatest`](../build/reference/std-specify-language-standard-version.md) for the C compiler. * Unreal Engine project improvements such as faster IntelliSense and syntax colorization, the ability to find all Unreal Engine Blueprint references, and more. -| For more information about | See | -|---|---| -| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/) | -| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.7](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) | -| New features in the Visual Studio 17.7 IDE |[Visual Studio 2022 version 17.7 Release Notes](/visualstudio/releases/2022/release-notes-v17.7) | -| C++ language conformance improvements in Visual Studio 2022 17.7 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_177) | - ## What's new for C++ in Visual Studio version 17.6 *Released May 2023* -A partial list of new features includes: CMake script debugging, built-in support for High Level Shading Language (HLSL), an Unreal Engine Log viewer, initial support for C++20 in C++/CLI projects, VCPKG is now added by default, and some C++23 standard library features for ranges. - | For more information about | See | |---|---| | What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.6](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/) | -| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | | Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.6](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) | | New features in the Visual Studio 17.6 IDE | [Visual Studio 2022 version 17.6 Release Notes](/visualstudio/releases/2022/release-notes-v17.6) | | C++ language conformance improvements in Visual Studio 2022 17.6 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_176) | +A partial list of new features includes: +- CMake script debugging +- Built-in support for High Level Shading Language (HLSL) +- Unreal Engine Log viewer +- VCPKG is now added by default +- Initial support for C++20 in C++/CLI projects and some C++23 standard library features for ranges. + ## What's new for C++ in Visual Studio version 17.5 *Released Feb 2023* +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.5](https://devblogs.microsoft.com/cppblog/visual-studio-17-5-for-cpp-devs/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.5](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) | +| New features in the Visual Studio 17.5 IDE | [Visual Studio 2022 version 17.5 Release Notes](/visualstudio/releases/2022/release-notes-v17.5) | + A partial list of new features includes: - `std::move`, `std::forward`, `std::move_if_noexcept`, and `std::forward_like` now don't produce function calls in generated code, even in debug mode. This change avoids named casts causing unnecessary overhead in debug builds. `/permissive-` (or an option that implies it, such as `/std:c++20` or `std:c++latest`) is required. - - Added [`[[msvc::intrinsic]]`](../cpp/attributes.md#msvcintrinsic). You can apply this attribute to nonrecursive functions consisting of a single cast, which take only one parameter. - Added support for Linux Console in the Integrated Terminal, which allows for terminal I/O. - Added initial experimental support for C11 atomic primitives (``). You can enable this experimental feature with the `/experimental:c11atomics` option in `/std:c11` mode or later. @@ -169,17 +179,17 @@ A partial list of new features includes: - [P2322R6](https://wg21.link/P2322R6) `ranges::fold_left`, `ranges::fold_right`, and so on. - [P2321R2](https://wg21.link/P2321R2) `views::zip` (doesn't include `zip_transform`, `adjacent`, and `adjacent_transform`) -| For more information about | See | -|---|---| -| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.5](https://devblogs.microsoft.com/cppblog/visual-studio-17-5-for-cpp-devs/) | -| New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.5](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) | -| New features in the Visual Studio 17.5 IDE | [Visual Studio 2022 version 17.5 Release Notes](/visualstudio/releases/2022/release-notes-v17.5) | - ## What's new for C++ in Visual Studio version 17.4 *Released Nov 2022* +| For more information about | See | +|---|---| +| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.4](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-4/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.4](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) | +| New features in the Visual Studio 17.4 IDE | [Visual Studio 2022 version 17.4 Release Notes](/visualstudio/releases/2022/release-notes-v17.4) | +| C++ language conformance improvements in Visual Studio 2022 17.4 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_174) | + A partial list of new features in 17.4: - Improved compiler error messages to provide more correct and useful information, especially for concepts. @@ -218,17 +228,17 @@ A partial list of new features in 17.4: - Added support for CMake Presets version 4. For details of what is available, see the [CMake release notes](https://cmake.org/cmake/help/v3.23/release/3.23.html#id6). - Remote system connections using the [Connection Manager](../linux/connect-to-your-remote-linux-computer.md) now support SSH ProxyJump. ProxyJump is used to access an SSH host via another SSH host (for example, to access a host behind a firewall). -| For more information about | See | -|---|---| -| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.4](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-4/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.4](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) | -| New features in the Visual Studio 17.4 IDE | [Visual Studio 2022 version 17.4 Release Notes](/visualstudio/releases/2022/release-notes-v17.4) | -| C++ language conformance improvements in Visual Studio 2022 17.4 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_174) | - ## What's new for C++ in Visual Studio version 17.3 *Released Aug 2022* +| For more information about | See | +|---|---| +| What's new for C++ developers | [C++ improvements in 17.3](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-3-is-now-available/#c-improvements) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.3](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) | +| New features in the Visual Studio 17.3 IDE | [Visual Studio 2022 version 17.3 Release Notes](/visualstudio/releases/2022/release-notes-v17.3) | +| C++ language conformance improvements in Visual Studio 2022 17.3 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_173) | + A partial list of new features in 17.3: - The Arm64EC toolchain is no longer marked as experimental and is ready for production use. @@ -245,18 +255,18 @@ The responsiveness of **Go To All** is improved. Previously, results appeared af - Updated the side-by-side Dev 16.11 C++ Toolset to version 14.29.30145.00. The latest version of the Dev 16.11 C++ Toolset contains important bug fixes, including fixing all remaining C++20 defect reports. For more information about bug fixes, including C++20 defect reports in Dev 16.11, see [Visual Studio 2019 version 16.11.14 release notes](/visualstudio/releases/2019/release-notes#16.11.14). - Made various improvements to the in-editor experience of C++ modules. We're continuously working on improving the quality of the experience but encourage you to try them in 17.3. Report remaining issues through [Developer Community](https://aka.ms/vsfeedback/browsecpp). -| For more information about | See | -|---|---| -| What's new for C++ developers | [C++ improvements in 17.3](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-3-is-now-available/#c-improvements) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.3](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) | -| New features in the Visual Studio 17.3 IDE | [Visual Studio 2022 version 17.3 Release Notes](/visualstudio/releases/2022/release-notes-v17.3) | -| C++ language conformance improvements in Visual Studio 2022 17.3 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_173) | - ## What's new for C++ in Visual Studio version 17.2 *Released May 2022* -A partial list of new features in 17.3: +| For more information about | See | +|---|---| +| What's new for C++ developers | [Visual Studio 2022 17.2 is now available](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-2-is-now-available/) | +| Standard Library (STL): Merged C++20 defect reports, C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | +| New features in the Visual Studio 17.2 IDE | [Visual Studio 2022 version 17.2 Release Notes](/visualstudio/releases/2022/release-notes-v17.2) | +| C++ language conformance improvements in Visual Studio 2022 17.2 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_172) | + +A partial list of new features in 17.2: - Added compiler support for C++23 feature [deducing `this`](https://wg21.link/p0847), available under the **`/std:c++latest`** option. - Added IntelliSense support for C++23 features [deducing `this`](https://wg21.link/p0847) and [`if consteval`](http://wg21.link/p1938). @@ -272,17 +282,17 @@ A partial list of new features in 17.3: - We added various C++23 Library features, available under the **`/std:c++latest`** option. For more information about the new features, see the [STL Repo changelog](https://github.com/microsoft/STL/wiki/Changelog). - Improved performance of the initial C++ indexing by up to 20%, depending on the depth of the include graph. -| For more information about | See | -|---|---| -| What's new for C++ developers | [Visual Studio 2022 17.2 is now available!]((https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-2-is-now-available/) | -| Standard Library (STL): Merged C++20 defect reports, C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | -| New features in the Visual Studio 17.2 IDE | [Visual Studio 2022 version 17.2 Release Notes](/visualstudio/releases/2022/release-notes-v17.2) | -| C++ language conformance improvements in Visual Studio 2022 17.2 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_172) | - ## What's new for C++ in Visual Studio version 17.1 *Released Feb 2022* +| For more information about | See | +|---|---| +| What's new for C++ developers | [Visual Studio 2022 17.1 is now available!](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-1-is-now-available/) | +| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.1](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-171) | +| New features in the Visual Studio 17.1 IDE | [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.1) | +| C++ language conformance improvements in Visual Studio 2022 17.1 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_171) | + A partial list of new features in 17.1: - A new **Configure Preset** template is added to configure and build CMake projects on a remote macOS system with *`CMakePresets.json`*. You can also launch CMake targets on a remote macOS system, and then debug remotely in the Visual Studio debugger backed by GDB or LLDB. @@ -292,22 +302,14 @@ A partial list of new features in 17.1: - New views that enable you to inspect and interact with peripheral registers on microcontrollers and real time operating systems (RTOS) objects, available through **Debug** > **Windows** > **Embedded Registers** - Added a new thread view for RTOS projects, available through **Debug** > **Windows** > **RTOS Objects**. For more information, see [Embedded Software Development in Visual Studio](https://devblogs.microsoft.com/cppblog/visual-studio-embedded-development/). -| For more information about | See | -|---|---| -| What's new for C++ developers | [Visual Studio 2022 17.1 is now available!](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-1-is-now-available/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | -| New features in the Visual Studio 17.1 IDE | [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.1) | -| C++ language conformance improvements in Visual Studio 2022 17.1 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_171) | - ## What's new for C++ in Visual Studio version 17.0 *Released Nov 2021* | For more information about | See | |---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | -| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | | New features in the Visual Studio 17.0 IDE | [Visual Studio 2022 version 17.0 Release Notes](/visualstudio/releases/2022/release-notes-v17.0) | +| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.0](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | | C++ language conformance improvements in Visual Studio 2022 17.0 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_170) | An overview of some of the new features in Visual Studio 2022 version 17.0: From ea8a23d6a409f0791773a797c69cc68090df727f Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 10:31:40 -0700 Subject: [PATCH 0239/1239] update new features --- .../media/github-copilot-install-option.png | Bin 0 -> 69625 bytes docs/overview/media/hover-preview.png | Bin 0 -> 42530 bytes .../media/unified-github-copilot-button.png | Bin 0 -> 37066 bytes ...t-s-new-for-visual-cpp-in-visual-studio.md | 31 ++++++++++++------ 4 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 docs/overview/media/github-copilot-install-option.png create mode 100644 docs/overview/media/hover-preview.png create mode 100644 docs/overview/media/unified-github-copilot-button.png diff --git a/docs/overview/media/github-copilot-install-option.png b/docs/overview/media/github-copilot-install-option.png new file mode 100644 index 0000000000000000000000000000000000000000..7210c4ce6bed5551d469f56c893a55387317e6ea GIT binary patch literal 69625 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 D`NQ^7 literal 0 HcmV?d00001 diff --git a/docs/overview/media/hover-preview.png b/docs/overview/media/hover-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..a293f13ab40f16caf6d3f8aa87e9db687e8a5a64 GIT binary patch literal 42530 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 literal 0 HcmV?d00001 diff --git a/docs/overview/media/unified-github-copilot-button.png b/docs/overview/media/unified-github-copilot-button.png new file mode 100644 index 0000000000000000000000000000000000000000..6ede27786fc0bf059fe613b5ff3890d4f30b56de GIT binary patch literal 37066 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 Ef(!p^TmS$7 literal 0 HcmV?d00001 diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index b9b6c28af4..fb75c0a353 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -20,7 +20,7 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a *Released May 2024* - For more information about | See | +| For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | | Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | @@ -30,17 +30,28 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a A partial list of new features: - **MSVC Toolset Update**: The MSVC toolset version is updated from 19.39 to 19.40. This may affect projects that have version assumptions. For more information about some ways in which this will affect projects that assume that MSVC versions are all 19.3X for Visual Studio 2022 releases, see [MSVC Toolset Minor Version Number 14.40 in VS 2022 v17.10](https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/). -- **Standard Library Enhancements**: The standard library now includes formatting pointers from C++26 and performance improvements such as vectorized `std::min_element`. +- **Standard Library Enhancements**: The standard library added support for [P2510R3 Formatting Pointers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf) which brings the set of format specifiers for pointers when using `std::format` more in line with those that already exist for integers. Improved the vectorized implementations of `std::min_element`, `std::ranges::min`, and friends. - **Build Insights**: Now provides template instantiation information. See [Templates View for Build Insights in Visual Studio](https://devblogs.microsoft.com/cppblog/templates-view-for-build-insights-in-visual-studio-2/) or the [Pure Virtual C++ - Templates view for Build Insights in Visual Studio](https://youtu.be/68pOEQ5YA5s) recording. -- **Unreal Engine Plugin**: There's a new opt-in feature for the Unreal Engine Plugin to run in the background, reducing startup costs. -- **CMake Targets**: You can now pin targets in the CMake Targets View. +- **Unreal Engine Plugin**: There's a new opt-in feature for the Unreal Engine Plugin to run in the background, reducing startup costs. This is an opt-in feature that is activated via **Tools** > **Options** > **Unreal Engine**. +- **New features for Linux**: See [New Linux Development Features in Visual Studio](https://youtu.be/jZTMRvm8AwY). +- **CMake Targets**: You can now pin targets in the **CMake Targets View**. - **Connection Manager UX**: The user experience provides a more seamless experience when connecting to remote systems. For more information, see [Usability Improvements in the Visual Studio Connection Manager](https://devblogs.microsoft.com/cppblog/usability-improvements-in-the-visual-studio-connection-manager/). -- **Pull Request Comments**: You can now view GitHub and Azure DevOps comments directly in your working file. -- **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. -- **Image Preview**: You can hover over an image path to see a preview with size details. -- **Breakpoint/Tracepoint Creation**: You can now create breakpoints and tracepoints directly from expressions in the source code. -- **Attach to Process Dialog**: The functionality provided by the Attach to Process dialog is improved and is more user-friendly. -- **GitHub Copilot Integration**: There's a unified experience with Copilot Chat in Visual Studio. +- **Pull request comments**: You can now view GitHub and Azure DevOps comments directly in your working file. Enable the feature flag, **Pull Request Comments** in **Options** > **Environment** > **Preview Features** and checkout the pull request branch to get started. +- **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. Requires an active GitHub Copilot subscription. Try it out by clicking the **Add AI Generated Pull Request Description** sparkle pen icon within the **Create a Pull Request** window. +- **Image Preview**: Hover over an image path to see a preview with size details. The size is capped to 500px wide and high. + :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview"::: + The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it is 251 x 500 pixels and 13.65 KB in size. + :::image-end::: +- **Breakpoint/Tracepoint Creation**: You can now create conditional breakpoints or tracepoints directly from expressions in the source code from the right-click menu. This works on property or field names and values from autos, locals, watch windows, or DataTips. +- **Attach to Process Dialog**: The functionality provided by the Attach to Process dialog is more user-friendly. You can now easily switch between tree and list views, organize processes better with collapsible sections, and select code types with a simplified combobox. Also, the "Select/Track Window" feature is now easier to use, allowing two-way tracking: selecting a process highlights its window, and clicking on a window selects its process. +- **GitHub Copilot Integration**: We have unified the GitHub Copilot and Copilot Chat extensions and now ship them directly in Visual Studio. To install it, install the **GitHub Copilot** component in the **Visual Studio Installer**: + :::image type="complex" source="media/github-copilot-install-option.png" alt-text="Screenshot of the Visual Studio Installer GitHub Copilot installation option."::: + The Visual Studio installer is open to the Workloads tab. In the installation details pane, GitHub Copilot is shown as selected. + :::image-end::: + The GitHub Copilot interface in the top-right corner of Visual Studio. It has a search bar, a button to open the Copilot Chat, and a button to open the Copilot settings. To use it, you need an active GitHub Copilot subscription. The interface is in the top-right corner of Visual Studio: + :::image type="complex" source="media/unified-github-copilot-button" alt-text="Screenshot of GitHub Copilot button."::: + The GitHub Copilot button is shown in the top-right corner of Visual Studio. It has options to open a chat window, GitHub Copilot settings, learn more, and manage copilot subscription. + :::image-end::: ## What's new for C++ in Visual Studio version 17.9 From 9f7fd7df6d074568b060b9f1a67dab2c228a2907 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 11:00:41 -0700 Subject: [PATCH 0240/1239] update graphics --- .../github-copilot-install-option-expanded.png | Bin 0 -> 6666 bytes ...what-s-new-for-visual-cpp-in-visual-studio.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/overview/media/github-copilot-install-option-expanded.png diff --git a/docs/overview/media/github-copilot-install-option-expanded.png b/docs/overview/media/github-copilot-install-option-expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0c210239868e1f8e44421d83677a474610b70b GIT binary patch literal 6666 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 literal 0 HcmV?d00001 diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index fb75c0a353..f951ebafa0 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -39,7 +39,7 @@ A partial list of new features: - **Pull request comments**: You can now view GitHub and Azure DevOps comments directly in your working file. Enable the feature flag, **Pull Request Comments** in **Options** > **Environment** > **Preview Features** and checkout the pull request branch to get started. - **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. Requires an active GitHub Copilot subscription. Try it out by clicking the **Add AI Generated Pull Request Description** sparkle pen icon within the **Create a Pull Request** window. - **Image Preview**: Hover over an image path to see a preview with size details. The size is capped to 500px wide and high. - :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview"::: + :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview" lightbox="media/github-copilot-install-option-expanded.png"::: The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it is 251 x 500 pixels and 13.65 KB in size. :::image-end::: - **Breakpoint/Tracepoint Creation**: You can now create conditional breakpoints or tracepoints directly from expressions in the source code from the right-click menu. This works on property or field names and values from autos, locals, watch windows, or DataTips. @@ -49,7 +49,7 @@ A partial list of new features: The Visual Studio installer is open to the Workloads tab. In the installation details pane, GitHub Copilot is shown as selected. :::image-end::: The GitHub Copilot interface in the top-right corner of Visual Studio. It has a search bar, a button to open the Copilot Chat, and a button to open the Copilot settings. To use it, you need an active GitHub Copilot subscription. The interface is in the top-right corner of Visual Studio: - :::image type="complex" source="media/unified-github-copilot-button" alt-text="Screenshot of GitHub Copilot button."::: + :::image type="complex" source="media/unified-github-copilot-button.png" alt-text="Screenshot of GitHub Copilot button."::: The GitHub Copilot button is shown in the top-right corner of Visual Studio. It has options to open a chat window, GitHub Copilot settings, learn more, and manage copilot subscription. :::image-end::: From 9feaaf06796b40ddcf9f90fe797e7d4f81641fbf Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 11:13:12 -0700 Subject: [PATCH 0241/1239] fix lightbox --- .../what-s-new-for-visual-cpp-in-visual-studio.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index f951ebafa0..89ad2f5684 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -39,13 +39,13 @@ A partial list of new features: - **Pull request comments**: You can now view GitHub and Azure DevOps comments directly in your working file. Enable the feature flag, **Pull Request Comments** in **Options** > **Environment** > **Preview Features** and checkout the pull request branch to get started. - **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. Requires an active GitHub Copilot subscription. Try it out by clicking the **Add AI Generated Pull Request Description** sparkle pen icon within the **Create a Pull Request** window. - **Image Preview**: Hover over an image path to see a preview with size details. The size is capped to 500px wide and high. - :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview" lightbox="media/github-copilot-install-option-expanded.png"::: - The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it is 251 x 500 pixels and 13.65 KB in size. - :::image-end::: + :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview"::: + The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it is 251 x 500 pixels and 13.65 KB in size. + :::image-end::: - **Breakpoint/Tracepoint Creation**: You can now create conditional breakpoints or tracepoints directly from expressions in the source code from the right-click menu. This works on property or field names and values from autos, locals, watch windows, or DataTips. - **Attach to Process Dialog**: The functionality provided by the Attach to Process dialog is more user-friendly. You can now easily switch between tree and list views, organize processes better with collapsible sections, and select code types with a simplified combobox. Also, the "Select/Track Window" feature is now easier to use, allowing two-way tracking: selecting a process highlights its window, and clicking on a window selects its process. - **GitHub Copilot Integration**: We have unified the GitHub Copilot and Copilot Chat extensions and now ship them directly in Visual Studio. To install it, install the **GitHub Copilot** component in the **Visual Studio Installer**: - :::image type="complex" source="media/github-copilot-install-option.png" alt-text="Screenshot of the Visual Studio Installer GitHub Copilot installation option."::: + :::image type="complex" source="media/github-copilot-install-option.png" alt-text="Screenshot of the Visual Studio Installer GitHub Copilot installation option." lightbox="media/github-copilot-install-option-expanded.png"::: The Visual Studio installer is open to the Workloads tab. In the installation details pane, GitHub Copilot is shown as selected. :::image-end::: The GitHub Copilot interface in the top-right corner of Visual Studio. It has a search bar, a button to open the Copilot Chat, and a button to open the Copilot settings. To use it, you need an active GitHub Copilot subscription. The interface is in the top-right corner of Visual Studio: From 10ca0b6267a7d51d7a334a064edc4c8b859d8c03 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 11:32:37 -0700 Subject: [PATCH 0242/1239] add links to tutorials --- docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 89ad2f5684..5440d7d593 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -108,7 +108,7 @@ A partial list of new features: - More Unreal Engine support: - Unreal Engine Test Adapter lets you discover, run, manage, and debug your Unreal Engine tests without leaving the Visual Studio IDE. - With Unreal Engine Code Snippets, you can find common Unreal Engine constructs as snippets in your member list. - - Build Insights is now integrated with Visual Studio 2022 and works with MSBuild and CMake projects using MSVC. You can now see additional information about the compilation of a function such as how long it took to compile and the number of ForceInlines. + - Build Insights is now integrated with Visual Studio 2022 and works with MSBuild and CMake projects using MSVC. You can now see additional information about the compilation of a function such as how long it took to compile and the number of ForceInlines, and the impact of header files on build time. For more information, see:[Tutorial: Troubleshoot function inlining on build time](../build-insights/tutorials/build-insights-function-view.md) and [Tutorial: Troubleshoot header file impact on build time](../build-insights/tutorials/build-insights-included-files-view.md). - Remote Linux unit test support now lets you run your CTest and GTest tests on your remote Linux machines from Visual Studio’s Test Explorer, just like your local tests. ## What's new for C++ in Visual Studio version 17.7 From 6677f5a96ab7088ed5521d6242171edf8643853a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 11:46:28 -0700 Subject: [PATCH 0243/1239] edits --- ...t-s-new-for-visual-cpp-in-visual-studio.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 5440d7d593..62b548637a 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -23,7 +23,7 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a | For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | -| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | +| Standard Library (STL) merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | | New features in the Visual Studio 17.10 IDE |[Visual Studio 2022 version 17.10 Release Notes](/visualstudio/releases/2022/release-notes) | | C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_1710) | @@ -48,7 +48,7 @@ A partial list of new features: :::image type="complex" source="media/github-copilot-install-option.png" alt-text="Screenshot of the Visual Studio Installer GitHub Copilot installation option." lightbox="media/github-copilot-install-option-expanded.png"::: The Visual Studio installer is open to the Workloads tab. In the installation details pane, GitHub Copilot is shown as selected. :::image-end::: - The GitHub Copilot interface in the top-right corner of Visual Studio. It has a search bar, a button to open the Copilot Chat, and a button to open the Copilot settings. To use it, you need an active GitHub Copilot subscription. The interface is in the top-right corner of Visual Studio: + The GitHub Copilot interface is in the top-right corner of Visual Studio. To use it, you need an active GitHub Copilot subscription. :::image type="complex" source="media/unified-github-copilot-button.png" alt-text="Screenshot of GitHub Copilot button."::: The GitHub Copilot button is shown in the top-right corner of Visual Studio. It has options to open a chat window, GitHub Copilot settings, learn more, and manage copilot subscription. :::image-end::: @@ -60,7 +60,7 @@ A partial list of new features: | For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | -| Standard Library (STL): Merged C++23 features, performance improvements, enhanced behavior, LWG issue resolutions, and fixed bugs | [STL Changelog 17.9](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | +| Standard Library (STL) merged C++23 features, performance improvements, enhanced behavior, LWG issue resolutions, and fixed bugs | [STL Changelog 17.9](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | | New features in the Visual Studio 17.9 IDE |[Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes-v17.9) | | C++ language conformance improvements in Visual Studio 2022 17.9 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | | Summary of C++ backend updates | [MSVC Backend updates since Visual Studio 2022 version 17.3](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) | @@ -93,7 +93,7 @@ A partial list of new features: | For more information about | See | |---|---| | What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | -| Standard Library (STL): Merged C++26, C++23 features, C++20 extensions, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.8](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | +| Standard Library (STL) merged C++26, C++23 features, C++20 extensions, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.8](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | | New features in the Visual Studio 17.8 IDE |[Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes-v17.8) | | C++ language conformance improvements in Visual Studio 2022 17.8 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_178) | | An overview of C++ improvements in Visual Studio, VS Code, and vcpkg during 2023 | [A year of C++ improvements](https://devblogs.microsoft.com/cppblog/a-year-of-cpp-improvements-in-visual-studio-vs-code-and-vcpkg) | @@ -108,7 +108,7 @@ A partial list of new features: - More Unreal Engine support: - Unreal Engine Test Adapter lets you discover, run, manage, and debug your Unreal Engine tests without leaving the Visual Studio IDE. - With Unreal Engine Code Snippets, you can find common Unreal Engine constructs as snippets in your member list. - - Build Insights is now integrated with Visual Studio 2022 and works with MSBuild and CMake projects using MSVC. You can now see additional information about the compilation of a function such as how long it took to compile and the number of ForceInlines, and the impact of header files on build time. For more information, see:[Tutorial: Troubleshoot function inlining on build time](../build-insights/tutorials/build-insights-function-view.md) and [Tutorial: Troubleshoot header file impact on build time](../build-insights/tutorials/build-insights-included-files-view.md). + - Build Insights is now integrated with Visual Studio 2022 and works with MSBuild and CMake projects using MSVC. You can now see additional information about the compilation of a function such as how long it took to compile and the number of ForceInlines, and the impact of header files on build time. For more information, see [Tutorial: Troubleshoot function inlining on build time](../build-insights/tutorials/build-insights-function-view.md) and [Tutorial: Troubleshoot header file impact on build time](../build-insights/tutorials/build-insights-included-files-view.md). - Remote Linux unit test support now lets you run your CTest and GTest tests on your remote Linux machines from Visual Studio’s Test Explorer, just like your local tests. ## What's new for C++ in Visual Studio version 17.7 @@ -119,7 +119,7 @@ A partial list of new features: |---|---| | What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/) | | New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.7](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) | +| Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.7](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) | | New features in the Visual Studio 17.7 IDE |[Visual Studio 2022 version 17.7 Release Notes](/visualstudio/releases/2022/release-notes-v17.7) | | C++ language conformance improvements in Visual Studio 2022 17.7 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_177) | @@ -140,7 +140,7 @@ A partial list of new features: | For more information about | See | |---|---| | What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.6](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.6](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) | +| Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.6](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) | | New features in the Visual Studio 17.6 IDE | [Visual Studio 2022 version 17.6 Release Notes](/visualstudio/releases/2022/release-notes-v17.6) | | C++ language conformance improvements in Visual Studio 2022 17.6 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_176) | @@ -158,7 +158,7 @@ A partial list of new features includes: | For more information about | See | |---|---| | What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.5](https://devblogs.microsoft.com/cppblog/visual-studio-17-5-for-cpp-devs/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.5](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) | +| Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.5](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) | | New features in the Visual Studio 17.5 IDE | [Visual Studio 2022 version 17.5 Release Notes](/visualstudio/releases/2022/release-notes-v17.5) | A partial list of new features includes: @@ -197,7 +197,7 @@ A partial list of new features includes: | For more information about | See | |---|---| | What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.4](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-4/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.4](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) | +| Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.4](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) | | New features in the Visual Studio 17.4 IDE | [Visual Studio 2022 version 17.4 Release Notes](/visualstudio/releases/2022/release-notes-v17.4) | | C++ language conformance improvements in Visual Studio 2022 17.4 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_174) | @@ -246,7 +246,7 @@ A partial list of new features in 17.4: | For more information about | See | |---|---| | What's new for C++ developers | [C++ improvements in 17.3](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-3-is-now-available/#c-improvements) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.3](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) | +| Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.3](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) | | New features in the Visual Studio 17.3 IDE | [Visual Studio 2022 version 17.3 Release Notes](/visualstudio/releases/2022/release-notes-v17.3) | | C++ language conformance improvements in Visual Studio 2022 17.3 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_173) | @@ -273,7 +273,7 @@ The responsiveness of **Go To All** is improved. Previously, results appeared af | For more information about | See | |---|---| | What's new for C++ developers | [Visual Studio 2022 17.2 is now available](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-2-is-now-available/) | -| Standard Library (STL): Merged C++20 defect reports, C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | +| Standard Library (STL) merged C++20 defect reports, C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.2](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) | | New features in the Visual Studio 17.2 IDE | [Visual Studio 2022 version 17.2 Release Notes](/visualstudio/releases/2022/release-notes-v17.2) | | C++ language conformance improvements in Visual Studio 2022 17.2 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_172) | @@ -300,7 +300,7 @@ A partial list of new features in 17.2: | For more information about | See | |---|---| | What's new for C++ developers | [Visual Studio 2022 17.1 is now available!](https://devblogs.microsoft.com/visualstudio/visual-studio-2022-17-1-is-now-available/) | -| Standard Library (STL): Merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.1](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-171) | +| Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.1](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-171) | | New features in the Visual Studio 17.1 IDE | [Visual Studio 2022 version 17.1 Release Notes](/visualstudio/releases/2022/release-notes-v17.1) | | C++ language conformance improvements in Visual Studio 2022 17.1 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_171) | @@ -320,7 +320,7 @@ A partial list of new features in 17.1: | For more information about | See | |---|---| | New features in the Visual Studio 17.0 IDE | [Visual Studio 2022 version 17.0 Release Notes](/visualstudio/releases/2022/release-notes-v17.0) | -| Standard Library (STL): Merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.0](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | +| Standard Library (STL) merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.0](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | | C++ language conformance improvements in Visual Studio 2022 17.0 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_170) | An overview of some of the new features in Visual Studio 2022 version 17.0: From 224f63c1e7b1b2b9265a4394f8250226ab192c69 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 7 Jun 2024 12:00:56 -0700 Subject: [PATCH 0244/1239] update picture --- .../media/unified-github-copilot-button.png | Bin 37066 -> 14058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/overview/media/unified-github-copilot-button.png b/docs/overview/media/unified-github-copilot-button.png index 6ede27786fc0bf059fe613b5ff3890d4f30b56de..1d112b98f9b93133547ea0fd6350acbdaa94a964 100644 GIT binary patch literal 14058 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 a0v$sGYvVTvEs+1GK}m|riGTnGf&U8@Vp%Ex literal 37066 zcmcF~Rao22w=ONk-Q6v?JA`5Zil)U%u>hsGOYq_rtWaDEX@LU8ixhV+?(R^axZ4Te zxButa``qn|bCLX>$jq!+vu4e^-nAxDOG60ZJj(z7VU3mF|1@eOC2 zJmMYcnd@sMIi%9x)VqieFFwes%OW9F#9`e*P!OLnoRr_XA|c^+JiVUvI2KwUA;p`h zD9CCoDUNv;>92IL>EVdaAIYebHs~n zCdlC+oqPXviqHN8WMpWO3XBQL26B|4|2!4{_s@;W_|#PNf{s|z*0>Uw+lIw^Mq%+6 z8Iv}t#*7JWMqk0o64+IV^z*w*yJ#hj3Y{QHS@?Wd?6?EXbmF7of}jn)<#2k`hioYEFz_0X?R^H3k}#+I+u+019YY%_YVsC# z>=`36Xu_Ca==IcNltL6^HuQ`^jk!WoT}9DBqm*7!lIpEB!`ZNU$AS;q>QA(8)2*y7 za!)ix^2Eaq%B((wgZd;NNf(m?rLyshGk`luGH7ZMeTGJN<}KTY{r8a>H*mS zHXww+Im3*t6nf4}vv zW=kHn>fgv%y)=PQOP~)d`J*)S0xo>(35J2k5fCrJ$c=u67`ZWrzm(F?w+Ha@_8YS5 zJQv8J(#Bu&Uu!2ML;>ISk-v_Q>Ux8=T6KN7x^b(y7LAg~=b!~dJ>zbVXk#Go5u1K%8oWU@=s!`A*vDz(`O z$RBf<^+u|%jaGz09e)EF#ohy^q(n$n>3$)5;ttBwDpKE{oQ{a{k||mcQn1Tnv;Pgp zTk@ij6b(?bJm#hW&ZSAi8A!7QRCU2p*GEI%r7DnEI8EVcgNau z4=|Vj(?wu}SDpY=0eM)wTC2yHk#c0*QYR0|gV8?+qAe!*m-!mi8Q4~EybF^!0G4p_4Q$=@7B$xtntPG%=Te931Y`Xq)Bvh zfkkkih^8y6P07^LBd)&kj_5W8>Hg^Bzhb(Y4=_hs1kHNlD~9hv*11oEwDWskMDae&>9%BI3-DF{_sM z(C!*%{+DT--$sjWM(wy4Yp!A^o6z^DRlo7E)k=y_3NP`HBAAR67|nu}-InL&TCq~k zRuQj%)2%vF?toHbZxDBoQ`R%3IRluAM~FpKMaNeXzA+~+7`4>oL&Y=wMn}heh!RE6 zcB(`qBh-=*Ps+(_m;|x%BB#euqRwWImJm`MB~SD155@d8GxRg|9%4UKj_UV!X5nm& z$xBe%t*jaT08(0t>^ST)k}A5)*rA-#9Mkyc0cP?i309pY!Twf~9C7;! zL&wr$&4;dob%#9qT%>1zCb1TOxy#4>mF|3Gm^E$`G=GuZTqWb;s|#Tq{+$(b@J?h+ zRUmjMr=*LFYTA@2t*hIevyV?V5nR%xm-C}1#g3Rt53BjkLRdg>4115M{svMpjmKt$ zK1A)0i;%&RG|QS0CWNVyv7?t1x0sVsb`ufd}{r|j7%Ilahsj)ua&M&#@%0R zHdxa%=S8d!#MoB6Uk{&o=u(1S#<27b{pKr)+xVj-7O#-Q$(g0<GP)Cef6IF zO;V7tv|~?Wf#v#)=)AMlVTxG!Dc1gSGsbQ6jkc6UZK9eiwqyd>?mlG5jON1bo;YqW z{dvx`xqeP@%*E0qeA}R@BfM6fvMY2nqw6!@zoOJ-X;|blGqFjN++(_|RHr))4Ar9h z2izYXhc7=q(~Y90rJ6=lN?D3CKU8a#(QQ=5M(K!{< z&g|hh`x4Yv+jUY-q(nj&*=x2jXY6T^r``gqBXI-l3;XHRFsD3 zzaqTw1Hx!Th=~rVLvxXD>6<-y7w&p8oIB_oTF+Y=Xloa}sRTYDL;a@csr_vkV;lYG zJX*w1f(1zymJW0WGbE{&53UJsJ$*G;k1;M@3spGIv+mDT5=a6IBGv>2(9KSJ=*G@a zOYT=_h>zsGrX#@0=}a+s2UZC$s1)D*4f|vDv|mHkoY$KrmDV4e;Ry+Z_-n)R8lsDZ z#u+P*w6$o%!;M6HIXMyE;ub?cu;B)=eP>(qUW!#527*8pC??Ui#8ea8EV@mhSve)d z@|u#sM}6|ne$VCBZs9}o@WX*{dWgU#}8gb12}ZnqHqIBU_Il%jx-wvCdy^LO|`20r6wjlNkf>z($25 zIU%G^Uej{tW3$r?7i0R)WK}~Qi*9P?VQG*1v=L(6A1;;oB;()uibjPk#VkdtT;033 z$R7T!U5m}_y0TlmU6Z?5Dg$=7`htCxfg(Ubnhf2hn8|_V&Z74NM>kZCs|jcYx%8q+ zzHmk$aH*Wp5W;qV zzYmT7Id4mQjObEGi9ejrcMa}zE2q5UMfJ&h5w)28nJaC!EMl#j@6P18GNnm|V=00P zx?@@e<9@dz&h8LApnm9kPGI*NO_@NmC|1l<-osm4X1!#D2r@}MdwkP>vP>!M>l?lc z4j};6SEB{*0XpZsA<@-*sy^n@7TT7Ezn<;P{`Y$(>nV?Ss&`wWEs8d6T53?}v#_{E zJ7U<|`QxjJy4UJs*kY$vMvuxfY?p2!3S#fdt!HE`BK{x)u=^8KYH zzC1M7Z{C>8ZNg(P-s@1u4#0$N^d^K27z9t(XXX$jgBYwuYdsrqq#HbmG|j7I?{4&3 zNbweryX^e4l$@P0miz*Qarf^rsbqY~5IBlL@PnF?w+F$P>uq~ZIu=V(WCHwer@8Bv zX;;*w{^_V5boby#o$UgbTC-y#r2YwL(Z|TSfC04O(Ci=+O!6ZM#Kw$jED`$3cFS)$ zNZxq!r}zpw)Bt^dJPzGheOtHw_jcsNQ5Jw!oK`WohrZy^i5QnW5QrSMe*D3tTe7$Y zGG*>)cGf$Z^78|8g7RFP5N4ku0o^jyJ*F#v_1BgxVwD>`TDQ3w`BFdA|B~ zy!>dE?dXa~6EY}0-p57TUZ;YGRaIx+9^A>bAbYAB7Nf|g9zP>v1 zE7QSr5fyCdrkgP=sMT-5x(_FIYMIAkf79;(-D>GEqeOHHIiJ8sD4ST1%%6&%Az;CP z+^biZpjhfaNzig+g6Bfyr?!rS&wA)(y!0jm3<-ws5xpxj6RH&de|g%o^73lBkeF5T z&Ib!&Mki@tVjxfjV-&j{Pt*s%0c zW~S-uj-jgXI^Bv68)^qEM|b_VQA1W~_2uP}n;#!;S%pMIFwF}~OGOMXCf;aLY_TP{ zz2LgQlR83@qSb6zb-%6?>Ay7NCuC5W?y)kdL9-_AEQfS3wzv3Ry9{QEzsWQ`-5Rnr z!={ED`NpzdwODe|_zApXrbNtzCh*@$MQF<0Yoi0H6!t3*=4+$hfBW`rC^?2&{56*( z^vJa8J)w#cLUUsT|Ee&^l*qKrvte;4`M9rpAeL5o&W-}ENCFxt)p5yL4D9dUBwwyd zSv@IEI3C~x*RQ|bxcFl*&-~vy7%7!uW@Z+8m!F1?r~3BCl;uDijpP&r)b@PPJ@WlE zRHxDVyuYhTa*oxishgLLe>w1jYs~n0zaOb22PczPZFmIO?PDROy{ql{Uv$`91t(Qk z)i5x6cf7#78%D7+Ut5;TPVW4ZO7WG7NYr!S8HM4C0B_35TWmSdD$>`@bJ;RljkVQkD8p+nz1jd zq9Q{)E-_W&hTTUKhV95P$wtK#cBbU-AAd4rH$|Hg^j`}{Bk6%&F+4P6FYvhJb4YS3 zyfv6MZc*Q{ihnxGb#^+hT4uank*P4R>>IkmOGl?MZMahHZjRDYOr>Z$FXewd`JR~j zAUJmAbXdmG1zVt4_lJN`n0_fK9O~xxzUudL*S{02YIHMXUJp_ho9dlD^Ra8%yBL|` z^B?DKB$D)|zpPFGeQO<_g>7EPE6L?d2QdHjbwdMGlDex{pBXFtFElKvB*KsAFsk}s3qLU zKhyngD_k?Q*xoX|ct^!PT$S`l@kc=*#!71ZV~3K5>G4DY)OWJBP)a9EMwGS{*%~wI zQx!Nq5p8*=puG0aqg+>o0QL0|7{+tLz#@$0hbr|^?@}i>ubO(&mM;HhL&O@c+Vx+% z=Fent7e<}qGSHcf$fOv$`z@vO_xAOiOPFJv-%%UdaVL?c=|D2K8LdeVUw93bv+rZ^J}(iuTecl)>Dc>^&(+8WJ{;7 zfAZRETDxBsqfMAGc}$F-V)KhBP-I#rF}=D!{?5>wp1Zj2U>aLLp0P$ZF*eS=E})Q_+eNX?Wbs&Kx* zOP};InW?2}^4%l5Hz~h#Xuh_*TO(^}QK8fx?GO9ZfyK8oUPt( z6%)Ptb`K@yvFDP@FJYt{s{e5itQtsnw_*N?DN-K}$XjCPeOK#{#fOaJFQzFNsglSV>E*fL91eLPi%vi{ z;sAjXGHwC7y4qiAV!cnOXyr6?F^p&5g`IwQL?)ry(i+Y#6UJ^u&N+}ba_4TA{z<4w zY{?)k9Z?b8qG)t|DP~+xcp9bec1tf)h90UQt7}616{mF&kKLwFBCv`i#}t&~Yk@=k zu>`iNf74|>@rKzII?l9{sJWH!Iau7bSj$K!xX9f#e!LdFZ+5rtbf~FN+$gGYZYVWT z5Z~{Hj6p^c&Figp8BFK}R>2B9y-LjFUiy!&nv$~vsmotKnufhcSk`Bs^7WU(Hk3Bb zXWtO)&R6=q)z5{6#ch{5IS}0(wG9$w_>RC);#9f{U&VkrYvR@W#H-0Ne->;;TYrh{ ztLdJjv&Zd7bl1mw=QFQ@m*m~N0oST$JEQQo#vnsAO(ES8364CgGH?WuBx``ZzwJEy zbHn;<{&cVbqgg&bBhOrJ=*j%+vKbG%snP?$rP;-L=m^Ygf2Lvx#>m7Z&owTy-$z3w zg4(3wl$1MM#l%OLtNQI*#M<5;%FORqlvFu1kwJ};$NkL)6EwG^1-irS<^J-@Gi;EK ziYhTD3$)mPdcv+}GIHOI7mojk_-cl^JS>J z688WrIMvv&=}M=E!tUr_u{MV+h7W&vxD$nLM~?1fya~yxHXMAba?V+BlK{3LBV|ZU z4y-6UP?EQ1c{qQ3WYWkH4>jNB0Gk+vA9^%Khu+@-csRP5=xE#1y1kPE?g_iW3gD{| zgG?!KX!<$U(cSAm6BFZ=KZYSt4H-3q8k)~PNoIaJh+y8l36Teb>?DmapOD&JNlZ{q zfK?x0MgdwF36I??YcWpk>|DGQ;*ZeJ&q)oUQWISfZMjxYY&6IdPS_?=g6qiIn$vRU z{_x}nL6~6`=h5Gq^5$Oqrx=u7XxNf}_7R6M3JSiVPP{YyPy%+E7#I+HJ~d_wau!z) z;(yX{SM;oK3}F72gEfC4c4CAE>TbeBNj2cSRd6Z>28Z4pKE@&!;I2ULHKa1rgBOB; zy}OBl5LMB<*pP;z%5+97fsFB=g;KK-L^^bkwl5C=a&i1XSv)hN*|(YOw*)$eG7)Dl zDZ88QxG4sgwH~*J`Mx=#-n>7T&(WgY;^I`&u_ob|k`CjFdi6XId*QtQStj=nd3k9? zssM?Ys5yb8EP&G6p>3!{E&govql=|qY}ny|^W7b*)SC&i@u`U~rKQi6OsGPtl~Qu6 zYY5I`Y@L=r@b?|QZe zb4xC~;b1=B^%r!(zUo2Y8CUuiiG@FYbp6hf%=kJ9TXRW&fxy=(uT(+K(EDO?qfao{ zLZI?ccF^?2B>bcY;lT58&p!<3o@kRipea(9;czOf=_PCpj4IEHPizdR| zJ+t-fFaH+lNHC*X;Ur@smo!j>N{ zYSm8!*W`ja4P8N_VfIsXS_bY^@b~V?;Lc>9dRUNS3lAr!tqV-RHz9)w*Uz9icg-c^ zA9Y5Jju0j0Bx*?8MiEzH@`)YtG&a{#ZjvZzHLqfv9nRwo`xyrN=}3-f-J;N*;wX6= z<6^p2Iv--qJ2l^+X;1it&9YnfasU)`A-I*%0`c!sqn}4f-H_tGyy&1?9i)hQ!BMkz z9&X&j5cRTIya`Pew8bP@CZhZv+?$bt0salSMzrS|?KQ0);D)Dxyxq93?d+Mr=rH>I|cdxOSj z>MjGphY8Gb!#0)<)|srKOD%T;Ekb=|EM_Qsasy=^a8sV@A9-L^|n!Spul*(=*OCmcz7>E9+<+;YwJD$=7}IXA^FE7plAFuSo^0eovYjm z>T}Ky5TqgAe)hJJE=esTy)aaP5gpgDQO~27*j^A`%DomPb9E-l0oze!>Fe|p4sC6n z)scbqgv5l{yFqN?_wQFrFL75bI^Jd$mUdQ*_c-lz@$clM1!eB5F~2by>*b@p+u*|R zMz)#yEvu_5fO>CKHqjHOHL8w=si&UyhT_|W}mjY4mj zi2agil~@#6sJ5}?bJmUlJ2EeF!8mQ(M(?_{iavFjFuY+bdWrNZ~ul zGu!W%KK!8EN%@R|&vfrZNiFz!^DlY+Ov%LolY2#|B95VpiL(aM=HnEfC$qh~YRs!V z?3L=tqF&C)%gP4wVKh&EW(v_y9O>u*(3Sb#QEs~bYuzmHUd}<1+M2B`5;(LIIkomD zA=<^E!t6;}s*pF|i7S?~?e7=9cj`E=hVR*mhV>wuD<it99smxlWl+1~BPL=G|-h3|d z6Reh{R3wk(5lh+@?X%Ie5R{5@^x1^4Hc?>T`{MtdlgRIripfrso_C9pi!)9-?~L** z`4Z{gk;gd}j&g4X3mWazHNU>vlD7J}tzky-o9VR&?4xl+a;>;-L`FfhJ#xPE`LB2| zpFOwUSK%2nvW~f*wqRLl9sev?g7}V#ib`9qe7FL$UDEVst8xernYiE8Z20rD;ePq$ zOs=!sY!3&2+%c@E_|G}fnNm7hw;RNtu0Altc;C)mzXj~b%bCQ-?PnT(-lsnP)|$x` zl<%d_F4}@$ANof!CrY5I^OW%VZ9QOcH#*N(Aos4hH&@`KYFsPzFZ_D9y|W7IhMqeB zNuXZMfHxzL@V6u<8&%pJpRxZlMcMm8m{dQn{C*F0k)tut9*csir5pZnjLZV;Ph4-Y zZK35aZsz0Cms+_i3a3{xhSyQ9)b>`&TH!4@pS2FFkf+IUQA3;%se{H*KF7XICNpAG zIe+0+JgCdIMOzR`Shs0s$=j+QBq;@&r{^g+8KCJcWbMOJa156$)z7|vV%lJ#D3R7-MJH|k z(=#D?*AeK(esEovPc&3)7(myzxoIPcNh@bIx-FRsQ)@%_w?`{8KjZ#95QvD2cwDf) zPisEUPHC&HeJ#}5WJjp$PsJ${pDYhX#d0=wpxYpe$0r+;sFup`z7*%GzN5ru%yG=X z=>R1tdSO)2C-xR>hH7g(qfiBI=BSRU>Y`E*oZp3l@vrZqaPsKm@=y&#lYX~I4Grjz zh|?4lNMW96DUV_+y%4uRH3Vr8v=}A-k@ebmomC~+`w~D1F<+a{zWq!LFT}G)o>U>H zP2oJTUt;|i_KgANkXn+1%fyd5-0m_%5>%X++gOh^AI~)F?l0zXP7@4`OFiH#xj3<` z&jUX~(cZpWbw|acwM+e=^n~NENT;Plg6s&@Nk_|}l`B>8Tb0h}@Gow@$0=RuTUEK} z$OL2|I$|zb({S2md<%_YO2ubsYW}ns;z|_a%=@z_)tRSna9(PP{78{KhcKBXMv$XS zhX>5+i~Zn3i4yDdh+mDYtT(nWTU8FJWzVUpDCec3v6r6#xU|nNC;UrL=EWS@ia+Ij zq9H8)8bOE9wT6tVc43pmm1}Ah<-|G{!vm1Buqi@X98x`oat^uu4B6d~xA6!)7j>v{ zm;t{L?7aqtMM%}v4qJkWA2zLxOD6+i!Ci>xwfsx8dtZ47_~>T{UwhqEz=YHp>lpRV z-*yr~H9*j|dR|JRRqe#d%lTr#ru_CQ9A1hFs`$(Fi?Pv%e5{+52 zr31K1tKg@1=-$Y)|3QWS@>S^i)FnvB9kMMf8g&%FZ$jit0wGSY=8oavHpyApBUIaW z83Kf;AaYL=Tp{f7y|sPJLIB5mw>R(|{r|zD8)<0sPilo~3!)}~Zp)NPiX-cn=&{v4 z=DJVZ&2mlb=3CDIw5v=LM__Ub>@2XL@sOdwy@LBVevEU*1_#<7(-snPcGoGf|B{=C zgh2)(@ETB=0OZNdsr3pwPvf7?o8nVe#~Osa62g-%daDq_Xh#_GOUjN=4GT1iZ7?jh zHj*;W|3BxKSv?OpJLR>&r(}Et44saSq-i8t1zFqRQ{H%s22TlQE}LDG{fFNF&zRb+ za5)=0Ozy!3{ME+1&5&)1Z%y%%5@ubG6XFfB&9f?LSO3tZKO<1J~qDFhmDt zo2_2Y9lNo+{Q^66U4QeDQM&55B*beZYhBlM9uL5Q`=+-a%#*^V4wNTc7Wg;4nqYd= zXm^_uDFZB9wmqntJ$c->^@R3s`np8E%c0KcG@)+9va~&r|m03>`k;6vj%6q&Gcsyjin|`aeO6tdL@{r>y<51V&?T2qCK|2(jGqusJ@ssDd~T*WEJ5ri z$aYhRKrDS)`zXCu$A=LUUhQ2GL$ZYRZ90E`%+kOZ1e&mG=r}$163DY#Y}Qr(4P6%f zt|``1Q=OnNHi{s(kmi`&xG6$Me|gK=epjO46snM89;?n3oy)d2<*A_twHQe)W>=aI zjN}U^#M;NrTv(b7IPTSSmXfJZm9{Ja4AkaJ9)@BPr**W|r57?E6ltdJ8{L-U28dMq-6pfcp zMF?+uZ+@N3S8{`bN(mZDepajP1Iadp_;HuAcRUoP_zU3*V-!z<3qc}Cn3>EJzc+z$ z$=*pLN{YzvYxU<0a5Y`;&#t@kt;@hW@UWSS@eFy@c?<0xEPGYk1EPj~IeQ8!nw^5K zN2fGH;C8P48`WzS<`k+YJHh`<`og3``Q@A~F&W`_O+>bTb9T+wQ7ct(?n!ZvMGvab zQW`~LepDK3(X8B^l%C|}eEZ#(a4SoPUkBR)OxITV49TL)xRGD0@Ih^Bi)n_@pxj7# zTW~0THu)PZMR+~B5Z!?dL~G?dM2?y=}|Cm;h{|5co1~uCe>4t+h{HPf!hw?KB9EZBG;VRS;n> zfmT6eKChKJ+gkBw0QweYI11?MgHr18>6p9}Nu`ZX^YQ00py>8e*jr9^fej|6^lSy> z($*1-dI$=<6_%-3Xw^60TS~TH-Bq67Q3N&)do?#daMNHh4yWGtN8rkvGf`$#M|&@H zZgD5LiL?Xs>m;LXX8}S&{1fA2k+c+HBN({m%&ah0UGKB*QQc8noTit%qtoAiZ0>|6 zt$Oeo=(QM;MWv@Ehv)|ntTe*%l4efke{rkrUlb0+#QZL#c~?}H>}W@u&QQZP_eoiT z(wbN=H3Cc?5sq*+ZYW>DhLC?w#?n}!C{9Fq7{ZTDCV-qn|M7Rf5PO&T$+dC(zfYrX z0IOOm{U9P8tjuf_&0|iC_#5NyFGJ^lGu6|G`mX=-W{PZUF7;1YU^i?PX1(W#vZu}+ z2PDM5>!%?1iJ;LmCtiM3c=lI?c5+&I!akChl!_nP*#fZ0F}hHk!}$$Z>;Ldeg)x8P z{3sNq5vut>9zw4W86iW&L``5e{_`Wy#GL2gm&)luqB8R|Bf{5w*3Wg&(B656f6Qua z&$pA&9-j7?x0c){TX5( zD8OLt=JB!hKVvK8>yeBf{z%O zL^#MQ`stKUZ}pKHeVmi{;|-&%P&l=c=B+5@R2vj{rbJ2!8ek#p6OKkqg@vQComnco z5FGzf(7WOSDrCOu1`|D59*74!(K_55GG?wWTTwu&(6JiHL4HBZf`LU%zL*f+UcQbB$?`o)%iUc7936pbB{&r^*m)+NfnE9h&T=NNY?8 z<)yA3RB2&!>>nQh$-Woh`bz*`@k);j+3VO8|5=$a5w}NbJiH6rU|_@tU-D(@ex24j zeHsN(FeO32hQ)OZZ0^_F6 z#|1)9kIH2M<>LYm@7Iq;ZZJ1@Swg@OjU7RnwiSCK!Wi-f8b4au9kg1$hwNxdg$J^`yTnrwJsaA1*u0YWiRvo@A=iE z^i}Muoffhh1%u_SFX)}G2qI#>Jkl1}5EA4)r%NLvb^l@94!8>FOyZ|vNe()9j3e5G`*lItwtU{w-Nbhbf&xrCuW8%#qcO?_?O<0Re>2m zFSXDD@ee-QXPa$af_A{?_Eg`%Py3<8^!Tq@sSez!KB~gXlclJ*IHTML>@1X}#K44z z|8UwV!W8rv-GdxtC_W-0yOX1vmCJCzpYk?qn!xLK99q|l zt^n*1d>62Ut9Rm7{Z<(l~E^LvqDVE~^Z&bZaxhYT8E-EC`3& zhS1h%T?yP_l{BMbo$Mo=)Ss{8AeS%+>1~FW;2cFTwaHx8E;^^ZtehznE1c zc&>zrnbvl`)o`TPrKvB<{UT>T_S6a(d3v}nf23&6PCA@_r#vIyC*G@(6^nA{7sPa% z-7%A^cvKmmsC6pahM=fwvpScyoLXg3S1;IwhEa+?t95IPhL7XXQE0|vM}>c<7D1a# z#O~VGQ4duc*mP@`y*^R2i<`$(bZ%4Hm9D1IC<+f&>ykYu>Sjb#zU;ba>*zo>`#+s8aMJ%mT$Gpa%hlz=)gKsD_ z9^@QZXZWU~sL~#^dL}m7#Fi%C%cQV4HXl?1^k@F|D}LhEv$tPa-e75cM)#JjQL+Qe zwvadSnvP(b^CPb-ZgX*QyU&}-cw$Gzd>76&LhrT&X-bqf| z^Iqys{3N>HNsuEHfJ_QXq$SZSxu#X^=SAWX^Oi=4lj##rgeCD{wzSVkfhJvt+mGXD zlg{hWw+N`vre>rF0@qVTN1c;-WSGCs1kj#KG#5#QFbT7bYMDebNiKIeeL$ZjwqH1Z z0A||Wd1@yI1kd%q_BAmIlrLsm%e`#wj@y0+5cAD{7Emk};W{Y;8BP!HgAxxKf}_k$ zhI>AisEPe>POZ2jkM*s3!F1aa6#O~dx#*ABpCZ)?pEf7vdgYyK?{GFE|0o{0rQ73^ z3e3zO!0?-20@|Yf(V{moT}n7Q`Yju{V#Lk3tHHwr?Qa}26?E*yIf^*6bd4k5s20c` zACG*-@=qZ#j#AhtPgEE?AE82V-5FuPrqiH#6Il83p3@wtI4H`RL@wEMj4 zv^;NBb)s2}cDIRWl+%e0IOG1}+u>sHUu4$SKNam+?!3)kBi5QIFulVuS6vpOXmbhc zTt1kYxRWHS4}^D6z62XE?rTU|a!H248xW*7eQ4fuPS&yqA`NXsrom`D!SSRmK^$FW zeYvCJ#HPfXnT{d~g|?U~yDiRixR370k!~rHxfmJu9nklJKh<-G%fC=8>VBA*i68i^ zc|!7dBN={Wd8mc0d=k&Tk>_*b)L8FCx}bsAsEwA>@zr=3e;TB{k)??Uv*@P)sd2!Y zLL;)eZ(uk2u4oS>4}}uQ(NCC{NmfVwBp&0-giyvX_d(^<3xeO&bK!cges%2EbcjQr zU8H$uHwn)7Z0C4_b5VC;?Pl^?jVi)bh-xERnjM$zfoGUjvN<0{n*E9OUgU-Ho9 zH=mMF#`%VPy9by#y=VMAL8JSq)%dH5;2Ygg*pLQ@fG#{dnYMe^4=aJHO@`oj^t07zg6q!kBnz!PlVuKoWKXd^#3eaA@ ztF;;ry%YrC`f7`BOYHlDQCxhM&t6p-UWaWJmP;4wLc-f#`>o*kW)V}4K_&>u`<#}{ z|Fb_`bLj(TGK{IhSjt6Q-3jJ~H^u~z#jw7M`?NdGAFH~=M9r+UhW5~)#R^O3;Le*7MZ6U!$kxS0erVxtLGbjyOjo zv;EE|bB%;5YAtv;1v8EpsbM%qYCc9T-u^zPM^xvhzTl#If;>K^3}BnDZ7BeVJCW59 zr4m`5NIu_042IrAofKL6Tl@*Gmxx~|Pkbohkr&qFWPq~EIoAU)>DvN6hBUh^pOUZU z16oh{jDaqc4a?NA6H6H7GbL+YSZo+g!ne+LVl{a4Im5wyX$q(-ppopL&Jw~p`C2BH zZEm}3e@Wo{1?vf>(tMnTjfn7kPE;of%+ zg0wd)l1cve%-!|Ay%*|TYhx|BmWObFO8L5O0|f>yp{E|@Ys=>F?zxVcrgE9JEN5bV zXu|ux;Nb+^Xi@YJ2E5FRk30{$9!RG*ED2r~ZRwwo!*ebFc= zf)MddWTCuT5rt5i<56{u%Oh25z#Yb+`ccPC#$#B#C%G>QyxgJ3_iEq6g5^a*f;7cI zi+Fh1)O46*Uhk4^_~WxHf_~4E=VST zA1HIq{(JiFBhhe7;AD2pU@MJ&l^y?Bq1uPmxOr{{sk%x^l5bU`)5+M0EF>bl_Pi9q zDU6J)C%G)v#E8Hm@ClOy*p|?CY;zQP{>`X=Ua&{0^-eGJ&{oxX#Z=tbhn@g=Opfo3 zqtxi1d?8z~o>6#?P3%hRjf$2W!;Fz}h^1e|*oljf@AAhone?dmp4jju@lg0XQiv&l zjP}iQ+T7ifrZRIa4HGf;bf?o`H(erHuRZks8en)J1x2~{+Q@h!%KMS=8Rs3eOzGPX zNht@Nxxu`-y`sp6*;3I5njhNN1=lTapLEVBefMV$w!OclAP`AiL61L~ZmH;F$IyX2?HpUDo0UGgIJ*GR{%zfm*Y-|tiB@VQv{H4DY(HTcze8fr z7IJe{>mb|gIbK@yzmn3}*j_+R>`?a#Te$|M1!P+?=r}~U-%MEX{Qp4sxjBG`umg&1imQKlX};- z{DseFP{^Kv;rGjYKfv7umwumEqXX5adylKP)lIujGc;?I5sBVcv}Ml=L{UUosBl?O zcwU*iGBdL8vZnR{N;FV-&?thWk!nMe(;A&L{3w)cJ8I* zlpkMy1G)UwM@(Hlf9=4+X2;x)OK9r6O-K>;xy5E1lW}J-aGD}yvCq-Ry>)vtjx+&~ z=p=baP?KFn5g>e!ko!1e( zONxI86pM4h5Xbn&9D=xD%M*>rUn`;vLDj4hQv%`>i$vvHt_BGPy}=j8oaCATbp9yf z+P5IQqj*Dxr-Twzx2xL#C6#A*Ep=z$ERgt-s4b%`xJQm4CYX^*fT0PIzxY;;U^125 z-Z2yQ{R~4;G%sD9b#NGMh*viuU{Xf)@d_|X%Mz0rDX|~lO<@odhP~hMPYJXDHvk}e z79FLRI#cCHvIKpG`l$Y1>(2V^y${>$NHiE~H zKtuwe5ttlUR&NqVlB3JILqpTl86||i{odY`QussrK5?RpjAI%A!TCHsx`=wUb$Qp4sxooL*4YHbNMQ|`YPb*}j z{e=>_BX7MZ$YZIp0}op+qeL5P`9tk;%LK;ezkvh`VoR zRQ%BqBjdi1=f(^dYrnsjzm2e^ZfCaga~|N{Wcky%XYCa}K;jkhh`1tbOKMG=g}%%) zC(vlfV)MKRpQ=DFGU6xe4kO;8i=Xi?DV;>qYHMRXVe~*fK}`F!3ll|?uxw?@-~&YJ zL67Z;kYR!}5jPr_t==WCo=HIOEwv<=uupC2K=ueq?iUb|hE%q+++yi4NghKFl{=7Y z`5S803>;d&9#ZB{?HQ5yG0OE=1DRkYL;%o^8@8Cd7;<4#pT7S7KXMj(dauq0Ag8nih@(i3y;;h6?eH zeuja)Dvne!g<=0R_j_s#lDlzjFI0cZoG2l-iaGNaJ={{w?a97E>3_fL(g{j9stFmr z(MvBi;6-TtA8HaIpbi2%b{&-`jNV0uo!YVwPbKe0G;hfx0$EPP*lGqO?`YGlC8UTr zfBlin&a>iOc~g*4%A349KqN0SG@zB@Y_K?@V@ESzZ}`Q82VsFW2ys~DEO0_ZxK{31 z8hTwwO$_qM49~0bM|blFCZ)*vO(I0$o8JdazK(CopT78gRHjU3%=2f=tv)@x?WSU9 zOla8>A>Yp@tFTtF3UwN9ECf4Ayc*sM8CPib`_VL`ShB0wArh2ChC01EaC$dTE=DO| zdc=wiok-pzKd5cIDAG!fj@HAa5?pA>(2u>%iNAZMB^?UxOh@TBkKsqnR=T!2pPbH^ z{)d5Uda@kiT2V7nsUMi^(WR8?R&u2jp}{X?2z5fbbkTXDYb{?istIE9GCUBO)$5gz z31c?&nvkQUaQ4S33P-RWHS!Tutv~?xT1h;3PXOp=s8AH{7wD*iwr*+r1bG{*YyCLb zr0zrQI~9wpBkx`@t2x!@Jl;FZ`?PV-yY>pKLz9ci!Vd1TY~#?P&wc;B*LGby`8n@8T{^{mQr_0iE#u4o z&8Pn+#0v+0>@>o!<8av|VUT)wHtJshHI4)phXR(m6F!LX4K#op%Nbt^fW?m0wg}I+ zG`@Mo&~3q_UXeLA5cz`BQ}h#UUX!+jdRlx)4)hR@hbFu=3t{0>8{tNEaY+vc7Z6V2 zz6s1c^TbFp1-l4>FTRdvp<+BQr4`BzWhvykEP+AZ9pRVEk4LH0HuDBS+Uw-woO1(Nz&%K@3zDfW8QX7%cz>T zTNS`K)aL}K#msP_j>yQg=?sQwBR2Ob)pp-O`nnK4T_vMPW)=T9of|2i8{{O${PZC0RjGq#OMslM!3TQzdq}%E-|oT8(#o39>BrF2#yrKzRJcsddwVXz^KX$$(g_Q*-eX8sDxz3 zt*U!}*i9SpWVQWASf6Nq&$1@j(f92yW2t!&~zPz4!)vWaPllNKW{?vdcM~=VGdl&~!3&CBvk0d6JJ~=U) z=oeJy+yXfg5tZNWHSad#Z@T93nB0{6o!S@^hS8?LUFrET%g)!ukb14q0`AF zE;oZ{WSLnp2RQ+OGqz#$l`pjQ-sihs(*ZS%LJn}GnI=InQt5Y2IK{~0n8^sa*7c=yA)0Sq8$IUW>|80k zU3d7*W&)vePnG8CP=Xk+hRe7qo6G#>yn$Kt3+Vk$s_DCYtVPP2lraUCZ~k6`SXreX z!(5bX6g^6$S-h!C(jG&yIsa+augli5Q8cw2_xoOc)@*uY{I`&;SaA4Svz~9O!)I3a zsK0<-torw0p6ACbE^O166~*L@6Gw6bi24e$XpiKw{z4>S^AzS_f|NkY zJFg>6*)mt-BJI@kjxIRZ$z^94E_4+zr6y>^x++MBk2ONHYoblro0gR`s?$gAFJkz%m|!(NyxA(*EDLOj=ukpClp*C7r))cZ7KI^#8W)n%mqW| z#We>cbi~Q{w{tiS$v|}A>T6LsR;JHbsRuu$x0d#t4UH_Ij{Nx%HYKU5J#tzKmRpYO ztf^X|vaUt{)Kg)8HbP&Q?tEpvl<=)?2<#GqP+J^)Q6TJ( zc@*|6eo@2D$-I+EFJ?SdM}*QoRQB*MDc4ZuOOy*$Z7X(0S|3))c;pn$72I!5!7D*+g#Q&=+}wH{+T$m1@R?}4^Wrd9sj+$* zMyLk#>m9X+X)1&Y&uM|#EG*^XaOPdx-p>EYeUZbMBq>;@O>6z_Gdn+@pVx>!$Xf2w zxy>x$*ZoQ%?oFM^Bi8HB>Kn`6P$4l1m&`qXHjT}NR5>!mjkOueo*4d1>lGe=jF<&0 zi{E`26}B8nvJLcbdxvYNC?V*CXmxg3?;%}QzULexS!-d4S!|)7XtdO|&Db$<)iXEY` zzcg^z@-P-Mn21?19@O2J`y<~TtvI=?I7WJS211AL>e__2gt^eeR|r)&@sZLa^*S25!96bOUZi2k%tmLWZqem`fR>RGKd$-_gCI}vY+)73MaY{wltHdL?@Z+ZD%=(P8R!FI?n zMWI6@-M?Lw0IoN;Dscrh7hhCsz}-ix)_Sr?j<*#LS<3`A8W#-JEF>iC${84ljCr6v z*(3a~o$1=1aTb(1b}s9Z37pgd$EiZ*g@Ms{y7~4nu?u>srUljXOH=+o3ADJhZq-Fz z@Wy3$wGfwsB_l!r5^EO4HwM%a$|6}9k}a+*zBSw~=+Bf&l*i|2vjrL-T}DUrswMV8 zvwl6L(_x6d!RlhlI%BAzZuA0N?#`Qr^`WSs3H# z?>$e3ifX>UMX_2UDx;+M7`$Wpd6E0!@%-CRkvlEGB*t^2CQT!+-GhqBtuT><<`o~v zXSyj~qTIQq*zB7W@=!K?i!2{sEHGbeBFKHTEVv(LrigB?CT(VODhFDeR8Fr#*e_I6 zd&fJb6a21c78f4i;_ZpgGoOwNV7Pj z(*BP#0Rki%(y@)VANVx-_Qcz#_lS!&VV*i!FRMG_SYlwPpMt>sQWtjHf9&My$_LM5 z?ul>P=?s2^K|?Yg?|bYlU%4cIxOG0(Rykd5+UItYq&`&#v%%*6U6?&2J8euhRdCx$ zCN`%-&)>>1pR5MiU`UjRJVewI#R?f1gl@i8;TlVhOo6SSGxo(#2Ijpb5B)1qa|jME zU`YCf1o_naH!u5s>6@Ni6D9`d(!FTQr&&7=V_6S>n@*SGf~il)-0`v^Nv%ub<`9_` zg_kZJ)%-=5`})TkVhR#`qE)oJTD*O6Wq8JG}*P8kql)h%e zz;bls=h-P$#h>UddMEx{uUfL+RJp_}YBvH(N9C@p}g&V__@+W8Ky>F`St0^DgI z=zoWbxhQ0VhlaoFJ<*;HxzXqy=e*c#OS&;qGFuuymfrwLKqv<{{=mXCce~P515tCs zBlJ(?4EO^`T!@v~jAx`a*w+sG(ent@Rkot$6QT`G=Jv7uD1HWSpGKoM%%|3AojTM! ze1$;aKkk%tM}kM-(aXKoz32U|iSkCA22ArAh(G&E$chmU*=P}7+H8?r1^$t7v0r^} zUUovedpY}aXKEtO`HG0-rFu2GVr+p~pZNkhluG5NfKXZ*oMy$*E!VYt$~npfWLA!* z$%|4!?5Fi4`B~=P<=&7csY#r@%u;K@+sIkE;GPJXpsC zoczO547V_0sP==b@2zPM9*)z&jx0S>PsBs7e7CdDhzu_d;O+TI+U|`W84yPV;55aF z13_+n15AGlKaS*f{Vwt1FVNI5(^4p}O6H6^w;M#WCqekwX7^qah3u#-g)pT<^pLoO ztL4oAHDL#mnLLs=_4FQQZnt>hw<>uEKgY_0p7)^TF0Hrr zQSf%=lC-Lu&oLs}Hz>$#GtB(6wY-KHZW?IqNwUIifwtaRIcmKM`{z}SowmSoDIu~> zvOi60h`-U~p`B|4v4A%q$|h7DaCgq)C-kO3(uLg z{wkO5^!dH-6(S){-V0P&lD}O<$e~e)LxG}J0nW8$SaN+T&sH3qp)3DknP~lWG+rK~ zT|$9)35$|KZ8ui>=b(33lSUz6haTCb640p%Jx+HL$bB9d41k1Iy|13c;XB>gCn|Tg zqkB6o%-`eq`Yk6v1m*fb?pR`}?=v4!L?IUEXSkjkxb-8I{6=fpez_;_RDgr`0t1~q z!BbV`e4#{$E;66d^$U`HCUQv#{Ec1CR8L?EnDDH|-%q6|D4HrT0Ug14MS85BRaCMwXA z4OYQLcBEFOqQURd*8%EC#Oc5EntY z+1AXdvv8%kj-b-0EGQ7yJmoj$=HrY&%$XgV{A~lqVb2UEy5;}cL4@FtO2A=&86Ymd z-)~mGwk7wB6pqQRsTK8H^3o;!W`6!VS*6ndk7X%jx*^P^^DwXIP(axi<>GRlpe_EA zY}+l7Y>PU2$|p^E@DN8y0omu;aH5K>WEEe3&t+~xyzek+i9|i;kEl~Qxu>o!u7fER z*hNbej>^qc`qnYcAwJl+XPXXP`Y41|f|2%JQCcGY_lPFF++y+F*y25jzXVEE$B}k? z|OnVuxAtm3YZ-G0}TX3H+c++0F^#<8^ z$s^ym;qp;2-QcC>sBM%4wR(YL-P1Ql15s<6S-;Fir~1nJM+!BVZoWfNYR@6tl8{*C zx1uA3%S+C?`I_BxLT_i^kY~Y46C@%iAK%%2Vz-a=CEFVMw!ooH-b>)ifTeKy!6aHR>lo->z7tEb&5#sSRS}!zw$EDR8)XKLs{B|ThD%2K8 zzT~4NH6@$GX;87(;5X+Jtykn*AYI%6*9}NCZ0};Ni9BU`R z+M!x?Y%u;l*@5@riQVy4CHo(3zemoGaYMOHyzDFA z-`MRfV>gkeP3*gNVmI+V@+3OI+ZQQIjUSBMPboN>l&HMBoHHYAzEBIS;yHp354(Np zYd_Zee*`peAk~ddDy3iIX-3{%ci9rQcNN?l1Uw8J`Tp-PkCc3}xtmQ#_RuMV%QBH2 z_F)&fUBPPhD|Xe*NSI#pU~y8&-S`r=e>}Xcc&6XGf$Y$u$`j+Fe4D5em{-@S6mw`{ zO8MR#!3P)PPd*`Fw=#J0+llf}0K!0aJ7T@JE^F-^J9%$HW-7YN-k>#UHRCOLC^Shy zAnelc)@bjQxGWC)ENKRtPNwQCQi|Z}4q2U+3F3Xh#F@$1K_yW`UTs06S|R?)$kXmeWp zIA4tZsMv|}JFQ{B@Aj@j?<$i{Jk{I}ySGZ^^Prq^4l?rMjkC`+)|TOLA3_59^+(nF zwz3bU_nO`J)k@GLwn*dx6QbesG?E1)EliG6$0yC6<$zX~wrHIU6ShGw`f>Zfoq?%X z)>Nxl#W}lL7v{U)wJ@dTv$Jd$TgAMD^P((OWu+|bq{lkc22>{NH?;b%YP`-yU#kgV z{A90YC(*$e*w^lAgVUH6czY1qU=+=T(aBPMe-p}Tb!Vd%LU;LDKc+Ni1Cj|=!%$p* zr6aGYRP3#uzS1$AaB$-LaN_O90L5;2eGFg~{rF2)Ag$~KBb&LaRH=Hm>|TN2SO9a$ zxOd#aqOSb6w70jS-z|%IE}`KyPO|lufE&%OTkpga`P{_O1ARky(v=!sbRL@Kv5|( zh}&RbaY16S{JB48OYMLA1f@EKp9JJx5^q0J2$z?$GDRd7_0-Sc-dmRQ$utN!6C)vB zMAX}Rf~Bz)8qmU?m=jB<%3vZ9gvHOJ>D!#B7&|_>w?Kjdz!~o!cQQ;gM)+fgE@CU@2?!L(P_K0cnrR{XJXFT^!i%;H{1vW zVx2ksOoKZk0dYpppN!1>c&bFL%uDD)hF}dW)C4Epyu0cNW%K(UW+@(B-`vO66!;ow`X|{1Tw-p#a21rwN9R}HD!NP(`sgW>kmp5 z58CwaSh4`(BNT;{^Bp`i{cT#3RR`4fI-&qQnh{sR(Y6Ny^>LgjcqY?_iWOKF++0>dwQL`-yfc zL@uQu@@v{O(&ILaPqL$6JtZrv!&iX+#d0do!DZ58@hby5wmni;-8jBguPH1*_#UI3 z!8uA?@~iT#Fnce}&nFASW8Hf73%d@pHS`AdSZh&dZv%>&?&c7sg_dh&bb{*S($mH> zKSIHZB4~vvuLSblMLYIePJbaFVm6wBYy&Hh7LcRUT=)%*mQ68z@vV}0iZ5Wy2y>C%ZTY! zk?$d(P)M)<+W+|eVe(F^;D>jJ?S=)g-sz>^&q-H`LtjCvcrnVM?S%e&slrY3Z}H$S zz8A|h|64y^eAL#Y0Is`u{5yRZ>xu^<1J31SGwBGJ z9jkb-q|@fTpGl@V`&8yma^_&}E$Rk0bSkr`)+T3FeLuO|)$6!0IdSko&Uyk&S-DfR z*53SL1T27qb6MRYxLf4906d60xy#By8=nBb#bUnBvJoFp5Z^lS;)#w5pFZQv{WpcP zt^?sg6U~SX4dI?4iN~!Y>Tta?n`J|abWTaLgl7Wpc=<~mfA*hh7kPO%177jGV(87H zt{m-?PpN8V*6=>#2MFMT8xlpB{v>oK?v^ITOYaMr7K1ndros!Qr8&j{*gSWy2W4{o zg1*)l~W;oT0?N+}vydi2ZeRcWnNdlx@VzMUS;O*1n+^^+7 z?I8H>{%pX>7EH3t#a`>jz4FbSEy-;rF}-j-n-c*42MaO>tLI;=JG#Ui80)Yv)xQ;D z5jjO>WoLB}501{8v%ZNR&6GVHyPtm5)r>B4C>hq<1?^1jz0cj3wvi1F-d8we{bf2S z;Ie$iPb2}&syFH#Vm{k6SBemeY>uYq`7^U!WX+7T_d)w)#h2oAHEzdce%%k1x%WiN z&`lw@X}PCZGOVZ1tv!I!UF@_f4Y8@U(ch3vVQs=9f#E2iwI(6RbN~8xL9SoqlJ+u} z7%i3*Le;tccQyqeqks!!WT^Oy9a&<&7-vp@uWcxR?bPL2T~do3&ZhC{b~eY|wXoZ+ zm`L;wYG&j>T)$GDu?@3YL{O}{Bt`bvh9j-W;teVgy_>Xe*!_V$oo~WS9Y}YGbGLqW zYkGQ97CtU6e)M5kiD5h?HKd>PtF*Xre70(sx;!JJQOsuMPb>>;U6ETQE+AnVK45d< zQ(g`)js{l-Vh_+Q1#a8*7OiAh@u1CLq4>O@uOIP~R*;aFxNy2wb{W;r?~EC-FELoR zm%;EGkD+yAa`jO`?0U*rY@RbBK`=x|fl^F>7fXU7pHzZ}sneO9!SuA2z(Dce5c}+I z_{eEeSrW6b7_GrzDei2+n4nz&!$qJqu-(VixxK$)D)q#U?H> zsD6q{YDEIYk4jYN0&$-bma@h(mb%rJ5z4i_$-7@U6R(h-A=3>nw5j zf^uLVBS-wJ%u>!hn!k3yYrfm~FJ1Sri{K$yUB>^IUG^8>zO~gLSD+gt?Nf}5MW}f_ z*trnJIja6?t{xQ;JB1|=E|I3&ZFGzOj+)TtMX15ezJ3~M1De?ql?kCqmOOPRWXD7} z#MED5}2c zZbAf9C68w<7#{Q5cDF=6+DDw;kn(1bMapmza?0i1X-nV{`X9-iQ*ndJ!!r@xGFl)3 zEJB7({^b47*JX4^#aDIO+2bUHV4e?CGdnoNLBNYAqnAAXuS|~~*%oSzcGX|<+gLK% zE-)W}7Nm6~8d{=d=jHP)NW)YuwE-ViR{IWrl$!65RA8JULsyG_QC3(bt@~odftvj> ze`Sh{$t6a2VY*#s_X|>Y(8kndevtA}CYO#YWEzwCX7A8) z!(ILSg3_1P)CdB@5r5`8nuASuc7wuinQb>7tBmWkcDzgJf7}R@7YS?+B~71;#R(A$ z;MoQUHk5^5g${0n3_oGGH?6(UfN2f6pie#u&i1%0_7b2`Q`aBXKT;ZO_MGp4=*j`a@5x(3Eu$;)-_6?VZr=wI@BkUNS;h>@itPF^vZ!)& z+0xr`mMjc6Vh26u3n0W?=I!0{J48Le%|V&Dm?=H)wJkx{ykh<2M(n=|Nt4ww?c1?dIh_)~9UR>Gv+>VR#v0O+n4Q6b2;lAo zbKJc9H-Ek8V0~jFY_&9$P82+Q-;~Ibpg2?0?HPY-4Ra9{3hA!3p6R4Ze*a+6J8NZ3 zu{G$>yM3I;99V$Dg9mZoJoaQelzFr_ZSZX8+a)WV=7K zuuy~LAOcHG0&7k{S~rXT3-933m;nd=^Wsc9dj-w-dHTFkW`A`mrA92_li)K6%)ub6 z#B2%M95(8{{_?)m=?0IO-?H?1(?sNZ@`$nNY`4u!h)pg1SGF+3 z^~8{;;0p{XFzb2-kFa{e7gC+L1Nv3lpPgW)J2S!D47}k!DQGtiyYkH{y7@ovG!}GC zf~dPnwhVXHjV(zsQpks!Tf)`6ML!(eO1myGw_hxxP%iUfps9<%)gotAigp7F2zZ*2 z=Ft~elsK(s9aK*_O4Y=;Jq2u6aLGdxEd$-S+L@Bmw1T$D`Bf@^BbEpa2JWjCm*W|y z%}ggqugVjF7yJ{WuGXyU)ryIxTjNVkm@n^dnDGm@X-@dKdSCy01+4&U-Y~}BS{>}^ zt;Hn#hB>`22tTClS)sNivJm4A^id!6!t0(TWmd0mPL~gFOo$b@7nUg=E2UOe+8`vq z%DOv$zrAT1Id(Z%=-LFcUhkIC0@V_S@`7S?9U z?_wiz!J5sy9x$)>W@hqlr-HqIz)(-g>4iO=k!IaIaEA~&Dc~K>EcbM;PQ&q;cc;)-t{uQmTwcICh}>EOGn zRg3`XfcC3Bz{2%W$I1OiS$t>!Q=}IUrB1jGLaO++9|>$O#S9j`S^6}~dpt+M!Fwqp zZj7p^qs>B&^$w6!^~x)FHu!R^7mN}2!xd%=EEXofW$aTB-}^w#mw)$QDki=ZBt)9= zZYWrkWHt}3NTp7>^p%kjFJxK`xN4C%alWkO`$U<#=F2wyO=p4GApJ^-m>gmfVd~Nn zA;^~AQVeQX&XI-zFMFFry(I)FMS^BbIOQ54SRB#REj<$H54Mbmkzv@CT zUCX}@eySZCYVn$Y1?v1Yo(%eow=e^WlZs`!Ff$-TE(BnDndg6Vx&pXyJf_&)+`}{6 zs8oy35FnEqlD(I}mxfogo%ESZ6de4M5c`&j?s-D;{aAK*rp@J_*W15h5--}S4rMX^BFxr(dJe~j~m zJbVL$Cr5l2y@Y6A)#u_u?Xn@)oxy56Md=(!kiINrxKP%bG>MdQ?hRtOJmK|qF zZ~X;NO(@W|&qNASkWXqhkX~;wb}NW~2zYrJ)ge=3b?;4SDE>-#*oJ|}apk)~#7jW7 zdywkCw#^|*9xjJPjtBqibFzO&C|&%-n`7+DM z!tI!({^sW7%p8VE)*VWwplT536Dg4UW-?Z`Pr!lY>FSY1Y<^zN%qpyR0+4_u)M4>L zAc|F)#QgJ~r#|;0AUT6tqQHSzM$GsIv-53IRmO>t@Spmp^lDd8@_7F+tyz##*E1Cm z)O*T`X`#{GJKVE-iR^!gfRm)@0uA}bNKvon99Y08ykSd96;R$OUh=hcmz6$=>$S`AZ>y;SD@80s$l(k zD;#x4e**esg+%U^cuqV)v(XzJcO2vJ9*Z9xtwqUuKA&m~1~exRuDiMgMb`!}O*~!P zg0v$`9)A~K2lOg$Uw4OLr=(R5Sl`Fiueyt!8);gQB(GITEkdJyTf@BGt&nwwAQY*h z=X3TVd;3+FCL*1iox&R?6vvDV;?BWqg^zuGX4pw#?O#{k^0z zkoG~aibT3MjYQdqcoBzF;63;0n|P2>lrTn?c#21&VJ@mFy5kMnwZ*|d9SYCty#G-g z_V?Bi6t*l=t*POEcW)`wX~%t}?$NiQldHY%^6!2=yF1roTqd9dU@Ur>@(sk*c4zh! zL_Mqz?VU;%)zZEuvTc0ZANUE|{!iQKX<5K0*vzZ4Yl^}Pfhbv@9;AlAK09puGT?V3 zqyGS!^UiwOsoJ>B&ur;LY{(ncjxBr$8`p!JpZ8CYot1B5f;$D)_fR^FPWn;2P@kwq z+A4FWajc*16E909(Cc6d8{3Sum!+F`DPc}CTY2Of8(cptMZ?9<&zS=_Bj3blCZ8m+ z6#ibG{5;ITmt`Ew4dTt3?E^J_Vq@K3`|Ykme&G0BfgmY!Y{LGD9-VU`Uc2Gg^gBI~ zM<#`~M5z=#)>LT%5mr=aOg>733A?n(XQs>IJ`+D)sL}ieIMc4F7j4}k5y_#R6>-RJuLt$3Fuo${LjFTu+3TAXKwI?uON zLfU$vmNWK4*joLct|Ov*{7RC-kLgCpVw<`|V^^yHa-A}Hhk2zD8c3M*^bDdA;Zp}C zbVI}@f8vA~MpNOq+O*`NDg;GupAUS{ZaNw&Hok2ks^I=RO8S14tlkTtKKrYeK~#>2 z-9pDW!RHq!4eb>vwe*)c(e&-BNSvZ%346&$Jq>fO?x3~$rwjhrQe-9q+BZ{I+`;b% zw}tzU5`KQ+cqZmFQuW&Irc4Dxe%@^4DzL#-5Zl+{7cXB8Gmli9-WBFBtlKW1AGWsV zNcRqVeiAf7N2XO-uj5{r9G2q8=(HNYgz=~fd|`;aEqwB8?DVH-;b(z z(N~+CHF%qa1M*S;ZIRPIw3evKtXvpt@vrf2Hb3rl)k5&y`J9mdFHk^0U4jS-%dSIB z55!r*LoavmZdl0z_@SP2Y~v3*DTJMwqtW+d{l3J-6-IYaa`+7@Oa$p)w*HpTV?}i{1P@;kAM9m?Gls9n%DscB#3xM zx?bFGYDLO{q&wt2kjl}YT!z`8o{he`7@=Sv@au)uQkBQ*WU@7>$RN@^BK+Sd9FLLq ztc|uKF?DfX-b}Rje&Lj=MJ6#y`-=tjzOuh88TM(hgF}SYp<45pGlwn|i~8@zO3v*N zy%z6G6DFo*JAVY3#-b~-m+Itbc5ty%hp{eD>?gWMGxp&*O&D> zf>c-Pjuakjp4rGO7_|grdl0R!gs$Gvt|-mUloGQHEcCgyTUhsyhDH*fBPorZO*OLioXOh0Mnz-9YyOym=5KJvW-GBku)Fs~Q`8)O(XQlt(_W3nQ@Zo!tMHUe;)s#grpDGnD_3TIEdC0T$Evd>c~Diz z)w^2PP|!7}l#>v<;CCKwy7{$Dr250SY>p@-zMs91BtAuw{I1=LaEEp6w@wu3CzSUH z=0(!5oZEvRW$TlqrTTcnUM>g;g{sG`hkcS8*RTM#U`E)<&01LititXuGEz{E>_b9vl1~_meTxujX4fxt`ZtsktJm}+0-YgA39nrkHOx6LmmoP=iuc^v{X!@l2rsWk`)L#x z&l#Cf^&c^Dbst6k0HIG`>FC0jmE~Pt&b5)!^(hZ3`FURCcA=FZbWIyM32s@K3hz`c zmYAa4r4{{sAR{Vi8#$UhUx8B#)1ba1?ZK0$F?Swp(gz^Rsgasz)lccUzk|cfr8EDi z&44sw@7A=4D9t3cM}ttq z=nMKBj9oU8K5!Q0yt<>Ekix34@4IZiy8NkvB~9wFLx0OE4p&6TcrG_?^i}G{&~GsJ zv{T>s>aTF|OWky_R|!7PnG2dw5?>MkNgw(4KUyyzqDwqTPW)`6;FN zR~xP5<(a1V0iCjD6|KHfbMg(#9&NnY^J$mq09)CRZtdiKtD#~$^BIk)D+_cbAtC0Y ziWrt16VtENP>7zroD>a#IP{s~=5Uq*9DJ~s5i*c_&Wpb%~hdgD13vSNdTohUN z9gO$+J010!#6#mcM-CMaJg912Yw?|wWvdPd^xMDicHVyipsT1&yOcH#T6h5OHv1SCyZ<6!MJM!P~0)UviIT91f# zl!6?We}o0FJIB8{)lgM?amInxf_CIBe@xm*8(_bwn#0ie+u?OPsgP-ehL{9Cr80O?-693hLSJbS`VU{P zT3&1G&K8{6T{gQVx_B|ayL^{1qpMqB1&}kh2*Y9`Lg!eCo0)6l>i8jwu4$3aY{lcv z>sWm`5KYl3xvHl^pm^{$?ANsG4!q!O2B>u+17$*GF{{?n@tZ){>NsXcZv=Ih+E&!&aaj_NN?L9Q+vtfO8$!#;o`$S44KE0A-tUadNo+{bA#dUgmbqg zpqsdzB2zuZ9JYT=v#T!Y+8w*M&!(wm6qkH&(vNBP!q|lH$oQV9{7O8YfP@E|&>3kj5}Skx&gx~=@2RtguLU%@^%SND)^06%QAzY~pYBQE%Dx;#^llkJ!F z(AVMIo+d&?;LI#QRd7^)d{$C=YlBNvpLA6N!7)p7F0 z^Z!u#QbGv5BWk3!&U)pJ5ZkY#`#5t0{Poz_hioo3*Bl+^%R5SGB`JidM*m2w{6V^j zr1)uq54WM1vqG4ZJdLrxlvetxC;@f$4Q}!~9_s)hYsi9P$hczmrTWd)_-^Hl-^z*D z;ctw$-|;=q6PVBT2j0$BP~U8T9`+Xl1{Uc@xw+?JbFhFJ=-MtY!@@Gg9QGu?FEBJps{QXnd>x#3xy^7fJ%0%BctP!e5l3KfQ7K z#;t6LqMPduxuZfRbbtP4H<%xr@7ncpSt^E)kB}dj%u@FRMk8`!80v!KR>^hj{mCDJ zf@44_hRXnug37*D>mmP=f_qljvQmdLRV)+TIdXGHUdJW!g1+EWzh|#h(dYEuF>sGY$*Db+whZ)#|lPubXI;TgF4Gdpf;S*AtW$L(K z!E*?pAVS9tiRCblgu^X3Y)EFTB}N~Z&cofVPPDMU`rMXhM;;slr$>tP@c z_N4&q2FQ~qVJZ(#DfujaR!`1M9oINNeyEa_1qSbFxEH4}OfT*X=>yZzoz4IG6Zf-6 zd%PIz7=NRwxYh4O``D*Hn!>sDifWAA3$3UD?0lp8w%isfy#-ktTvZ0~1bDMGL=z38 z4WvtV?6mfoeEPBFVNqfU|08&nzmZv`X|J1Lz90MW4|gSfy};E@^KR!kD7i%aWq^2O zSoUbb=JRXmC%+4;JaF>QYP`4QjHxG%GGM}5>oz(v5=d_UQrp0sYMrp4f5!sj1 z1MeWdxe7<#ZuLMgGTNB$^!t$6E@xfoBM z@U_$Y!j2o;Vr_lD=E>Od3{zL(8 zK2)Tt`#*s>!+1vM55d>ip?6ROf4Kch^aV|%Ppud#e*PLs*H_wML>`C@lD9&oi=^JR zy7#Z?GkhGPmQma2k;y3LpCeF5wxy~|qC*y=UdVw+y52NlR4Tr^A;$6R`G&-}#i5|z z)!lHM-o&K%0OVB)8!_Q98~N{}O5);zz+;Q{j{(?K>U(%@-7niX)nbh9vpH@`cg8G* zJ0h!@V9JR>k=wWM#&^dnvf?(G+8=qbybgv=G6>Gjl4nuUZB{|E1s?Af_ki9f`y7Pq zpwoQu&c|tujy1k0o*N_CQ<9O)<2dEv!kk|eENg2g$(p`dK-0;{+;V+xvr{~zy)KBw zl3&%s4x{iKbs64=Q|9VBbEgiqC2#a+N?1|{mJ4&dz?Mrv8F*G zNu%muDX%?|$QMCnQ7i5ul~X#c$7`sI4u5im7yJ2fP`oPzE$R%?bWubt^~s?3z}8N@ zZCbz##<_{s(c$A(Uk4qDJmXK(o>v^9?>%QW;nF8xs6i5Ag(B!TN;iQfn4SqsT#}>0 zX72aF?tX4_>rwwegZJt+5iN!hX;fS)ICrX;cxHr$&ye5g4KY>r`V2tgNAWVw;Y zOvp>!b=IfW;R%f{4fj!%;B05mmxuxa2?3#FJx6u)!#gyIaM7Sy7k2>Ur~LluzKCkm z1E^S55d9xa{pFDPfdHyfzx)?!to_1)1tWj_x^pT9c@CFT{gr{fus-uMozzkDBAy|O zT|L$FRlSE##E)nDMczW}yA9e#EeZ+*7?qj*$0xLX*goDuK~M!Ki!i)K3sVqE*NjPkVoWf7IU_{j`08~3b3yJ|(E_jM3a1SRz{VE_9o>Yp ze`2$GHR0F%INT)#u2jl_bgHbGjj>Kz9%q^QHZ9RH2L64V4q!Py4~j2}&7ERm3g@?P zutZ@%Nvqv|r4ef1|6ZT?mdQSr#kN1FSMwq4CtXG-dJ`tk+Y02_7otbX8`7l*H3`3% z-CTW!23N)}u}e}BN#N-p9M)5hLow#EK9IiY3@QG|9)qeDbv>ZG{`Q>ak zI{M5f|NHNJ!E5SbaRZ6Qh|Kpg63EusXjo%NT@s|$nL=*Quw0E9gded03JHM=0J2rk zsT@3g${GE(Z**67TU1ZK`o^>bh`7b`b;XhJ-f~3PpqJT8m=Yy$UB8|c%=x|DGT@9c z%|Z>Oj=%fG=z_yoNqwuz@?6qdej?!FuRqrE%kOK&7vkmKJ#PwRplDOJYM;!Pg7!tR z8@eKzb_d+9+N}AV=Lg*n70dB?(N}pQ@xBNEFmJGXLpda2U?UhDJi? zJa!)DTFW%4WHT6?8HOZ|I?h*B7_uI8n(nY23E6q@e|0TDbi%w!zBy9MotbT#(lgXp z^$RFmaT2W^A4=7GHjm3uOuEpGIAX(;$Ex$NWk|nlI^Yov^M2Ih&Rq@_C17~)!_|Cj zaLS3^0ry_M-v-FBE}1^G6{GJLX->PGB7P7l^J0_W(&D=(mA_O3lMrxY*TmWK8Aym}@MGUiY$bhYE*0E8 zO=?E3wQeEBGyIxff(^o#89p$g(#r0NixmCB(;R(X(O@~L}2fR!OkdP=2zJrQi#ZBu| zzWlVb_#QK@tG2P0zuFd>kwrw1gfTjwA`6a4I1e5k;X05>2t+hQX{g67UJW6{Rz+(I zHVPhIiyA8t-tH!Xc@d~(sBIzsQ{B|#fQ^FT{|u!Mw_OBE&vh1t$U{r?D-4744yVyX znj;G~3bjqRY)Tidzc4=@wxf13lR@*eUopdLH^H5hD85t9ZKt)1R<61YG)>FItJx!I zv}I~pYWZqCgi(ln7fmC%vPh%oMEJw>s#&NfuyzuvCt?_yuZe;f`p_8#KMfo)3QEUD z!TGQ#@z>h;nuGWfo;cam6JC@<>+pJFU5^j^0zV!G(!STtWw8nHg-`CCddVdCqI0Bf zl!rRj&FR!>ZJQ!QL`pmH2_eMlwyN8uL3I&ApoywBUll@4?8LV@Xr71!sNODbP+ZLQ zD|Rvnz8*o#IW3jL*BZn}o_IapRT4yKLq3q8-*(7G+z^u2w_p6lZpjOoeqmp zj8O;yWkI5oiUrC}CvC(mI9<5hh|utf8WukR2?u|Al}~>DBASiX<6mJ0G>;z`6Xg?{ zk*HCHI$sEZR)!EA74^g?!(kyNL>;w!!~dHbMKo_sz_`9#cl9+H6gh;)&{^bp9X15M zD9+|!qqeb9+w#S8p2zvBX23*6OGTTn)=d>k%99O(f3xnmGE9Lad8 zk-_q{9e(Y)_@!yJ%Z2NkT6am;KpI6S!X^47pxNc!oV+~KUNoYnP>O}czM!|@7Qnz136l4~fNkn_)Twh+7_YL13 z%pHNKQETm_mZ$sQR#>ztA9Xss-?VMu`C@tWc+!U4^l)0Ps}>dUZ?x{bty)^jhs}c5 zq50Z+s?pIrFD(yWtmpmCM!_b*5B6zB5s4_Ys3KgBC`+J46yf~EKGH$uazrEcJ^zN& zNv=H7C^`|nNwjn#XhO^FJma*2;q56L?vnxdZXZUnptRQf~l6R zrfp8NZfYCq%BSU#?W8th!QGiZU47~ z)&^W>RruBQMSl9WX2Qp3o=QcU_`q71X`X=(B+{!fn$5* z+WPu=5olQiT^<_xdbJFfp_`_B_2ubJLSLqqo(;mVS1kyq7wa~yTeKa++sIJ5NZDbL zjfib{er!3h?H^nJ_R=Ijo{m|rqARZj)a{I}W0XeRC=rfWwKh=ORxMW?BVj~7VtLpU zv~)43Wf`HCqZxyqNPT!ZTwlqRM;b*ZqCW|=6CrkSEe4-fS(*m*iwFjg8Vu?)`o5zLFuWPh^>!#I4BIcln^Sc;~ z@@hYt;p?|ma%GW5(TVtczN-R%D;TA}Tqp+fm}q_YgG!xSFTSX)UKmykm$!z|G0__0 zn-&)+r@i&j@@xvvr{x-)R{Zj-<1a)w{UyTtIu@fgkz5%%-6*oMvV>Xu90`R&g5>1n zW@yXwTxfYq=+|q@`pK~*tE7Z~jcHy+YZ#S#L3q6|MtP>_r$c%S^3tKt<3hx)8wdp8 z_xlkH2E{%#TBjvqkB18pTecDU`oxxJl)iO%ohVJ)^dg9Y82e_ z`8ng@j}3Kk#4WrnV3ht!5UrC__un{eM`7nzh!ZxO4Hk<<2r~;b!(y!ocI-U;e4`Vv zHT3y0Mm=%v?QxyBj$+uxsoq%^TmSaK>t8HJ`CS}F=aA&e(5XftkzDQc=+Oh+yLT7D zt=+|@zgEy0=*RO-CKG!0?1`Q+_2g-FUL4}$dZTymcp@SE%hPd!xHzU)%joiqKMt6dLdA_I{)i;jntCm6Y z#I~sA_M&a*MawvUp2y4LscyZAW_1>2#X#w~Z2sjmypBNR&)cWfpQgn!s&}s*;+NC& zx;;f2Dqpl`ZzRN1JJ2t~ZJ@P-+7<+Do2YA;c&Z2gYRh|u+e_PCtu9>wX%rGkJLsxL zVN_Q^n(pWv!0FEGWIczR~|tqtNHAt*fTt-Z_hT z)B34t!sUxL($KG~5v^A<$WS8Cw6=cpJfh;?v>i0FXr5j}7`Vawu7ETOiKHELMWfK_ zW^{sUM0(F*p<~)^6pSXKvG6iY#Mvm+p&~&z|EN%N1S5zkYcv zv3W=LpTHo^g`qOV(2<6InOd&c2ZsAWt8diY^xLUL79t`E&(kmO3P_`nNG<{+0lyL$ zozy>fG~v~YZqMFi@&y0(WKj=`yAWtHpMe2pbuy~YwYV=)}Y`BOS3AwHgdnXs|4@vwPQx}H=<56ZhI<*lx( zt`n(0rRgEkaecJ>IiKjZGJI@mLy?@OqmV`+kz52uqJ1SWI;pP}jC<8>7eE$H?Y}C< zwC^-%AF9_KC>;rQynsYpL@lZT=+})MHdBR}#hliOS1-E94lP9loFfG`2MwLTNAu_U zHI25S*L#}QUt1o@Uk7iOGzy8Ni(n+$R|2Dx`dWeS5{e41D$r5F^SSqK1TACXY&xIT zYckzBqQ@_UT8$bQZCcBpqlBcyMDeQ{f;wN6t%nRky*MA8XP8chYAC9ysPmd`ySBa_ zJ~pLMNF-eZBhkJR7@gGD3Ot;nzbi>xtkw|wf#$aats}&f{`c+~rbqODoPdOzmaF@e zZ!zW}CiTuHp3g?no1%<3F%-p7Lm1t45*{8(6egh>3Ey>(3YKdxU@0 zs6gGGsK~2jMIwmayew)IjCMP%9<7W>SyXPv8$}%cUuxD7?!^kSGynhq07*qoM6N<$ Ef(!p^TmS$7 From e114aaaa233a7bc071e00104e2e6f0844b80460e Mon Sep 17 00:00:00 2001 From: Jill Grant Date: Fri, 7 Jun 2024 14:24:36 -0600 Subject: [PATCH 0245/1239] Update what-s-new-for-visual-cpp-in-visual-studio.md Alt text fixes --- docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 62b548637a..42e13dd66a 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -39,7 +39,7 @@ A partial list of new features: - **Pull request comments**: You can now view GitHub and Azure DevOps comments directly in your working file. Enable the feature flag, **Pull Request Comments** in **Options** > **Environment** > **Preview Features** and checkout the pull request branch to get started. - **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. Requires an active GitHub Copilot subscription. Try it out by clicking the **Add AI Generated Pull Request Description** sparkle pen icon within the **Create a Pull Request** window. - **Image Preview**: Hover over an image path to see a preview with size details. The size is capped to 500px wide and high. - :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview"::: + :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview."::: The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it is 251 x 500 pixels and 13.65 KB in size. :::image-end::: - **Breakpoint/Tracepoint Creation**: You can now create conditional breakpoints or tracepoints directly from expressions in the source code from the right-click menu. This works on property or field names and values from autos, locals, watch windows, or DataTips. @@ -68,7 +68,7 @@ A partial list of new features: A partial list of new features: - `#include` diagnostics, which provides a detailed analysis of your `#include` directives. Activate this feature by right-clicking an `#include` and choosing **#include directives** > **Turn #include directive diagnostics on**. Above each `#include` is the number of times your code references that `#include` file. Click the **reference** link to navigate to where your code uses something from that header file. To view the build time of your `#include` directives, run Build Insights by navigating to **Build** > **Run Build Insights on Solution** > **Build**. - :::image type="complex" source="media/include-diagnostics.png" alt-text="Screenshot of #include diagnostics"::: + :::image type="complex" source="media/include-diagnostics.png" alt-text="Screenshot of #include diagnostics."::: Above the # include is a **reference** link and a number of the references to this # include file (in this case 1). The build time is also listed (in this case less than 1/2 a second). :::image-end::: - Memory layout visualization, which shows how memory is arranged for your classes, structs, and unions. Hover over a type and choose the **Memory Layout** link in the **Quick Info** to open a dedicated window displaying the memory layout of the selected type. Hovering over individual data types within this window provides detailed information about their size and offset within the type. From 65d3dbd92a0ee2b4b394b879f7a9153705ee00ce Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 10 Jun 2024 13:07:16 -0700 Subject: [PATCH 0246/1239] edit --- .../reference/link-repro-full-path-rsp.md | 18 ++++++++---------- docs/build/toc.yml | 4 ++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md index 5bcc13999f..11d795bdfe 100644 --- a/docs/build/reference/link-repro-full-path-rsp.md +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -1,13 +1,13 @@ --- -description: "Learn more about: /LINKREPROFULLPATHRSP (Generate absolute paths for linked files))" -title: "/LINKREPROFULLPATHRSP (Generate absolute paths for linked files)" -ms.date: 06/3/2024 +description: "Learn more about: /LINKREPROFULLPATHRSP (Generate file containing absolute paths of linked files)" +title: "/LINKREPROFULLPATHRSP (Generate file containing absolute paths of linked files)" +ms.date: 06/10/2024 f1_keywords: ["VC.Project.VCLinkerTool.LinkReproFullPathRSP", "/LINKREPROFULLPATHRSP"] helpviewer_keywords: ["/LINKREPROFULLPATHRSP linker option", "-LINKREPROFULLPATHRSP linker option", "LINKREPROFULLPATHRSP linker option"] --- -# `/LINKREPROFULLPATHRSP` (Generate absolute paths for linked files) +# `/LINKREPROFULLPATHRSP` (Generate file containing absolute paths of linked files) - Generates a response file (.RSP) containing the absolute paths to all the files that the linker took as input. +Generates a response file (.RSP) containing the absolute paths of all the files the linker took as input. This flag was introduced in Visual Studio 2022 version 17.11. @@ -17,12 +17,12 @@ This flag was introduced in Visual Studio 2022 version 17.11. ## Remarks -Rather than generating a full link repro like `/LINKREPRO` (copying all the files to a directory and creating a response file with relative paths to that directory), this option writes the names of the files used during linking to the specified file. +Rather than generating a full link repro like `/LINKREPRO` which copies all the files to a directory and creating a response file with relative paths to that directory, this option writes the names of the files used during linking to the specified file. For example, given: -- a directory `c:\temp\test`, that contains the files `test.cpp`, `f1.cpp`, `f2.cpp` +- a directory `c:\temp\test` that contains the files `test.cpp`, `f1.cpp`, `f2.cpp` - the linker command line: `link f1.obj f2.obj test.obj /out:test.exe /LINKREPROFULLPATHRSP:test.rsp` -Then the linker produces the file `test.rsp` containing the following lines to reflect the fully qualified paths of the input files: +The linker produces `test.rsp` containing the following lines to reflect the fully qualified paths of the input files: ```cmd "c:\temp\test\f1.obj" @@ -33,9 +33,7 @@ Then the linker produces the file `test.rsp` containing the following lines to r ### To set this linker option in the Visual Studio development environment 1. Open the project's **Property Pages** dialog box. For details, see [Set C++ compiler and build properties in Visual Studio](../working-with-project-properties.md). - 1. Select the **Configuration Properties** > **Linker** > **Command Line** property page. - 1. Enter *`/LINKREPROFULLPATHRSP:file.rsp`* into **Additional Options**. Choose **OK** or **Apply** to apply the change. ### To set this linker option programmatically diff --git a/docs/build/toc.yml b/docs/build/toc.yml index 72081ec994..cf2a4e9b45 100644 --- a/docs/build/toc.yml +++ b/docs/build/toc.yml @@ -628,7 +628,7 @@ items: href: ../build/reference/ifc-map.md - name: /interface (Treat input file as a module interface unit) href: ../build/reference/interface.md - - name: /internalPartition (Treat the input file as an internal partition unit.) + - name: /internalPartition (Treat the input file as an internal partition unit) href: ../build/reference/internal-partition.md - name: /J (Default char type is unsigned) href: ../build/reference/j-default-char-type-is-unsigned.md @@ -640,7 +640,7 @@ items: href: ../build/reference/kernel-create-kernel-mode-binary.md - name: /link (Pass options to linker) href: ../build/reference/link-pass-options-to-linker.md - - name: /LINKREPROFULLPATHRSP (Generate absolute paths for linked files) + - name: /LINKREPROFULLPATHRSP (Generate file containing absolute paths of linked files) href: ../build/reference/link-repro-full-path-rsp.md - name: /LN (Create MSIL module) href: ../build/reference/ln-create-msil-module.md From e935dc26d07f3f48548c31c961b1b66fb1843472 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 10 Jun 2024 16:41:45 -0700 Subject: [PATCH 0247/1239] fixes for customer feedback --- docs/cpp/casting.md | 62 ++++++++++++++++--- docs/cpp/data-type-ranges.md | 32 ++++------ .../compiler-errors-1/compiler-error-c2055.md | 17 ++--- docs/standard-library/mutex-class-stl.md | 2 +- 4 files changed, 76 insertions(+), 37 deletions(-) diff --git a/docs/cpp/casting.md b/docs/cpp/casting.md index 20c8157beb..28d12bb8b2 100644 --- a/docs/cpp/casting.md +++ b/docs/cpp/casting.md @@ -1,15 +1,13 @@ --- -description: "Learn more about: Casting" +description: "Learn more about: Casting in C++" title: "Casting" -ms.date: "11/19/2018" +ms.date: 6/10/2024 helpviewer_keywords: ["casting [C++]", "coercion [C++]", "virtual functions [C++], in derived classes [C++]", "static cast operator", "dynamic cast operator", "polymorphic classes [C++]", "classes [C++], polymorphism"] -ms.assetid: 3dbeb06e-2f4b-4693-832d-624bc8ec95de +ai. --- # Casting -The C++ language provides that if a class is derived from a base class containing virtual functions, a pointer to that base class type can be used to call the implementations of the virtual functions residing in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class." - -Since a derived class completely contains the definitions of all the base classes from which it is derived, it is safe to cast a pointer up the class hierarchy to any of these base classes. Given a pointer to a base class, it might be safe to cast the pointer down the hierarchy. It is safe if the object being pointed to is actually of a type derived from the base class. In this case, the actual object is said to be the "complete object." The pointer to the base class is said to point to a "subobject" of the complete object. For example, consider the class hierarchy shown in the following figure. +The C++ language provides that if a class is derived from a base class containing virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class". ![Diagram of a class hierarchy where C derives from B, which derives from A.](../cpp/media/vc38zz1.gif "Class hierarchy")
Class hierarchy @@ -21,14 +19,60 @@ Class C with sub-objects B and A Given an instance of class `C`, there is a `B` subobject and an `A` subobject. The instance of `C`, including the `A` and `B` subobjects, is the "complete object." -Using run-time type information, it is possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. The [dynamic_cast](../cpp/dynamic-cast-operator.md) operator can be used to make these types of casts. It also performs the run-time check necessary to make the operation safe. +Since a derived class completely contains the definitions of all the base classes from which it is derived, it is safe to cast a pointer to any of the base classes (an upcast). Given a pointer to a base class, it may be safe to cast the pointer to an instance of a derived class (downcast). The actual object is said to be the "complete object." The pointer to the base class is said to point to a "subobject" of the complete object. For example, consider the class hierarchy shown in the following figure. + +Using run-time type information, it is possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. Use the [dynamic_cast](../cpp/dynamic-cast-operator.md) operator to make safe casts. It performs the run-time check necessary to ensure that the operation is safe. For conversion of nonpolymorphic types, you can use the [static_cast](../cpp/static-cast-operator.md) operator (this topic explains the difference between static and dynamic casting conversions, and when it is appropriate to use each). -This section covers the following topics: +The following example demonstrates the use of the `dynamic_cast` and `static_cast` operators: + +```cpp +#include + +class Base { +public: + virtual void print() { std::cout << "Base\n"; } +}; + +class Derived1 : public Base { +public: + void print() override { std::cout << "Derived1\n"; } +}; + +class Derived2 : public Base { +public: + void print() override { std::cout << "Derived2\n"; } +}; -- [Casting operators](../cpp/casting-operators.md) +class MostDerived : public Derived1, public Derived2 { +public: + void print() override { std::cout << "MostDerived\n"; } +}; + +int main() { + MostDerived md; + Base* b1 = static_cast(&md); // Upcast to Derived1 is safe + Base* b2 = static_cast(&md); // Upcast to Derived2 is safe + + // Downcast to MostDerived is ambiguous and unsafe + // MostDerived* md1 = static_cast(b1); // This won't compile + // MostDerived* md2 = static_cast(b2); // This won't compile + + // Correct way to downcast in this situation + MostDerived* md1 = dynamic_cast(b1); // This is safe + MostDerived* md2 = dynamic_cast(b2); // This is safe + + md1->print(); // Prints "MostDerived" + md2->print(); // Prints "MostDerived" + + return 0; +} +``` + +This section covers the following topics: +- [Casting operators](../cpp/casting-operators.md)\ - [Run-time type information](../cpp/run-time-type-information.md) ## See also diff --git a/docs/cpp/data-type-ranges.md b/docs/cpp/data-type-ranges.md index 3e2e319429..175b4aad41 100644 --- a/docs/cpp/data-type-ranges.md +++ b/docs/cpp/data-type-ranges.md @@ -3,31 +3,25 @@ description: "Learn more about: Data Type Ranges" title: "Data Type Ranges" ms.date: "05/28/2020" helpviewer_keywords: ["float keyword [C++]", "char keyword [C++]", "unsigned long", "__wchar_t keyword [C++]", "unsigned short int [C++]", "enum keyword [C++]", "unsigned char keyword [C++]", "integer data type [C++], data type ranges", "int data type", "data types [C++], ranges", "unsigned int [C++]", "short data type", "short int data", "signed types [C++], data type ranges", "long long keyword [C++]", "long double keyword [C++]", "double data type [C++], data type ranges", "signed short int [C++]", "unsigned short", "sized integer types", "signed int [C++]", "signed long int [C++]", "signed char keyword [C++]", "wchar_t keyword [C++]", "long keyword [C++]", "ranges [C++]", "unsigned types [C++], data type ranges", "floating-point numbers [C++]", "data type ranges", "ranges [C++], data types", "long int keyword [C++]", "unsigned long int [C++]"] -ms.assetid: 3691ceca-05fb-4b82-b1ae-5c4618cda91a --- # Data Type Ranges The Microsoft C++ 32-bit and 64-bit compilers recognize the types in the table later in this article. -- **`int`** (**`unsigned int`**) +```cpp +- int (unsigned int) +- __int8 (unsigned __int8) +- __int16 (unsigned __int16) +- __int32 (unsigned __int32) +- __int64 (unsigned __int64) +- short (unsigned short) +- long (unsigned long) +- long long (unsigned long long) +``` -- **`__int8`** (**`unsigned __int8`**) +If its name begins with two underscores (`__`), the data type is non-standard. -- **`__int16`** (**`unsigned __int16`**) - -- **`__int32`** (**`unsigned __int32`**) - -- **`__int64`** (**`unsigned __int64`**) - -- **`short`** (**`unsigned short`**) - -- **`long`** (**`unsigned long`**) - -- **`long long`** (**`unsigned long long`**) - -If its name begins with two underscores (`__`), a data type is non-standard. - -The ranges that are specified in the following table are inclusive-inclusive. +The ranges specified in the following table are inclusive-inclusive. |Type Name|Bytes|Other Names|Range of Values| |---------------|-----------|-----------------|---------------------| @@ -71,5 +65,5 @@ The range of enumerated types varies depending on the language context and speci ## See also -[Keywords](../cpp/keywords-cpp.md)
+[Keywords](../cpp/keywords-cpp.md)\ [Built-in types](../cpp/fundamental-types-cpp.md) diff --git a/docs/error-messages/compiler-errors-1/compiler-error-c2055.md b/docs/error-messages/compiler-errors-1/compiler-error-c2055.md index fe73b75244..f67b5b8784 100644 --- a/docs/error-messages/compiler-errors-1/compiler-error-c2055.md +++ b/docs/error-messages/compiler-errors-1/compiler-error-c2055.md @@ -1,22 +1,23 @@ --- -description: "Learn more about: Compiler Error C2055" -title: "Compiler Error C2055" -ms.date: "11/04/2016" +description: "Learn more about: Microsoft Visual C++ compiler error C2055" +title: "Compiler error C2055" +ms.date: 06/10/2024 f1_keywords: ["C2055"] helpviewer_keywords: ["C2055"] -ms.assetid: 6cec79cc-6bec-443f-9897-fbf5452718c7 --- -# Compiler Error C2055 +# Compiler error C2055 -expected formal parameter list, not a type list +> expected formal parameter list, not a type list A function definition contains a parameter type list instead of a formal parameter list. ANSI C requires formal parameters to be named unless they are void or an ellipsis (`...`). -The following sample generates C2055: +An example of a named formal parameter is the `int i` in `void func(int i)`. A parameter type list is a list of types, for example, `int, char`. + +The following generates error `C2055`: ```c // C2055.c // compile with: /c void func(int, char) {} // C2055 -void func (int i, char c) {} // OK +void func (int i, char c) {} // OK ``` diff --git a/docs/standard-library/mutex-class-stl.md b/docs/standard-library/mutex-class-stl.md index 3a3f94cfe4..f0a583cc4a 100644 --- a/docs/standard-library/mutex-class-stl.md +++ b/docs/standard-library/mutex-class-stl.md @@ -54,7 +54,7 @@ If the calling thread already owns the `mutex`, the behavior is undefined. ## Constructor Constructs a `mutex` object that isn't locked.\ -Microsoft's implementation of this constructor is not `constexpr`. +Prior to Visual Studio 2022 17.10, Microsoft's implementation of this constructor wasn't `constexpr`. Now it is `constexpr`. ```cpp mutex() noexcept; From 7418285b07e0a68e564311d0b25a9402385cad7b Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 10:51:21 -0700 Subject: [PATCH 0248/1239] acrolinx --- docs/cpp/casting.md | 4 ++-- docs/cpp/data-type-ranges.md | 10 +++++----- .../compiler-errors-1/compiler-error-c2055.md | 7 ++++--- docs/standard-library/mutex-class-stl.md | 4 ++-- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/cpp/casting.md b/docs/cpp/casting.md index 28d12bb8b2..f9434ead50 100644 --- a/docs/cpp/casting.md +++ b/docs/cpp/casting.md @@ -1,7 +1,7 @@ --- description: "Learn more about: Casting in C++" title: "Casting" -ms.date: 6/10/2024 +ms.date: 6/11/2024 helpviewer_keywords: ["casting [C++]", "coercion [C++]", "virtual functions [C++], in derived classes [C++]", "static cast operator", "dynamic cast operator", "polymorphic classes [C++]", "classes [C++], polymorphism"] ai. --- @@ -9,7 +9,7 @@ ai. The C++ language provides that if a class is derived from a base class containing virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class". -![Diagram of a class hierarchy where C derives from B, which derives from A.](../cpp/media/vc38zz1.gif "Class hierarchy")
+![Diagram of a class hierarchy where C derives from B, which derives from A.](../cpp/media/vc38zz1.gif "Class hierarchy")
Class hierarchy An object of type `C` could be visualized as shown in the following figure. diff --git a/docs/cpp/data-type-ranges.md b/docs/cpp/data-type-ranges.md index 175b4aad41..eb51133925 100644 --- a/docs/cpp/data-type-ranges.md +++ b/docs/cpp/data-type-ranges.md @@ -19,7 +19,7 @@ The Microsoft C++ 32-bit and 64-bit compilers recognize the types in the table l - long long (unsigned long long) ``` -If its name begins with two underscores (`__`), the data type is non-standard. +If its name begins with two underscores (`__`), the data type is nonstandard. The ranges specified in the following table are inclusive-inclusive. @@ -46,16 +46,16 @@ The ranges specified in the following table are inclusive-inclusive. |**`long long`**|8|none (but equivalent to **`__int64`**)|-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807| |**`unsigned long long`**|8|none (but equivalent to **`unsigned __int64`**)|0 to 18,446,744,073,709,551,615| |**`enum`**|varies|none| | -|**`float`**|4|none|3.4E +/- 38 (7 digits)| -|**`double`**|8|none|1.7E +/- 308 (15 digits)| +|**`float`**|4|none|3.4E +/- 38 (seven digits)| +|**`double`**|8|none|1.7E +/- 308 (fifteen digits)| |**`long double`**|same as **`double`**|none|Same as **`double`**| |**`wchar_t`**|2|**`__wchar_t`**|0 to 65,535| -Depending on how it's used, a variable of **`__wchar_t`** designates either a wide-character type or multibyte-character type. Use the `L` prefix before a character or string constant to designate the wide-character-type constant. +A variable of **`__wchar_t`** designates either a wide-character type or multibyte-character type. Use the `L` prefix before a character or string constant to designate the wide-character-type constant. **`signed`** and **`unsigned`** are modifiers that you can use with any integral type except **`bool`**. Note that **`char`**, **`signed char`**, and **`unsigned char`** are three distinct types for the purposes of mechanisms like overloading and templates. -The **`int`** and **`unsigned int`** types have a size of four bytes. However, portable code should not depend on the size of **`int`** because the language standard allows this to be implementation-specific. +The **`int`** and **`unsigned int`** types have a size of 4 bytes. However, portable code shouldn't depend on the size of **`int`** because the language standard allows this to be implementation-specific. C/C++ in Visual Studio also supports sized integer types. For more information, see [`__int8, __int16, __int32, __int64`](../cpp/int8-int16-int32-int64.md) and [Integer Limits](../cpp/integer-limits.md). diff --git a/docs/error-messages/compiler-errors-1/compiler-error-c2055.md b/docs/error-messages/compiler-errors-1/compiler-error-c2055.md index f67b5b8784..1654921d89 100644 --- a/docs/error-messages/compiler-errors-1/compiler-error-c2055.md +++ b/docs/error-messages/compiler-errors-1/compiler-error-c2055.md @@ -9,11 +9,12 @@ helpviewer_keywords: ["C2055"] > expected formal parameter list, not a type list -A function definition contains a parameter type list instead of a formal parameter list. ANSI C requires formal parameters to be named unless they are void or an ellipsis (`...`). +A function definition contains a parameter type list instead of a formal parameter list. ANSI C requires formal parameters to be named unless they're `void` or an ellipsis (`...`). -An example of a named formal parameter is the `int i` in `void func(int i)`. A parameter type list is a list of types, for example, `int, char`. +An example of a named formal parameter is the `int i` in `void func(int i)`.\ +A parameter type list is a list of types, for example, `int, char`. -The following generates error `C2055`: +The following code generates error `C2055`: ```c // C2055.c diff --git a/docs/standard-library/mutex-class-stl.md b/docs/standard-library/mutex-class-stl.md index f0a583cc4a..aa07a6867d 100644 --- a/docs/standard-library/mutex-class-stl.md +++ b/docs/standard-library/mutex-class-stl.md @@ -54,7 +54,7 @@ If the calling thread already owns the `mutex`, the behavior is undefined. ## Constructor Constructs a `mutex` object that isn't locked.\ -Prior to Visual Studio 2022 17.10, Microsoft's implementation of this constructor wasn't `constexpr`. Now it is `constexpr`. +Before Visual Studio 2022 17.10, Microsoft's implementation of this constructor wasn't `constexpr`. Now it's `constexpr`. ```cpp mutex() noexcept; @@ -82,7 +82,7 @@ native_handle_type native_handle(); ### Return Value -`native_handle_type` is defined as a `Concurrency::critical_section *` that's cast as `void *`. +`native_handle_type` is defined as a `Concurrency::critical_section *`. It's cast as `void *`. ## `try_lock` From 6b9a3b25a2a940baeee255dfdd81ee5ede3ecc57 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 11:19:38 -0700 Subject: [PATCH 0249/1239] fix metadata. also fix toc for LINKREPROFULLPATHRSP --- docs/build/reference/linker-options.md | 4 ++-- docs/build/toc.yml | 4 ++-- docs/cpp/casting.md | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/build/reference/linker-options.md b/docs/build/reference/linker-options.md index 83076eda25..968094a0b5 100644 --- a/docs/build/reference/linker-options.md +++ b/docs/build/reference/linker-options.md @@ -1,7 +1,7 @@ --- title: "MSVC Linker options" description: "A list of the options supported by the Microsoft LINK linker." -ms.date: 06/03/2024 +ms.date: 06/10/2024 f1_keywords: ["link"] helpviewer_keywords: ["linker [C++]", "linker [C++], options listed", "libraries [C++], linking to COFF", "LINK tool [C++], linker options"] --- @@ -78,7 +78,7 @@ You can use the [`comment`](../../preprocessor/comment-c-cpp.md) pragma to speci | [`/LARGEADDRESSAWARE`](largeaddressaware-handle-large-addresses.md) | Tells the compiler that the application supports addresses larger than 2 gigabytes | | [`/LIBPATH`](libpath-additional-libpath.md) | Specifies a path to search before the environmental library path. | | [`/LINKREPRO`](linkrepro.md) | Specifies a path to generate link repro artifacts in. | -| [`LINKREPROFULLPATHRSP`](link-repro-full-path-rsp.md) | Generates a response file containing the absolute paths to all the files that the linker took as input. | +| [`/LINKREPROFULLPATHRSP`](link-repro-full-path-rsp.md) | Generates a response file containing the absolute paths to all the files that the linker took as input. | | [`/LINKREPROTARGET`](linkreprotarget.md) | Generates a link repro only when producing the specified target.16.1 | | [`/LTCG`](ltcg-link-time-code-generation.md) | Specifies link-time code generation. | | [`/MACHINE`](machine-specify-target-platform.md) | Specifies the target platform. | diff --git a/docs/build/toc.yml b/docs/build/toc.yml index cf2a4e9b45..cfa6cdba79 100644 --- a/docs/build/toc.yml +++ b/docs/build/toc.yml @@ -640,8 +640,6 @@ items: href: ../build/reference/kernel-create-kernel-mode-binary.md - name: /link (Pass options to linker) href: ../build/reference/link-pass-options-to-linker.md - - name: /LINKREPROFULLPATHRSP (Generate file containing absolute paths of linked files) - href: ../build/reference/link-repro-full-path-rsp.md - name: /LN (Create MSIL module) href: ../build/reference/ln-create-msil-module.md - name: /MD, /MT, /LD (Use Run-time library) @@ -1027,6 +1025,8 @@ items: href: ../build/reference/libpath-additional-libpath.md - name: /LINKREPRO (Link repro directory name) href: ../build/reference/linkrepro.md + - name: /LINKREPROFULLPATHRSP (Generate file containing absolute paths of linked files) + href: ../build/reference/link-repro-full-path-rsp.md - name: /LINKREPROTARGET (Link repro file name) href: ../build/reference/linkreprotarget.md - name: /LTCG (Link-time code generation) diff --git a/docs/cpp/casting.md b/docs/cpp/casting.md index f9434ead50..e6dc959338 100644 --- a/docs/cpp/casting.md +++ b/docs/cpp/casting.md @@ -1,13 +1,13 @@ --- -description: "Learn more about: Casting in C++" title: "Casting" +description: "Learn more about: Casting in C++" ms.date: 6/11/2024 helpviewer_keywords: ["casting [C++]", "coercion [C++]", "virtual functions [C++], in derived classes [C++]", "static cast operator", "dynamic cast operator", "polymorphic classes [C++]", "classes [C++], polymorphism"] ai. --- # Casting -The C++ language provides that if a class is derived from a base class containing virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class". +The C++ language provides that if a class is derived from a base class containing virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class." ![Diagram of a class hierarchy where C derives from B, which derives from A.](../cpp/media/vc38zz1.gif "Class hierarchy")
Class hierarchy @@ -15,15 +15,15 @@ Class hierarchy An object of type `C` could be visualized as shown in the following figure. ![Diagram of Class C with subobjects B and A.](../cpp/media/vc38zz2.gif "Class C with subobjects B and A")
-Class C with sub-objects B and A +Class C with subobjects B and A -Given an instance of class `C`, there is a `B` subobject and an `A` subobject. The instance of `C`, including the `A` and `B` subobjects, is the "complete object." +Given an instance of class `C`, there's a `B` subobject and an `A` subobject. The instance of `C`, including the `A` and `B` subobjects, is the "complete object." -Since a derived class completely contains the definitions of all the base classes from which it is derived, it is safe to cast a pointer to any of the base classes (an upcast). Given a pointer to a base class, it may be safe to cast the pointer to an instance of a derived class (downcast). The actual object is said to be the "complete object." The pointer to the base class is said to point to a "subobject" of the complete object. For example, consider the class hierarchy shown in the following figure. +Since a derived class completely contains the definitions of all the base classes from which it's derived, it's safe to cast a pointer to any of the base classes (an upcast). Given a pointer to a base class, it may be safe to cast the pointer to an instance of a derived class (downcast). The actual object is said to be the "complete object." The pointer to the base class is said to point to a "subobject" of the complete object. For example, consider the class hierarchy shown in the following figure. -Using run-time type information, it is possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. Use the [dynamic_cast](../cpp/dynamic-cast-operator.md) operator to make safe casts. It performs the run-time check necessary to ensure that the operation is safe. +Using run-time type information, it's possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. Use the [dynamic_cast](../cpp/dynamic-cast-operator.md) operator to make safe casts. It performs the run-time check necessary to ensure that the operation is safe. -For conversion of nonpolymorphic types, you can use the [static_cast](../cpp/static-cast-operator.md) operator (this topic explains the difference between static and dynamic casting conversions, and when it is appropriate to use each). +For conversion of nonpolymorphic types, you can use the [static_cast](../cpp/static-cast-operator.md) operator (this topic explains the difference between static and dynamic casting conversions, and when it's appropriate to use each). The following example demonstrates the use of the `dynamic_cast` and `static_cast` operators: From 2e63e8d70e814c6c1b91b56f9c4064badfaff872 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 11:54:13 -0700 Subject: [PATCH 0250/1239] change link --- docs/build/reference/link-repro-full-path-rsp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md index 11d795bdfe..ba581a63b2 100644 --- a/docs/build/reference/link-repro-full-path-rsp.md +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -38,7 +38,7 @@ The linker produces `test.rsp` containing the following lines to reflect the ful ### To set this linker option programmatically -- See . +- See . ## See also From 0b103bda667525c487000b25dcac2d1961116e04 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 12:27:00 -0700 Subject: [PATCH 0251/1239] link fix --- docs/build/reference/link-repro-full-path-rsp.md | 2 +- docs/cpp/casting.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md index ba581a63b2..1a76b7b6c6 100644 --- a/docs/build/reference/link-repro-full-path-rsp.md +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -38,7 +38,7 @@ The linker produces `test.rsp` containing the following lines to reflect the ful ### To set this linker option programmatically -- See . +- See [VCLinkerTool.AdditionalOptions](/dotnet/api/microsoft.visualstudio.vcprojectengine.vclinkertool.additionaloptions?view=visualstudiosdk-2022) ## See also diff --git a/docs/cpp/casting.md b/docs/cpp/casting.md index e6dc959338..c6e7eb693e 100644 --- a/docs/cpp/casting.md +++ b/docs/cpp/casting.md @@ -1,9 +1,9 @@ --- -title: "Casting" description: "Learn more about: Casting in C++" +title: "Casting" ms.date: 6/11/2024 helpviewer_keywords: ["casting [C++]", "coercion [C++]", "virtual functions [C++], in derived classes [C++]", "static cast operator", "dynamic cast operator", "polymorphic classes [C++]", "classes [C++], polymorphism"] -ai. +ai-usage: ai-assisted --- # Casting From 196b7508d09ae7c6c3976c5b698aea5a89556b9e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 13:59:41 -0700 Subject: [PATCH 0252/1239] edits --- docs/build/reference/link-repro-full-path-rsp.md | 2 +- docs/cpp/casting.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/build/reference/link-repro-full-path-rsp.md b/docs/build/reference/link-repro-full-path-rsp.md index 1a76b7b6c6..1174adb871 100644 --- a/docs/build/reference/link-repro-full-path-rsp.md +++ b/docs/build/reference/link-repro-full-path-rsp.md @@ -38,7 +38,7 @@ The linker produces `test.rsp` containing the following lines to reflect the ful ### To set this linker option programmatically -- See [VCLinkerTool.AdditionalOptions](/dotnet/api/microsoft.visualstudio.vcprojectengine.vclinkertool.additionaloptions?view=visualstudiosdk-2022) +- See [VCLinkerTool.AdditionalOptions](/dotnet/api/microsoft.visualstudio.vcprojectengine.vclinkertool.additionaloptions) ## See also diff --git a/docs/cpp/casting.md b/docs/cpp/casting.md index c6e7eb693e..17830ed970 100644 --- a/docs/cpp/casting.md +++ b/docs/cpp/casting.md @@ -7,25 +7,25 @@ ai-usage: ai-assisted --- # Casting -The C++ language provides that if a class is derived from a base class containing virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class." +In C++, if a class is derived from a base class containing one or more virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class." ![Diagram of a class hierarchy where C derives from B, which derives from A.](../cpp/media/vc38zz1.gif "Class hierarchy")
Class hierarchy -An object of type `C` could be visualized as shown in the following figure. +An object of type `C` can be visualized as follows: ![Diagram of Class C with subobjects B and A.](../cpp/media/vc38zz2.gif "Class C with subobjects B and A")
Class C with subobjects B and A Given an instance of class `C`, there's a `B` subobject and an `A` subobject. The instance of `C`, including the `A` and `B` subobjects, is the "complete object." -Since a derived class completely contains the definitions of all the base classes from which it's derived, it's safe to cast a pointer to any of the base classes (an upcast). Given a pointer to a base class, it may be safe to cast the pointer to an instance of a derived class (downcast). The actual object is said to be the "complete object." The pointer to the base class is said to point to a "subobject" of the complete object. For example, consider the class hierarchy shown in the following figure. +Because a derived class completely contains the definitions of all the base classes from which it's derived, it's safe to cast a pointer to any of its base classes (also called an upcast). Given a pointer to a base class, it may be safe to cast the pointer to an instance of a derived class (also called a downcast). -Using run-time type information, it's possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. Use the [dynamic_cast](../cpp/dynamic-cast-operator.md) operator to make safe casts. It performs the run-time check necessary to ensure that the operation is safe. +Using run-time type information, it's possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. The [dynamic_cast](../cpp/dynamic-cast-operator.md) operator performs a run-time check to ensure that the operation is safe. It's better to design your class hierarchy so that you can use virtual functions to avoid the need for downcasting. However, if you must downcast, use `dynamic_cast` to ensure that the operation is safe. For conversion of nonpolymorphic types, you can use the [static_cast](../cpp/static-cast-operator.md) operator (this topic explains the difference between static and dynamic casting conversions, and when it's appropriate to use each). -The following example demonstrates the use of the `dynamic_cast` and `static_cast` operators: +The following example demonstrates the use of `dynamic_cast` and `static_cast`: ```cpp #include From 298a6bf68c8acdda6e8f48e612dab886d6b68466 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 15:17:15 -0700 Subject: [PATCH 0253/1239] document __arm_arch macro --- docs/build/reference/arch-arm64.md | 37 ++++++++++++++++++++++++-- docs/preprocessor/predefined-macros.md | 11 +++++--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index c986a3e04e..ae1ba0ce7a 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -22,12 +22,44 @@ Specifies the Armv9-A architecture, where **`x`** is a required extension value ## Remarks -You may specify an ARM64 extension from Armv8.0-A through Armv8.9-A, and Armv9.0-A through Armv9.4-A. Optionally, enable one or more architecture features by appending a feature argument to the option3. For example, to target Armv8.0-A and enable feature `FEAT_LSE`, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. +You can specify an ARM64 extension from Armv8.0-A through Armv8.9-A, and Armv9.0-A through Armv9.4-A. Optionally, enable one or more architecture features by appending a feature argument to the option3. For example, to target Armv8.0-A and enable feature `FEAT_LSE`, append feature argument **`lse`** so that the option becomes **`/arch:armv8.0+lse`**. For more information about available features and their requirements, see [`/feature` (ARM64)](feature-arm64.md)3. > [!NOTE] > Depending on your version of Visual Studio, the compiler may not yet generate instructions from all feature sets required by the extension level you specify. For example, **`/arch:armv8.1`** allows the `*Interlocked*` intrinsic functions to use the appropriate atomic instruction introduced with the Armv8.1-A extension feature `FEAT_LSE`, but compiler support requires Visual Studio 2022 version 17.2 or later. -The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md). +The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md)\ + +The `__ARM_ARCH` macro is defined for `/arch:ARMv8.0` and higher. It indicates the ARM architecture extension level that the compiler is targeting. For example: + +```cpp +// test.cpp +#define STRINGIZE_IMPL(X) #X +#define STRINGIZE(X) STRINGIZE_IMPL(X) +#pragma message("__ARM_ARCH is " STRINGIZE(__ARM_ARCH)) +``` + +Compiled with: + +```cmd +"C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat" x64_arm64 +cl /EHsc /nologo /W4 /c test.cpp +test.cpp +__ARM_ARCH is 8 + +C:\Temp>cl /EHsc /nologo /W4 /c /arch:armv8.0 test.cpp +test.cpp +__ARM_ARCH is 8 + +C:\Temp>cl /EHsc /nologo /W4 /c /arch:armv8.1 test.cpp +test.cpp +__ARM_ARCH is 801 + +C:\Temp>cl /EHsc /nologo /W4 /c /arch:armv8.2 test.cpp +test.cpp +__ARM_ARCH is 802 + +REM And so on... +``` **`/arch`** only affects code generation for native functions. When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, **`/arch`** has no effect on code generation for managed functions. @@ -50,5 +82,6 @@ The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. F ## See also [`/arch` (Minimum CPU architecture)](arch-minimum-cpu-architecture.md)\ +[Predefined macros](../../preprocessor/predefined-macros.md)\ [MSVC compiler options](compiler-options.md)\ [MSVC compiler command-line syntax](compiler-command-line-syntax.md) diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index f43b06fd9c..0f994ba66b 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -2,9 +2,9 @@ title: "Predefined macros" description: "Lists and describes the Microsoft C++ compiler predefined preprocessor macros." ms.custom: "update_every_version" -ms.date: 07/07/2022 -f1_keywords: ["_ATL_VER", "__ATOM__", "__AVX__", "__AVX2__", "__AVX512BW__", "__AVX512CD__", "__AVX512DQ__", "__AVX512F__", "__AVX512VL__", "_CHAR_UNSIGNED", "__CLR_VER", "_CONTROL_FLOW_GUARD", "__COUNTER__", "__cplusplus", "__cplusplus_cli", "__cplusplus_winrt", "_CPPRTTI", "_CPPUNWIND", "__DATE__", "_DEBUG", "_DLL", "__FILE__", "__FUNCDNAME__", "__FUNCSIG__", "__FUNCTION__", "_INTEGRAL_MAX_BITS", "_ISO_VOLATILE", "_KERNEL_MODE", "__LINE__", "_M_AMD64", "_M_ARM", "_M_ARM_ARMV7VE", "_M_ARM_FP", "_M_ARM64", "_M_CEE", "_M_CEE_PURE", "_M_CEE_SAFE", "_M_FP_EXCEPT", "_M_FP_FAST", "_M_FP_PRECISE", "_M_FP_STRICT", "_M_IX86", "_M_IX86_FP", "_M_X64", "_MANAGED", "_MFC_VER", "_MSC_BUILD", "_MSC_EXTENSIONS", "_MSC_FULL_VER", "_MSC_VER", "_MSVC_LANG", "__MSVC_RUNTIME_CHECKS", "_MT", "_NATIVE_WCHAR_T_DEFINED", "_NO_SIZED_DEALLOCATION", "_OPENMP", "_PREFAST_", "_RESUMABLE_FUNCTIONS_SUPPORTED", "_RTC_CONVERSION_CHECKS_ENABLED", "__SANITIZE_ADDRESS__", "__STDC__", "__STDC_HOSTED__", "__STDC_NO_ATOMICS__", "__STDC_NO_COMPLEX__", "__STDC_NO_THREADS__", "__STDC_NO_VLA__", "__STDC_VERSION__", "__STDCPP_DEFAULT_NEW_ALIGNMENT__", "__STDCPP_THREADS__", "__TIME__", "__TIMESTAMP__", "__VA_ARGS__", "_VC_NODEFAULTLIB", "_WCHAR_T_DEFINED", "_WIN32", "_WIN64", "_WINRT_DLL"] -helpviewer_keywords: ["timestamps, preprocessor macro", "cl.exe compiler, version number", "version numbers, C/C++ compiler (cl.exe)", "macros, predefined C++", "preprocessor, macros", "predefined macros", "_ATL_VER macro", "__ATOM__ macro", "__AVX__ macro", "__AVX2__ macro", "__AVX512BW__ macro", "__AVX512CD__ macro", "__AVX512DQ__ macro", "__AVX512F__ macro", "__AVX512VL__ macro", "_CHAR_UNSIGNED macro", "__CLR_VER macro", "_CONTROL_FLOW_GUARD macro", "__COUNTER__ macro", "__cplusplus macro", "__cplusplus_cli macro", "__cplusplus_winrt macro", "_CPPRTTI macro", "_CPPUNWIND macro", "__DATE__ macro", "_DEBUG macro", "_DLL macro", "__FILE__ macro", "__FUNCDNAME__ macro", "__FUNCSIG__ macro", "__FUNCTION__ macro", "_INTEGRAL_MAX_BITS macro", "_ISO_VOLATILE macro", "_KERNEL_MODE macro", "__LINE__ macro", "_M_AMD64 macro", "_M_ARM macro", "_M_ARM_ARMV7VE macro", "_M_ARM_FP macro", "_M_ARM64 macro", "_M_ARM64EC macro", "_M_CEE macro", "_M_CEE_PURE macro", "_M_CEE_SAFE macro", "_M_FP_EXCEPT macro", "_M_FP_FAST macro", "_M_FP_PRECISE macro", "_M_FP_STRICT macro", "_M_IX86 macro", "_M_IX86_FP macro", "_M_X64 macro", "_MANAGED macro", "_MFC_VER macro", "_MSC_BUILD macro", "_MSC_EXTENSIONS macro", "_MSC_FULL_VER macro", "_MSC_VER macro", "_MSVC_LANG macro", "__MSVC_RUNTIME_CHECKS macro", "_MT macro", "_NATIVE_WCHAR_T_DEFINED macro", "_NO_SIZED_DEALLOCATION macro", "_OPENMP macro", "_PREFAST_ macro", "_RESUMABLE_FUNCTIONS_SUPPORTED macro", "_RTC_CONVERSION_CHECKS_ENABLED macro", "__SANITIZE_ADDRESS__ macro", "__STDC__ macro", "__STDC_HOSTED__ macro", "__STDC_NO_ATOMICS__ macro", "__STDC_NO_COMPLEX__ macro", "__STDC_NO_THREADS__ macro", "__STDC_NO_VLA__ macro", "__STDC_VERSION__ macro", "__STDCPP_DEFAULT_NEW_ALIGNMENT__", "__STDCPP_THREADS__ macro", "__TIME__ macro", "__TIMESTAMP__ macro", "__VA_ARGS__ macro", "_VC_NODEFAULTLIB macro", "_WCHAR_T_DEFINED macro", "_WIN32 macro", "_WIN64 macro", "_WINRT_DLL macro", "__func__ identifier"] +ms.date: 06/11/2024 +f1_keywords: ["__ARM_ARCH", "_ATL_VER", "__ATOM__", "__AVX__", "__AVX2__", "__AVX512BW__", "__AVX512CD__", "__AVX512DQ__", "__AVX512F__", "__AVX512VL__", "_CHAR_UNSIGNED", "__CLR_VER", "_CONTROL_FLOW_GUARD", "__COUNTER__", "__cplusplus", "__cplusplus_cli", "__cplusplus_winrt", "_CPPRTTI", "_CPPUNWIND", "__DATE__", "_DEBUG", "_DLL", "__FILE__", "__FUNCDNAME__", "__FUNCSIG__", "__FUNCTION__", "_INTEGRAL_MAX_BITS", "_ISO_VOLATILE", "_KERNEL_MODE", "__LINE__", "_M_AMD64", "_M_ARM", "_M_ARM_ARMV7VE", "_M_ARM_FP", "_M_ARM64", "_M_CEE", "_M_CEE_PURE", "_M_CEE_SAFE", "_M_FP_EXCEPT", "_M_FP_FAST", "_M_FP_PRECISE", "_M_FP_STRICT", "_M_IX86", "_M_IX86_FP", "_M_X64", "_MANAGED", "_MFC_VER", "_MSC_BUILD", "_MSC_EXTENSIONS", "_MSC_FULL_VER", "_MSC_VER", "_MSVC_LANG", "__MSVC_RUNTIME_CHECKS", "_MT", "_NATIVE_WCHAR_T_DEFINED", "_NO_SIZED_DEALLOCATION", "_OPENMP", "_PREFAST_", "_RESUMABLE_FUNCTIONS_SUPPORTED", "_RTC_CONVERSION_CHECKS_ENABLED", "__SANITIZE_ADDRESS__", "__STDC__", "__STDC_HOSTED__", "__STDC_NO_ATOMICS__", "__STDC_NO_COMPLEX__", "__STDC_NO_THREADS__", "__STDC_NO_VLA__", "__STDC_VERSION__", "__STDCPP_DEFAULT_NEW_ALIGNMENT__", "__STDCPP_THREADS__", "__TIME__", "__TIMESTAMP__", "__VA_ARGS__", "_VC_NODEFAULTLIB", "_WCHAR_T_DEFINED", "_WIN32", "_WIN64", "_WINRT_DLL"] +helpviewer_keywords: ["__ARM_ARCH macro", "timestamps, preprocessor macro", "cl.exe compiler, version number", "version numbers, C/C++ compiler (cl.exe)", "macros, predefined C++", "preprocessor, macros", "predefined macros", "_ATL_VER macro", "__ATOM__ macro", "__AVX__ macro", "__AVX2__ macro", "__AVX512BW__ macro", "__AVX512CD__ macro", "__AVX512DQ__ macro", "__AVX512F__ macro", "__AVX512VL__ macro", "_CHAR_UNSIGNED macro", "__CLR_VER macro", "_CONTROL_FLOW_GUARD macro", "__COUNTER__ macro", "__cplusplus macro", "__cplusplus_cli macro", "__cplusplus_winrt macro", "_CPPRTTI macro", "_CPPUNWIND macro", "__DATE__ macro", "_DEBUG macro", "_DLL macro", "__FILE__ macro", "__FUNCDNAME__ macro", "__FUNCSIG__ macro", "__FUNCTION__ macro", "_INTEGRAL_MAX_BITS macro", "_ISO_VOLATILE macro", "_KERNEL_MODE macro", "__LINE__ macro", "_M_AMD64 macro", "_M_ARM macro", "_M_ARM_ARMV7VE macro", "_M_ARM_FP macro", "_M_ARM64 macro", "_M_ARM64EC macro", "_M_CEE macro", "_M_CEE_PURE macro", "_M_CEE_SAFE macro", "_M_FP_EXCEPT macro", "_M_FP_FAST macro", "_M_FP_PRECISE macro", "_M_FP_STRICT macro", "_M_IX86 macro", "_M_IX86_FP macro", "_M_X64 macro", "_MANAGED macro", "_MFC_VER macro", "_MSC_BUILD macro", "_MSC_EXTENSIONS macro", "_MSC_FULL_VER macro", "_MSC_VER macro", "_MSVC_LANG macro", "__MSVC_RUNTIME_CHECKS macro", "_MT macro", "_NATIVE_WCHAR_T_DEFINED macro", "_NO_SIZED_DEALLOCATION macro", "_OPENMP macro", "_PREFAST_ macro", "_RESUMABLE_FUNCTIONS_SUPPORTED macro", "_RTC_CONVERSION_CHECKS_ENABLED macro", "__SANITIZE_ADDRESS__ macro", "__STDC__ macro", "__STDC_HOSTED__ macro", "__STDC_NO_ATOMICS__ macro", "__STDC_NO_COMPLEX__ macro", "__STDC_NO_THREADS__ macro", "__STDC_NO_VLA__ macro", "__STDC_VERSION__ macro", "__STDCPP_DEFAULT_NEW_ALIGNMENT__", "__STDCPP_THREADS__ macro", "__TIME__ macro", "__TIMESTAMP__ macro", "__VA_ARGS__ macro", "_VC_NODEFAULTLIB macro", "_WCHAR_T_DEFINED macro", "_WIN32 macro", "_WIN64 macro", "_WINRT_DLL macro", "__func__ identifier"] ms.assetid: 1cc5f70a-a225-469c-aed0-fe766238e23f no-loc: [_ATL_VER, __ATOM__, __AVX__, __AVX2__, __AVX512BW__, __AVX512CD__, __AVX512DQ__, __AVX512F__, __AVX512VL__, _CHAR_UNSIGNED, __CLR_VER, _CONTROL_FLOW_GUARD, __COUNTER__, __cplusplus, __cplusplus_cli, __cplusplus_winrt, _CPPRTTI, _CPPUNWIND, __DATE__, _DEBUG, _DLL, __FILE__, __FUNCDNAME__, __FUNCSIG__, __FUNCTION__, _INTEGRAL_MAX_BITS, _ISO_VOLATILE, _KERNEL_MODE, __LINE__, _M_AMD64, _M_ARM, _M_ARM_ARMV7VE, _M_ARM_FP, _M_ARM64, _M_ARM64EC, _M_CEE, _M_CEE_PURE, _M_CEE_SAFE, _M_FP_EXCEPT, _M_FP_FAST, _M_FP_PRECISE, _M_FP_STRICT, _M_IX86, _M_IX86_FP, _M_X64, _MANAGED, _MFC_VER, _MSC_BUILD, _MSC_EXTENSIONS, _MSC_FULL_VER, _MSC_VER, _MSVC_LANG, __MSVC_RUNTIME_CHECKS, _MT, _NATIVE_WCHAR_T_DEFINED, _NO_SIZED_DEALLOCATION, _OPENMP, _PREFAST_, _RESUMABLE_FUNCTIONS_SUPPORTED, _RTC_CONVERSION_CHECKS_ENABLED, __SANITIZE_ADDRESS__, __STDC__, __STDC_HOSTED__, __STDC_NO_ATOMICS__, __STDC_NO_COMPLEX__, __STDC_NO_THREADS__, __STDC_NO_VLA__, __STDC_VERSION__, __STDCPP_DEFAULT_NEW_ALIGNMENT__, __STDCPP_THREADS__, __TIME__, __TIMESTAMP__, __VA_ARGS__, _VC_NODEFAULTLIB, _WCHAR_T_DEFINED, _WIN32, _WIN64, _WINRT_DLL, __func__] --- @@ -23,7 +23,8 @@ The compiler supports this predefined identifier specified by ISO C99 and ISO C+ - `__func__` The unqualified and unadorned name of the enclosing function as a function-local **static const** array of **`char`**. ```cpp - void example(){ + void example() + { printf("%s\n", __func__); } // prints "example" ``` @@ -64,6 +65,8 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is encoded in the form `Vx`, where `x` is the ARM architecture version. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). If it is undefined, the value is `__ARM_ARCH`. + - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. - `__AVX__` Defined as 1 when the [`/arch:AVX`](../build/reference/arch-x86.md), [`/arch:AVX2`](../build/reference/arch-x86.md), or [`/arch:AVX512`](../build/reference/arch-x86.md) compiler options are set and the compiler target is x86 or x64. Otherwise, undefined. From 89ae9e5d4bb7789978b7cee0184915869dfcb3f1 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 15:42:05 -0700 Subject: [PATCH 0254/1239] edits --- docs/build/reference/arch-arm64.md | 2 +- docs/preprocessor/predefined-macros.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index ae1ba0ce7a..d8bf7337d0 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -38,7 +38,7 @@ The `__ARM_ARCH` macro is defined for `/arch:ARMv8.0` and higher. It indicates t #pragma message("__ARM_ARCH is " STRINGIZE(__ARM_ARCH)) ``` -Compiled with: +Produces the following when compiled with different `/arch` options: ```cmd "C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat" x64_arm64 diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index 0f994ba66b..c6aa1a38c4 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -65,7 +65,7 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: -- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is encoded in the form `Vx`, where `x` is the ARM architecture version. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). If it is undefined, the value is `__ARM_ARCH`. +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is 8 by default when compiling for ARM but no version is specified, 8 for `/arch:armv8.0`, 801 for `/arch:armv8.1`, 802 for `/arch:armv8.2`, and so on. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). If it is undefined, for example while compiling x86 code, the value is `__ARM_ARCH`. - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. From d3acd08e28341766aacfa3b3e9c070c0dd72785f Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 16:11:36 -0700 Subject: [PATCH 0255/1239] acrolinx --- docs/preprocessor/predefined-macros.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index c6aa1a38c4..69b5bec2f9 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -65,7 +65,7 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: -- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is 8 by default when compiling for ARM but no version is specified, 8 for `/arch:armv8.0`, 801 for `/arch:armv8.1`, 802 for `/arch:armv8.2`, and so on. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). If it is undefined, for example while compiling x86 code, the value is `__ARM_ARCH`. +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is 8 by default when compiling for ARM but no version is specified, 8 for `/arch:armv8.0`, 801 for `/arch:armv8.1`, 802 for `/arch:armv8.2`, and so on. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). If it's undefined, for example while compiling x86 code, the value is `__ARM_ARCH`. - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. @@ -98,7 +98,7 @@ MSVC supports other predefined macros: - `_CONTROL_FLOW_GUARD` Defined as 1 when the [**`/guard:cf`** (Enable Control Flow Guard)](../build/reference/guard-enable-control-flow-guard.md) compiler option is set. Otherwise, undefined. -- `__COUNTER__` Expands to an integer literal that starts at 0. The value is incremented by 1 every time it's used in a source file, or in included headers of the source file. `__COUNTER__` remembers its state when you use precompiled headers. This macro is always defined. +- `__COUNTER__` Expands to an integer literal that starts at 0. The value increments by 1 every time it's used in a source file, or in included headers of the source file. `__COUNTER__` remembers its state when you use precompiled headers. This macro is always defined. This example uses `__COUNTER__` to assign unique identifiers to three different objects of the same type. The `exampleClass` constructor takes an integer as a parameter. In `main`, the application declares three objects of type `exampleClass`, using `__COUNTER__` as the unique identifier parameter: @@ -269,7 +269,7 @@ MSVC supports other predefined macros: For more information about the history of compiler versioning, and compiler version numbers and the Visual Studio versions they correspond to, see [C++ compiler versioning](../overview/compiler-versions.md). Also, [Visual C++ Compiler Version](https://devblogs.microsoft.com/cppblog/visual-c-compiler-version/) on the Microsoft C++ team blog. -- `_MSVC_LANG` Defined as an integer literal that specifies the C++ language standard targeted by the compiler. It's set only in code compiled as C++. The macro is the integer literal value `201402L` by default, or when the [`/std:c++14`](../build/reference/std-specify-language-standard-version.md) compiler option is specified. The macro is set to `201703L` if the [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) compiler option is specified. The macro is set to `202002L` if the [`/std:c++20`](../build/reference/std-specify-language-standard-version.md) compiler option is specified. It's set to a higher, unspecified value when the [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md) option is specified. Otherwise, the macro is undefined. The `_MSVC_LANG` macro and [`/std` (Specify language standard version)](../build/reference/std-specify-language-standard-version.md) compiler options are available beginning in Visual Studio 2015 Update 3. +- `_MSVC_LANG` Defined as an integer literal that specifies the C++ language standard targeted by the compiler. Only code compiled as C++ sets it. The macro is the integer literal value `201402L` by default, or when the [`/std:c++14`](../build/reference/std-specify-language-standard-version.md) compiler option is specified. The macro is set to `201703L` if the [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) compiler option is specified. The macro is set to `202002L` if the [`/std:c++20`](../build/reference/std-specify-language-standard-version.md) compiler option is specified. It's set to a higher, unspecified value when the [`/std:c++latest`](../build/reference/std-specify-language-standard-version.md) option is specified. Otherwise, the macro is undefined. The `_MSVC_LANG` macro and [`/std` (Specify language standard version)](../build/reference/std-specify-language-standard-version.md) compiler options are available beginning in Visual Studio 2015 Update 3. - `__MSVC_RUNTIME_CHECKS` Defined as 1 when one of the [`/RTC`](../build/reference/rtc-run-time-error-checks.md) compiler options is set. Otherwise, undefined. From 3c95a4c275574ccdc7f9bd8175f0c5636fbfb04a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 16:55:20 -0700 Subject: [PATCH 0256/1239] incorp feedback --- docs/build/reference/arch-arm64.md | 32 +++++--------------------- docs/preprocessor/predefined-macros.md | 2 +- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index d8bf7337d0..0c9e4e6cb2 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -33,32 +33,12 @@ The `__ARM_ARCH` macro is defined for `/arch:ARMv8.0` and higher. It indicates t ```cpp // test.cpp -#define STRINGIZE_IMPL(X) #X -#define STRINGIZE(X) STRINGIZE_IMPL(X) -#pragma message("__ARM_ARCH is " STRINGIZE(__ARM_ARCH)) -``` - -Produces the following when compiled with different `/arch` options: - -```cmd -"C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvarsall.bat" x64_arm64 -cl /EHsc /nologo /W4 /c test.cpp -test.cpp -__ARM_ARCH is 8 - -C:\Temp>cl /EHsc /nologo /W4 /c /arch:armv8.0 test.cpp -test.cpp -__ARM_ARCH is 8 - -C:\Temp>cl /EHsc /nologo /W4 /c /arch:armv8.1 test.cpp -test.cpp -__ARM_ARCH is 801 - -C:\Temp>cl /EHsc /nologo /W4 /c /arch:armv8.2 test.cpp -test.cpp -__ARM_ARCH is 802 - -REM And so on... +int main() +{ + #if __ARM_ARCH >= 802 + // code that requires ARMv8.2... + #endif +} ``` **`/arch`** only affects code generation for native functions. When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, **`/arch`** has no effect on code generation for managed functions. diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index 69b5bec2f9..5372472d33 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -65,7 +65,7 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: -- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is 8 by default when compiling for ARM but no version is specified, 8 for `/arch:armv8.0`, 801 for `/arch:armv8.1`, 802 for `/arch:armv8.2`, and so on. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). If it's undefined, for example while compiling x86 code, the value is `__ARM_ARCH`. +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled to include minor versions such as X.Y using the formula X * 100 + Y. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). This macro was introduced in Visual Studio 2022 version 17.10. - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. From 63be6b9e451129a6e9fb2bb9ff166249a1753667 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 11 Jun 2024 16:58:24 -0700 Subject: [PATCH 0257/1239] add link to arm doc --- docs/preprocessor/predefined-macros.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index 5372472d33..cd5b4c7fea 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -65,7 +65,7 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: -- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled to include minor versions such as X.Y using the formula X * 100 + Y. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). This macro was introduced in Visual Studio 2022 version 17.10. +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled to include minor versions such as X.Y using the formula X * 100 + Y. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). This macro was introduced in Visual Studio 2022 version 17.10. For more information about this macro, see [ARM C Language Extensions](https://arm-software.github.io/acle/main/acle.html#markdown-toc-arm-architecture-level). - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. From 4bf5002a5481a0d8f7492691768e6c525d8fb1de Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 12 Jun 2024 09:30:51 -0700 Subject: [PATCH 0258/1239] tech review --- docs/build/reference/arch-arm64.md | 12 ++++-------- docs/preprocessor/predefined-macros.md | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/build/reference/arch-arm64.md b/docs/build/reference/arch-arm64.md index 0c9e4e6cb2..dd54dee205 100644 --- a/docs/build/reference/arch-arm64.md +++ b/docs/build/reference/arch-arm64.md @@ -29,16 +29,12 @@ You can specify an ARM64 extension from Armv8.0-A through Armv8.9-A, and Armv9.0 The `_M_ARM64` macro is defined by default when compiling for an ARM64 target. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md)\ -The `__ARM_ARCH` macro is defined for `/arch:ARMv8.0` and higher. It indicates the ARM architecture extension level that the compiler is targeting. For example: +The `__ARM_ARCH` macro is defined for `/arch:ARMv8.0` and higher. It indicates the ARM architecture extension level that the compiler is targeting. For more information, see [Predefined macros](../../preprocessor/predefined-macros.md). ```cpp -// test.cpp -int main() -{ - #if __ARM_ARCH >= 802 - // code that requires ARMv8.2... - #endif -} +#if __ARM_ARCH >= 802 + // code that requires ARMv8.2... +#endif ``` **`/arch`** only affects code generation for native functions. When you use [`/clr`](clr-common-language-runtime-compilation.md) to compile, **`/arch`** has no effect on code generation for managed functions. diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index cd5b4c7fea..d7901035d6 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -65,7 +65,7 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: -- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled to include minor versions such as X.Y using the formula X * 100 + Y. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch`](../build/reference/arch-arm.md). This macro was introduced in Visual Studio 2022 version 17.10. For more information about this macro, see [ARM C Language Extensions](https://arm-software.github.io/acle/main/acle.html#markdown-toc-arm-architecture-level). +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled to include minor versions such as X.Y using the formula X * 100 + Y as defined by the ARM C language extension. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch (ARM64)`](../build/reference/arch-arm64.md). This macro was introduced in Visual Studio 2022 version 17.10. - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. From 8d684ffd6ba2fde7ba93316636c5b2dc12b424fc Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 12 Jun 2024 09:38:48 -0700 Subject: [PATCH 0259/1239] acrolinx --- docs/preprocessor/predefined-macros.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/preprocessor/predefined-macros.md b/docs/preprocessor/predefined-macros.md index d7901035d6..afde55d6d8 100644 --- a/docs/preprocessor/predefined-macros.md +++ b/docs/preprocessor/predefined-macros.md @@ -65,7 +65,7 @@ The compiler supports these predefined macros specified by the ISO C99, C11, C17 MSVC supports other predefined macros: -- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled to include minor versions such as X.Y using the formula X * 100 + Y as defined by the ARM C language extension. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch (ARM64)`](../build/reference/arch-arm64.md). This macro was introduced in Visual Studio 2022 version 17.10. +- `__ARM_ARCH` Defined as an integer literal that represents the ARM architecture version. The value is defined as 8 for the Armv8-A architecture. For 8.1 and onwards, the value is scaled for minor versions, such as X.Y, by using the formula X * 100 + Y as defined by the ARM C language extension. For example, for Armv8.1, `__ARM_ARCH` is 8 * 100 + 1 or 801. To set the ARM architecture version, see [`/arch (ARM64)`](../build/reference/arch-arm64.md). This macro was introduced in Visual Studio 2022 version 17.10. - `__ATOM__` Defined as 1 when the [`/favor:ATOM`](../build/reference/favor-optimize-for-architecture-specifics.md) compiler option is set and the compiler target is x86 or x64. Otherwise, undefined. From 5176fac087e72ec1508870f908e2dac90c5123a2 Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Wed, 12 Jun 2024 15:02:13 -0700 Subject: [PATCH 0260/1239] Learn Editor: Update compiler-fatal-errors-c999-through-c1999.md --- .../compiler-fatal-errors-c999-through-c1999.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md b/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md index 5e14408195..5242df332b 100644 --- a/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md +++ b/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md @@ -6,6 +6,14 @@ f1_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1 helpviewer_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1039", "C1040", "C1041", "C1042", "C1043", "C1044", "C1048", "C1056", "C1058", "C1059", "C1063", "C1069", "C1101", "C1102", "C1105", "C1110", "C1111", "C1112", "C1114", "C1118", "C1119", "C1127", "C1193", "C1194", "C1195", "C1198", "C1199", "C1203", "C1204", "C1212", "C1213", "C1214", "C1300", "C1301", "C1302", "C1303", "C1304", "C1306", "C1354", "C1355", "C1356", "C1357", "C1358", "C1384", "C1385", "C1451", "C1505", "C1507", "C1511", "C1604", "C1605", "C1901", "C1906", "C1907"] ms.assetid: 6c8df109-7594-48ed-987a-97d9fe2b04af --- +--- +description: "Learn more about: Compiler fatal errors C999 through C1999" +title: "Compiler fatal errors C999 through C1999" +ms.date: 08/17/2022 +f1_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1039", "C1040", "C1041", "C1042", "C1043", "C1044", "C1048", "C1056", "C1058", "C1059", "C1063", "C1069", "C1101", "C1102", "C1105", "C1110", "C1111", "C1112", "C1114", "C1118", "C1119", "C1127", "C1193", "C1194", "C1195", "C1198", "C1199", "C1203", "C1204", "C1212", "C1213", "C1214", "C1300", "C1301", "C1302", "C1303", "C1304", "C1306", "C1354", "C1355", "C1356", "C1357", "C1358", "C1384", "C1385", "C1451", "C1505", "C1507", "C1511", "C1604", "C1605", "C1901", "C1906", "C1907"] +helpviewer_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1039", "C1040", "C1041", "C1042", "C1043", "C1044", "C1048", "C1056", "C1058", "C1059", "C1063", "C1069", "C1101", "C1102", "C1105", "C1110", "C1111", "C1112", "C1114", "C1118", "C1119", "C1127", "C1193", "C1194", "C1195", "C1198", "C1199", "C1203", "C1204", "C1212", "C1213", "C1214", "C1300", "C1301", "C1302", "C1303", "C1304", "C1306", "C1354", "C1355", "C1356", "C1357", "C1358", "C1384", "C1385", "C1451", "C1505", "C1507", "C1511", "C1604", "C1605", "C1901", "C1906", "C1907"] +ms.assetid: 6c8df109-7594-48ed-987a-97d9fe2b04af +--- # Compiler fatal errors C999 through C1999 The articles in this section of the documentation explain a subset of the error messages that are generated by the Microsoft C/C++ compiler. @@ -16,8 +24,6 @@ The articles in this section of the documentation explain a subset of the error | Error | Message | |--|--| -| [Fatal error C999](fatal-error-c999.md) | UNKNOWN MESSAGE
Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | -| [Fatal error C1000](fatal-error-c1000-c1999.md) | UNKNOWN FATAL ERROR
Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | | [Fatal error C1001](fatal-error-c1001.md) | An internal error has occurred in the compiler.
(compiler file '*file*', line *number*)
To work around this problem, try simplifying or changing the program near the locations listed above. Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | | [Fatal error C1002](fatal-error-c1002.md) | compiler is out of heap space in pass 2 | | [Fatal error C1003](fatal-error-c1003.md) | error count exceeds *number*; stopping compilation | @@ -207,7 +213,6 @@ The articles in this section of the documentation explain a subset of the error | [Fatal error C1905](fatal-error-c1905.md) | Front end and back end not compatible (must target same processor). | | Fatal error C1906 | assembly reference '*name*' not resolved for type '*type-name*'; missing option '-FU *filename*.dll'? | | Fatal error C1907 | unable to recover from previous error(s); stopping compilation | -| [Fatal error C1999](fatal-error-c1000-c1999.md) | UNKNOWN FATAL ERROR Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | ## See also From 99121d24f7b9b42531497511d6c36e25273d745f Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Wed, 12 Jun 2024 15:33:05 -0700 Subject: [PATCH 0261/1239] Learn Editor: Update compiler-fatal-errors-c999-through-c1999.md From 514a1dcca32d413c3f810945e779743fbe0cbc15 Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Wed, 12 Jun 2024 16:34:34 -0700 Subject: [PATCH 0262/1239] Remove other unused messages and unreferenced pages Remove other unused messages and unreferenced pages. --- .../compiler-errors-c2001-through-c2099.md | 1 - .../compiler-errors-1/fatal-error-c1000-c1999.md | 12 ------------ .../compiler-errors-1/fatal-error-c999.md | 13 ------------- .../compiler-errors-c2900-through-c3499.md | 1 - .../compiler-errors-c3500-through-c3999.md | 1 - .../compiler-warning-level-1-c4999.md | 13 ------------- .../compiler-warnings-by-compiler-version.md | 1 - .../compiler-warnings-c4000-through-c4199.md | 1 - .../compiler-warnings-c4800-through-c4999.md | 1 - 9 files changed, 44 deletions(-) delete mode 100644 docs/error-messages/compiler-errors-1/fatal-error-c1000-c1999.md delete mode 100644 docs/error-messages/compiler-errors-1/fatal-error-c999.md delete mode 100644 docs/error-messages/compiler-warnings/compiler-warning-level-1-c4999.md diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md index 1ce2757fd8..716f24691d 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md @@ -16,7 +16,6 @@ The articles in this section of the documentation explain a subset of the error | Error | Message | |--|--| -| Compiler error C2000 | UNKNOWN ERROR
Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | | [Compiler error C2001](compiler-error-c2001.md) | newline in constant | | [Compiler error C2002](compiler-error-c2002.md) | invalid wide-character constant | | [Compiler error C2003](compiler-error-c2003.md) | expected 'defined id' | diff --git a/docs/error-messages/compiler-errors-1/fatal-error-c1000-c1999.md b/docs/error-messages/compiler-errors-1/fatal-error-c1000-c1999.md deleted file mode 100644 index 756c66e60c..0000000000 --- a/docs/error-messages/compiler-errors-1/fatal-error-c1000-c1999.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -description: "Learn more about: Fatal Error C1000, C1999" -title: "Fatal Error C1000, C1999" -ms.date: 08/17/2022 -f1_keywords: ["C1000", "C1999"] -helpviewer_keywords: ["C1000", "C1999"] ---- -# Fatal error C1000, C1999 - -> UNKNOWN FATAL ERROR Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information - -This error sometimes means that you have mixed files from different versions of the compiler, or your compiler installation is corrupted. Use the Visual Studio Installer, the System Settings for **Apps & features**, or the Control panel's **Add or remove programs** to repair or reinstall the product. diff --git a/docs/error-messages/compiler-errors-1/fatal-error-c999.md b/docs/error-messages/compiler-errors-1/fatal-error-c999.md deleted file mode 100644 index da7452aec0..0000000000 --- a/docs/error-messages/compiler-errors-1/fatal-error-c999.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -description: "Learn more about: Fatal Error C999" -title: "Fatal Error C999" -ms.date: 08/17/2022 -f1_keywords: ["C999"] -helpviewer_keywords: ["C999"] -ms.assetid: a3a49a96-a352-4ff2-aa84-84eb6a9a81f1 ---- -# Fatal error C999 - -> UNKNOWN MESSAGE Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information - -This error sometimes means that you have mixed files from different versions of the compiler, or your compiler installation is corrupted. Use the Visual Studio Installer, the System Settings for **Apps & features**, or the Control panel's **Add or remove programs** to repair or reinstall the product. diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c2900-through-c3499.md b/docs/error-messages/compiler-errors-2/compiler-errors-c2900-through-c3499.md index 57c8482859..9bb91a7e7c 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c2900-through-c3499.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c2900-through-c3499.md @@ -115,7 +115,6 @@ The articles in this section of the documentation explain a subset of the error | [Compiler error C2996](compiler-error-c2996.md) | '*function*': recursive function template definition | | Compiler error C2997 | '*function*': array bound cannot be deduced from a default member initializer | | [Compiler error C2998](compiler-error-c2998.md) | '*declarator*': cannot be a template definition | -| Compiler error C2999 | UNKNOWN ERROR Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | ## See also diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md index de65aa783f..1d3dffd179 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md @@ -505,7 +505,6 @@ The articles in this section explain a subset of the error messages generated by |Compiler error C3996|Obsolete.| | Compiler error C3997 | Warbird: *message* | |Compiler error C3998|'c++*version*': unsupported C++ version; defaulting to 'c++*version*'| -|Compiler error C3999|UNKNOWN ERROR *message* Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information| ## See also diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4999.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4999.md deleted file mode 100644 index d1add86f49..0000000000 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4999.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -description: "Learn more about: Compiler Warning (level 1) C4999" -title: "Compiler Warning (level 1) C4999" -ms.date: "11/04/2016" -f1_keywords: ["C4999"] -helpviewer_keywords: ["C4999"] -ms.assetid: 79db8bcb-6404-4451-a374-8cd184d7c4b5 ---- -# Compiler Warning (level 1) C4999 - -UNKNOWN WARNING From the Help menu choose the Technical Support command or open the Technical Support help file for more information - -Note the circumstances of the error, try to isolate the problem and create a reproducible test case, then contact [Microsoft Product Support Services](/visualstudio/ide/talk-to-us). diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md b/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md index 4a1b12bdc6..87f1ff8efc 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md @@ -635,7 +635,6 @@ These warnings, and all warnings in later versions, are suppressed by using the | Warning | Message | |--|--| -| C4000 | `UNKNOWN WARNING Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information` | | [C4272](compiler-warning-level-1-c4272.md) | `'type': is marked __declspec(dllimport); must specify native calling convention when importing a function.` | | [C4333](compiler-warning-level-1-c4333.md) | `'expression': right shift by too large amount, data loss` | | [C4334](compiler-warning-level-3-c4334.md) | `'expression': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)` | diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md index 676f0a60ce..6f687f9a8c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md @@ -14,7 +14,6 @@ The articles in this section describe Microsoft C/C++ compiler warning messages |Warning|Message| |-------------|-------------| -|Compiler warning C4000|UNKNOWN WARNING
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information| |[Compiler warning (level 4, no longer emitted) C4001](compiler-warning-level-4-c4001.md)|nonstandard extension 'single line comment' was used| |[Compiler warning (level 1, Error) C4002](compiler-warning-level-1-c4002.md)|too many arguments for function-like macro invocation '*identifier*'| |[Compiler warning (level 1, Error) C4003](compiler-warning-level-1-c4003.md)|not enough arguments for function-like macro invocation '*identifier*'| diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index 8d8e2533ee..b33c69c14f 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -143,7 +143,6 @@ The articles in this section describe Microsoft C/C++ compiler warning messages | [Compiler warning (level 3) C4996](compiler-warning-level-3-c4996.md) | '*deprecated-declaration*': *deprecation-message* (or "was declared deprecated") | | [Compiler warning (level 1) C4997](compiler-warning-level-1-c4997.md) | '*class*': coclass does not implement a COM interface or pseudo-interface | | Compiler warning (level 1) C4998 | EXPECTATION FAILED: *expectation*(*value*) | -| [Compiler warning C4999](compiler-warning-level-1-c4999.md) | UNKNOWN WARNING Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | ## See also From 379a6d979434e52afefc562f40f27f55864b3460 Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Thu, 13 Jun 2024 11:29:05 -0700 Subject: [PATCH 0263/1239] Update redirections and toc Update redirections and toc. --- .openpublishing.redirection.json | 15 +++++++++++++++ .../compiler-fatal-errors-c999-through-c1999.md | 8 -------- docs/error-messages/includes/error-boilerplate.md | 2 +- docs/error-messages/toc.yml | 6 ------ 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json index add5778ec8..5080a1951e 100644 --- a/.openpublishing.redirection.json +++ b/.openpublishing.redirection.json @@ -7750,6 +7750,21 @@ "redirect_url": "/cpp/error-messages/compiler-errors-2/compiler-errors-c2500-through-c2599", "redirect_document_id": false }, + { + "source_path": "docs/error-messages/compiler-errors-1/fatal-error-c999.md", + "redirect_url": "/cpp/error-messages/compiler-errors-1/c-cpp-build-errors", + "redirect_document_id": false + }, + { + "source_path": "docs/error-messages/compiler-errors-1/fatal-error-c1000-c1999.md", + "redirect_url": "/cpp/error-messages/compiler-errors-1/c-cpp-build-errors", + "redirect_document_id": false + }, + { + "source_path": "docs/error-messages/compiler-warnings/compiler-warning-level-1-c4999.md", + "redirect_url": "/cpp/error-messages/compiler-errors-1/c-cpp-build-errors", + "redirect_document_id": false + }, { "source_path": "docs/error-messages/compiler-warnings/index.md", "redirect_url": "/cpp/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199", diff --git a/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md b/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md index 5242df332b..47a7d928d5 100644 --- a/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md +++ b/docs/error-messages/compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md @@ -6,14 +6,6 @@ f1_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1 helpviewer_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1039", "C1040", "C1041", "C1042", "C1043", "C1044", "C1048", "C1056", "C1058", "C1059", "C1063", "C1069", "C1101", "C1102", "C1105", "C1110", "C1111", "C1112", "C1114", "C1118", "C1119", "C1127", "C1193", "C1194", "C1195", "C1198", "C1199", "C1203", "C1204", "C1212", "C1213", "C1214", "C1300", "C1301", "C1302", "C1303", "C1304", "C1306", "C1354", "C1355", "C1356", "C1357", "C1358", "C1384", "C1385", "C1451", "C1505", "C1507", "C1511", "C1604", "C1605", "C1901", "C1906", "C1907"] ms.assetid: 6c8df109-7594-48ed-987a-97d9fe2b04af --- ---- -description: "Learn more about: Compiler fatal errors C999 through C1999" -title: "Compiler fatal errors C999 through C1999" -ms.date: 08/17/2022 -f1_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1039", "C1040", "C1041", "C1042", "C1043", "C1044", "C1048", "C1056", "C1058", "C1059", "C1063", "C1069", "C1101", "C1102", "C1105", "C1110", "C1111", "C1112", "C1114", "C1118", "C1119", "C1127", "C1193", "C1194", "C1195", "C1198", "C1199", "C1203", "C1204", "C1212", "C1213", "C1214", "C1300", "C1301", "C1302", "C1303", "C1304", "C1306", "C1354", "C1355", "C1356", "C1357", "C1358", "C1384", "C1385", "C1451", "C1505", "C1507", "C1511", "C1604", "C1605", "C1901", "C1906", "C1907"] -helpviewer_keywords: ["C1006", "C1024", "C1027", "C1030", "C1032", "C1034", "C1036", "C1039", "C1040", "C1041", "C1042", "C1043", "C1044", "C1048", "C1056", "C1058", "C1059", "C1063", "C1069", "C1101", "C1102", "C1105", "C1110", "C1111", "C1112", "C1114", "C1118", "C1119", "C1127", "C1193", "C1194", "C1195", "C1198", "C1199", "C1203", "C1204", "C1212", "C1213", "C1214", "C1300", "C1301", "C1302", "C1303", "C1304", "C1306", "C1354", "C1355", "C1356", "C1357", "C1358", "C1384", "C1385", "C1451", "C1505", "C1507", "C1511", "C1604", "C1605", "C1901", "C1906", "C1907"] -ms.assetid: 6c8df109-7594-48ed-987a-97d9fe2b04af ---- # Compiler fatal errors C999 through C1999 The articles in this section of the documentation explain a subset of the error messages that are generated by the Microsoft C/C++ compiler. diff --git a/docs/error-messages/includes/error-boilerplate.md b/docs/error-messages/includes/error-boilerplate.md index 702386ed15..fbd81d720e 100644 --- a/docs/error-messages/includes/error-boilerplate.md +++ b/docs/error-messages/includes/error-boilerplate.md @@ -4,7 +4,7 @@ To get help on a particular diagnostic message in Visual Studio, select it in the **Output** window and press the **F1** key. Visual Studio opens the documentation page for that error, if one exists. You can also use the search tool at the top of the page to find articles about specific errors or warnings. Or, browse the list of errors and warnings by tool and type in the table of contents on this page. > [!NOTE] -> Not every Visual Studio error or warning is documented. In many cases, the diagnostic message provides all of the information that's available. If you landed on this page when you used **F1** and you think the error or warning message needs additional explanation, let us know. You can use the feedback buttons on this page to raise a documentation issue on [GitHub](https://github.com/MicrosoftDocs/cpp-docs/issues). If you think the error or warning is wrong, or you've found another problem with the toolset, report a product issue on the [Developer Community](https://aka.ms/feedback/report?space=62) site. You can also send feedback and enter bugs within the IDE. In Visual Studio, go to the menu bar and choose **Help > Send Feedback > Report a Problem**, or submit a suggestion by using **Help > Send Feedback > Send a Suggestion**. +> Not every Visual Studio error or warning is documented. In many cases, the diagnostic message provides all of the information that's available. If you landed on this page when you used **F1** and you think the error or warning message needs additional explanation, let us know. You can use the feedback buttons on this page to raise a documentation issue on [GitHub](https://github.com/MicrosoftDocs/cpp-docs/issues). If you think the error or warning is wrong, or you've found another problem with the toolset, report a product issue on the [Developer Community](https://aka.ms/feedback/report?space=62) site. You can also send feedback and enter bugs within the IDE. In Visual Studio, go to the menu bar and choose **Help > Send Feedback > Report a Problem**, or submit a suggestion by using **Help > Send Feedback > Send a Suggestion**. Some compiler error topics were created that were found to not be emitted by the compiler and have been removed, and you will land on this page instead. You may find additional assistance for errors and warnings in [Microsoft Learn Q&A](/answers/topics/c%2B%2B.html) forums. Or, search for the error or warning number on the Visual Studio C++ [Developer Community](https://aka.ms/vsfeedback/browsecpp) site. You can also search [Stack Overflow](https://stackoverflow.com/) to find solutions. diff --git a/docs/error-messages/toc.yml b/docs/error-messages/toc.yml index 3ed9abcb0e..ad851c5bbb 100644 --- a/docs/error-messages/toc.yml +++ b/docs/error-messages/toc.yml @@ -88,10 +88,6 @@ items: items: - name: Compiler fatal errors C999 through C1999 href: compiler-errors-1/compiler-fatal-errors-c999-through-c1999.md - - name: Fatal error C999 - href: compiler-errors-1/fatal-error-c999.md - - name: Fatal error C1000, C1999 - href: compiler-errors-1/fatal-error-c1000-c1999.md - name: Fatal error C1001 href: compiler-errors-1/fatal-error-c1001.md - name: Fatal error C1002 @@ -4331,8 +4327,6 @@ items: href: compiler-warnings/compiler-warning-level-3-c4996.md - name: Compiler warning (level 1) C4997 href: compiler-warnings/compiler-warning-level-1-c4997.md - - name: Compiler warning (level 1) C4999 - href: compiler-warnings/compiler-warning-level-1-c4999.md - name: Compiler warnings C5000 through C5199 expanded: false items: From 6d32b33fda8922bfa1bfc2c01411ef9f64955bb4 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 14 Jun 2024 10:57:25 -0700 Subject: [PATCH 0264/1239] pencil edit --- docs/error-messages/includes/error-boilerplate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/includes/error-boilerplate.md b/docs/error-messages/includes/error-boilerplate.md index fbd81d720e..a344d4e6b5 100644 --- a/docs/error-messages/includes/error-boilerplate.md +++ b/docs/error-messages/includes/error-boilerplate.md @@ -4,7 +4,7 @@ To get help on a particular diagnostic message in Visual Studio, select it in the **Output** window and press the **F1** key. Visual Studio opens the documentation page for that error, if one exists. You can also use the search tool at the top of the page to find articles about specific errors or warnings. Or, browse the list of errors and warnings by tool and type in the table of contents on this page. > [!NOTE] -> Not every Visual Studio error or warning is documented. In many cases, the diagnostic message provides all of the information that's available. If you landed on this page when you used **F1** and you think the error or warning message needs additional explanation, let us know. You can use the feedback buttons on this page to raise a documentation issue on [GitHub](https://github.com/MicrosoftDocs/cpp-docs/issues). If you think the error or warning is wrong, or you've found another problem with the toolset, report a product issue on the [Developer Community](https://aka.ms/feedback/report?space=62) site. You can also send feedback and enter bugs within the IDE. In Visual Studio, go to the menu bar and choose **Help > Send Feedback > Report a Problem**, or submit a suggestion by using **Help > Send Feedback > Send a Suggestion**. Some compiler error topics were created that were found to not be emitted by the compiler and have been removed, and you will land on this page instead. +> Not every Visual Studio error or warning is documented. In many cases, the diagnostic message provides all of the information that's available. If you landed on this page when you used **F1** and you think the error or warning message needs additional explanation, let us know. You can use the feedback buttons on this page to raise a documentation issue on [GitHub](https://github.com/MicrosoftDocs/cpp-docs/issues). If you think the error or warning is wrong, or you've found another problem with the toolset, report a product issue on the [Developer Community](https://aka.ms/feedback/report?space=62) site. You can also send feedback and enter bugs within the IDE. In Visual Studio, go to the menu bar and choose **Help > Send Feedback > Report a Problem**, or submit a suggestion by using **Help > Send Feedback > Send a Suggestion**. Some compiler error topics were created that are not emitted by the compiler and now redirect to this page instead. You may find additional assistance for errors and warnings in [Microsoft Learn Q&A](/answers/topics/c%2B%2B.html) forums. Or, search for the error or warning number on the Visual Studio C++ [Developer Community](https://aka.ms/vsfeedback/browsecpp) site. You can also search [Stack Overflow](https://stackoverflow.com/) to find solutions. From 45d31cd4c3bd1ce6343b44c7b3db1452bad1640a Mon Sep 17 00:00:00 2001 From: Harry Gwinnell Date: Wed, 19 Jun 2024 09:17:52 +0100 Subject: [PATCH 0265/1239] Fix unclosed links --- docs/build/reference/commands-in-a-makefile.md | 4 ++-- docs/build/reference/contents-of-a-makefile.md | 8 ++++---- docs/build/reference/creating-a-makefile-project.md | 2 +- docs/build/reference/defining-an-nmake-macro.md | 8 ++++---- docs/build/reference/inference-rules.md | 12 ++++++------ docs/build/reference/inline-files-in-a-makefile.md | 8 ++++---- docs/build/reference/makefile-preprocessing.md | 8 ++++---- docs/build/reference/special-nmake-macros.md | 8 ++++---- docs/build/reference/using-an-nmake-macro.md | 12 ++++++------ docs/cpp/if-else-statement-cpp.md | 2 +- docs/cppcx/platform-intptr-value-class.md | 2 +- .../concurrency-direct3d-namespace-functions-amp.md | 2 +- .../concurrency-precise-math-namespace-functions.md | 2 +- docs/parallel/amp/reference/norm-3-class.md | 2 +- docs/parallel/amp/reference/tile-barrier-class.md | 4 ++-- .../concrt/reference/reader-writer-lock-class.md | 2 +- .../scoped-allocator-adaptor-class.md | 8 ++++---- 17 files changed, 47 insertions(+), 47 deletions(-) diff --git a/docs/build/reference/commands-in-a-makefile.md b/docs/build/reference/commands-in-a-makefile.md index 05a0f36f14..69635c932b 100644 --- a/docs/build/reference/commands-in-a-makefile.md +++ b/docs/build/reference/commands-in-a-makefile.md @@ -18,7 +18,7 @@ A command preceded by a semicolon (**`;`**) can appear on a dependency line or i project.obj : project.c project.h ; cl /c project.c ``` -## Command modifiers +## Command modifiers You can specify one or more command modifiers preceding a command, optionally separated by spaces or tabs. As with commands, modifiers must be indented. @@ -28,7 +28,7 @@ You can specify one or more command modifiers preceding a command, optionally se | **`-`**\[*number*] *command* | Turns off error checking for *command*. By default, NMAKE halts when a command returns a nonzero exit code. If *-number* is used, NMAKE stops if the exit code exceeds *number*. Spaces or tabs can't appear between the dash and *number.* At least one space or tab must appear between *number* and *command*. Use **`/I`** to turn off error checking for the entire makefile; use **`.IGNORE`** to turn off error checking for part of the makefile. | | **`!`** *command* | Executes *command* for each dependent file if *command* uses **`$**`** (all dependent files in the dependency) or **`$?`** (all dependent files in the dependency with a later timestamp than the target). | -## Filename-parts syntax +## Filename-parts syntax Filename-parts syntax in commands represents components of the first dependent filename (which may be an implied dependent). Filename components are the file's drive, path, base name, and extension as specified, not as it exists on disk. Use **`%s`** to represent the complete filename. Use **`%|`**\[*parts*]**`F`** (a vertical bar character follows the percent symbol) to represent parts of the filename, where *parts* can be zero or more of the following letters, in any order. diff --git a/docs/build/reference/contents-of-a-makefile.md b/docs/build/reference/contents-of-a-makefile.md index 943a29c916..7a5ba46077 100644 --- a/docs/build/reference/contents-of-a-makefile.md +++ b/docs/build/reference/contents-of-a-makefile.md @@ -24,11 +24,11 @@ For a sample, see [Sample makefile](sample-makefile.md). NMAKE supports other features, such as wildcards, long filenames, comments, and escapes for special characters. -## Wildcards and NMAKE +## Wildcards and NMAKE NMAKE expands filename wildcards (**`*`** and **`?`**) in dependency lines. A wildcard specified in a command is passed to the command; NMAKE doesn't expand it. -## Long filenames in a makefile +## Long filenames in a makefile Enclose long filenames in double quotation marks, as follows: @@ -36,7 +36,7 @@ Enclose long filenames in double quotation marks, as follows: all : "VeryLongFileName.exe" ``` -## Comments in a makefile +## Comments in a makefile Precede a comment with a number sign (**`#`**). NMAKE ignores text from the number sign to the next newline character. @@ -66,7 +66,7 @@ To specify a literal number sign, precede it with a caret (**`^`**), as follows: DEF = ^#define #Macro for a C preprocessing directive ``` -## Special characters in a makefile +## Special characters in a makefile To use an NMAKE special character as a literal character, place a caret (**`^`**) in front of it as an escape. NMAKE ignores carets that precede other characters. The special characters are: diff --git a/docs/build/reference/creating-a-makefile-project.md b/docs/build/reference/creating-a-makefile-project.md index 2d60b22066..0f66d0307f 100644 --- a/docs/build/reference/creating-a-makefile-project.md +++ b/docs/build/reference/creating-a-makefile-project.md @@ -16,7 +16,7 @@ If you have an existing makefile project, you have these choices if you want to - **Visual Studio 2017 and later**: Use the **Open Folder** feature to edit and build a makefile project as-is without any involvement of the MSBuild system. For more information, see [Open Folder projects for C++](../open-folder-projects-cpp.md). - **Visual Studio 2019 and later**: Create a UNIX makefile project for Linux. -## To create a makefile project with the makefile project template +## To create a makefile project with the makefile project template In Visual Studio 2017 and later, the Makefile project template is available when the C++ Desktop Development workload is installed. diff --git a/docs/build/reference/defining-an-nmake-macro.md b/docs/build/reference/defining-an-nmake-macro.md index e503302651..3cfdc2a17c 100644 --- a/docs/build/reference/defining-an-nmake-macro.md +++ b/docs/build/reference/defining-an-nmake-macro.md @@ -16,7 +16,7 @@ The *macro_name* is a case-sensitive combination of letters, digits, and undersc The *string* can be any sequence of zero or more characters. A *null* string contains zero characters or only spaces or tabs. The *string* can contain a macro invocation. -## Special characters in macros +## Special characters in macros A number sign (**`#`**) after a definition specifies a comment. To specify a literal number sign in a macro, use a caret (**`^`**) to escape it, as in **`^#`**. @@ -31,11 +31,11 @@ CMDS = cls^ dir ``` -## Null and undefined macros +## Null and undefined macros Both null and undefined macros expand to null strings, but a macro defined as a null string is considered defined in preprocessing expressions. To define a macro as a null string, specify no characters except spaces or tabs after the equal sign (**`=`**) in a command line or command file, and enclose the null string or definition in double quotation marks (**`" "`**). To undefine a macro, use **`!UNDEF`**. For more information, see [Makefile preprocessing directives](makefile-preprocessing.md#makefile-preprocessing-directives). -## Where to define macros +## Where to define macros Define macros in a command line, command file, makefile, or the *`Tools.ini`* file. @@ -43,7 +43,7 @@ In a makefile or the *`Tools.ini`* file, each macro definition must appear on a In a command line or command file, spaces and tabs delimit arguments and can't surround the equal sign. If *string* has embedded spaces or tabs, enclose either the string itself or the entire macro in double quotation marks (**`" "`**). -## Precedence in macro definitions +## Precedence in macro definitions If a macro has multiple definitions, NMAKE uses the highest-precedence definition. The following list shows the order of precedence, from highest to lowest: diff --git a/docs/build/reference/inference-rules.md b/docs/build/reference/inference-rules.md index 593b8b2bbb..e30b337647 100644 --- a/docs/build/reference/inference-rules.md +++ b/docs/build/reference/inference-rules.md @@ -10,7 +10,7 @@ Inference rules in NMAKE supply commands to update targets and to infer dependen If an out-of-date dependency has no commands, and if [`.SUFFIXES`](dot-directives.md) contains the dependent's extension, NMAKE uses a rule whose extensions match the target and an existing file in the current or specified directory. If more than one rule matches existing files, the **`.SUFFIXES`** list determines which to use; list priority descends from left to right. If a dependent file doesn't exist and isn't listed as a target in another description block, an inference rule can create the missing dependent from another file that has the same base name. If a description block's target has no dependents or commands, an inference rule can update the target. Inference rules can build a command-line target even if no description block exists. NMAKE may invoke a rule for an inferred dependent even if an explicit dependent is specified. -## Defining a rule +## Defining a rule The *from_ext* represents the extension of a dependent file, and *to_ext* represents the extension of a target file. @@ -21,7 +21,7 @@ The *from_ext* represents the extension of a dependent file, and *to_ext* repres Extensions aren't case-sensitive. Macros can be invoked to represent *from_ext* and *to_ext*; the macros are expanded during preprocessing. The period (**`.`**) that precedes *from_ext* must appear at the beginning of the line. The colon (**`:`**) is preceded by zero or more spaces or tabs. It can be followed only by spaces or tabs, a semicolon (**`;`**) to specify a command, a number sign (**`#`**) to specify a comment, or a newline character. No other spaces are allowed. Commands are specified as in description blocks. -## Search paths in rules +## Search paths in rules ```makefile {from_path}.from_ext{to_path}.to_ext: @@ -61,7 +61,7 @@ An inference rule applies to a dependency only if paths specified in the depende $(CC) $(CFLAGS) $< ``` -## Batch-mode rules +## Batch-mode rules ```makefile {from_path}.from_ext{to_path}.to_ext:: @@ -135,7 +135,7 @@ foo4.cpp Generating Code... ``` -## Predefined rules +## Predefined rules Predefined inference rules use NMAKE-supplied command and options macros. @@ -155,7 +155,7 @@ Predefined inference rules use NMAKE-supplied command and options macros. | `.cxx.obj` | `$(CXX) $(CXXFLAGS) /c $<` | `cl /c $<` | yes | all | | `.rc.res` | `$(RC) $(RFLAGS) /r $<` | `rc /r $<` | no | all | -## Inferred dependents and rules +## Inferred dependents and rules NMAKE assumes an inferred dependent for a target if an applicable inference rule exists. A rule applies if: @@ -169,7 +169,7 @@ NMAKE assumes an inferred dependent for a target if an applicable inference rule Inferred dependents can cause unexpected side effects. If the target's description block contains commands, NMAKE executes those commands instead of the commands in the rule. -## Precedence in inference rules +## Precedence in inference rules If an inference rule is defined more than once, NMAKE uses the highest-precedence definition. The following list shows the order of precedence from highest to lowest: diff --git a/docs/build/reference/inline-files-in-a-makefile.md b/docs/build/reference/inline-files-in-a-makefile.md index 5e2e03c1b2..7731da1cd6 100644 --- a/docs/build/reference/inline-files-in-a-makefile.md +++ b/docs/build/reference/inline-files-in-a-makefile.md @@ -8,7 +8,7 @@ helpviewer_keywords: ["inline files [C++], in makefiles", "inline files [C++]", An inline file contains text you specify in the makefile. Its name can be used in commands as input (for example, a LINK command file), or it can pass commands to the operating system. The file is created on disk when a command that creates the file is run. -## Specify an inline file +## Specify an inline file Specify two angle brackets (**`<<`**) in the command where *filename* is to appear. The angle brackets can't be a macro expansion. The *filename* is optional: @@ -18,7 +18,7 @@ Specify two angle brackets (**`<<`**) in the command where *filename* is to appe When the command is run, the angle brackets are replaced by *filename*, if specified, or by a unique NMAKE-generated name. If specified, *filename* must follow angle brackets without a space or tab. A path is permitted. No extension is required or assumed. If *filename* is specified, the file is created in the current or specified directory, overwriting any existing file by that name. Otherwise, it's created in the `TMP` directory (or the current directory, if the `TMP` environment variable isn't defined). If a previous *filename* is reused, NMAKE replaces the previous file. -## Create inline file text +## Create inline file text Inline files are temporary or permanent. @@ -34,11 +34,11 @@ Specify your *inline_text* on the first line after the command. Mark the end wit A temporary file exists for the duration of the session and can be reused by other commands. Specify **`KEEP`** after the closing angle brackets to retain the file after the NMAKE session; an unnamed file is preserved on disk with the generated filename. Specify **`NOKEEP`** or nothing for a temporary file. **`KEEP`** and **`NOKEEP`** are not case sensitive. -## Reuse inline files +## Reuse inline files To reuse an inline file, specify `< Multiple inline files +## Multiple inline files A command can create more than one inline file: diff --git a/docs/build/reference/makefile-preprocessing.md b/docs/build/reference/makefile-preprocessing.md index ea2e4ada34..fd50b23a67 100644 --- a/docs/build/reference/makefile-preprocessing.md +++ b/docs/build/reference/makefile-preprocessing.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["preprocessing makefiles", "makefiles, preprocessing", "!C You can control the NMAKE session by using preprocessing directives and expressions. Preprocessing instructions can be placed in the makefile or in *`Tools.ini`*. Using directives, you can conditionally process your makefile, display error messages, include other makefiles, undefine a macro, and turn certain options on or off. -## Makefile Preprocessing Directives +## Makefile Preprocessing Directives Preprocessing directives aren't case-sensitive. The initial exclamation point (**`!`**) must appear at the beginning of the line. Zero or more spaces or tabs can appear after the exclamation point, for indentation. @@ -67,13 +67,13 @@ Preprocessing directives aren't case-sensitive. The initial exclamation point (* Undefines *macro_name*. -## Expressions in makefile preprocessing +## Expressions in makefile preprocessing The **`!IF`** or **`!ELSE IF`** *constant_expression* consists of integer constants (in decimal or C-language notation), string constants, or commands. Use parentheses to group expressions. Expressions use C-style signed long integer arithmetic; numbers are in 32-bit two's-complement form in the range -2147483648 to 2147483647. Expressions can use operators that act on constant values, exit codes from commands, strings, macros, and file-system paths. -## Makefile preprocessing operators +## Makefile preprocessing operators Makefile preprocessing expressions can use operators that act on constant values, exit codes from commands, strings, macros, and file-system paths. To evaluate the expression, the preprocessor first expands macros, and then executes commands, and then does the operations. It evaluates operations in order of explicit grouping in parentheses, and then in order of operator precedence. The result is a constant value. @@ -125,7 +125,7 @@ Expressions can use the following operators. The operators of equal precedence a > [!NOTE] > The bitwise XOR operator (**`^`**) is the same as the escape character, and must be escaped (as **`^^`**) when it's used in an expression. -## Executing a program in preprocessing +## Executing a program in preprocessing To use a command's exit code during preprocessing, specify the command, with any arguments, within brackets (**`[ ]`**). Any macros are expanded before the command is executed. NMAKE replaces the command specification with the command's exit code, which can be used in an expression to control preprocessing. diff --git a/docs/build/reference/special-nmake-macros.md b/docs/build/reference/special-nmake-macros.md index 26f1428da7..1ed4fd8b92 100644 --- a/docs/build/reference/special-nmake-macros.md +++ b/docs/build/reference/special-nmake-macros.md @@ -9,7 +9,7 @@ no-loc: [AS, AFLAGS, CC, CFLAGS, CPP, CPPFLAGS, CXX, CXXFLAGS, RC, RFLAGS, ias, NMAKE provides several special macros to represent various filenames and commands. One use for some of these macros is in the predefined inference rules. Like all macros, the macros provided by NMAKE are case sensitive. -## Filename Macros +## Filename Macros Filename macros are predefined as filenames specified in the dependency (not full filename specifications on disk). These macros don't need to be enclosed in parentheses when invoked; specify only a **`$`** as shown. @@ -31,7 +31,7 @@ To specify part of a predefined filename macro, append a macro modifier and encl | **`F`** | Base name plus extension | | **`R`** | Drive plus directory plus base name | -## Recursion macros +## Recursion macros Use recursion macros to call NMAKE recursively. Recursive sessions inherit command-line and environment-variable macros and *`Tools.ini`* information. They don't inherit makefile-defined inference rules or `.SUFFIXES` and `.PRECIOUS` specifications. There are three ways to pass macros to a recursive NMAKE session: @@ -45,7 +45,7 @@ Use recursion macros to call NMAKE recursively. Recursive sessions inherit comma | **`MAKEDIR`** | Current directory when NMAKE was invoked. | | **`MAKEFLAGS`** | Options currently in effect. Use as `/$(MAKEFLAGS)`. The **`/F`** option isn't included. | -## Command macros and options macros +## Command macros and options macros Command macros are predefined for Microsoft products. Options macros represent options to these products and are undefined by default. Both are used in predefined inference rules and can be used in description blocks or user-defined inference rules. Command macros can be redefined to represent part or all of a command line, including options. Options macros generate a null string if left undefined. @@ -57,7 +57,7 @@ Command macros are predefined for Microsoft products. Options macros represent o | C++ Compiler | **`CXX`** | `cl` | **`CXXFLAGS`** | | Resource Compiler | **`RC`** | `rc` | **`RFLAGS`** | -## Environment-variable macros +## Environment-variable macros NMAKE inherits macro definitions for environment variables that exist before the start of the session. If a variable was set in the operating-system environment, it is available as an NMAKE macro. The inherited names are converted to uppercase. Inheritance occurs before preprocessing. Use the /E option to cause macros inherited from environment variables to override any macros with the same name in the makefile. diff --git a/docs/build/reference/using-an-nmake-macro.md b/docs/build/reference/using-an-nmake-macro.md index e0a21eadbc..6186d04089 100644 --- a/docs/build/reference/using-an-nmake-macro.md +++ b/docs/build/reference/using-an-nmake-macro.md @@ -14,7 +14,7 @@ $(macro_name) No spaces are allowed. The parentheses are optional if *macro_name* is a single character. The definition string replaces `$(macro_name)`; an undefined macro is replaced by a null string. -## Macro substitution +## Macro substitution When *macro_name* is invoked, each occurrence of *string1* in its definition string is replaced by *string2*. @@ -28,11 +28,11 @@ No spaces or tabs precede the colon (**`:`**); any spaces or tabs after the colo ::: moniker range=">=msvc-170" -## Macro functions +## Macro functions NMAKE provides a set of functions that can be used to modify strings, lists of items and file paths. These functions are available in NMAKE starting in Visual Studio 2022. -### Function syntax +### Function syntax Functions use the following syntax: @@ -57,7 +57,7 @@ INPUT=a, b $(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b" ``` -### List syntax +### List syntax Some functions support a whitespace-separated list of items. Extra whitespace is ignored at the beginning of the list, the end of the list, or between each item. Lists produced by a function use a single space between each item as a separator, and don't have leading or trailing whitespace. @@ -67,7 +67,7 @@ For example, the simplest list function is `strip`, which takes a single list ar $(strip a b c d ) # Evaluates to "a b c d" ``` -### Pattern syntax +### Pattern syntax Some functions support using a *pattern*. A pattern is a string that contains a single wildcard that can match any number of characters. The first `%` in a pattern is the wildcard, and any later `%` characters are treated as literals. A `%` anywhere before the actual wildcard can be escaped by using `\` (that is, `\%` is treated as a literal `%`). Any `\` that would escape the wildcard can be escaped with another `\` (so `\\%` is treated as a literal `\` followed by the wildcard). To be considered a match, all of the input characters must be matched by the pattern; partial matches aren't supported. @@ -86,7 +86,7 @@ $(filter a%c\\%d,abc\\%d) # Evaluates to "abc\\%d" - any `\` after the wildcard $(filter \\a%f,\\abcdef) # Evaluates to "\\abcdef" - any `\\` that isn't directly before the wildcard isn't treated as an escape ``` -### Functions by category +### Functions by category | Function | Purpose | Supported | |--|--|--| diff --git a/docs/cpp/if-else-statement-cpp.md b/docs/cpp/if-else-statement-cpp.md index 980d43db95..c8252c9f23 100644 --- a/docs/cpp/if-else-statement-cpp.md +++ b/docs/cpp/if-else-statement-cpp.md @@ -164,7 +164,7 @@ setting shared_flag to false Error! Token must not be a keyword ``` -## if constexpr statements +## if constexpr statements Starting in C++17, you can use an **`if constexpr`** statement in function templates to make compile-time branching decisions without having to resort to multiple function overloads. **Microsoft-specific**: This form is available starting in Visual Studio 2017 version 15.3, and requires at least the [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) compiler option. diff --git a/docs/cppcx/platform-intptr-value-class.md b/docs/cppcx/platform-intptr-value-class.md index 2b6df4480b..de08c207cf 100644 --- a/docs/cppcx/platform-intptr-value-class.md +++ b/docs/cppcx/platform-intptr-value-class.md @@ -37,7 +37,7 @@ IntPtr has the following members: **Metadata:** platform.winmd -## IntPtr::IntPtr Constructor +## IntPtr::IntPtr Constructor Initializes a new instance of an IntPtr with the specified value. diff --git a/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md b/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md index b524d406b8..c93112ffca 100644 --- a/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md +++ b/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md @@ -262,7 +262,7 @@ An array on a Direct3D accelerator_view for which the underlying Direct3D buffer The IUnknown interface pointer corresponding to the Direct3D buffer underlying the array. -## get_device +## get_device Get the D3D device interface underlying a accelerator_view. diff --git a/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md b/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md index ecdee34132..cfbff07214 100644 --- a/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md +++ b/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md @@ -1049,7 +1049,7 @@ Floating-point value Returns the floor of the argument -## fma +## fma Computes the product of the first and second specified arguments, then adds the third specified argument to the result; the entire computation is performed as a single operation. diff --git a/docs/parallel/amp/reference/norm-3-class.md b/docs/parallel/amp/reference/norm-3-class.md index 336f4b5e08..96533633a3 100644 --- a/docs/parallel/amp/reference/norm-3-class.md +++ b/docs/parallel/amp/reference/norm-3-class.md @@ -200,7 +200,7 @@ The value for initialization. *_Other*
The object used to initialize. -##
size Constant +## size Constant ### Syntax diff --git a/docs/parallel/amp/reference/tile-barrier-class.md b/docs/parallel/amp/reference/tile-barrier-class.md index 95119110e9..a24d46e89a 100644 --- a/docs/parallel/amp/reference/tile-barrier-class.md +++ b/docs/parallel/amp/reference/tile-barrier-class.md @@ -79,7 +79,7 @@ Blocks execution of all threads in a tile until all threads in a tile have reach void wait_with_all_memory_fence() const restrict(amp); ``` -## wait_with_global_memory_fence +## wait_with_global_memory_fence Blocks execution of all threads in a tile until all threads in a tile have reached this call. This ensures that all global memory accesses are visible to other threads in the thread tile, and have been executed in program order. @@ -89,7 +89,7 @@ Blocks execution of all threads in a tile until all threads in a tile have reach void wait_with_global_memory_fence() const restrict(amp); ``` -## wait_with_tile_static_memory_fence +## wait_with_tile_static_memory_fence Blocks execution of all threads in a tile until all threads in a tile have reached this call. This ensures that `tile_static` memory accesses are visible to other threads in the thread tile, and have been executed in program order. diff --git a/docs/parallel/concrt/reference/reader-writer-lock-class.md b/docs/parallel/concrt/reference/reader-writer-lock-class.md index eba54f6f74..12fe2bdb4b 100644 --- a/docs/parallel/concrt/reference/reader-writer-lock-class.md +++ b/docs/parallel/concrt/reference/reader-writer-lock-class.md @@ -158,7 +158,7 @@ explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock); *_Reader_writer_lock*
The `reader_writer_lock` object to acquire as a reader. -##
reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor +## reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor Destroys a `scoped_lock_read` object and releases the lock supplied in its constructor. diff --git a/docs/standard-library/scoped-allocator-adaptor-class.md b/docs/standard-library/scoped-allocator-adaptor-class.md index 334806e703..918fc5f4bd 100644 --- a/docs/standard-library/scoped-allocator-adaptor-class.md +++ b/docs/standard-library/scoped-allocator-adaptor-class.md @@ -240,14 +240,14 @@ size_type max_size(); `Outer_traits::max_size(outer_allocator())` -## scoped_allocator_adaptor::operator= +## scoped_allocator_adaptor::operator= ```cpp scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor&) = default; scoped_allocator_adaptor& operator=(scoped_allocator_adaptor&&) = default; ``` -## scoped_allocator_adaptor::operator== +## scoped_allocator_adaptor::operator== ```cpp template @@ -255,7 +255,7 @@ bool operator==(const scoped_allocator_adaptor& a, const scoped_allocator_adaptor& b) noexcept; ``` -## scoped_allocator_adaptor::operator!= +## scoped_allocator_adaptor::operator!= ```cpp template @@ -263,7 +263,7 @@ bool operator!=(const scoped_allocator_adaptor& a, const scoped_allocator_adaptor& b) noexcept; ``` -## scoped_allocator_adaptor::outer_allocator +## scoped_allocator_adaptor::outer_allocator Retrieves a reference to the stored object of type `outer_allocator_type`. From 28f053ec2a3f83f257e398f477280bef9bab9381 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Wed, 19 Jun 2024 13:08:02 -0700 Subject: [PATCH 0266/1239] Update scoped-allocator-adaptor-class.md --- docs/standard-library/scoped-allocator-adaptor-class.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard-library/scoped-allocator-adaptor-class.md b/docs/standard-library/scoped-allocator-adaptor-class.md index 918fc5f4bd..4694600e24 100644 --- a/docs/standard-library/scoped-allocator-adaptor-class.md +++ b/docs/standard-library/scoped-allocator-adaptor-class.md @@ -263,7 +263,7 @@ bool operator!=(const scoped_allocator_adaptor& a, const scoped_allocator_adaptor& b) noexcept; ``` -## scoped_allocator_adaptor::outer_allocator +## scoped_allocator_adaptor::outer_allocator Retrieves a reference to the stored object of type `outer_allocator_type`. From 6c0c9dcfb0a925c3a70e652f99c4f42c0804453f Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 19 Jun 2024 16:53:33 -0700 Subject: [PATCH 0267/1239] Error 2000 was never emitted. --- .../compiler-errors-1/compiler-errors-c2000-c3999.md | 8 ++++---- .../compiler-errors-c2001-through-c2099.md | 9 ++++----- .../compiler-errors-c2100-through-c2199.md | 2 +- .../compiler-errors-c2200-through-c2299.md | 2 +- .../compiler-errors-c2300-through-c2399.md | 2 +- .../compiler-errors-c2400-through-c2499.md | 2 +- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md index e43aa5e56b..41ec42f58d 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md @@ -1,15 +1,15 @@ --- -description: "Learn about compiler errors C2000 - C3999 and C7000 - C7999." -title: "Compiler errors C2000 - C3999, C7000 - C7999" +description: "Learn about compiler errors C2001 - C3999 and C7000 - C7999." +title: "Compiler errors C2001 - C3999, C7000 - C7999" ms.date: 04/18/2021 --- -# Compiler errors C2000 - C3999, C7000 - C7999 +# Compiler errors C2001 - C3999, C7000 - C7999 The articles in this section of the documentation explain a subset of the error messages that are generated by the Microsoft C/C++ compiler. ## In this section -[Compiler errors C2000 through C2099](../compiler-errors-1/compiler-errors-c2001-through-c2099.md) \ +[Compiler errors C2001 through C2099](../compiler-errors-1/compiler-errors-c2001-through-c2099.md) \ [Compiler errors C2100 through C2199](../compiler-errors-1/compiler-errors-c2100-through-c2199.md) \ [Compiler errors C2200 through C2299](../compiler-errors-1/compiler-errors-c2200-through-c2299.md) \ [Compiler errors C2300 through C2399](../compiler-errors-1/compiler-errors-c2300-through-c2399.md) \ diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md index 716f24691d..eff111136b 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler errors C2000 through C2099" -title: "Compiler errors C2000 through C2099" +description: "Learn more about: Compiler errors C2001 through C2099" +title: "Compiler errors C2001 through C2099" ms.date: 08/24/2022 f1_keywords: ["C2000", "C2029"] helpviewer_keywords: ["C2000", "C2029"] -ms.assetid: d99a19eb-eeeb-4181-9b33-9cbe4459767b --- -# Compiler errors C2000 through C2099 +# Compiler errors C2001 through C2099 The articles in this section of the documentation explain a subset of the error messages that are generated by the compiler. @@ -119,4 +118,4 @@ The articles in this section of the documentation explain a subset of the error ## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ -[Compiler errors C2000 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) +[Compiler errors C2001 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2100-through-c2199.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2100-through-c2199.md index 2a62b7560f..f6bbfd9917 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2100-through-c2199.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2100-through-c2199.md @@ -120,4 +120,4 @@ The articles in this section of the documentation explain a subset of the error ## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ -[Compiler errors C2000 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) +[Compiler errors C2001 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2200-through-c2299.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2200-through-c2299.md index fbb78db362..aeb9e58f33 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2200-through-c2299.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2200-through-c2299.md @@ -120,4 +120,4 @@ The articles in this section of the documentation explain a subset of the error ## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ -[Compiler errors C2000 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) +[Compiler errors C2001 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md index 14530262d4..d64bb155be 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md @@ -119,4 +119,4 @@ The articles in this section of the documentation explain a subset of the error ## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ -[Compiler errors C2000 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) +[Compiler errors C2001 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) diff --git a/docs/error-messages/compiler-errors-1/compiler-errors-c2400-through-c2499.md b/docs/error-messages/compiler-errors-1/compiler-errors-c2400-through-c2499.md index a22a80372d..3190212589 100644 --- a/docs/error-messages/compiler-errors-1/compiler-errors-c2400-through-c2499.md +++ b/docs/error-messages/compiler-errors-1/compiler-errors-c2400-through-c2499.md @@ -116,4 +116,4 @@ The articles in this section of the documentation explain a subset of the error ## See also [C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ -[Compiler errors C2000 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) +[Compiler errors C2001 - C3999, C7000 - C7999](../compiler-errors-1/compiler-errors-c2000-c3999.md) From 8e450b28fbf6b90ecd2a5b8bb1d41467fdf51a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mq=E7=99=BD?= <3326284481@qq.com> Date: Thu, 20 Jun 2024 14:34:32 +0800 Subject: [PATCH 0268/1239] Modify the error description of async --- docs/standard-library/future-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard-library/future-functions.md b/docs/standard-library/future-functions.md index c40c313f2d..bfceb3f05c 100644 --- a/docs/standard-library/future-functions.md +++ b/docs/standard-library/future-functions.md @@ -48,7 +48,7 @@ The second function returns a `future` object whose *associated asynchronous Unless `decay::type` is a type other than launch, the second function doesn't participate in overload resolution. -The C++ standard states that if policy is launch::async, the function creates a new thread. However the Microsoft implementation is currently non-conforming. It obtains its threads from the Windows ThreadPool, which in some cases may provide a recycled thread rather than a new one. This means that the `launch::async` policy is implemented as `launch::async|launch::deferred`. Another implication of the ThreadPool-based implementation is that there's no guarantee that thread-local variables will be destroyed when the thread completes. If the thread is recycled and provided to a new call to `async`, the old variables will still exist. We recommend that you don't use thread-local variables with `async`. +The C++ standard states that if the policy is `launch::async`, the function behaves as if it invokes the callable object in a new thread. This means that while it typically results in creating a new thread, the implementation may use other mechanisms to achieve equivalent behavior. However, the Microsoft implementation currently does not conform strictly to this behavior. It obtains its threads from the Windows ThreadPool, which may provide a recycled thread rather than a new one. This means that the `launch::async` policy is effectively implemented as `launch::async|launch::deferred`. Another implication of the ThreadPool-based implementation is that there's no guarantee that thread-local variables will be destroyed when the thread completes. If the thread is recycled and provided to a new call to `async`, the old variables will still exist. We recommend that you avoid using thread-local variables with `async`. If *policy* is `launch::deferred`, the function marks its associated asynchronous state as holding a *deferred function* and returns. The first call to any non-timed function that waits for the associated asynchronous state to be ready in effect calls the deferred function by evaluating `INVOKE(dfn, dargs..., Ty)`. From fb46e08dbad4c05cae1f311da153fa66ba9ff7cf Mon Sep 17 00:00:00 2001 From: Rory Hoy Date: Thu, 20 Jun 2024 16:14:32 -0400 Subject: [PATCH 0269/1239] Update namespaces-cpp.md - typo/grammar --- docs/cpp/namespaces-cpp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cpp/namespaces-cpp.md b/docs/cpp/namespaces-cpp.md index 7022f7c638..8051071fee 100644 --- a/docs/cpp/namespaces-cpp.md +++ b/docs/cpp/namespaces-cpp.md @@ -10,7 +10,7 @@ ms.assetid: d1a5a9ab-1cad-47e6-a82d-385bb77f4188 A namespace is a declarative region that provides a scope to the identifiers (the names of types, functions, variables, etc) inside it. Namespaces are used to organize code into logical groups and to prevent name collisions that can occur especially when your code base includes multiple libraries. All identifiers at namespace scope are visible to one another without qualification. Identifiers outside the namespace can access the members by using the fully qualified name for each identifier, for example `std::vector vec;`, or else by a [using Declaration](../cpp/using-declaration.md) for a single identifier (`using std::string`), or a [using Directive](../cpp/namespaces-cpp.md#using_directives) for all the identifiers in the namespace (`using namespace std;`). Code in header files should always use the fully qualified namespace name. -The following example shows a namespace declaration and three ways that code outside the namespace can accesses their members. +The following example shows a namespace declaration and three ways that code outside the namespace can access its members. ```cpp namespace ContosoData From 8f301c8cdeddf2a95adc514a9f55770ec7572833 Mon Sep 17 00:00:00 2001 From: Rock Chen Date: Fri, 21 Jun 2024 23:24:02 +0800 Subject: [PATCH 0270/1239] Add links for "Just My Code" and "Edit and Continue". --- docs/build/cmake-projects-in-visual-studio.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build/cmake-projects-in-visual-studio.md b/docs/build/cmake-projects-in-visual-studio.md index 01cc9f2bee..e047468bf1 100644 --- a/docs/build/cmake-projects-in-visual-studio.md +++ b/docs/build/cmake-projects-in-visual-studio.md @@ -134,11 +134,11 @@ You can customize a CMake debugging session by setting properties in the *`launc ### Just My Code for CMake projects -When you build for Windows using the MSVC compiler, CMake projects have support for Just My Code debugging. To change the Just My Code setting, go to **Tools** > **Options** > **Debugging** > **General**. +When you build for Windows using the MSVC compiler, CMake projects have support for Just My Code debugging. To change the Just My Code setting, go to **Tools** > **Options** > **Debugging** > **General**. For more information on Just My Code debugging, see [Debug only user code with Just My Code](https://learn.microsoft.com/en-us/visualstudio/debugger/just-my-code). ### Edit and Continue for CMake projects -When you build for Windows with the MSVC compiler, CMake projects have support for Edit and Continue. Add the following code to your *`CMakeLists.txt`* file to enable Edit and Continue. +When you build for Windows with the MSVC compiler, CMake projects have support for Edit and Continue. Add the following code to your *`CMakeLists.txt`* file to enable Edit and Continue. For more information on Edit and Continue, see [Configure Edit and Continue (C#, VB, C++)](https://learn.microsoft.com/en-us/visualstudio/debugger/how-to-enable-and-disable-edit-and-continue). ``` if(MSVC) From 1b92eac36ef57d20ee7ccdaaf546f2544d3b98de Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 21 Jun 2024 10:28:10 -0700 Subject: [PATCH 0271/1239] Update cmake-projects-in-visual-studio.md Use repo links - preferred. --- docs/build/cmake-projects-in-visual-studio.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/cmake-projects-in-visual-studio.md b/docs/build/cmake-projects-in-visual-studio.md index e047468bf1..40b56f6bb8 100644 --- a/docs/build/cmake-projects-in-visual-studio.md +++ b/docs/build/cmake-projects-in-visual-studio.md @@ -134,11 +134,11 @@ You can customize a CMake debugging session by setting properties in the *`launc ### Just My Code for CMake projects -When you build for Windows using the MSVC compiler, CMake projects have support for Just My Code debugging. To change the Just My Code setting, go to **Tools** > **Options** > **Debugging** > **General**. For more information on Just My Code debugging, see [Debug only user code with Just My Code](https://learn.microsoft.com/en-us/visualstudio/debugger/just-my-code). +When you build for Windows using the MSVC compiler, CMake projects have support for Just My Code debugging. To change the Just My Code setting, go to **Tools** > **Options** > **Debugging** > **General**. For more information on Just My Code debugging, see [Debug only user code with Just My Code](/visualstudio/debugger/just-my-code). ### Edit and Continue for CMake projects -When you build for Windows with the MSVC compiler, CMake projects have support for Edit and Continue. Add the following code to your *`CMakeLists.txt`* file to enable Edit and Continue. For more information on Edit and Continue, see [Configure Edit and Continue (C#, VB, C++)](https://learn.microsoft.com/en-us/visualstudio/debugger/how-to-enable-and-disable-edit-and-continue). +When you build for Windows with the MSVC compiler, CMake projects have support for Edit and Continue. Add the following code to your *`CMakeLists.txt`* file to enable Edit and Continue. For more information on Edit and Continue, see [Configure Edit and Continue (C#, VB, C++)](/visualstudio/debugger/how-to-enable-and-disable-edit-and-continue). ``` if(MSVC) @@ -432,4 +432,4 @@ In Visual Studio 2015, Visual Studio users can use a [CMake generator](https://c [Deploy, run, and debug your Linux project](../linux/deploy-run-and-debug-your-linux-project.md)\ [CMake predefined configuration reference](cmake-predefined-configuration-reference.md)\ [vcpkg in CMake projects](/vcpkg/users/buildsystems/cmake-integration)\ -[Install and use packages with CMake in Visual Studio](/vcpkg/get_started/get-started-vs) \ No newline at end of file +[Install and use packages with CMake in Visual Studio](/vcpkg/get_started/get-started-vs) From c297b33ee476ba106090683b275a9d4348cac329 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 21 Jun 2024 11:45:54 -0700 Subject: [PATCH 0272/1239] Update x64-software-conventions.md add code escape --- docs/build/x64-software-conventions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/x64-software-conventions.md b/docs/build/x64-software-conventions.md index 959de8539f..256fbdb581 100644 --- a/docs/build/x64-software-conventions.md +++ b/docs/build/x64-software-conventions.md @@ -18,7 +18,7 @@ Given the expanded register set, x64 uses the [__fastcall](../cpp/fastcall.md) c The **`__fastcall`** convention uses registers for the first four arguments, and the stack frame to pass more arguments. For details on the x64 calling convention, including register usage, stack parameters, return values, and stack unwinding, see [x64 calling convention](x64-calling-convention.md). -For more information on the `__vectorcall` calling convention, see [__vectorcall](../cpp/vectorcall.md). +For more information on the `__vectorcall` calling convention, see [`__vectorcall`](../cpp/vectorcall.md). ## Enable x64 compiler optimization From da08769518ae025bbd323d150f7c2a1f85edddbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sat, 22 Jun 2024 00:54:23 +0200 Subject: [PATCH 0273/1239] Update arm64-intrinsics.md to include intrin.h mention (#5028) * Update arm64-intrinsics.md to include intrin.h mention Some intrinsics, such as `__prefetch` come from `intrin.h` header file. * Update arm64-intrinsics.md tech review feedback * Update arm64-intrinsics.md tech review --------- Co-authored-by: Tyler Whitney --- docs/intrinsics/arm64-intrinsics.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/intrinsics/arm64-intrinsics.md b/docs/intrinsics/arm64-intrinsics.md index a46cfcaffe..8300ceea36 100644 --- a/docs/intrinsics/arm64-intrinsics.md +++ b/docs/intrinsics/arm64-intrinsics.md @@ -15,10 +15,12 @@ The Microsoft C++ compiler (MSVC) makes the following intrinsics available on th The NEON vector instruction set extensions for ARM64 provide Single Instruction Multiple Data (SIMD) capabilities. They resemble the ones in the MMX and SSE vector instruction sets that are common to x86 and x64 architecture processors. -NEON intrinsics are supported, as provided in the header file *arm64_neon.h*. The MSVC support for NEON intrinsics resembles that of the ARM64 compiler, which is documented in the [ARM NEON Intrinsic Reference](https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics) on the ARM Infocenter website. +NEON intrinsics are supported, as provided in the header file `arm64_neon.h`. The MSVC support for NEON intrinsics resembles that of the ARM64 compiler, which is documented in the [ARM NEON Intrinsic Reference](https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics) on the ARM Infocenter website. ## ARM64-specific intrinsics listing +ARM64-specific intrinsics are supported, as provided in the header file `intrin.h`. + |Function Name|Instruction|Function Prototype| |-------------------|-----------------|------------------------| |__break|BRK|void __break(int)| From 89c79bd9876747a730b191fd8f27304e0fa08f0c Mon Sep 17 00:00:00 2001 From: markhall60 <65419766+markhall60@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:52:46 -0700 Subject: [PATCH 0274/1239] Update compiler-warning-level-2-c4307.md The diagnostic currently contains the word "signed". I added it to the text of the description. --- .../compiler-warnings/compiler-warning-level-2-c4307.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4307.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4307.md index 0bfaf97272..c2561f469e 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4307.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4307.md @@ -8,7 +8,7 @@ ms.assetid: 7cca11e9-be61-49e4-8b15-88b84f0cbf07 --- # Compiler Warning (level 2) C4307 -'operator' : integral constant overflow +'operator' : signed integral constant overflow The operator is used in an expression that results in an integer constant overflowing the space allocated for it. You may need to use a larger type for the constant. A **`signed int`** holds a smaller value than an **`unsigned int`** because the **`signed int`** uses one bit to represent the sign. From a8124f53eab64797021053f7571ef88e8f923810 Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Tue, 25 Jun 2024 13:24:34 -0700 Subject: [PATCH 0275/1239] Learn Editor: Update compiler-error-c2217.md --- .../compiler-errors-1/compiler-error-c2217.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docs/error-messages/compiler-errors-1/compiler-error-c2217.md b/docs/error-messages/compiler-errors-1/compiler-error-c2217.md index bbe71cce5a..009e512bf1 100644 --- a/docs/error-messages/compiler-errors-1/compiler-error-c2217.md +++ b/docs/error-messages/compiler-errors-1/compiler-error-c2217.md @@ -12,15 +12,9 @@ ms.assetid: 1ce1e3f5-4171-4376-804d-967f7e612935 The first function attribute requires the second attribute. -### To fix by checking the following possible causes - -1. Interrupt (`__interrupt`) function declared as `near`. Interrupt functions must be `far`. - -1. Interrupt function declared with **`__stdcall`**, or **`__fastcall`**. Interrupt functions must use C calling conventions. - ## Example -C2217 can also occur if you attempt to bind a delegate to a CLR function that takes a variable number of arguments. If the function also has e param array overload, use that instead. The following sample generates C2217. +C2217 can occur if you attempt to bind a delegate to a CLR function that takes a variable number of arguments. If the function also has a param array overload, use that instead. The following sample generates C2217. ```cpp // C2217.cpp From 0e49f432483152ad2aba0044df2491b971f8cabf Mon Sep 17 00:00:00 2001 From: Xiang Fan Date: Tue, 25 Jun 2024 13:24:43 -0700 Subject: [PATCH 0276/1239] Learn Editor: Update compiler-error-c2217.md From 7eae5ef2b1bd3b6cc47cb8a5199fcb85be202bd8 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 25 Jun 2024 15:34:41 -0700 Subject: [PATCH 0277/1239] draft updates --- .whatsnew.json | 2 +- ...t-a-problem-with-the-visual-cpp-toolset.md | 4 +- docs/overview/whats-new-cpp-docs.md | 902 ++++++++++++++++-- 3 files changed, 810 insertions(+), 98 deletions(-) diff --git a/.whatsnew.json b/.whatsnew.json index 697c37f99d..8ba50fca8e 100644 --- a/.whatsnew.json +++ b/.whatsnew.json @@ -1,5 +1,5 @@ { - "$schema": "https://whatsnewapi.azurewebsites.net/schema", + "$schema": "https://github.com/dotnet/docs-tools/blob/main/WhatsNew.Infrastructure/Configuration/reposettings.schema.json", "docSetProductName": "C++, C, and Assembler", "rootDirectory": "docs/", "docLinkSettings": { diff --git a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md index b1265868d2..6ed8d06068 100644 --- a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md +++ b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md @@ -379,7 +379,7 @@ Beneath the community tabs, near the top of each page, is a search box. You can For issues with the C++ compiler, linker, and other tools and libraries, first search the [C++ Developer Community](https://aka.ms/vsfeedback/browsecpp) page. If you search for your problem, and it hasn't been reported before, choose the **Report a problem** button next to the search box. You can include your repro code and command line, screenshots, links to related discussions, and any other information you think is relevant and useful. > [!TIP] -> For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). +> For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). Information in the initial Developer Community report will always be public. If this is a concern, see the next section regarding privacy. ### Reports and privacy @@ -401,7 +401,7 @@ If you're concerned about revealing your identity, [create a new Microsoft accou Any replies under this comment have the same restricted visibility you specified. It's true even if the dropdown control on replies doesn't show the restricted visibility status correctly. -To maintain your privacy and keep your sensitive information out of public view, be careful. Keep all interaction with Microsoft to replies under the restricted comment. Replies to other comments may cause you to accidentally disclose sensitive information. +To maintain your privacy and keep your sensitive information out of public view, be careful. Keep all interaction with Microsoft to replies under the restricted comment. Replies to other comments may cause you to accidentally disclose sensitive information. For more information about privacy or confidentiality, see follow the steps under https://learn.microsoft.com/en-us/cpp/overview/how-to-report-a-problem-with-the-visual-cpp-toolset?view=msvc-170#reports-and-privacy? ## How to report a C++ documentation issue diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index e2a136c581..892fe3ee07 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -1,6 +1,6 @@ --- title: "What's new for the Microsoft C++ docs" -ms.date: 11/10/2023 +ms.date: 06/25/2024 description: "A list of new articles and doc updates for the Microsoft C/C++ compiler, ATL/MFC, C runtime, and standard library docs." ms.custom: intro-whats-new monikerRange: '>=msvc-160' @@ -120,168 +120,880 @@ Clarified behavior for the following warnings: - [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Updated code example. - [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - Updated MFC hierarchy chart. -## Community contributors +## May 2024 -The following people contributed to the C++, C, and Assembler docs during this period. Thank you! See our [contributor guide](/contribute) if you'd like to learn how to contribute. +### C/C++ compiler intrinsics and assembly language -- [Rageking8](https://github.com/Rageking8) ![26 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-26-green) -- [0xbadfca11](https://github.com/0xbadfca11) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [edmund-leibert](https://github.com/edmund-leibert) - Edmund Leibert III ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [glenn-slayden](https://github.com/glenn-slayden) - Glenn Slayden ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [lb90](https://github.com/lb90) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [tsuyo](https://github.com/tsuyo) - Tsuyoshi Miyake ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +**Updated articles** -## What's new history +- [__rdtscp](../intrinsics/rdtscp.md) - Nits for rdtsc and rdtscp +- [ARM intrinsics](../intrinsics/arm-intrinsics.md) + - Add entries to table for regular ARM intrinsics to arm-intrinsics.md + - Repo sync for protected branch +- [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) + - Add entries to table for new arm64 intrinsics to arm64-intrinsics.md + - Update arm64-intrinsics.md to include intrin.h mention + - Repo sync for protected branch -This section lists major changes to the Microsoft C++ docs for May 2023 to August 2023. +### Active Template Library (ATL), Microsoft Foundation Classes (MFC) -For what's new related to C++ in Visual Studio, see [What's new for C++ in Visual Studio](what-s-new-for-visual-cpp-in-visual-studio.md). +**Updated articles** -### Active Template Library (ATL), Microsoft Foundation Classes (MFC) +- [`CD2DBrush` Class](../mfc/reference/cd2dbrush-class.md) + - Fix references to brush + - Repo sync for protected branch +- [`CInternetSession` Class](../mfc/reference/cinternetsession-class.md) - Address incorrect placement of period +- [`CObArray` Class](../mfc/reference/cobarray-class.md) + - fix #4824 + - Repo sync for protected branch +- [`CRecordset` class](../mfc/reference/crecordset-class.md) - Fix a few typos +- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) + - Fix MFC example + - Remove excess comma + - Repo sync for protected branch +- [`CStringArray` Class](../mfc/reference/cstringarray-class.md) + - fix #4824 + - Repo sync for protected branch +- [`CWinAppEx` class](../mfc/reference/cwinappex-class.md) - Remove excess comma +- [CMFCBaseTabCtrl Class](../mfc/reference/cmfcbasetabctrl-class.md) - Fix return typo +- [COleControlSite Class](../mfc/reference/colecontrolsite-class.md) - Fix a few typos +- [CPaneContainer Class](../mfc/reference/cpanecontainer-class.md) - Address incorrect placement of period +- [MFC Classes](../mfc/reference/mfc-classes.md) - Fix a few typos +- [Setting the Dialog Box's Background Color](../mfc/setting-the-dialog-boxs-background-color.md) + - add code example for setting a dialog box's background color + - Repo sync for protected branch +- [Unicode and Multibyte Character Set (MBCS) Support](../atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md) + - Clarified MBCS support in unicode-and-multibyte-character-set-mbcs-support.md + - Repo sync for protected branch + +### C/C++ projects and build systems + +**New articles** + +- [/ARM64XFUNCTIONPADMINX64 (Minimum x64 function padding)](../build/reference/arm64-function-pad-min-x64.md) +- [/NOFUNCTIONPADSECTION (Disable function padding)](../build/reference/no-function-pad-section.md) +- [`/experimental:log` (Structured SARIF diagnostics)](../build/reference/experimental-log.md) +- [`/feature` (ARM64)](../build/reference/feature-arm64.md) +- [`/LINKREPROFULLPATHRSP` (Generate file containing absolute paths of linked files)](../build/reference/link-repro-full-path-rsp.md) +- [`/Qspectre-jmp`](../build/reference/qspectre-jmp.md) +- [`/volatileMetadata` (Generate metadata on volatile memory accesses)](../build/reference/volatile.md) +- [Structured SARIF Diagnostics](../build/reference/sarif-output.md) +- [Tutorial: Troubleshoot function inlining on build time](../build-insights/tutorials/build-insights-function-view.md) +- [Tutorial: Troubleshoot header file impact on build time](../build-insights/tutorials/build-insights-included-files-view.md) **Updated articles** -- [Connection maps](../mfc/reference/connection-maps.md) - Corrected parameter description of `pRefCount` in `AfxConnection(Un)Advise`. -- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Updated code example. -- [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - Updated MFC hierarchy chart. +- [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no is not recommended for 64-bit apps +- [/Qspectre](../build/reference/qspectre.md) + - New /QSpectre flag + - Repo sync for protected branch +- [/Qspectre-load](../build/reference/qspectre-load.md) + - New /QSpectre flag + - Repo sync for protected branch +- [/Qspectre-load-cf](../build/reference/qspectre-load-cf.md) + - New /QSpectre flag + - Repo sync for protected branch +- [`/arch` (ARM64)](../build/reference/arch-arm64.md) + - document __arm_arch macro + - Add compiler option /feature and update the /arch (ARM64) option + - Repo sync for protected branch + - Repo sync for protected branch +- [`/Fo` (Object File Name)](../build/reference/fo-object-file-name.md) + - call out colon form for /fo + - Repo sync for protected branch +- [`/headerUnit` (Use header unit IFC)](../build/reference/headerunit.md) + - tech review + - Repo sync for protected branch +- [`/PDBPATH`](../build/reference/pdbpath.md) + - fix feedback item ADO:229433 + - Repo sync for protected branch +- [`/sourceDependencies` (List all source-level dependencies)](../build/reference/sourcedependencies.md) - Correct JSON output of sourcedependencies.md +- [`/std` (Specify Language Standard Version)](../build/reference/std-specify-language-standard-version.md) + - clarify how macro value is set + - Whatsnew + - Repo sync for protected branch + - Enhance /std documentation with reference to /Zc:__cplusplus + - Repo sync for protected branch +- [`/Zc:zeroSizeArrayNew` (Call member new/delete on arrays)](../build/reference/zc-zerosizearraynew.md) - Remove stray trailing escapes +- [Advanced Property Page](../build/reference/advanced-property-page.md) + - Add SARIF diagnostics documentation + - Repo sync for protected branch +- [Build and run a C++ console app project](../build/vscpp-step-2-build.md) + - draft + - Repo sync for protected branch +- [C++ Build Insights](../build-insights/index.yml) + - draft + - Repo sync for protected branch +- [Clang/LLVM support in Visual Studio projects](../build/clang-support-msbuild.md) + - draft + - Repo sync for protected branch +- [CMake projects in Visual Studio](../build/cmake-projects-in-visual-studio.md) + - draft + - Add links for "Just My Code" and "Edit and Continue". + - Repo sync for protected branch +- [Commands in a makefile](../build/reference/commands-in-a-makefile.md) - Fix unclosed links +- [Common macros for MSBuild commands and properties](../build/reference/common-macros-for-build-commands-and-properties.md) + - fixes github #4890 - backslashes + - Repo sync for protected branch +- [Compiler options listed alphabetically](../build/reference/compiler-options-listed-alphabetically.md) + - Add compiler option /feature and update the /arch (ARM64) option + - Whatsnew + - Repo sync for protected branch + - Repo sync for protected branch +- [Compiler options listed by category](../build/reference/compiler-options-listed-by-category.md) + - Add compiler option /feature and update the /arch (ARM64) option + - Whatsnew + - Repo sync for protected branch + - Repo sync for protected branch +- [Creating an .Sbr File](../build/reference/creating-an-dot-sbr-file.md) - Address incorrect placement of period +- [Define an NMAKE macro](../build/reference/defining-an-nmake-macro.md) - Fix unclosed links +- [Inference rules](../build/reference/inference-rules.md) - Fix unclosed links +- [Inline files in a makefile](../build/reference/inline-files-in-a-makefile.md) - Fix unclosed links +- [Linker options](../build/reference/linker-options.md) + - fixes for customer feedback + - new flag: /LINKREPROFULLPATHRSP + - new linker switches for 17.8 + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch +- [Linking](../build/reference/linking.md) + - new linker switches for 17.8 + - Repo sync for protected branch +- [Makefile preprocessing](../build/reference/makefile-preprocessing.md) - Fix unclosed links +- [NMAKE makefile contents and features](../build/reference/contents-of-a-makefile.md) - Fix unclosed links +- [Overview of x64 ABI conventions](../build/x64-software-conventions.md) - Update x64-software-conventions.md +- [Set compiler and build properties](../build/working-with-project-properties.md) + - draft + - Repo sync for protected branch +- [Special NMAKE macros](../build/reference/special-nmake-macros.md) - Fix unclosed links +- [Use an NMAKE macro](../build/reference/using-an-nmake-macro.md) - Fix unclosed links +- [Walkthrough: Build and debug C++ with WSL 2 and Visual Studio 2022](../build/walkthrough-build-debug-wsl2.md) + - draft + - Repo sync for protected branch +- [x64 calling convention](../build/x64-calling-convention.md) - Update x64-calling-convention.md ### C language **New articles** -- [Generic selection (C11)](../c-language/generic-selection.md). +- [`typeof_unqual`, `__typeof_unqual__` (C23)](../c-language/typeof-unqual-c.md) +- [`typeof`, `__typeof__` (C23)](../c-language/typeof-c.md) **Updated articles** -- [`register` storage-class specifier](../c-language/register-storage-class-specifier.md) - Added C5033 warning. -- [C Pragmas](../c-language/c-pragmas.md) - Added `system_header` pragma documentation. -- [C Bit Fields](../c-language/c-bit-fields.md) - Clarified example & documented that MSVC doesn't straddle bit-fields. +- [C Keywords](../c-language/c-keywords.md) + - Conformance + - Repo sync for protected branch +- [C Type Specifiers](../c-language/c-type-specifiers.md) + - Conformance + - Repo sync for protected branch -### C runtime library +### Code quality + +**New articles** + +- [Warning C26459](../code-quality/c26459.md) +- [Warning C26837](../code-quality/c26837.md) +- [Warning C26861](../code-quality/c26861.md) +- [Warning C26862](../code-quality/c26862.md) +- [Warning C26863](../code-quality/c26863.md) +- [Warning C26864](../code-quality/c26864.md) +- [Warning C6392](../code-quality/c6392.md) +- [Warning C6393](../code-quality/c6393.md) +- [Warning C6394](../code-quality/c6394.md) +- [Warning C6396](../code-quality/c6396.md) +- [Warning C6397](../code-quality/c6397.md) +- [Warning C6398](../code-quality/c6398.md) **Updated articles** -- [`_iob`](../c-runtime-library/iob.md) - Clarified value of `_IOB_ENTRIES` across VS versions. -- [`_snprintf_s`, `_snprintf_s_l`, `_snwprintf_s`, `_snwprintf_s_l`](../c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md) - Summarized behavior for argument value combinations. -- [`snprintf`, `_snprintf`, `_snprintf_l`, `_snwprintf`, `_snwprintf_l`](../c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md) - Summarized behavior for argument value combinations. -- [`vsnprintf_s`, `_vsnprintf_s`, `_vsnprintf_s_l`, `_vsnwprintf_s`, `_vsnwprintf_s_l`](../c-runtime-library/reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md) - Summarized behavior for argument value combinations. -- [`vsnprintf`, `_vsnprintf`, `_vsnprintf_l`, `_vsnwprintf`, `_vsnwprintf_l`](../c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md) - Summarized behavior for argument value combinations. -- [`to` functions](../c-runtime-library/to-functions.md) - Fixed code example. -- [`strerror_s`, `_strerror_s`, `_wcserror_s`, `__wcserror_s`](../c-runtime-library/reference/strerror-s-strerror-s-wcserror-s-wcserror-s.md) - Clarified behavior. -- [`strerror`, `_strerror`, `_wcserror`, `__wcserror`](../c-runtime-library/reference/strerror-strerror-wcserror-wcserror.md) - Clarified behavior. -- [`_stat`, `_stat32`, `_stat64`, `_stati64`, `_stat32i64`, `_stat64i32`, `_wstat`, `_wstat32`, `_wstat64`, `_wstati64`, `_wstat32i64`, `_wstat64i32`](../c-runtime-library/reference/stat-functions.md) - Called out changes to `_stat` family of functions across versions of Visual Studio. +- [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) + - fix github issue - code example wrong + - Update clang-tidy.md + - Repo sync for protected branch + - Update clang-tidy.md +- [Warning C6031](../code-quality/c6031.md) + - fix language tagging and some of the code samples + - Repo sync for protected branch +- [Warning C6059](../code-quality/c6059.md) + - C6059: Add heuristics + - Repo sync for protected branch +- [Warning C6201](../code-quality/c6201.md) + - Add heuristics for C6201 + - Repo sync for protected branch +- [Warning C6328](../code-quality/c6328.md) + - Improvements to some format specifier related warnings. + - Repo sync for protected branch +- [Warning C6340](../code-quality/c6340.md) + - Improvements to some format specifier related warnings. + - Repo sync for protected branch -### C/C++ compiler intrinsics and assembly language +### C++ in Visual Studio **Updated articles** -- [`__umulh`](../intrinsics/umulh.md) - Updated the code example. +- [`break` statement (C++)](../cpp/break-statement-cpp.md) - Break statement documentation fix +- [`Platform::Collections::VectorIterator` class](../cppcx/platform-collections-vectoriterator-class.md) - Remove excess comma +- [`sizeof` Operator](../cpp/sizeof-operator.md) - Make built-in operators title consistent +- [`typeid` Operator](../cpp/typeid-operator.md) - Make built-in operators title consistent +- [Additive Operators: `+` and `-`](../cpp/additive-operators-plus-and.md) - Make built-in operators title consistent +- [Assignment operators](../cpp/assignment-operators.md) + - Make built-in operators title consistent + - Update assignment-operators.md +- [Attributes in C++](../cpp/attributes.md) + - Update attributes.md + - Repo sync for protected branch +- [C++ docs - get started, tutorials, reference.](../cpp/index.yml) + - address perf + - Repo sync for protected branch +- [Casting](../cpp/casting.md) + - fixes for customer feedback + - Repo sync for protected branch +- [char, wchar_t, char8_t, char16_t, char32_t](../cpp/char-wchar-t-char16-t-char32-t.md) + - address user feedback 252709 + - Repo sync for protected branch +- [Collections (C++/CX)](../cppcx/collections-c-cx.md) - Fix various typos +- [Comma Operator: `,`](../cpp/comma-operator.md) - Make built-in operators title consistent +- [Data Type Ranges](../cpp/data-type-ranges.md) + - fixes for customer feedback + - Repo sync for protected branch +- [Destructors (C++)](../cpp/destructors-cpp.md) + - Update destructors-cpp.md + - Small nits for destructors cpp +- [Equality operators: `==` and `!=`](../cpp/equality-operators-equal-equal-and-exclpt-equal.md) - Make built-in operators title consistent +- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) + - fix github issue - code example wrong + - Repo sync for protected branch +- [Explicit Type Conversion Operator: `()`](../cpp/explicit-type-conversion-operator-parens.md) - Make built-in operators title consistent +- [Explicitly Defaulted and Deleted Functions](../cpp/explicitly-defaulted-and-deleted-functions.md) + - New warning topic for C5267 + - Repo sync for protected branch +- [Function Call Operator: `()`](../cpp/function-call-operator-parens.md) - Make built-in operators title consistent +- [How to: Create and Use shared_ptr instances](../cpp/how-to-create-and-use-shared-ptr-instances.md) + - draft + - Repo sync for protected branch +- [Indirection Operator: `*`](../cpp/indirection-operator-star.md) - Make built-in operators title consistent +- [Inline functions (C++)](../cpp/inline-functions-cpp.md) + - Address mistakes in inline functions cpp + - Remove the content of the contrast between inline functions and macros +- [Left shift and right shift operators: `<<` and `>>`](../cpp/left-shift-and-right-shift-operators-input-and-output.md) - Fix built-in operators toc yml +- [Logical negation operator: `!`](../cpp/logical-negation-operator-exclpt.md) - Make built-in operators title consistent +- [Modern C++ best practices for exceptions and error handling](../cpp/errors-and-exception-handling-modern-cpp.md) + - fix UUF issues + - Repo sync for protected branch +- [Module Class](../cppcx/wrl/module-class.md) - Fix various typos +- [Multiplicative Operators and the Modulus Operator](../cpp/multiplicative-operators-and-the-modulus-operator.md) - Make built-in operators title consistent +- [Mutable Data Members (C++)](../cpp/mutable-data-members-cpp.md) - Tighten wording in mutable data members +- [Named modules tutorial (C++)](../cpp/tutorial-named-modules-cpp.md) + - line edits + - Repo sync for protected branch +- [Namespaces (C++)](../cpp/namespaces-cpp.md) - Add file hint in namespaces-cpp.md +- [Nonstandard Behavior](../cpp/nonstandard-behavior.md) - Standardize C++ version naming +- [One's complement operator: `~`](../cpp/one-s-complement-operator-tilde.md) - Make built-in operators title consistent +- [Overview of modules in C++](../cpp/modules-cpp.md) + - line edits + - some line edits + - Repo sync for protected branch + - Repo sync for protected branch +- [Platform::Collections::UnorderedMap Class](../cppcx/platform-collections-unorderedmap-class.md) - Fix various typos +- [Postfix Increment and Decrement Operators: `++` and `--`](../cpp/postfix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent +- [Prefix Increment and Decrement Operators: `++` and `--`](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent +- [Primary Expressions](../cpp/primary-expressions.md) + - updates per #4816 + - Repo sync for protected branch +- [protected (C++)](../cpp/protected-cpp.md) - protected-cpp.md - grammar and consistency +- [References (C++)](../cpp/references-cpp.md) + - fix UUF issues + - Repo sync for protected branch +- [Relational Operators: `<`, `>`, `<=`, and `>=`](../cpp/relational-operators-equal-and-equal.md) - Make built-in operators title consistent +- [Subscript Operator: `[]`](../cpp/subscript-operator.md) + - Make built-in operators title consistent + - Fix built-in operators toc yml +- [The `this` pointer](../cpp/this-pointer.md) + - updates per #4816 + - Repo sync for protected branch +- [Tutorial: Import the C++ standard library using modules from the command line](../cpp/tutorial-import-stl-named-module.md) + - call out colon form for /fo + - update /fo flag info + - explain switch options + - some line edits + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch +- [Unary Plus and Negation Operators: `+` and `-`](../cpp/unary-plus-and-negation-operators-plus-and.md) - Make built-in operators title consistent -### C/C++ in Visual Studio overview +### Cross platform development **Updated articles** -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - Added 17.6 conformance info. +- [Cross-platform mobile development examples](../cross-platform/cross-platform-mobile-development-examples.md) + - Fix #5438 and product team issue + - Repo sync for protected branch +- [Install cross-platform mobile development with C++](../cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md) + - updates regarding Xamarin + - Repo sync for protected branch -### C/C++ projects and build systems +### C runtime library + +**Updated articles** + +- [`__RTDynamicCast`](../c-runtime-library/rtdynamiccast.md) + - Fixes #3195 - update required header file + - Repo sync for protected branch +- [`_CrtMemDumpStatistics`](../c-runtime-library/reference/crtmemdumpstatistics.md) - Remove stray trailing escapes +- [`_CrtSetBreakAlloc`](../c-runtime-library/reference/crtsetbreakalloc.md) - Remove stray trailing escapes +- [`_CrtSetReportFile`](../c-runtime-library/reference/crtsetreportfile.md) - Remove stray trailing escapes +- [`_fclose_nolock`](../c-runtime-library/reference/fclose-nolock.md) - Tweak nolock function descriptions +- [`_fflush_nolock`](../c-runtime-library/reference/fflush-nolock.md) - Tweak nolock function descriptions +- [`_fgetc_nolock`, `_fgetwc_nolock`](../c-runtime-library/reference/fgetc-nolock-fgetwc-nolock.md) - Tweak nolock function descriptions +- [`_fputc_nolock`, `_fputwc_nolock`](../c-runtime-library/reference/fputc-nolock-fputwc-nolock.md) - Tweak nolock function descriptions +- [`_fread_nolock_s`](../c-runtime-library/reference/fread-nolock-s2.md) - Tweak nolock function descriptions +- [`_fread_nolock`](../c-runtime-library/reference/fread-nolock.md) - Tweak nolock function descriptions +- [`_fseek_nolock`, `_fseeki64_nolock`](../c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md) - Tweak nolock function descriptions +- [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](../c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) + - Fixes #3706 + - Repo sync for protected branch +- [`_ftell_nolock`, `_ftelli64_nolock`](../c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md) - Tweak nolock function descriptions +- [`_fwrite_nolock`](../c-runtime-library/reference/fwrite-nolock.md) - Tweak nolock function descriptions +- [`_getc_nolock`, `_getwc_nolock`](../c-runtime-library/reference/getc-nolock-getwc-nolock.md) - Tweak nolock function descriptions +- [`_getch_nolock`, `_getwch_nolock`](../c-runtime-library/reference/getch-nolock-getwch-nolock.md) - Tweak nolock function descriptions +- [`_getchar_nolock`, `_getwchar_nolock`](../c-runtime-library/reference/getchar-nolock-getwchar-nolock.md) - Tweak nolock function descriptions +- [`_getche_nolock`, `_getwche_nolock`](../c-runtime-library/reference/getche-nolock-getwche-nolock.md) - Tweak nolock function descriptions +- [`_nolock` functions](../c-runtime-library/nolock-functions.md) - Tabulate nolock functions +- [`_putc_nolock`, `_putwc_nolock`](../c-runtime-library/reference/putc-nolock-putwc-nolock.md) - Tweak nolock function descriptions +- [`_putch_nolock`, `_putwch_nolock`](../c-runtime-library/reference/putch-nolock-putwch-nolock.md) - Tweak nolock function descriptions +- [`_putchar_nolock`, `_putwchar_nolock`](../c-runtime-library/reference/putchar-nolock-putwchar-nolock.md) - Tweak nolock function descriptions +- [`_read`](../c-runtime-library/reference/read.md) - Remove stray trailing escapes +- [`_set_se_translator`](../c-runtime-library/reference/set-se-translator.md) - Remove stray trailing escapes +- [`_splitpath`, `_wsplitpath`](../c-runtime-library/reference/splitpath-wsplitpath.md) + - fix github 4833 + - Repo sync for protected branch +- [`_ungetc_nolock`, `_ungetwc_nolock`](../c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md) - Tweak nolock function descriptions +- [`_vscprintf_p`, `_vscprintf_p_l`, `_vscwprintf_p`, `_vscwprintf_p_l`](../c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md) - Remove stray trailing escapes +- [`freopen`, `_wfreopen`](../c-runtime-library/reference/freopen-wfreopen.md) - Remove stray trailing escapes +- [`memcpy`, `wmemcpy`](../c-runtime-library/reference/memcpy-wmemcpy.md) + - Fixes #3706 + - Remove stray trailing escapes + - Repo sync for protected branch +- [`memmove`, `wmemmove`](../c-runtime-library/reference/memmove-wmemmove.md) + - Fixes #3706 + - Remove stray trailing escapes + - Repo sync for protected branch +- [`set_unexpected` (CRT)](../c-runtime-library/reference/set-unexpected-crt.md) - Remove stray trailing escapes +- [`setlocale`, `_wsetlocale`](../c-runtime-library/reference/setlocale-wsetlocale.md) + - fix github 4879 + - Repo sync for protected branch +- [`strncat`, `_strncat_l`, `wcsncat`, `_wcsncat_l`, `_mbsncat`, `_mbsncat_l`](../c-runtime-library/reference/strncat-strncat-l-wcsncat-wcsncat-l-mbsncat-mbsncat-l.md) - Remove stray trailing escapes +- [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](../c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l.md) + - Fixes #3706 + - Repo sync for protected branch +- [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that _O_TEXT is ANSI. + +### C/C++ compiler and tools errors and warnings **New articles** -- [/jumptablerdata (put switch case jump tables in `.rdata`)](../build/reference/jump-table-rdata.md). +- [Compiler Error C2323](../error-messages/compiler-errors-1/compiler-error-c2323.md) +- [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) +- [Compiler Warning (level 4) C5266](../error-messages/compiler-warnings/compiler-warning-level-4-c5266.md) +- [Compiler warning (level 4) C5267](../error-messages/compiler-warnings/c5267.md) +- [Linker tools warning LNK4306](../error-messages/tool-errors/linker-tools-warning-lnk4306.md) +- [Linker tools warning LNK4307](../error-messages/tool-errors/linker-tools-warning-lnk4307.md) +- [Microsoft C/C++ compiler warnings C5000 through C5199](../error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md) +- [Microsoft C/C++ compiler warnings C5200 through C5399](../error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md) **Updated articles** -- [Advanced Property Page](../build/reference/advanced-property-page.md) - Updates regarding managed projects that target .NET Framework versus .NET. -- [`/openmp` (Enable OpenMP Support)](../build/reference/openmp-enable-openmp-2-0-support.md) - Added supported versions. -- [Create a C++ console app project](../build/vscpp-step-1-create.md) - Updated for current version of Visual Studio. -- [Build and run a C++ console app project](../build/vscpp-step-2-build.md) - Updated steps to accommodate Visual Studio version differences regarding the location of the debug folder. -- [`/ZW` (Windows Runtime Compilation)](../build/reference/zw-windows-runtime-compilation.md) - Added a note about an incompatibility. -- [Configure and build with CMake Presets in Visual Studio](../build/cmake-presets-vs.md) - Updated supported CMake and *`CMakePresets.json`* versions. -- [`/Zc:lambda` (Enable updated lambda processor)](../build/reference/zc-lambda.md) - Added note that `/permissive-` implies `/Zc:lambda`. -- [C/C++ Property Pages](../build/reference/c-cpp-prop-page.md) - Added description for C language and building ISO standard library modules properties. -- [Overview of ARM64 ABI conventions](../build/arm64-windows-abi-conventions.md) - Clarified terminology regarding register volatility. +- [Compiler error C2055](../error-messages/compiler-errors-1/compiler-error-c2055.md) + - fixes for customer feedback + - Repo sync for protected branch +- [Compiler Error C2101](../error-messages/compiler-errors-1/compiler-error-c2101.md) - Update C2101 +- [Compiler Error C2102](../error-messages/compiler-errors-1/compiler-error-c2102.md) - Add example for C2102 +- [Compiler Error C2103](../error-messages/compiler-errors-1/compiler-error-c2103.md) - Add example for C2103 +- [Compiler Error C2385](../error-messages/compiler-errors-1/compiler-error-c2385.md) - Revamp C2385 +- [Compiler Error C2487](../error-messages/compiler-errors-1/compiler-error-c2487.md) - Add example for C2487 +- [Compiler Error C2526](../error-messages/compiler-errors-2/compiler-error-c2526.md) - Add example for C2526 +- [Compiler Error C2537](../error-messages/compiler-errors-2/compiler-error-c2537.md) - Update C2537 +- [Compiler error C2548](../error-messages/compiler-errors-2/compiler-error-c2548.md) - Improve C2548 +- [Compiler Error C2751](../error-messages/compiler-errors-2/compiler-error-c2751.md) - Improve C2751 +- [Compiler Error C2860](../error-messages/compiler-errors-2/compiler-error-c2860.md) - Update C2860 +- [Compiler Error C3859](../error-messages/compiler-errors-2/compiler-error-c3859.md) + - Update compiler-error-c3859.md + - Repo sync for protected branch +- [Compiler errors C2001 - C3999, C7000 - C7999](../error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md) + - Error 2000 was never emitted. + - Repo sync for protected branch +- [Compiler errors C2001 through C2099](../error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md) + - Error 2000 was never emitted. + - Repo sync for protected branch +- [Compiler errors C2300 Through C2399](../error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md) - Document C2323 +- [Compiler errors C3300 Through C3399](../error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md) + - Update compiler-errors-c3300-through-c3399.md + - Repo sync for protected branch +- [Compiler errors C3500 through C3999](../error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md) + - Update compiler-error-c3859.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 2) C4091](../error-messages/compiler-warnings/compiler-warning-level-1-c4091.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 3) C4133](../error-messages/compiler-warnings/compiler-warning-level-3-c4133.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 3) C4359](../error-messages/compiler-warnings/compiler-warning-level-3-c4359.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 4, off) C4355](../error-messages/compiler-warnings/compiler-warning-c4355.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 4) C4052](../error-messages/compiler-warnings/compiler-warning-level-1-c4052.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 4) C4112](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1 and level 4) C4223](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4002](../error-messages/compiler-warnings/compiler-warning-level-1-c4002.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4003](../error-messages/compiler-warnings/compiler-warning-level-1-c4003.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4141](../error-messages/compiler-warnings/compiler-warning-level-1-c4141.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4229](../error-messages/compiler-warnings/compiler-warning-level-1-c4229.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4233](../error-messages/compiler-warnings/compiler-warning-level-4-c4233.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4235](../error-messages/compiler-warnings/compiler-warning-level-4-c4235.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4368](../error-messages/compiler-warnings/compiler-warning-c4368.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4392](../error-messages/compiler-warnings/compiler-warning-level-1-c4392.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4394](../error-messages/compiler-warnings/compiler-warning-c4394.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1, Error) C4399](../error-messages/compiler-warnings/compiler-warning-level-1-c4399.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1) C4178](../error-messages/compiler-warnings/compiler-warning-level-1-c4178.md) - Rectify example in C4178 +- [Compiler Warning (level 1) C4305](../error-messages/compiler-warnings/compiler-warning-level-1-c4305.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1) C4329](../error-messages/compiler-warnings/compiler-warning-level-1-c4329.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1) C4335](../error-messages/compiler-warnings/compiler-warning-c4335.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 1) C4384](../error-messages/compiler-warnings/compiler-warning-level-1-c4384.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler warning (level 1) C4834](../error-messages/compiler-warnings/c4834.md) + - add new warning for VS 17.6 - C5266 + - Repo sync for protected branch + - Standardize C++ version naming +- [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) + - add warning c5072 + - Capitalize error code + - Repo sync for protected branch +- [Compiler Warning (level 2 and level 4) C4200](../error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 2) C4150](../error-messages/compiler-warnings/compiler-warning-level-2-c4150.md) + - Update compiler-warning-level-2-c4150.md + - Repo sync for protected branch +- [Compiler Warning (level 2) C4251](../error-messages/compiler-warnings/compiler-warning-level-1-c4251.md) + - Update compiler-warnings-c4200-through-c4399.md + - improve C4251 + - Repo sync for protected branch + - Repo sync for protected branch +- [Compiler Warning (level 3 and level 4) C4101](../error-messages/compiler-warnings/compiler-warning-level-3-c4101.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 3 and level 4) C4189](../error-messages/compiler-warnings/compiler-warning-level-4-c4189.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 3 and level 4) C4278](../error-messages/compiler-warnings/compiler-warning-level-3-c4278.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 3, off) C4165](../error-messages/compiler-warnings/compiler-warning-level-1-c4165.md) + - Update warning levels in compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 3, off) C4191](../error-messages/compiler-warnings/compiler-warning-level-3-c4191.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 3, off) C4242](../error-messages/compiler-warnings/compiler-warning-level-4-c4242.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 3, off) C4265](../error-messages/compiler-warnings/compiler-warning-level-3-c4265.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 3, off) C4287](../error-messages/compiler-warnings/compiler-warning-level-3-c4287.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 3) C4007](../error-messages/compiler-warnings/compiler-warning-level-2-c4007.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 3) C4066](../error-messages/compiler-warnings/compiler-warning-level-3-c4066.md) - Add example for C4066 +- [Compiler Warning (level 3) C4334](../error-messages/compiler-warnings/compiler-warning-level-3-c4334.md) + - Update compiler-warning-level-3-c4334.md + - Repo sync for protected branch +- [Compiler Warning (level 3) C4371](../error-messages/compiler-warnings/c4371.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, no longer emitted) C4001](../error-messages/compiler-warnings/compiler-warning-level-4-c4001.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4061](../error-messages/compiler-warnings/compiler-warning-level-4-c4061.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4062](../error-messages/compiler-warnings/compiler-warning-level-4-c4062.md) + - Update compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4255](../error-messages/compiler-warnings/compiler-warning-level-4-c4255.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4263](../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4264](../error-messages/compiler-warnings/compiler-warning-level-1-c4264.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4266](../error-messages/compiler-warnings/compiler-warning-level-4-c4266.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4289](../error-messages/compiler-warnings/compiler-warning-level-4-c4289.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4296](../error-messages/compiler-warnings/compiler-warning-level-4-c4296.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4339](../error-messages/compiler-warnings/compiler-warning-level-4-c4339.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4365](../error-messages/compiler-warnings/compiler-warning-level-4-c4365.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4, off) C4388](../error-messages/compiler-warnings/c4388.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4019](../error-messages/compiler-warnings/compiler-warning-level-4-c4019.md) + - clarify that only applies to C + - Repo sync for protected branch +- [Compiler Warning (level 4) C4218](../error-messages/compiler-warnings/compiler-warning-level-1-c4218.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4254](../error-messages/compiler-warnings/compiler-warning-level-4-c4254.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4306](../error-messages/compiler-warnings/compiler-warning-level-3-c4306.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4310](../error-messages/compiler-warnings/compiler-warning-level-3-c4310.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4324](../error-messages/compiler-warnings/compiler-warning-level-4-c4324.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4373](../error-messages/compiler-warnings/compiler-warning-level-3-c4373.md) + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch +- [Compiler Warning (level 4) C4389](../error-messages/compiler-warnings/compiler-warning-level-4-c4389.md) - Capitalize error code +- [Compiler warning (level 4) C5267](../error-messages/compiler-warnings/c5267.md) + - add warning level info + - New warning topic for C5267 + - Repo sync for protected branch + - Repo sync for protected branch +- [Compiler Warning (levels 3 and 4) C4244](../error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244.md) + - New warning topic for C5267 + - Repo sync for protected branch +- [Compiler Warning C5243](../error-messages/compiler-warnings/c5243.md) + - Update c5243.md + - Repo sync for protected branch +- [Compiler Warnings by compiler version](../error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md) + - Update compiler-warnings-by-compiler-version.md + - add new warning for VS 17.6 - C5266 + - New warning topic for C5267 + - Repo sync for protected branch + - Add links to compiler warnings by compiler version + - Repo sync for protected branch + - Repo sync for protected branch +- [Linker tools errors and warnings (LNKxxxx)](../error-messages/tool-errors/linker-tools-errors-and-warnings.md) + - new linker warnings: 4306 & 4307 + - Repo sync for protected branch +- [Microsoft C/C++ compiler warnings C4000 through C4199](../error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md) + - Split warnings - pull in work RageKing8 did + - Update compiler-warnings-c4000-through-c4199.md + - Update warning levels in compiler-warnings-c4000-through-c4199.md + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch +- [Microsoft C/C++ compiler warnings C4000 through C5399](../error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md) + - Split warnings - pull in work RageKing8 did + - Repo sync for protected branch +- [Microsoft C/C++ compiler warnings C4200 through C4399](../error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md) + - Split warnings - pull in work RageKing8 did + - Update compiler-warnings-c4200-through-c4399.md + - Update compiler-warnings-c4200-through-c4399.md + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch +- [Microsoft C/C++ compiler warnings C4400 through C4599](../error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md) + - Split warnings - pull in work RageKing8 did + - Add missing warnings to compiler-warnings-c4400-through-c4599 + - Repo sync for protected branch + - Add some warning entries + - Repo sync for protected branch +- [Microsoft C/C++ compiler warnings C4600 through C4799](../error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md) + - Split warnings - pull in work RageKing8 did + - Update compiler-warnings-c4600-through-c4799.md + - Repo sync for protected branch + - Add some warning entries + - Repo sync for protected branch +- [Microsoft C/C++ compiler warnings C4800 through C4999](../error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md) + - Split warnings - pull in work RageKing8 did + - Update missing warning messages in compiler-warnings-c4800-through-c4999.md + - add warning c5072 + - add new warning for VS 17.6 - C5266 + - New warning topic for C5267 + - Repo sync for protected branch + - Add some warning entries + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + +### C++ in Visual Studio tutorials -### C++ in Visual Studio +**Updated articles** + +- [Create a console calculator in C++](../get-started/tutorial-console-cpp.md) + - update + - draft + - Repo sync for protected branch + - Repo sync for protected branch + +### Read and write code using C++ in Visual Studio **New articles** -- [Visual Studio Tools for Unreal Engine overview](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-overview) -- [Install Visual Studio Tools for Unreal Engine](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-install) -- [Quickstart: Visual Studio Tools for Unreal Engine](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart) +- [C++ Include Diagnostics in Visual Studio](../ide/include-diagnostics.md) +- [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) **Updated articles** -- [Overview of modules in C++](../cpp/modules-cpp.md) - Add description for building ISO standard library modules. -- [Compiler Limits](../cpp/compiler-limits.md) - Updated Parameters in macro definition limits. -- [How to: Create and Use shared_ptr instances](../cpp/how-to-create-and-use-shared-ptr-instances.md) - Added a code example. -- [Tutorial: Import the C++ standard library using modules from the command line](../cpp/tutorial-import-stl-named-module.md) - Added a description for building ISO standard library modules. -- [type_info Class](../cpp/type-info-class.md) - Marked `raw_name` Microsoft-specific. +- [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) + - add keyboard accelerators + - new topic for C++ macro tools + - Repo sync for protected branch + - Repo sync for protected branch +- [Walkthrough: Deploying Your Program (C++)](../ide/walkthrough-deploying-your-program-cpp.md) + - update steps + - Repo sync for protected branch -### C++ porting and upgrade guide +### Linux with C++ in Visual Studio **Updated articles** -- [Microsoft C/C++ change history 2003 - 2015](../porting/visual-cpp-change-history-2003-2015.md)- Noted changes to `_stat` family of functions behavior. +- [Connect to your target Linux system in Visual Studio](../linux/connect-to-your-remote-linux-computer.md) + - Update connect-to-your-remote-linux-computer.md + - draft + - Repo sync for protected branch + - Repo sync for protected branch + - Update connect-to-your-remote-linux-computer.md -### C++ Standard Template Library (STL) reference +### C/C++ in Visual Studio overview + +**New articles** + +- [Microsoft Visual C++ compiler versioning](../overview/compiler-versions.md) **Updated articles** -- [`basic_string` Class](../standard-library/basic-string-class.md) - Marked `_Copy_s` Microsoft-specific. +- [C and C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) + - fix f1 lookup + - Repo sync for protected branch +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017](../overview/cpp-conformance-improvements-2017.md) + - fix f1 lookup + - Repo sync for protected branch +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019](../overview/cpp-conformance-improvements-2019.md) + - fix f1 lookup + - Repo sync for protected branch +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) + - updates for 17.10 + - Conformance for 17.10 + - add _alignof + - Conformance + - fix f1 lookup + - add link that wasn't ready until release + - Whatsnew + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch +- [How to report a problem with the Microsoft C++ toolset or documentation](../overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) + - fix f1 lookup + - Repo sync for protected branch +- [Microsoft C/C++ help and community](../overview/visual-cpp-help-and-community.md) + - fix f1 lookup + - Repo sync for protected branch +- [Microsoft C/C++ language conformance by Visual Studio version](../overview/visual-cpp-language-conformance.md) + - fix f1 lookup + - Repo sync for protected branch +- [Overview of C++ development in Visual Studio](../overview/overview-of-cpp-development.md) + - address perf + - Repo sync for protected branch +- [Supported platforms (Visual C++)](../overview/supported-platforms-visual-cpp.md) + - fix f1 lookup + - Repo sync for protected branch +- [Visual Studio C++ Samples](../overview/visual-cpp-samples.md) + - fix f1 lookup + - Repo sync for protected branch +- [What's new for C++ in Visual Studio 2017](../overview/what-s-new-for-cpp-2017.md) + - fix f1 lookup + - Repo sync for protected branch +- [What's new for C++ in Visual Studio 2019](../overview/what-s-new-for-cpp-2019.md) + - fix f1 lookup + - Repo sync for protected branch +- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) + - updates for 17.10 + - fix #4553 - adds release note links + - add link to backend improvments + - add links + - Conformance + - fix f1 lookup + - remove duplicated section + - add link that wasn't ready until release + - Whatsnew + - Repo sync for protected branch + - Resolve syncing conflicts from FromPrivateLiveToMaster to main + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch + +### Parallel programming in C++ in Visual Studio -### Code quality +**Updated articles** -**New articles** +- [tile_barrier Class](../parallel/amp/reference/tile-barrier-class.md) - Fix unclosed links -- [Warning `C26831`](../code-quality/c26831.md) -- [Warning `C26832`](../code-quality/c26832.md) -- [Warning `C26833`](../code-quality/c26833.md) -- [Warning `C26835`](../code-quality/c26835.md) +### C++ porting and upgrade guide **Updated articles** -- [Use the C++ Core Guidelines checkers](../code-quality/using-the-cpp-core-guidelines-checkers.md) - No longer suggest turning off annotation processing for CppCoreChecks. +- [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) + - fixes #5290 - clarify linking binaries built with different versions of the toolset + - Repo sync for protected branch -Clarified behavior for the following warnings: -- [Warning C6011](../code-quality/c6011.md), [Warning C6200](../code-quality/c6200.md) -- [Warning C26437](../code-quality/c26437.md), [Warning C26439](../code-quality/c26439.md) -- [Warning C26441](../code-quality/c26441.md), [Warning C26444](../code-quality/c26444.md) -- [Warning C26449](../code-quality/c26449.md), [Warning C26450](../code-quality/c26450.md) -- [Warning C26451](../code-quality/c26451.md), [Warning C26452](../code-quality/c26452.md) -- [Warning C26453](../code-quality/c26453.md), [Warning C26454](../code-quality/c26454.md) -- [Warning C26455](../code-quality/c26455.md), [Warning C26494](../code-quality/c26494.md) -- [Warning C26495](../code-quality/c26495.md), [Warning C26498](../code-quality/c26498.md) -- [Warning C26800](../code-quality/c26800.md), [Warning C26810](../code-quality/c26810.md) -- [Warning C26811](../code-quality/c26811.md), [Warning C26813](../code-quality/c26813.md) -- [Warning C26815](../code-quality/c26815.md), [Warning C26816](../code-quality/c26816.md) -- [Warning C26819](../code-quality/c26819.md), [Warning C26827](../code-quality/c26827.md) -- [Warning C26828](../code-quality/c26828.md), [Warning C28196](../code-quality/c28196.md) -- [Warning C28306](../code-quality/c28306.md), [Warning C28307](../code-quality/c28307.md) -- [Warning C33010](../code-quality/c33010.md) +### C/C++ preprocessor reference -### Cross platform development +**Updated articles** + +- [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) + - add new warning for VS 17.6 - C5266 + - add warning level info + - New warning topic for C5267 + - Repo sync for protected branch + - Repo sync for protected branch + - Repo sync for protected branch +- [Predefined macros](../preprocessor/predefined-macros.md) + - document __arm_arch macro + - add compiler versions article + - Repo sync for protected branch + - Repo sync for protected branch + +### C++ Standard Template Library (STL) reference **Updated articles** -- [Build an OpenGL ES application on Android and iOS](../cross-platform/build-an-opengl-es-application-on-android-and-ios.md) - Updated documentation to reflect removal of OpenGL. +- [`` operators](../standard-library/bitset-operators.md) - Fix stream typos +- [`` operators](../standard-library/chrono-operators.md) + - Remove stray trailing escapes + - Standardize C++ version naming +- [`` functions](../standard-library/iterator-functions.md) - Address incorrect placement of period +- [`` operators](../standard-library/iterator-operators.md) - Address incorrect placement of period +- [`` functions](../standard-library/range-functions.md) - Address incorrect placement of period +- [`` operators](../standard-library/valarray-operators.md) - Fix various typos +- [`bitset` class](../standard-library/bitset-class.md) - Fix various typos +- [`deque` Class](../standard-library/deque-class.md) - Address incorrect placement of period +- [`elements_view` class (C++ Standard Library)](../standard-library/elements-view-class.md) - Standardize C++ version naming +- [`file_clock` class](../standard-library/file-clock-class.md) + - fix user feedback 227131 + - Repo sync for protected branch +- [`is_clock` structure](../standard-library/is-clock-struct.md) - Standardize C++ version naming +- [`keys_view` class (C++ Standard Library)](../standard-library/keys-view-class.md) - Standardize C++ version naming +- [`month_day_last` class](../standard-library/month-day-last-class.md) - Standardize C++ version naming +- [`month_weekday_last` class](../standard-library/month-weekday-last-class.md) - Standardize C++ version naming +- [`month_weekday` class](../standard-library/month-weekday-class.md) - Standardize C++ version naming +- [`mutex` class (C++ Standard Library)](../standard-library/mutex-class-stl.md) + - fixes for customer feedback + - Repo sync for protected branch +- [`sys_info` struct](../standard-library/sys-info-struct.md) - Address incorrect placement of period +- [`valarray` class](../standard-library/valarray-class.md) - Fix various typos +- [`values_view` class (C++ Standard Library)](../standard-library/values-view-class.md) - Standardize C++ version naming +- [`weekday` class](../standard-library/weekday-class.md) - Standardize C++ version naming +- [`year_month_day` class](../standard-library/year-month-day-class.md) - Standardize C++ version naming +- [`year_month_weekday_last` class](../standard-library/year-month-weekday-last-class.md) - Standardize C++ version naming +- [`year_month_weekday` class](../standard-library/year-month-weekday-class.md) - Standardize C++ version naming +- [forward_list Class](../standard-library/forward-list-class.md) - Address incorrect placement of period +- [iterator_traits Struct](../standard-library/iterator-traits-struct.md) - Address incorrect placement of period +- [move_iterator Class](../standard-library/move-iterator-class.md) - Address incorrect placement of period +- [not_equal_to Struct](../standard-library/not-equal-to-struct.md) - Fix various typos +- [Range adaptors](../standard-library/range-adaptors.md) - Standardize C++ version naming +- [scoped_allocator_adaptor Class](../standard-library/scoped-allocator-adaptor-class.md) - Fix unclosed links +- [type_index Class](../standard-library/type-index-class.md) - Address incorrect placement of period ### Overview of Windows programming in C++ **Updated articles** -- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - Noted that VS 2012 reached end of extended support and clarified that the Visual C++ Redistributable for Visual Studio 2015-2022 doesn't have separate packages for different languages. +- [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) + - fix github issue - code example wrong + - Repo sync for protected branch +- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) + - note 2013 no longer supported + - Fix #5438 and product team issue + - fix #4553 - adds release note links + - Update latest-supported-vc-redist.md + - Repo sync for protected branch + - Repo sync for protected branch + - Resolve syncing conflicts from FromPrivateLiveToMaster to main + - Repo sync for protected branch +- [Walkthrough: Create a Standard C++ Program (C++)](../windows/walkthrough-creating-a-standard-cpp-program-cpp.md) + - address perf + - Repo sync for protected branch +- [Windows C++ desktop application types](../windows/overview-of-windows-programming-in-cpp.md) + - address perf + - Repo sync for protected branch +- [Working with Resource Files](../windows/working-with-resource-files.md) + - address perf + - Repo sync for protected branch + -### Community contributors +## Community contributors The following people contributed to the C++, C, and Assembler docs during this period. Thank you! See our [contributor guide](/contribute) if you'd like to learn how to contribute. -- [moonlit-melody](https://github.com/moonlit-melody) - melody ![4 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-4-green) -- [AlexGuteniev](https://github.com/AlexGuteniev) - Alex Guteniev ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [MAP233224](https://github.com/MAP233224) - MAP ![2 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-2-green) -- [Alice2O3](https://github.com/Alice2O3) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [bearerer](https://github.com/bearerer) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [bryangalindo](https://github.com/bryangalindo) - Bryan Galindo ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [enricosebastian](https://github.com/enricosebastian) - Enrico Sebastian ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [fsb4000](https://github.com/fsb4000) - Igor Zhukov ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [Passw](https://github.com/Passw) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [stephen9357](https://github.com/stephen9357) - ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +- [Rageking8](https://github.com/Rageking8) ![26 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-26-green) +- [0xbadfca11](https://github.com/0xbadfca11) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +- [edmund-leibert](https://github.com/edmund-leibert) - Edmund Leibert III ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +- [glenn-slayden](https://github.com/glenn-slayden) - Glenn Slayden ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +- [lb90](https://github.com/lb90) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +- [tsuyo](https://github.com/tsuyo) - Tsuyoshi Miyake ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) + From debec3b3fb25f6d1f37bbbd107a23611fb7b7f03 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 25 Jun 2024 15:45:06 -0700 Subject: [PATCH 0278/1239] edit --- .../how-to-report-a-problem-with-the-visual-cpp-toolset.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md index 6ed8d06068..9cc9af8dbd 100644 --- a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md +++ b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md @@ -401,7 +401,7 @@ If you're concerned about revealing your identity, [create a new Microsoft accou Any replies under this comment have the same restricted visibility you specified. It's true even if the dropdown control on replies doesn't show the restricted visibility status correctly. -To maintain your privacy and keep your sensitive information out of public view, be careful. Keep all interaction with Microsoft to replies under the restricted comment. Replies to other comments may cause you to accidentally disclose sensitive information. For more information about privacy or confidentiality, see follow the steps under https://learn.microsoft.com/en-us/cpp/overview/how-to-report-a-problem-with-the-visual-cpp-toolset?view=msvc-170#reports-and-privacy? +To maintain your privacy and keep your sensitive information out of public view, be careful. Keep all interaction with Microsoft to replies under the restricted comment. Replies to other comments may cause you to accidentally disclose sensitive information. ## How to report a C++ documentation issue From 6f649f193d287bfc5b98067a9f28437066f2e4ed Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 25 Jun 2024 15:46:04 -0700 Subject: [PATCH 0279/1239] edit --- .../how-to-report-a-problem-with-the-visual-cpp-toolset.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md index 9cc9af8dbd..791257d167 100644 --- a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md +++ b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md @@ -379,7 +379,10 @@ Beneath the community tabs, near the top of each page, is a search box. You can For issues with the C++ compiler, linker, and other tools and libraries, first search the [C++ Developer Community](https://aka.ms/vsfeedback/browsecpp) page. If you search for your problem, and it hasn't been reported before, choose the **Report a problem** button next to the search box. You can include your repro code and command line, screenshots, links to related discussions, and any other information you think is relevant and useful. > [!TIP] -> For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). Information in the initial Developer Community report will always be public. If this is a concern, see the next section regarding privacy. +> Information in the initial Developer Community report will always be public. If this is a concern, see the next section regarding privacy. + +> [!TIP] +> For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). ### Reports and privacy From a4eac956a5388203392b7c1c7ee041ecbd2b1914 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 25 Jun 2024 15:47:08 -0700 Subject: [PATCH 0280/1239] edit --- .../how-to-report-a-problem-with-the-visual-cpp-toolset.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md index 791257d167..21a5d2b4ab 100644 --- a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md +++ b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md @@ -379,7 +379,7 @@ Beneath the community tabs, near the top of each page, is a search box. You can For issues with the C++ compiler, linker, and other tools and libraries, first search the [C++ Developer Community](https://aka.ms/vsfeedback/browsecpp) page. If you search for your problem, and it hasn't been reported before, choose the **Report a problem** button next to the search box. You can include your repro code and command line, screenshots, links to related discussions, and any other information you think is relevant and useful. > [!TIP] -> Information in the initial Developer Community report will always be public. If this is a concern, see the next section regarding privacy. +> Information in the initial Developer Community report will always be public. If this is a concern, see the next section about [Reports and privacy](#reports-and-privacy). > [!TIP] > For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). From b035e9c85a524bb3d279dd9c9cfe1f11a1dc201f Mon Sep 17 00:00:00 2001 From: Hwi-sung Im Date: Tue, 25 Jun 2024 16:09:38 -0700 Subject: [PATCH 0281/1239] Update C26430 rule with heuristics that was unclear in original documentation, with supporting example code snippets. --- docs/code-quality/c26430.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/code-quality/c26430.md b/docs/code-quality/c26430.md index ca0a31cf88..ce01c021cc 100644 --- a/docs/code-quality/c26430.md +++ b/docs/code-quality/c26430.md @@ -27,8 +27,6 @@ A variable is marked as checked for null when it's used in the following context - in non-bitwise logical operations; - in comparison operations where one operand is a constant expression that evaluates to zero. -The rule doesn't have full data flow tracking. It can produce incorrect results in cases where indirect checks are used (such as when an intermediate variable holds a null value and is later used in a comparison). - Implicit null checks are assumed when a pointer value is assigned from: - an allocation performed with throwing `operator new`; @@ -67,3 +65,32 @@ void merge_states(gsl::not_null left, gsl::not_null Date: Wed, 26 Jun 2024 11:04:48 -0700 Subject: [PATCH 0282/1239] Update c26430.md Made some fixes that would have showed up on acrolinx, and simplified the language a little. --- docs/code-quality/c26430.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/code-quality/c26430.md b/docs/code-quality/c26430.md index ce01c021cc..5b03bed167 100644 --- a/docs/code-quality/c26430.md +++ b/docs/code-quality/c26430.md @@ -68,7 +68,8 @@ void merge_states(gsl::not_null left, gsl::not_null Date: Wed, 26 Jun 2024 12:08:44 -0700 Subject: [PATCH 0283/1239] Update c26430.md small edits --- docs/code-quality/c26430.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/code-quality/c26430.md b/docs/code-quality/c26430.md index 5b03bed167..230352b2e9 100644 --- a/docs/code-quality/c26430.md +++ b/docs/code-quality/c26430.md @@ -68,7 +68,7 @@ void merge_states(gsl::not_null left, gsl::not_null Date: Wed, 26 Jun 2024 13:14:34 -0700 Subject: [PATCH 0284/1239] draft --- docs/overview/whats-new-cpp-docs.md | 423 +++++++--------------------- 1 file changed, 105 insertions(+), 318 deletions(-) diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index 892fe3ee07..790fe2aba3 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -14,112 +14,6 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - For what's new related to C++ in Visual Studio, see [What's new for C++ in Visual Studio](what-s-new-for-visual-cpp-in-visual-studio.md). - For the latest C and C++ conformance with ISO standards status, see [C++ conformance improvements in Visual Studio](cpp-conformance-improvements.md). -### Active Template Library (ATL), Microsoft Foundation Classes (MFC) - -**Updated articles** - -- [CComDynamicUnkArray Class](../atl/reference/ccomdynamicunkarray-class.md) - Updated remarks. - -### C/C++ projects and build systems - -**New articles** - -- [`/ifcMap`](../build/reference/ifc-map.md) -- [`/Zc:checkGwOdr` (Enforce Standard C++ ODR violations under `/Gw`)](../build/reference/zc-check-gwodr.md) -- [/KERNEL (Create kernel mode binary)](../build/reference/link-code-for-kernel-mode.md) - -**Updated articles** - -- [Configure CMake debugging sessions](../build/configure-cmake-debugging-sessions.md) - Updated screenshots. -- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - Reflect new behavior as of 17.6. -- [`/Zc:externConstexpr` (Enable extern constexpr variables)](../build/reference/zc-externconstexpr.md) - Reflect new behavior as of 17.6. -- [Overview of ARM64EC ABI conventions](../build/arm64ec-windows-abi-conventions.md) - Updated register mapping for integer registers table. -- [`/DEBUG` (Generate debug info)](../build/reference/debug-generate-debug-info.md) - Fix documentation for `/DEBUG:FASTLINK` and `/DEBUG`. - -### Code quality - -**New articles** - -- [Build reliable and secure C++ programs](../code-quality/build-reliable-secure-programs.md) -- [Warning C6395](../code-quality/c6395.md) -- [Warning C26479](../code-quality/c26479.md) - -**Updated articles** - -- [How to specify additional code information by using `_Analysis_assume_`](../code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md) - Updated remarks. - -Clarified behavior for the following warnings: - -- [Warning C6053](../code-quality/c6053.md) -- [Warning C26478](../code-quality/c26478.md) -- [Warning C26817](../code-quality/c26817.md) -- [Warning C26820](../code-quality/c26820.md) - -### C++ in Visual Studio - -**New articles** - -- [`alignas` (C++)](../cpp/alignas-specifier.md) - -**Updated articles** - -- [`alignas` (C++)](../cpp/alignas-specifier.md) - Several updates to the remarks. -- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - Improved code examples. -- [__fastcall](../cpp/fastcall.md) - Added info about classes, structs, and unions. -- [`decltype` (C++)](../cpp/decltype-cpp.md) - Fixed code example. -- [noreturn](../cpp/noreturn.md) - Improved example. - -### C runtime library - -**Updated articles** - -- [`fegetround`, `fesetround`](../c-runtime-library/reference/fegetround-fesetround2.md) - Noted change of the values for `FE_UPWARD` and `FE_DOWNWARD`. - -### C/C++ compiler and tools errors and warnings - -**Updated articles** - -Clarified behavior for the following warnings: - -- [Compiler Error C2018](../error-messages/compiler-errors-1/compiler-error-c2018.md), [Compiler Error C2023](../error-messages/compiler-errors-1/compiler-error-c2023.md) -- [Compiler Error C2024](../error-messages/compiler-errors-1/compiler-error-c2024.md), [Compiler Error C2049](../error-messages/compiler-errors-1/compiler-error-c2049.md) -- [Compiler Error C2058](../error-messages/compiler-errors-1/compiler-error-c2058.md), [Compiler Error C2061](../error-messages/compiler-errors-1/compiler-error-c2061.md) -- [Compiler Error C2082](../error-messages/compiler-errors-1/compiler-error-c2082.md), [Compiler Error C2129](../error-messages/compiler-errors-1/compiler-error-c2129.md) -- [Compiler Error C2345](../error-messages/compiler-errors-1/compiler-error-c2345.md), [Compiler Error C2397](../error-messages/compiler-errors-1/compiler-error-c2397.md) -- [Compiler Error C2510](../error-messages/compiler-errors-2/compiler-error-c2510.md), [Compiler Error C2534](../error-messages/compiler-errors-2/compiler-error-c2534.md) -- [Compiler Error C2993](../error-messages/compiler-errors-2/compiler-error-c2993.md), [Compiler Error C3550](../error-messages/compiler-errors-2/compiler-error-c3550.md) -- [Compiler Error C3551](../error-messages/compiler-errors-2/compiler-error-c3551.md) -### Read and write code using C++ in Visual Studio - -**New articles** - -- [Clean up C/C++ includes in Visual Studio](../ide/include-cleanup-overview.md) -- [Configure C/C++ Include Cleanup in Visual Studio](../ide/include-cleanup-config.md) -- [Include Cleanup messages](../ide/include-cleanup-messages.md) -- [`lnt-make-member-function-const`](../ide/lnt-make-member-function-const.md) -- [`lnt-naming-convention`](../ide/lnt-naming-convention.md) - -### C/C++ in Visual Studio overview - -**Updated articles** - -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - Added conformance updates for 17.7 and 17.8. -- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - Updated what's new in C++. - -### C++ Standard Template Library (STL) reference - -**Updated articles** - -- [auto_ptr class](../standard-library/auto-ptr-class.md) - Added deprecation info - -### Active Template Library (ATL), Microsoft Foundation Classes (MFC) - -**Updated articles** - -- [Connection maps](../mfc/reference/connection-maps.md) - Corrected parameter description of `pRefCount` in `AfxConnection(Un)Advise`. -- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Updated code example. -- [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - Updated MFC hierarchy chart. - ## May 2024 ### C/C++ compiler intrinsics and assembly language @@ -129,11 +23,9 @@ Clarified behavior for the following warnings: - [__rdtscp](../intrinsics/rdtscp.md) - Nits for rdtsc and rdtscp - [ARM intrinsics](../intrinsics/arm-intrinsics.md) - Add entries to table for regular ARM intrinsics to arm-intrinsics.md - - Repo sync for protected branch - [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - Add entries to table for new arm64 intrinsics to arm64-intrinsics.md - Update arm64-intrinsics.md to include intrin.h mention - - Repo sync for protected branch ### Active Template Library (ATL), Microsoft Foundation Classes (MFC) @@ -141,19 +33,15 @@ Clarified behavior for the following warnings: - [`CD2DBrush` Class](../mfc/reference/cd2dbrush-class.md) - Fix references to brush - - Repo sync for protected branch - [`CInternetSession` Class](../mfc/reference/cinternetsession-class.md) - Address incorrect placement of period - [`CObArray` Class](../mfc/reference/cobarray-class.md) - fix #4824 - - Repo sync for protected branch - [`CRecordset` class](../mfc/reference/crecordset-class.md) - Fix a few typos - [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Fix MFC example - Remove excess comma - - Repo sync for protected branch - [`CStringArray` Class](../mfc/reference/cstringarray-class.md) - fix #4824 - - Repo sync for protected branch - [`CWinAppEx` class](../mfc/reference/cwinappex-class.md) - Remove excess comma - [CMFCBaseTabCtrl Class](../mfc/reference/cmfcbasetabctrl-class.md) - Fix return typo - [COleControlSite Class](../mfc/reference/colecontrolsite-class.md) - Fix a few typos @@ -161,10 +49,8 @@ Clarified behavior for the following warnings: - [MFC Classes](../mfc/reference/mfc-classes.md) - Fix a few typos - [Setting the Dialog Box's Background Color](../mfc/setting-the-dialog-boxs-background-color.md) - add code example for setting a dialog box's background color - - Repo sync for protected branch - [Unicode and Multibyte Character Set (MBCS) Support](../atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md) - Clarified MBCS support in unicode-and-multibyte-character-set-mbcs-support.md - - Repo sync for protected branch ### C/C++ projects and build systems @@ -186,65 +72,45 @@ Clarified behavior for the following warnings: - [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no is not recommended for 64-bit apps - [/Qspectre](../build/reference/qspectre.md) - New /QSpectre flag - - Repo sync for protected branch - [/Qspectre-load](../build/reference/qspectre-load.md) - New /QSpectre flag - - Repo sync for protected branch - [/Qspectre-load-cf](../build/reference/qspectre-load-cf.md) - New /QSpectre flag - - Repo sync for protected branch - [`/arch` (ARM64)](../build/reference/arch-arm64.md) - document __arm_arch macro - Add compiler option /feature and update the /arch (ARM64) option - - Repo sync for protected branch - - Repo sync for protected branch - [`/Fo` (Object File Name)](../build/reference/fo-object-file-name.md) - call out colon form for /fo - - Repo sync for protected branch - [`/headerUnit` (Use header unit IFC)](../build/reference/headerunit.md) - tech review - - Repo sync for protected branch - [`/PDBPATH`](../build/reference/pdbpath.md) - fix feedback item ADO:229433 - - Repo sync for protected branch - [`/sourceDependencies` (List all source-level dependencies)](../build/reference/sourcedependencies.md) - Correct JSON output of sourcedependencies.md - [`/std` (Specify Language Standard Version)](../build/reference/std-specify-language-standard-version.md) - clarify how macro value is set - Whatsnew - - Repo sync for protected branch - Enhance /std documentation with reference to /Zc:__cplusplus - - Repo sync for protected branch - [`/Zc:zeroSizeArrayNew` (Call member new/delete on arrays)](../build/reference/zc-zerosizearraynew.md) - Remove stray trailing escapes - [Advanced Property Page](../build/reference/advanced-property-page.md) - Add SARIF diagnostics documentation - - Repo sync for protected branch - [Build and run a C++ console app project](../build/vscpp-step-2-build.md) - draft - - Repo sync for protected branch - [C++ Build Insights](../build-insights/index.yml) - draft - - Repo sync for protected branch - [Clang/LLVM support in Visual Studio projects](../build/clang-support-msbuild.md) - draft - - Repo sync for protected branch - [CMake projects in Visual Studio](../build/cmake-projects-in-visual-studio.md) - draft - Add links for "Just My Code" and "Edit and Continue". - - Repo sync for protected branch - [Commands in a makefile](../build/reference/commands-in-a-makefile.md) - Fix unclosed links - [Common macros for MSBuild commands and properties](../build/reference/common-macros-for-build-commands-and-properties.md) - fixes github #4890 - backslashes - - Repo sync for protected branch - [Compiler options listed alphabetically](../build/reference/compiler-options-listed-alphabetically.md) - Add compiler option /feature and update the /arch (ARM64) option - Whatsnew - - Repo sync for protected branch - - Repo sync for protected branch - [Compiler options listed by category](../build/reference/compiler-options-listed-by-category.md) - Add compiler option /feature and update the /arch (ARM64) option - Whatsnew - - Repo sync for protected branch - - Repo sync for protected branch - [Creating an .Sbr File](../build/reference/creating-an-dot-sbr-file.md) - Address incorrect placement of period - [Define an NMAKE macro](../build/reference/defining-an-nmake-macro.md) - Fix unclosed links - [Inference rules](../build/reference/inference-rules.md) - Fix unclosed links @@ -253,23 +119,17 @@ Clarified behavior for the following warnings: - fixes for customer feedback - new flag: /LINKREPROFULLPATHRSP - new linker switches for 17.8 - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - [Linking](../build/reference/linking.md) - new linker switches for 17.8 - - Repo sync for protected branch - [Makefile preprocessing](../build/reference/makefile-preprocessing.md) - Fix unclosed links - [NMAKE makefile contents and features](../build/reference/contents-of-a-makefile.md) - Fix unclosed links - [Overview of x64 ABI conventions](../build/x64-software-conventions.md) - Update x64-software-conventions.md - [Set compiler and build properties](../build/working-with-project-properties.md) - draft - - Repo sync for protected branch - [Special NMAKE macros](../build/reference/special-nmake-macros.md) - Fix unclosed links - [Use an NMAKE macro](../build/reference/using-an-nmake-macro.md) - Fix unclosed links - [Walkthrough: Build and debug C++ with WSL 2 and Visual Studio 2022](../build/walkthrough-build-debug-wsl2.md) - draft - - Repo sync for protected branch - [x64 calling convention](../build/x64-calling-convention.md) - Update x64-calling-convention.md ### C language @@ -283,10 +143,8 @@ Clarified behavior for the following warnings: - [C Keywords](../c-language/c-keywords.md) - Conformance - - Repo sync for protected branch - [C Type Specifiers](../c-language/c-type-specifiers.md) - Conformance - - Repo sync for protected branch ### Code quality @@ -310,23 +168,17 @@ Clarified behavior for the following warnings: - [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - fix github issue - code example wrong - Update clang-tidy.md - - Repo sync for protected branch - Update clang-tidy.md - [Warning C6031](../code-quality/c6031.md) - fix language tagging and some of the code samples - - Repo sync for protected branch - [Warning C6059](../code-quality/c6059.md) - C6059: Add heuristics - - Repo sync for protected branch - [Warning C6201](../code-quality/c6201.md) - Add heuristics for C6201 - - Repo sync for protected branch - [Warning C6328](../code-quality/c6328.md) - Improvements to some format specifier related warnings. - - Repo sync for protected branch - [Warning C6340](../code-quality/c6340.md) - Improvements to some format specifier related warnings. - - Repo sync for protected branch ### C++ in Visual Studio @@ -342,36 +194,28 @@ Clarified behavior for the following warnings: - Update assignment-operators.md - [Attributes in C++](../cpp/attributes.md) - Update attributes.md - - Repo sync for protected branch - [C++ docs - get started, tutorials, reference.](../cpp/index.yml) - address perf - - Repo sync for protected branch - [Casting](../cpp/casting.md) - fixes for customer feedback - - Repo sync for protected branch - [char, wchar_t, char8_t, char16_t, char32_t](../cpp/char-wchar-t-char16-t-char32-t.md) - address user feedback 252709 - - Repo sync for protected branch - [Collections (C++/CX)](../cppcx/collections-c-cx.md) - Fix various typos - [Comma Operator: `,`](../cpp/comma-operator.md) - Make built-in operators title consistent - [Data Type Ranges](../cpp/data-type-ranges.md) - fixes for customer feedback - - Repo sync for protected branch - [Destructors (C++)](../cpp/destructors-cpp.md) - Update destructors-cpp.md - Small nits for destructors cpp - [Equality operators: `==` and `!=`](../cpp/equality-operators-equal-equal-and-exclpt-equal.md) - Make built-in operators title consistent - [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fix github issue - code example wrong - - Repo sync for protected branch - [Explicit Type Conversion Operator: `()`](../cpp/explicit-type-conversion-operator-parens.md) - Make built-in operators title consistent - [Explicitly Defaulted and Deleted Functions](../cpp/explicitly-defaulted-and-deleted-functions.md) - New warning topic for C5267 - - Repo sync for protected branch - [Function Call Operator: `()`](../cpp/function-call-operator-parens.md) - Make built-in operators title consistent - [How to: Create and Use shared_ptr instances](../cpp/how-to-create-and-use-shared-ptr-instances.md) - draft - - Repo sync for protected branch - [Indirection Operator: `*`](../cpp/indirection-operator-star.md) - Make built-in operators title consistent - [Inline functions (C++)](../cpp/inline-functions-cpp.md) - Address mistakes in inline functions cpp @@ -380,46 +224,36 @@ Clarified behavior for the following warnings: - [Logical negation operator: `!`](../cpp/logical-negation-operator-exclpt.md) - Make built-in operators title consistent - [Modern C++ best practices for exceptions and error handling](../cpp/errors-and-exception-handling-modern-cpp.md) - fix UUF issues - - Repo sync for protected branch - [Module Class](../cppcx/wrl/module-class.md) - Fix various typos - [Multiplicative Operators and the Modulus Operator](../cpp/multiplicative-operators-and-the-modulus-operator.md) - Make built-in operators title consistent - [Mutable Data Members (C++)](../cpp/mutable-data-members-cpp.md) - Tighten wording in mutable data members - [Named modules tutorial (C++)](../cpp/tutorial-named-modules-cpp.md) - line edits - - Repo sync for protected branch - [Namespaces (C++)](../cpp/namespaces-cpp.md) - Add file hint in namespaces-cpp.md - [Nonstandard Behavior](../cpp/nonstandard-behavior.md) - Standardize C++ version naming - [One's complement operator: `~`](../cpp/one-s-complement-operator-tilde.md) - Make built-in operators title consistent - [Overview of modules in C++](../cpp/modules-cpp.md) - line edits - some line edits - - Repo sync for protected branch - - Repo sync for protected branch - [Platform::Collections::UnorderedMap Class](../cppcx/platform-collections-unorderedmap-class.md) - Fix various typos - [Postfix Increment and Decrement Operators: `++` and `--`](../cpp/postfix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent - [Prefix Increment and Decrement Operators: `++` and `--`](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent - [Primary Expressions](../cpp/primary-expressions.md) - updates per #4816 - - Repo sync for protected branch - [protected (C++)](../cpp/protected-cpp.md) - protected-cpp.md - grammar and consistency - [References (C++)](../cpp/references-cpp.md) - fix UUF issues - - Repo sync for protected branch - [Relational Operators: `<`, `>`, `<=`, and `>=`](../cpp/relational-operators-equal-and-equal.md) - Make built-in operators title consistent - [Subscript Operator: `[]`](../cpp/subscript-operator.md) - Make built-in operators title consistent - Fix built-in operators toc yml - [The `this` pointer](../cpp/this-pointer.md) - updates per #4816 - - Repo sync for protected branch - [Tutorial: Import the C++ standard library using modules from the command line](../cpp/tutorial-import-stl-named-module.md) - call out colon form for /fo - update /fo flag info - explain switch options - some line edits - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - [Unary Plus and Negation Operators: `+` and `-`](../cpp/unary-plus-and-negation-operators-plus-and.md) - Make built-in operators title consistent ### Cross platform development @@ -428,10 +262,8 @@ Clarified behavior for the following warnings: - [Cross-platform mobile development examples](../cross-platform/cross-platform-mobile-development-examples.md) - Fix #5438 and product team issue - - Repo sync for protected branch - [Install cross-platform mobile development with C++](../cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md) - updates regarding Xamarin - - Repo sync for protected branch ### C runtime library @@ -439,7 +271,6 @@ Clarified behavior for the following warnings: - [`__RTDynamicCast`](../c-runtime-library/rtdynamiccast.md) - Fixes #3195 - update required header file - - Repo sync for protected branch - [`_CrtMemDumpStatistics`](../c-runtime-library/reference/crtmemdumpstatistics.md) - Remove stray trailing escapes - [`_CrtSetBreakAlloc`](../c-runtime-library/reference/crtsetbreakalloc.md) - Remove stray trailing escapes - [`_CrtSetReportFile`](../c-runtime-library/reference/crtsetreportfile.md) - Remove stray trailing escapes @@ -452,7 +283,6 @@ Clarified behavior for the following warnings: - [`_fseek_nolock`, `_fseeki64_nolock`](../c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md) - Tweak nolock function descriptions - [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](../c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) - Fixes #3706 - - Repo sync for protected branch - [`_ftell_nolock`, `_ftelli64_nolock`](../c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md) - Tweak nolock function descriptions - [`_fwrite_nolock`](../c-runtime-library/reference/fwrite-nolock.md) - Tweak nolock function descriptions - [`_getc_nolock`, `_getwc_nolock`](../c-runtime-library/reference/getc-nolock-getwc-nolock.md) - Tweak nolock function descriptions @@ -467,26 +297,21 @@ Clarified behavior for the following warnings: - [`_set_se_translator`](../c-runtime-library/reference/set-se-translator.md) - Remove stray trailing escapes - [`_splitpath`, `_wsplitpath`](../c-runtime-library/reference/splitpath-wsplitpath.md) - fix github 4833 - - Repo sync for protected branch - [`_ungetc_nolock`, `_ungetwc_nolock`](../c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md) - Tweak nolock function descriptions - [`_vscprintf_p`, `_vscprintf_p_l`, `_vscwprintf_p`, `_vscwprintf_p_l`](../c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md) - Remove stray trailing escapes - [`freopen`, `_wfreopen`](../c-runtime-library/reference/freopen-wfreopen.md) - Remove stray trailing escapes - [`memcpy`, `wmemcpy`](../c-runtime-library/reference/memcpy-wmemcpy.md) - Fixes #3706 - Remove stray trailing escapes - - Repo sync for protected branch - [`memmove`, `wmemmove`](../c-runtime-library/reference/memmove-wmemmove.md) - Fixes #3706 - Remove stray trailing escapes - - Repo sync for protected branch - [`set_unexpected` (CRT)](../c-runtime-library/reference/set-unexpected-crt.md) - Remove stray trailing escapes - [`setlocale`, `_wsetlocale`](../c-runtime-library/reference/setlocale-wsetlocale.md) - fix github 4879 - - Repo sync for protected branch - [`strncat`, `_strncat_l`, `wcsncat`, `_wcsncat_l`, `_mbsncat`, `_mbsncat_l`](../c-runtime-library/reference/strncat-strncat-l-wcsncat-wcsncat-l-mbsncat-mbsncat-l.md) - Remove stray trailing escapes - [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](../c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l.md) - Fixes #3706 - - Repo sync for protected branch - [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that _O_TEXT is ANSI. ### C/C++ compiler and tools errors and warnings @@ -506,7 +331,6 @@ Clarified behavior for the following warnings: - [Compiler error C2055](../error-messages/compiler-errors-1/compiler-error-c2055.md) - fixes for customer feedback - - Repo sync for protected branch - [Compiler Error C2101](../error-messages/compiler-errors-1/compiler-error-c2101.md) - Update C2101 - [Compiler Error C2102](../error-messages/compiler-errors-1/compiler-error-c2102.md) - Add example for C2102 - [Compiler Error C2103](../error-messages/compiler-errors-1/compiler-error-c2103.md) - Add example for C2103 @@ -519,258 +343,172 @@ Clarified behavior for the following warnings: - [Compiler Error C2860](../error-messages/compiler-errors-2/compiler-error-c2860.md) - Update C2860 - [Compiler Error C3859](../error-messages/compiler-errors-2/compiler-error-c3859.md) - Update compiler-error-c3859.md - - Repo sync for protected branch - [Compiler errors C2001 - C3999, C7000 - C7999](../error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md) - Error 2000 was never emitted. - - Repo sync for protected branch - [Compiler errors C2001 through C2099](../error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md) - Error 2000 was never emitted. - - Repo sync for protected branch - [Compiler errors C2300 Through C2399](../error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md) - Document C2323 - [Compiler errors C3300 Through C3399](../error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md) - Update compiler-errors-c3300-through-c3399.md - - Repo sync for protected branch - [Compiler errors C3500 through C3999](../error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md) - Update compiler-error-c3859.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 2) C4091](../error-messages/compiler-warnings/compiler-warning-level-1-c4091.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 3) C4133](../error-messages/compiler-warnings/compiler-warning-level-3-c4133.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 3) C4359](../error-messages/compiler-warnings/compiler-warning-level-3-c4359.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 4, off) C4355](../error-messages/compiler-warnings/compiler-warning-c4355.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 4) C4052](../error-messages/compiler-warnings/compiler-warning-level-1-c4052.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 4) C4112](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1 and level 4) C4223](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4002](../error-messages/compiler-warnings/compiler-warning-level-1-c4002.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4003](../error-messages/compiler-warnings/compiler-warning-level-1-c4003.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4141](../error-messages/compiler-warnings/compiler-warning-level-1-c4141.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4229](../error-messages/compiler-warnings/compiler-warning-level-1-c4229.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4233](../error-messages/compiler-warnings/compiler-warning-level-4-c4233.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4235](../error-messages/compiler-warnings/compiler-warning-level-4-c4235.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4368](../error-messages/compiler-warnings/compiler-warning-c4368.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4392](../error-messages/compiler-warnings/compiler-warning-level-1-c4392.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4394](../error-messages/compiler-warnings/compiler-warning-c4394.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1, Error) C4399](../error-messages/compiler-warnings/compiler-warning-level-1-c4399.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1) C4178](../error-messages/compiler-warnings/compiler-warning-level-1-c4178.md) - Rectify example in C4178 - [Compiler Warning (level 1) C4305](../error-messages/compiler-warnings/compiler-warning-level-1-c4305.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1) C4329](../error-messages/compiler-warnings/compiler-warning-level-1-c4329.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1) C4335](../error-messages/compiler-warnings/compiler-warning-c4335.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 1) C4384](../error-messages/compiler-warnings/compiler-warning-level-1-c4384.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler warning (level 1) C4834](../error-messages/compiler-warnings/c4834.md) - add new warning for VS 17.6 - C5266 - - Repo sync for protected branch - Standardize C++ version naming - [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) - add warning c5072 - Capitalize error code - - Repo sync for protected branch - [Compiler Warning (level 2 and level 4) C4200](../error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 2) C4150](../error-messages/compiler-warnings/compiler-warning-level-2-c4150.md) - Update compiler-warning-level-2-c4150.md - - Repo sync for protected branch - [Compiler Warning (level 2) C4251](../error-messages/compiler-warnings/compiler-warning-level-1-c4251.md) - Update compiler-warnings-c4200-through-c4399.md - improve C4251 - - Repo sync for protected branch - - Repo sync for protected branch - [Compiler Warning (level 3 and level 4) C4101](../error-messages/compiler-warnings/compiler-warning-level-3-c4101.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 3 and level 4) C4189](../error-messages/compiler-warnings/compiler-warning-level-4-c4189.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 3 and level 4) C4278](../error-messages/compiler-warnings/compiler-warning-level-3-c4278.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 3, off) C4165](../error-messages/compiler-warnings/compiler-warning-level-1-c4165.md) - Update warning levels in compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 3, off) C4191](../error-messages/compiler-warnings/compiler-warning-level-3-c4191.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 3, off) C4242](../error-messages/compiler-warnings/compiler-warning-level-4-c4242.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 3, off) C4265](../error-messages/compiler-warnings/compiler-warning-level-3-c4265.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 3, off) C4287](../error-messages/compiler-warnings/compiler-warning-level-3-c4287.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 3) C4007](../error-messages/compiler-warnings/compiler-warning-level-2-c4007.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 3) C4066](../error-messages/compiler-warnings/compiler-warning-level-3-c4066.md) - Add example for C4066 - [Compiler Warning (level 3) C4334](../error-messages/compiler-warnings/compiler-warning-level-3-c4334.md) - Update compiler-warning-level-3-c4334.md - - Repo sync for protected branch - [Compiler Warning (level 3) C4371](../error-messages/compiler-warnings/c4371.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, no longer emitted) C4001](../error-messages/compiler-warnings/compiler-warning-level-4-c4001.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4061](../error-messages/compiler-warnings/compiler-warning-level-4-c4061.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4062](../error-messages/compiler-warnings/compiler-warning-level-4-c4062.md) - Update compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4255](../error-messages/compiler-warnings/compiler-warning-level-4-c4255.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4263](../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4264](../error-messages/compiler-warnings/compiler-warning-level-1-c4264.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4266](../error-messages/compiler-warnings/compiler-warning-level-4-c4266.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4289](../error-messages/compiler-warnings/compiler-warning-level-4-c4289.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4296](../error-messages/compiler-warnings/compiler-warning-level-4-c4296.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4339](../error-messages/compiler-warnings/compiler-warning-level-4-c4339.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4365](../error-messages/compiler-warnings/compiler-warning-level-4-c4365.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4, off) C4388](../error-messages/compiler-warnings/c4388.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4019](../error-messages/compiler-warnings/compiler-warning-level-4-c4019.md) - clarify that only applies to C - - Repo sync for protected branch - [Compiler Warning (level 4) C4218](../error-messages/compiler-warnings/compiler-warning-level-1-c4218.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4254](../error-messages/compiler-warnings/compiler-warning-level-4-c4254.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4306](../error-messages/compiler-warnings/compiler-warning-level-3-c4306.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4310](../error-messages/compiler-warnings/compiler-warning-level-3-c4310.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4324](../error-messages/compiler-warnings/compiler-warning-level-4-c4324.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4373](../error-messages/compiler-warnings/compiler-warning-level-3-c4373.md) - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - [Compiler Warning (level 4) C4389](../error-messages/compiler-warnings/compiler-warning-level-4-c4389.md) - Capitalize error code - [Compiler warning (level 4) C5267](../error-messages/compiler-warnings/c5267.md) - add warning level info - New warning topic for C5267 - - Repo sync for protected branch - - Repo sync for protected branch - [Compiler Warning (levels 3 and 4) C4244](../error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244.md) - New warning topic for C5267 - - Repo sync for protected branch - [Compiler Warning C5243](../error-messages/compiler-warnings/c5243.md) - Update c5243.md - - Repo sync for protected branch - [Compiler Warnings by compiler version](../error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md) - Update compiler-warnings-by-compiler-version.md - add new warning for VS 17.6 - C5266 - New warning topic for C5267 - - Repo sync for protected branch - Add links to compiler warnings by compiler version - - Repo sync for protected branch - - Repo sync for protected branch - [Linker tools errors and warnings (LNKxxxx)](../error-messages/tool-errors/linker-tools-errors-and-warnings.md) - new linker warnings: 4306 & 4307 - - Repo sync for protected branch - [Microsoft C/C++ compiler warnings C4000 through C4199](../error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md) - Split warnings - pull in work RageKing8 did - Update compiler-warnings-c4000-through-c4199.md - Update warning levels in compiler-warnings-c4000-through-c4199.md - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - [Microsoft C/C++ compiler warnings C4000 through C5399](../error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md) - Split warnings - pull in work RageKing8 did - - Repo sync for protected branch - [Microsoft C/C++ compiler warnings C4200 through C4399](../error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md) - Split warnings - pull in work RageKing8 did - Update compiler-warnings-c4200-through-c4399.md - Update compiler-warnings-c4200-through-c4399.md - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - [Microsoft C/C++ compiler warnings C4400 through C4599](../error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md) - Split warnings - pull in work RageKing8 did - Add missing warnings to compiler-warnings-c4400-through-c4599 - - Repo sync for protected branch - Add some warning entries - - Repo sync for protected branch - [Microsoft C/C++ compiler warnings C4600 through C4799](../error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md) - Split warnings - pull in work RageKing8 did - Update compiler-warnings-c4600-through-c4799.md - - Repo sync for protected branch - Add some warning entries - - Repo sync for protected branch - [Microsoft C/C++ compiler warnings C4800 through C4999](../error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md) - Split warnings - pull in work RageKing8 did - Update missing warning messages in compiler-warnings-c4800-through-c4999.md - add warning c5072 - add new warning for VS 17.6 - C5266 - New warning topic for C5267 - - Repo sync for protected branch - Add some warning entries - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch ### C++ in Visual Studio tutorials @@ -779,8 +517,6 @@ Clarified behavior for the following warnings: - [Create a console calculator in C++](../get-started/tutorial-console-cpp.md) - update - draft - - Repo sync for protected branch - - Repo sync for protected branch ### Read and write code using C++ in Visual Studio @@ -794,11 +530,8 @@ Clarified behavior for the following warnings: - [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) - add keyboard accelerators - new topic for C++ macro tools - - Repo sync for protected branch - - Repo sync for protected branch - [Walkthrough: Deploying Your Program (C++)](../ide/walkthrough-deploying-your-program-cpp.md) - update steps - - Repo sync for protected branch ### Linux with C++ in Visual Studio @@ -807,8 +540,6 @@ Clarified behavior for the following warnings: - [Connect to your target Linux system in Visual Studio](../linux/connect-to-your-remote-linux-computer.md) - Update connect-to-your-remote-linux-computer.md - draft - - Repo sync for protected branch - - Repo sync for protected branch - Update connect-to-your-remote-linux-computer.md ### C/C++ in Visual Studio overview @@ -821,13 +552,10 @@ Clarified behavior for the following warnings: - [C and C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) - fix f1 lookup - - Repo sync for protected branch - [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017](../overview/cpp-conformance-improvements-2017.md) - fix f1 lookup - - Repo sync for protected branch - [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019](../overview/cpp-conformance-improvements-2019.md) - fix f1 lookup - - Repo sync for protected branch - [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - updates for 17.10 - Conformance for 17.10 @@ -836,37 +564,22 @@ Clarified behavior for the following warnings: - fix f1 lookup - add link that wasn't ready until release - Whatsnew - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - [How to report a problem with the Microsoft C++ toolset or documentation](../overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) - fix f1 lookup - - Repo sync for protected branch - [Microsoft C/C++ help and community](../overview/visual-cpp-help-and-community.md) - fix f1 lookup - - Repo sync for protected branch - [Microsoft C/C++ language conformance by Visual Studio version](../overview/visual-cpp-language-conformance.md) - fix f1 lookup - - Repo sync for protected branch - [Overview of C++ development in Visual Studio](../overview/overview-of-cpp-development.md) - address perf - - Repo sync for protected branch - [Supported platforms (Visual C++)](../overview/supported-platforms-visual-cpp.md) - fix f1 lookup - - Repo sync for protected branch - [Visual Studio C++ Samples](../overview/visual-cpp-samples.md) - fix f1 lookup - - Repo sync for protected branch - [What's new for C++ in Visual Studio 2017](../overview/what-s-new-for-cpp-2017.md) - fix f1 lookup - - Repo sync for protected branch - [What's new for C++ in Visual Studio 2019](../overview/what-s-new-for-cpp-2019.md) - fix f1 lookup - - Repo sync for protected branch - [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - updates for 17.10 - fix #4553 - adds release note links @@ -877,15 +590,7 @@ Clarified behavior for the following warnings: - remove duplicated section - add link that wasn't ready until release - Whatsnew - - Repo sync for protected branch - Resolve syncing conflicts from FromPrivateLiveToMaster to main - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch ### Parallel programming in C++ in Visual Studio @@ -899,7 +604,6 @@ Clarified behavior for the following warnings: - [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - fixes #5290 - clarify linking binaries built with different versions of the toolset - - Repo sync for protected branch ### C/C++ preprocessor reference @@ -909,14 +613,9 @@ Clarified behavior for the following warnings: - add new warning for VS 17.6 - C5266 - add warning level info - New warning topic for C5267 - - Repo sync for protected branch - - Repo sync for protected branch - - Repo sync for protected branch - [Predefined macros](../preprocessor/predefined-macros.md) - document __arm_arch macro - add compiler versions article - - Repo sync for protected branch - - Repo sync for protected branch ### C++ Standard Template Library (STL) reference @@ -935,7 +634,6 @@ Clarified behavior for the following warnings: - [`elements_view` class (C++ Standard Library)](../standard-library/elements-view-class.md) - Standardize C++ version naming - [`file_clock` class](../standard-library/file-clock-class.md) - fix user feedback 227131 - - Repo sync for protected branch - [`is_clock` structure](../standard-library/is-clock-struct.md) - Standardize C++ version naming - [`keys_view` class (C++ Standard Library)](../standard-library/keys-view-class.md) - Standardize C++ version naming - [`month_day_last` class](../standard-library/month-day-last-class.md) - Standardize C++ version naming @@ -943,7 +641,6 @@ Clarified behavior for the following warnings: - [`month_weekday` class](../standard-library/month-weekday-class.md) - Standardize C++ version naming - [`mutex` class (C++ Standard Library)](../standard-library/mutex-class-stl.md) - fixes for customer feedback - - Repo sync for protected branch - [`sys_info` struct](../standard-library/sys-info-struct.md) - Address incorrect placement of period - [`valarray` class](../standard-library/valarray-class.md) - Fix various typos - [`values_view` class (C++ Standard Library)](../standard-library/values-view-class.md) - Standardize C++ version naming @@ -965,35 +662,125 @@ Clarified behavior for the following warnings: - [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - fix github issue - code example wrong - - Repo sync for protected branch - [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported - Fix #5438 and product team issue - fix #4553 - adds release note links - Update latest-supported-vc-redist.md - - Repo sync for protected branch - - Repo sync for protected branch - Resolve syncing conflicts from FromPrivateLiveToMaster to main - - Repo sync for protected branch - [Walkthrough: Create a Standard C++ Program (C++)](../windows/walkthrough-creating-a-standard-cpp-program-cpp.md) - address perf - - Repo sync for protected branch - [Windows C++ desktop application types](../windows/overview-of-windows-programming-in-cpp.md) - address perf - - Repo sync for protected branch - [Working with Resource Files](../windows/working-with-resource-files.md) - address perf - - Repo sync for protected branch +## What's new history + +This section lists major changes to the Microsoft C++ docs for August 2023 to early November 2023. + +### Active Template Library (ATL), Microsoft Foundation Classes (MFC) + +**Updated articles** + +- [CComDynamicUnkArray Class](../atl/reference/ccomdynamicunkarray-class.md) - Updated remarks. + +### C/C++ projects and build systems + +**New articles** + +- [`/ifcMap`](../build/reference/ifc-map.md) +- [`/Zc:checkGwOdr` (Enforce Standard C++ ODR violations under `/Gw`)](../build/reference/zc-check-gwodr.md) +- [/KERNEL (Create kernel mode binary)](../build/reference/link-code-for-kernel-mode.md) + +**Updated articles** + +- [Configure CMake debugging sessions](../build/configure-cmake-debugging-sessions.md) - Updated screenshots. +- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - Reflect new behavior as of 17.6. +- [`/Zc:externConstexpr` (Enable extern constexpr variables)](../build/reference/zc-externconstexpr.md) - Reflect new behavior as of 17.6. +- [Overview of ARM64EC ABI conventions](../build/arm64ec-windows-abi-conventions.md) - Updated register mapping for integer registers table. +- [`/DEBUG` (Generate debug info)](../build/reference/debug-generate-debug-info.md) - Fix documentation for `/DEBUG:FASTLINK` and `/DEBUG`. + +### Code quality + +**New articles** + +- [Build reliable and secure C++ programs](../code-quality/build-reliable-secure-programs.md) +- [Warning C6395](../code-quality/c6395.md) +- [Warning C26479](../code-quality/c26479.md) + +**Updated articles** + +- [How to specify additional code information by using `_Analysis_assume_`](../code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md) - Updated remarks. + +Clarified behavior for the following warnings: + +- [Warning C6053](../code-quality/c6053.md) +- [Warning C26478](../code-quality/c26478.md) +- [Warning C26817](../code-quality/c26817.md) +- [Warning C26820](../code-quality/c26820.md) -## Community contributors +### C++ in Visual Studio -The following people contributed to the C++, C, and Assembler docs during this period. Thank you! See our [contributor guide](/contribute) if you'd like to learn how to contribute. +**New articles** -- [Rageking8](https://github.com/Rageking8) ![26 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-26-green) -- [0xbadfca11](https://github.com/0xbadfca11) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [edmund-leibert](https://github.com/edmund-leibert) - Edmund Leibert III ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [glenn-slayden](https://github.com/glenn-slayden) - Glenn Slayden ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [lb90](https://github.com/lb90) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [tsuyo](https://github.com/tsuyo) - Tsuyoshi Miyake ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) +- [`alignas` (C++)](../cpp/alignas-specifier.md) +**Updated articles** + +- [`alignas` (C++)](../cpp/alignas-specifier.md) - Several updates to the remarks. +- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - Improved code examples. +- [__fastcall](../cpp/fastcall.md) - Added info about classes, structs, and unions. +- [`decltype` (C++)](../cpp/decltype-cpp.md) - Fixed code example. +- [noreturn](../cpp/noreturn.md) - Improved example. + +### C runtime library + +**Updated articles** + +- [`fegetround`, `fesetround`](../c-runtime-library/reference/fegetround-fesetround2.md) - Noted change of the values for `FE_UPWARD` and `FE_DOWNWARD`. + +### C/C++ compiler and tools errors and warnings + +**Updated articles** + +Clarified behavior for the following warnings: + +- [Compiler Error C2018](../error-messages/compiler-errors-1/compiler-error-c2018.md), [Compiler Error C2023](../error-messages/compiler-errors-1/compiler-error-c2023.md) +- [Compiler Error C2024](../error-messages/compiler-errors-1/compiler-error-c2024.md), [Compiler Error C2049](../error-messages/compiler-errors-1/compiler-error-c2049.md) +- [Compiler Error C2058](../error-messages/compiler-errors-1/compiler-error-c2058.md), [Compiler Error C2061](../error-messages/compiler-errors-1/compiler-error-c2061.md) +- [Compiler Error C2082](../error-messages/compiler-errors-1/compiler-error-c2082.md), [Compiler Error C2129](../error-messages/compiler-errors-1/compiler-error-c2129.md) +- [Compiler Error C2345](../error-messages/compiler-errors-1/compiler-error-c2345.md), [Compiler Error C2397](../error-messages/compiler-errors-1/compiler-error-c2397.md) +- [Compiler Error C2510](../error-messages/compiler-errors-2/compiler-error-c2510.md), [Compiler Error C2534](../error-messages/compiler-errors-2/compiler-error-c2534.md) +- [Compiler Error C2993](../error-messages/compiler-errors-2/compiler-error-c2993.md), [Compiler Error C3550](../error-messages/compiler-errors-2/compiler-error-c3550.md) +- [Compiler Error C3551](../error-messages/compiler-errors-2/compiler-error-c3551.md) +### Read and write code using C++ in Visual Studio + +**New articles** + +- [Clean up C/C++ includes in Visual Studio](../ide/include-cleanup-overview.md) +- [Configure C/C++ Include Cleanup in Visual Studio](../ide/include-cleanup-config.md) +- [Include Cleanup messages](../ide/include-cleanup-messages.md) +- [`lnt-make-member-function-const`](../ide/lnt-make-member-function-const.md) +- [`lnt-naming-convention`](../ide/lnt-naming-convention.md) + +### C/C++ in Visual Studio overview + +**Updated articles** + +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - Added conformance updates for 17.7 and 17.8. +- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - Updated what's new in C++. + +### C++ Standard Template Library (STL) reference + +**Updated articles** + +- [auto_ptr class](../standard-library/auto-ptr-class.md) - Added deprecation info + +### Active Template Library (ATL), Microsoft Foundation Classes (MFC) + +**Updated articles** + +- [Connection maps](../mfc/reference/connection-maps.md) - Corrected parameter description of `pRefCount` in `AfxConnection(Un)Advise`. +- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Updated code example. +- [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - Updated MFC hierarchy chart. \ No newline at end of file From 6256f0c0fffa368cef466a54a0a6a7f6d70aa668 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 26 Jun 2024 15:13:08 -0700 Subject: [PATCH 0285/1239] updates --- .whatsnew.json | 3 +- docs/overview/whats-new-cpp-docs.md | 476 ++++++++++------------------ 2 files changed, 175 insertions(+), 304 deletions(-) diff --git a/.whatsnew.json b/.whatsnew.json index 8ba50fca8e..a5807f933e 100644 --- a/.whatsnew.json +++ b/.whatsnew.json @@ -10,7 +10,8 @@ "minAdditionsToFile": 2, "pullRequestTitlesToIgnore": [ "^Confirm merge from FromPublicMasterBranch", - "^Repo sync for protected CLA branch" + "^Repo sync for protected CLA branch", + "^Repo sync for protected branch" ], "omitPullRequestTitles": false }, diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index 790fe2aba3..f7291e135a 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -1,6 +1,6 @@ --- title: "What's new for the Microsoft C++ docs" -ms.date: 06/25/2024 +ms.date: 06/26/2024 description: "A list of new articles and doc updates for the Microsoft C/C++ compiler, ATL/MFC, C runtime, and standard library docs." ms.custom: intro-whats-new monikerRange: '>=msvc-160' @@ -14,47 +14,39 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - For what's new related to C++ in Visual Studio, see [What's new for C++ in Visual Studio](what-s-new-for-visual-cpp-in-visual-studio.md). - For the latest C and C++ conformance with ISO standards status, see [C++ conformance improvements in Visual Studio](cpp-conformance-improvements.md). -## May 2024 +## C/C++ compiler intrinsics and assembly language -### C/C++ compiler intrinsics and assembly language - -**Updated articles** +### Updated articles - [__rdtscp](../intrinsics/rdtscp.md) - Nits for rdtsc and rdtscp -- [ARM intrinsics](../intrinsics/arm-intrinsics.md) - - Add entries to table for regular ARM intrinsics to arm-intrinsics.md +- [ARM intrinsics](../intrinsics/arm-intrinsics.md) - Add entries to table for regular ARM intrinsics to arm-intrinsics.md - [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - Add entries to table for new arm64 intrinsics to arm64-intrinsics.md - Update arm64-intrinsics.md to include intrin.h mention -### Active Template Library (ATL), Microsoft Foundation Classes (MFC) +## Active Template Library (ATL), Microsoft Foundation Classes (MFC) -**Updated articles** +### Updated articles -- [`CD2DBrush` Class](../mfc/reference/cd2dbrush-class.md) - - Fix references to brush +- [`CD2DBrush` Class](../mfc/reference/cd2dbrush-class.md) - Fix references to brush - [`CInternetSession` Class](../mfc/reference/cinternetsession-class.md) - Address incorrect placement of period -- [`CObArray` Class](../mfc/reference/cobarray-class.md) - - fix #4824 +- [`CObArray` Class](../mfc/reference/cobarray-class.md) - fix #4824 - [`CRecordset` class](../mfc/reference/crecordset-class.md) - Fix a few typos - [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Fix MFC example - Remove excess comma -- [`CStringArray` Class](../mfc/reference/cstringarray-class.md) - - fix #4824 +- [`CStringArray` Class](../mfc/reference/cstringarray-class.md) - fix #4824 - [`CWinAppEx` class](../mfc/reference/cwinappex-class.md) - Remove excess comma - [CMFCBaseTabCtrl Class](../mfc/reference/cmfcbasetabctrl-class.md) - Fix return typo - [COleControlSite Class](../mfc/reference/colecontrolsite-class.md) - Fix a few typos - [CPaneContainer Class](../mfc/reference/cpanecontainer-class.md) - Address incorrect placement of period - [MFC Classes](../mfc/reference/mfc-classes.md) - Fix a few typos -- [Setting the Dialog Box's Background Color](../mfc/setting-the-dialog-boxs-background-color.md) - - add code example for setting a dialog box's background color -- [Unicode and Multibyte Character Set (MBCS) Support](../atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md) - - Clarified MBCS support in unicode-and-multibyte-character-set-mbcs-support.md +- [Setting the Dialog Box's Background Color](../mfc/setting-the-dialog-boxs-background-color.md) - add code example for setting a dialog box's background color +- [Unicode and Multibyte Character Set (MBCS) Support](../atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md) - Clarified MBCS support in unicode-and-multibyte-character-set-mbcs-support.md -### C/C++ projects and build systems +## C/C++ projects and build systems -**New articles** +### New articles - [/ARM64XFUNCTIONPADMINX64 (Minimum x64 function padding)](../build/reference/arm64-function-pad-min-x64.md) - [/NOFUNCTIONPADSECTION (Disable function padding)](../build/reference/no-function-pad-section.md) @@ -67,44 +59,33 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Tutorial: Troubleshoot function inlining on build time](../build-insights/tutorials/build-insights-function-view.md) - [Tutorial: Troubleshoot header file impact on build time](../build-insights/tutorials/build-insights-included-files-view.md) -**Updated articles** +### Updated articles - [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no is not recommended for 64-bit apps -- [/Qspectre](../build/reference/qspectre.md) - - New /QSpectre flag -- [/Qspectre-load](../build/reference/qspectre-load.md) - - New /QSpectre flag -- [/Qspectre-load-cf](../build/reference/qspectre-load-cf.md) - - New /QSpectre flag +- [/Qspectre](../build/reference/qspectre.md) - New /QSpectre flag +- [/Qspectre-load](../build/reference/qspectre-load.md) - New /QSpectre flag +- [/Qspectre-load-cf](../build/reference/qspectre-load-cf.md) - New /QSpectre flag - [`/arch` (ARM64)](../build/reference/arch-arm64.md) - document __arm_arch macro - Add compiler option /feature and update the /arch (ARM64) option -- [`/Fo` (Object File Name)](../build/reference/fo-object-file-name.md) - - call out colon form for /fo -- [`/headerUnit` (Use header unit IFC)](../build/reference/headerunit.md) - - tech review -- [`/PDBPATH`](../build/reference/pdbpath.md) - - fix feedback item ADO:229433 +- [`/Fo` (Object File Name)](../build/reference/fo-object-file-name.md) - call out colon form for /fo +- [`/headerUnit` (Use header unit IFC)](../build/reference/headerunit.md) - tech review +- [`/PDBPATH`](../build/reference/pdbpath.md) - fix feedback item ADO:229433 - [`/sourceDependencies` (List all source-level dependencies)](../build/reference/sourcedependencies.md) - Correct JSON output of sourcedependencies.md - [`/std` (Specify Language Standard Version)](../build/reference/std-specify-language-standard-version.md) - clarify how macro value is set - Whatsnew - Enhance /std documentation with reference to /Zc:__cplusplus - [`/Zc:zeroSizeArrayNew` (Call member new/delete on arrays)](../build/reference/zc-zerosizearraynew.md) - Remove stray trailing escapes -- [Advanced Property Page](../build/reference/advanced-property-page.md) - - Add SARIF diagnostics documentation -- [Build and run a C++ console app project](../build/vscpp-step-2-build.md) - - draft -- [C++ Build Insights](../build-insights/index.yml) - - draft -- [Clang/LLVM support in Visual Studio projects](../build/clang-support-msbuild.md) - - draft +- [Advanced Property Page](../build/reference/advanced-property-page.md) - Add SARIF diagnostics documentation +- [Build and run a C++ console app project](../build/vscpp-step-2-build.md) - draft +- [C++ Build Insights](../build-insights/index.yml) - draft +- [Clang/LLVM support in Visual Studio projects](../build/clang-support-msbuild.md) - draft - [CMake projects in Visual Studio](../build/cmake-projects-in-visual-studio.md) - draft - Add links for "Just My Code" and "Edit and Continue". - [Commands in a makefile](../build/reference/commands-in-a-makefile.md) - Fix unclosed links -- [Common macros for MSBuild commands and properties](../build/reference/common-macros-for-build-commands-and-properties.md) - - fixes github #4890 - backslashes +- [Common macros for MSBuild commands and properties](../build/reference/common-macros-for-build-commands-and-properties.md) - fixes github #4890 - backslashes - [Compiler options listed alphabetically](../build/reference/compiler-options-listed-alphabetically.md) - Add compiler option /feature and update the /arch (ARM64) option - Whatsnew @@ -119,36 +100,31 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - fixes for customer feedback - new flag: /LINKREPROFULLPATHRSP - new linker switches for 17.8 -- [Linking](../build/reference/linking.md) - - new linker switches for 17.8 +- [Linking](../build/reference/linking.md) - new linker switches for 17.8 - [Makefile preprocessing](../build/reference/makefile-preprocessing.md) - Fix unclosed links - [NMAKE makefile contents and features](../build/reference/contents-of-a-makefile.md) - Fix unclosed links - [Overview of x64 ABI conventions](../build/x64-software-conventions.md) - Update x64-software-conventions.md -- [Set compiler and build properties](../build/working-with-project-properties.md) - - draft +- [Set compiler and build properties](../build/working-with-project-properties.md) - draft - [Special NMAKE macros](../build/reference/special-nmake-macros.md) - Fix unclosed links - [Use an NMAKE macro](../build/reference/using-an-nmake-macro.md) - Fix unclosed links -- [Walkthrough: Build and debug C++ with WSL 2 and Visual Studio 2022](../build/walkthrough-build-debug-wsl2.md) - - draft +- [Walkthrough: Build and debug C++ with WSL 2 and Visual Studio 2022](../build/walkthrough-build-debug-wsl2.md) - draft - [x64 calling convention](../build/x64-calling-convention.md) - Update x64-calling-convention.md -### C language +## C language -**New articles** +### New articles - [`typeof_unqual`, `__typeof_unqual__` (C23)](../c-language/typeof-unqual-c.md) - [`typeof`, `__typeof__` (C23)](../c-language/typeof-c.md) -**Updated articles** +### Updated articles -- [C Keywords](../c-language/c-keywords.md) - - Conformance -- [C Type Specifiers](../c-language/c-type-specifiers.md) - - Conformance +- [C Keywords](../c-language/c-keywords.md) - Conformance +- [C Type Specifiers](../c-language/c-type-specifiers.md) - Conformance -### Code quality +## Code quality -**New articles** +### New articles - [Warning C26459](../code-quality/c26459.md) - [Warning C26837](../code-quality/c26837.md) @@ -163,26 +139,21 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Warning C6397](../code-quality/c6397.md) - [Warning C6398](../code-quality/c6398.md) -**Updated articles** +### Updated articles - [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - fix github issue - code example wrong - Update clang-tidy.md - Update clang-tidy.md -- [Warning C6031](../code-quality/c6031.md) - - fix language tagging and some of the code samples -- [Warning C6059](../code-quality/c6059.md) - - C6059: Add heuristics -- [Warning C6201](../code-quality/c6201.md) - - Add heuristics for C6201 -- [Warning C6328](../code-quality/c6328.md) - - Improvements to some format specifier related warnings. -- [Warning C6340](../code-quality/c6340.md) - - Improvements to some format specifier related warnings. +- [Warning C6031](../code-quality/c6031.md) - fix language tagging and some of the code samples +- [Warning C6059](../code-quality/c6059.md) - C6059: Add heuristics +- [Warning C6201](../code-quality/c6201.md) - Add heuristics for C6201 +- [Warning C6328](../code-quality/c6328.md) - Improvements to some format specifier related warnings. +- [Warning C6340](../code-quality/c6340.md) - Improvements to some format specifier related warnings. -### C++ in Visual Studio +## C++ in Visual Studio -**Updated articles** +### Updated articles - [`break` statement (C++)](../cpp/break-statement-cpp.md) - Break statement documentation fix - [`Platform::Collections::VectorIterator` class](../cppcx/platform-collections-vectoriterator-class.md) - Remove excess comma @@ -192,43 +163,33 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Assignment operators](../cpp/assignment-operators.md) - Make built-in operators title consistent - Update assignment-operators.md -- [Attributes in C++](../cpp/attributes.md) - - Update attributes.md -- [C++ docs - get started, tutorials, reference.](../cpp/index.yml) - - address perf -- [Casting](../cpp/casting.md) - - fixes for customer feedback -- [char, wchar_t, char8_t, char16_t, char32_t](../cpp/char-wchar-t-char16-t-char32-t.md) - - address user feedback 252709 +- [Attributes in C++](../cpp/attributes.md) - Update attributes.md +- [C++ docs - get started, tutorials, reference.](../cpp/index.yml) - address perf +- [Casting](../cpp/casting.md) - fixes for customer feedback +- [char, wchar_t, char8_t, char16_t, char32_t](../cpp/char-wchar-t-char16-t-char32-t.md) - address user feedback 252709 - [Collections (C++/CX)](../cppcx/collections-c-cx.md) - Fix various typos - [Comma Operator: `,`](../cpp/comma-operator.md) - Make built-in operators title consistent -- [Data Type Ranges](../cpp/data-type-ranges.md) - - fixes for customer feedback +- [Data Type Ranges](../cpp/data-type-ranges.md) - fixes for customer feedback - [Destructors (C++)](../cpp/destructors-cpp.md) - Update destructors-cpp.md - Small nits for destructors cpp - [Equality operators: `==` and `!=`](../cpp/equality-operators-equal-equal-and-exclpt-equal.md) - Make built-in operators title consistent -- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - - fix github issue - code example wrong +- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fix github issue - code example wrong - [Explicit Type Conversion Operator: `()`](../cpp/explicit-type-conversion-operator-parens.md) - Make built-in operators title consistent -- [Explicitly Defaulted and Deleted Functions](../cpp/explicitly-defaulted-and-deleted-functions.md) - - New warning topic for C5267 +- [Explicitly Defaulted and Deleted Functions](../cpp/explicitly-defaulted-and-deleted-functions.md) - New warning topic for C5267 - [Function Call Operator: `()`](../cpp/function-call-operator-parens.md) - Make built-in operators title consistent -- [How to: Create and Use shared_ptr instances](../cpp/how-to-create-and-use-shared-ptr-instances.md) - - draft +- [How to: Create and Use shared_ptr instances](../cpp/how-to-create-and-use-shared-ptr-instances.md) - draft - [Indirection Operator: `*`](../cpp/indirection-operator-star.md) - Make built-in operators title consistent - [Inline functions (C++)](../cpp/inline-functions-cpp.md) - Address mistakes in inline functions cpp - Remove the content of the contrast between inline functions and macros - [Left shift and right shift operators: `<<` and `>>`](../cpp/left-shift-and-right-shift-operators-input-and-output.md) - Fix built-in operators toc yml - [Logical negation operator: `!`](../cpp/logical-negation-operator-exclpt.md) - Make built-in operators title consistent -- [Modern C++ best practices for exceptions and error handling](../cpp/errors-and-exception-handling-modern-cpp.md) - - fix UUF issues +- [Modern C++ best practices for exceptions and error handling](../cpp/errors-and-exception-handling-modern-cpp.md) - fix UUF issues - [Module Class](../cppcx/wrl/module-class.md) - Fix various typos - [Multiplicative Operators and the Modulus Operator](../cpp/multiplicative-operators-and-the-modulus-operator.md) - Make built-in operators title consistent - [Mutable Data Members (C++)](../cpp/mutable-data-members-cpp.md) - Tighten wording in mutable data members -- [Named modules tutorial (C++)](../cpp/tutorial-named-modules-cpp.md) - - line edits +- [Named modules tutorial (C++)](../cpp/tutorial-named-modules-cpp.md) - line edits - [Namespaces (C++)](../cpp/namespaces-cpp.md) - Add file hint in namespaces-cpp.md - [Nonstandard Behavior](../cpp/nonstandard-behavior.md) - Standardize C++ version naming - [One's complement operator: `~`](../cpp/one-s-complement-operator-tilde.md) - Make built-in operators title consistent @@ -238,17 +199,14 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Platform::Collections::UnorderedMap Class](../cppcx/platform-collections-unorderedmap-class.md) - Fix various typos - [Postfix Increment and Decrement Operators: `++` and `--`](../cpp/postfix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent - [Prefix Increment and Decrement Operators: `++` and `--`](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent -- [Primary Expressions](../cpp/primary-expressions.md) - - updates per #4816 +- [Primary Expressions](../cpp/primary-expressions.md) - updates per #4816 - [protected (C++)](../cpp/protected-cpp.md) - protected-cpp.md - grammar and consistency -- [References (C++)](../cpp/references-cpp.md) - - fix UUF issues +- [References (C++)](../cpp/references-cpp.md) - fix UUF issues - [Relational Operators: `<`, `>`, `<=`, and `>=`](../cpp/relational-operators-equal-and-equal.md) - Make built-in operators title consistent - [Subscript Operator: `[]`](../cpp/subscript-operator.md) - Make built-in operators title consistent - Fix built-in operators toc yml -- [The `this` pointer](../cpp/this-pointer.md) - - updates per #4816 +- [The `this` pointer](../cpp/this-pointer.md) - updates per #4816 - [Tutorial: Import the C++ standard library using modules from the command line](../cpp/tutorial-import-stl-named-module.md) - call out colon form for /fo - update /fo flag info @@ -256,21 +214,18 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - some line edits - [Unary Plus and Negation Operators: `+` and `-`](../cpp/unary-plus-and-negation-operators-plus-and.md) - Make built-in operators title consistent -### Cross platform development +## Cross platform development -**Updated articles** +### Updated articles -- [Cross-platform mobile development examples](../cross-platform/cross-platform-mobile-development-examples.md) - - Fix #5438 and product team issue -- [Install cross-platform mobile development with C++](../cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md) - - updates regarding Xamarin +- [Cross-platform mobile development examples](../cross-platform/cross-platform-mobile-development-examples.md) - Fix #5438 and product team issue +- [Install cross-platform mobile development with C++](../cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md) - updates regarding Xamarin -### C runtime library +## C runtime library -**Updated articles** +### Updated articles -- [`__RTDynamicCast`](../c-runtime-library/rtdynamiccast.md) - - Fixes #3195 - update required header file +- [`__RTDynamicCast`](../c-runtime-library/rtdynamiccast.md) - Fixes #3195 - update required header file - [`_CrtMemDumpStatistics`](../c-runtime-library/reference/crtmemdumpstatistics.md) - Remove stray trailing escapes - [`_CrtSetBreakAlloc`](../c-runtime-library/reference/crtsetbreakalloc.md) - Remove stray trailing escapes - [`_CrtSetReportFile`](../c-runtime-library/reference/crtsetreportfile.md) - Remove stray trailing escapes @@ -281,8 +236,7 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [`_fread_nolock_s`](../c-runtime-library/reference/fread-nolock-s2.md) - Tweak nolock function descriptions - [`_fread_nolock`](../c-runtime-library/reference/fread-nolock.md) - Tweak nolock function descriptions - [`_fseek_nolock`, `_fseeki64_nolock`](../c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md) - Tweak nolock function descriptions -- [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](../c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) - - Fixes #3706 +- [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](../c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) - Fixes #3706 - [`_ftell_nolock`, `_ftelli64_nolock`](../c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md) - Tweak nolock function descriptions - [`_fwrite_nolock`](../c-runtime-library/reference/fwrite-nolock.md) - Tweak nolock function descriptions - [`_getc_nolock`, `_getwc_nolock`](../c-runtime-library/reference/getc-nolock-getwc-nolock.md) - Tweak nolock function descriptions @@ -295,8 +249,7 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [`_putchar_nolock`, `_putwchar_nolock`](../c-runtime-library/reference/putchar-nolock-putwchar-nolock.md) - Tweak nolock function descriptions - [`_read`](../c-runtime-library/reference/read.md) - Remove stray trailing escapes - [`_set_se_translator`](../c-runtime-library/reference/set-se-translator.md) - Remove stray trailing escapes -- [`_splitpath`, `_wsplitpath`](../c-runtime-library/reference/splitpath-wsplitpath.md) - - fix github 4833 +- [`_splitpath`, `_wsplitpath`](../c-runtime-library/reference/splitpath-wsplitpath.md) - fix github 4833 - [`_ungetc_nolock`, `_ungetwc_nolock`](../c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md) - Tweak nolock function descriptions - [`_vscprintf_p`, `_vscprintf_p_l`, `_vscwprintf_p`, `_vscwprintf_p_l`](../c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md) - Remove stray trailing escapes - [`freopen`, `_wfreopen`](../c-runtime-library/reference/freopen-wfreopen.md) - Remove stray trailing escapes @@ -307,16 +260,14 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - Fixes #3706 - Remove stray trailing escapes - [`set_unexpected` (CRT)](../c-runtime-library/reference/set-unexpected-crt.md) - Remove stray trailing escapes -- [`setlocale`, `_wsetlocale`](../c-runtime-library/reference/setlocale-wsetlocale.md) - - fix github 4879 +- [`setlocale`, `_wsetlocale`](../c-runtime-library/reference/setlocale-wsetlocale.md) - fix github 4879 - [`strncat`, `_strncat_l`, `wcsncat`, `_wcsncat_l`, `_mbsncat`, `_mbsncat_l`](../c-runtime-library/reference/strncat-strncat-l-wcsncat-wcsncat-l-mbsncat-mbsncat-l.md) - Remove stray trailing escapes -- [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](../c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l.md) - - Fixes #3706 +- [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](../c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l.md) - Fixes #3706 - [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that _O_TEXT is ANSI. -### C/C++ compiler and tools errors and warnings +## C/C++ compiler and tools errors and warnings -**New articles** +### New articles - [Compiler Error C2323](../error-messages/compiler-errors-1/compiler-error-c2323.md) - [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) @@ -327,10 +278,9 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Microsoft C/C++ compiler warnings C5000 through C5199](../error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md) - [Microsoft C/C++ compiler warnings C5200 through C5399](../error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md) -**Updated articles** +### Updated articles -- [Compiler error C2055](../error-messages/compiler-errors-1/compiler-error-c2055.md) - - fixes for customer feedback +- [Compiler error C2055](../error-messages/compiler-errors-1/compiler-error-c2055.md) - fixes for customer feedback - [Compiler Error C2101](../error-messages/compiler-errors-1/compiler-error-c2101.md) - Update C2101 - [Compiler Error C2102](../error-messages/compiler-errors-1/compiler-error-c2102.md) - Add example for C2102 - [Compiler Error C2103](../error-messages/compiler-errors-1/compiler-error-c2103.md) - Add example for C2103 @@ -341,155 +291,93 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Compiler error C2548](../error-messages/compiler-errors-2/compiler-error-c2548.md) - Improve C2548 - [Compiler Error C2751](../error-messages/compiler-errors-2/compiler-error-c2751.md) - Improve C2751 - [Compiler Error C2860](../error-messages/compiler-errors-2/compiler-error-c2860.md) - Update C2860 -- [Compiler Error C3859](../error-messages/compiler-errors-2/compiler-error-c3859.md) - - Update compiler-error-c3859.md -- [Compiler errors C2001 - C3999, C7000 - C7999](../error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md) - - Error 2000 was never emitted. -- [Compiler errors C2001 through C2099](../error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md) - - Error 2000 was never emitted. +- [Compiler Error C3859](../error-messages/compiler-errors-2/compiler-error-c3859.md) - Update compiler-error-c3859.md +- [Compiler errors C2001 - C3999, C7000 - C7999](../error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md) - Error 2000 was never emitted. +- [Compiler errors C2001 through C2099](../error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md) - Error 2000 was never emitted. - [Compiler errors C2300 Through C2399](../error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md) - Document C2323 -- [Compiler errors C3300 Through C3399](../error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md) - - Update compiler-errors-c3300-through-c3399.md -- [Compiler errors C3500 through C3999](../error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md) - - Update compiler-error-c3859.md -- [Compiler Warning (level 1 and level 2) C4091](../error-messages/compiler-warnings/compiler-warning-level-1-c4091.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 3) C4133](../error-messages/compiler-warnings/compiler-warning-level-3-c4133.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 3) C4359](../error-messages/compiler-warnings/compiler-warning-level-3-c4359.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1 and level 4, off) C4355](../error-messages/compiler-warnings/compiler-warning-c4355.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1 and level 4) C4052](../error-messages/compiler-warnings/compiler-warning-level-1-c4052.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 4) C4112](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 4) C4223](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4002](../error-messages/compiler-warnings/compiler-warning-level-1-c4002.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1, Error) C4003](../error-messages/compiler-warnings/compiler-warning-level-1-c4003.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1, Error) C4141](../error-messages/compiler-warnings/compiler-warning-level-1-c4141.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1, Error) C4229](../error-messages/compiler-warnings/compiler-warning-level-1-c4229.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4233](../error-messages/compiler-warnings/compiler-warning-level-4-c4233.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4235](../error-messages/compiler-warnings/compiler-warning-level-4-c4235.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4368](../error-messages/compiler-warnings/compiler-warning-c4368.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4392](../error-messages/compiler-warnings/compiler-warning-level-1-c4392.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4394](../error-messages/compiler-warnings/compiler-warning-c4394.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4399](../error-messages/compiler-warnings/compiler-warning-level-1-c4399.md) - - Update compiler-warnings-c4200-through-c4399.md +- [Compiler errors C3300 Through C3399](../error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md) - Update compiler-errors-c3300-through-c3399.md +- [Compiler errors C3500 through C3999](../error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md) - Update compiler-error-c3859.md +- [Compiler Warning (level 1 and level 2) C4091](../error-messages/compiler-warnings/compiler-warning-level-1-c4091.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1 and level 3) C4133](../error-messages/compiler-warnings/compiler-warning-level-3-c4133.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1 and level 3) C4359](../error-messages/compiler-warnings/compiler-warning-level-3-c4359.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1 and level 4, off) C4355](../error-messages/compiler-warnings/compiler-warning-c4355.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1 and level 4) C4052](../error-messages/compiler-warnings/compiler-warning-level-1-c4052.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1 and level 4) C4112](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1 and level 4) C4223](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4002](../error-messages/compiler-warnings/compiler-warning-level-1-c4002.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1, Error) C4003](../error-messages/compiler-warnings/compiler-warning-level-1-c4003.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1, Error) C4141](../error-messages/compiler-warnings/compiler-warning-level-1-c4141.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 1, Error) C4229](../error-messages/compiler-warnings/compiler-warning-level-1-c4229.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4233](../error-messages/compiler-warnings/compiler-warning-level-4-c4233.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4235](../error-messages/compiler-warnings/compiler-warning-level-4-c4235.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4368](../error-messages/compiler-warnings/compiler-warning-c4368.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4392](../error-messages/compiler-warnings/compiler-warning-level-1-c4392.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4394](../error-messages/compiler-warnings/compiler-warning-c4394.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1, Error) C4399](../error-messages/compiler-warnings/compiler-warning-level-1-c4399.md) - Update compiler-warnings-c4200-through-c4399.md - [Compiler Warning (level 1) C4178](../error-messages/compiler-warnings/compiler-warning-level-1-c4178.md) - Rectify example in C4178 -- [Compiler Warning (level 1) C4305](../error-messages/compiler-warnings/compiler-warning-level-1-c4305.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4329](../error-messages/compiler-warnings/compiler-warning-level-1-c4329.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4335](../error-messages/compiler-warnings/compiler-warning-c4335.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4384](../error-messages/compiler-warnings/compiler-warning-level-1-c4384.md) - - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1) C4305](../error-messages/compiler-warnings/compiler-warning-level-1-c4305.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1) C4329](../error-messages/compiler-warnings/compiler-warning-level-1-c4329.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1) C4335](../error-messages/compiler-warnings/compiler-warning-c4335.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 1) C4384](../error-messages/compiler-warnings/compiler-warning-level-1-c4384.md) - Update compiler-warnings-c4200-through-c4399.md - [Compiler warning (level 1) C4834](../error-messages/compiler-warnings/c4834.md) - add new warning for VS 17.6 - C5266 - Standardize C++ version naming - [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) - add warning c5072 - Capitalize error code -- [Compiler Warning (level 2 and level 4) C4200](../error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 2) C4150](../error-messages/compiler-warnings/compiler-warning-level-2-c4150.md) - - Update compiler-warning-level-2-c4150.md +- [Compiler Warning (level 2 and level 4) C4200](../error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 2) C4150](../error-messages/compiler-warnings/compiler-warning-level-2-c4150.md) - Update compiler-warning-level-2-c4150.md - [Compiler Warning (level 2) C4251](../error-messages/compiler-warnings/compiler-warning-level-1-c4251.md) - Update compiler-warnings-c4200-through-c4399.md - improve C4251 -- [Compiler Warning (level 3 and level 4) C4101](../error-messages/compiler-warnings/compiler-warning-level-3-c4101.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3 and level 4) C4189](../error-messages/compiler-warnings/compiler-warning-level-4-c4189.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3 and level 4) C4278](../error-messages/compiler-warnings/compiler-warning-level-3-c4278.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3, off) C4165](../error-messages/compiler-warnings/compiler-warning-level-1-c4165.md) - - Update warning levels in compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3, off) C4191](../error-messages/compiler-warnings/compiler-warning-level-3-c4191.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3, off) C4242](../error-messages/compiler-warnings/compiler-warning-level-4-c4242.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3, off) C4265](../error-messages/compiler-warnings/compiler-warning-level-3-c4265.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3, off) C4287](../error-messages/compiler-warnings/compiler-warning-level-3-c4287.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3) C4007](../error-messages/compiler-warnings/compiler-warning-level-2-c4007.md) - - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 3 and level 4) C4101](../error-messages/compiler-warnings/compiler-warning-level-3-c4101.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 3 and level 4) C4189](../error-messages/compiler-warnings/compiler-warning-level-4-c4189.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 3 and level 4) C4278](../error-messages/compiler-warnings/compiler-warning-level-3-c4278.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 3, off) C4165](../error-messages/compiler-warnings/compiler-warning-level-1-c4165.md) - Update warning levels in compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 3, off) C4191](../error-messages/compiler-warnings/compiler-warning-level-3-c4191.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 3, off) C4242](../error-messages/compiler-warnings/compiler-warning-level-4-c4242.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 3, off) C4265](../error-messages/compiler-warnings/compiler-warning-level-3-c4265.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 3, off) C4287](../error-messages/compiler-warnings/compiler-warning-level-3-c4287.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 3) C4007](../error-messages/compiler-warnings/compiler-warning-level-2-c4007.md) - Update compiler-warnings-c4000-through-c4199.md - [Compiler Warning (level 3) C4066](../error-messages/compiler-warnings/compiler-warning-level-3-c4066.md) - Add example for C4066 -- [Compiler Warning (level 3) C4334](../error-messages/compiler-warnings/compiler-warning-level-3-c4334.md) - - Update compiler-warning-level-3-c4334.md -- [Compiler Warning (level 3) C4371](../error-messages/compiler-warnings/c4371.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, no longer emitted) C4001](../error-messages/compiler-warnings/compiler-warning-level-4-c4001.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 4, off) C4061](../error-messages/compiler-warnings/compiler-warning-level-4-c4061.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 4, off) C4062](../error-messages/compiler-warnings/compiler-warning-level-4-c4062.md) - - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 4, off) C4255](../error-messages/compiler-warnings/compiler-warning-level-4-c4255.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4263](../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4264](../error-messages/compiler-warnings/compiler-warning-level-1-c4264.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4266](../error-messages/compiler-warnings/compiler-warning-level-4-c4266.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4289](../error-messages/compiler-warnings/compiler-warning-level-4-c4289.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4296](../error-messages/compiler-warnings/compiler-warning-level-4-c4296.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4339](../error-messages/compiler-warnings/compiler-warning-level-4-c4339.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4365](../error-messages/compiler-warnings/compiler-warning-level-4-c4365.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4388](../error-messages/compiler-warnings/c4388.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4019](../error-messages/compiler-warnings/compiler-warning-level-4-c4019.md) - - clarify that only applies to C -- [Compiler Warning (level 4) C4218](../error-messages/compiler-warnings/compiler-warning-level-1-c4218.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4254](../error-messages/compiler-warnings/compiler-warning-level-4-c4254.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4306](../error-messages/compiler-warnings/compiler-warning-level-3-c4306.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4310](../error-messages/compiler-warnings/compiler-warning-level-3-c4310.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4324](../error-messages/compiler-warnings/compiler-warning-level-4-c4324.md) - - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4373](../error-messages/compiler-warnings/compiler-warning-level-3-c4373.md) - - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 3) C4334](../error-messages/compiler-warnings/compiler-warning-level-3-c4334.md) - Update compiler-warning-level-3-c4334.md +- [Compiler Warning (level 3) C4371](../error-messages/compiler-warnings/c4371.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, no longer emitted) C4001](../error-messages/compiler-warnings/compiler-warning-level-4-c4001.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 4, off) C4061](../error-messages/compiler-warnings/compiler-warning-level-4-c4061.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 4, off) C4062](../error-messages/compiler-warnings/compiler-warning-level-4-c4062.md) - Update compiler-warnings-c4000-through-c4199.md +- [Compiler Warning (level 4, off) C4255](../error-messages/compiler-warnings/compiler-warning-level-4-c4255.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4263](../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4264](../error-messages/compiler-warnings/compiler-warning-level-1-c4264.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4266](../error-messages/compiler-warnings/compiler-warning-level-4-c4266.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4289](../error-messages/compiler-warnings/compiler-warning-level-4-c4289.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4296](../error-messages/compiler-warnings/compiler-warning-level-4-c4296.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4339](../error-messages/compiler-warnings/compiler-warning-level-4-c4339.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4365](../error-messages/compiler-warnings/compiler-warning-level-4-c4365.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4, off) C4388](../error-messages/compiler-warnings/c4388.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4) C4019](../error-messages/compiler-warnings/compiler-warning-level-4-c4019.md) - clarify that only applies to C +- [Compiler Warning (level 4) C4218](../error-messages/compiler-warnings/compiler-warning-level-1-c4218.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4) C4254](../error-messages/compiler-warnings/compiler-warning-level-4-c4254.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4) C4306](../error-messages/compiler-warnings/compiler-warning-level-3-c4306.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4) C4310](../error-messages/compiler-warnings/compiler-warning-level-3-c4310.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4) C4324](../error-messages/compiler-warnings/compiler-warning-level-4-c4324.md) - Update compiler-warnings-c4200-through-c4399.md +- [Compiler Warning (level 4) C4373](../error-messages/compiler-warnings/compiler-warning-level-3-c4373.md) - Update compiler-warnings-c4200-through-c4399.md - [Compiler Warning (level 4) C4389](../error-messages/compiler-warnings/compiler-warning-level-4-c4389.md) - Capitalize error code - [Compiler warning (level 4) C5267](../error-messages/compiler-warnings/c5267.md) - add warning level info - New warning topic for C5267 -- [Compiler Warning (levels 3 and 4) C4244](../error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244.md) - - New warning topic for C5267 -- [Compiler Warning C5243](../error-messages/compiler-warnings/c5243.md) - - Update c5243.md +- [Compiler Warning (levels 3 and 4) C4244](../error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244.md) - New warning topic for C5267 +- [Compiler Warning C5243](../error-messages/compiler-warnings/c5243.md) - Update c5243.md - [Compiler Warnings by compiler version](../error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md) - Update compiler-warnings-by-compiler-version.md - add new warning for VS 17.6 - C5266 - New warning topic for C5267 - Add links to compiler warnings by compiler version -- [Linker tools errors and warnings (LNKxxxx)](../error-messages/tool-errors/linker-tools-errors-and-warnings.md) - - new linker warnings: 4306 & 4307 +- [Linker tools errors and warnings (LNKxxxx)](../error-messages/tool-errors/linker-tools-errors-and-warnings.md) - new linker warnings: 4306 & 4307 - [Microsoft C/C++ compiler warnings C4000 through C4199](../error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md) - Split warnings - pull in work RageKing8 did - Update compiler-warnings-c4000-through-c4199.md - Update warning levels in compiler-warnings-c4000-through-c4199.md -- [Microsoft C/C++ compiler warnings C4000 through C5399](../error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md) - - Split warnings - pull in work RageKing8 did +- [Microsoft C/C++ compiler warnings C4000 through C5399](../error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md) - Split warnings - pull in work RageKing8 did - [Microsoft C/C++ compiler warnings C4200 through C4399](../error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md) - Split warnings - pull in work RageKing8 did - Update compiler-warnings-c4200-through-c4399.md @@ -510,52 +398,48 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - New warning topic for C5267 - Add some warning entries -### C++ in Visual Studio tutorials +## C++ in Visual Studio tutorials -**Updated articles** +### Updated articles - [Create a console calculator in C++](../get-started/tutorial-console-cpp.md) - update - draft -### Read and write code using C++ in Visual Studio +## Read and write code using C++ in Visual Studio -**New articles** +### New articles - [C++ Include Diagnostics in Visual Studio](../ide/include-diagnostics.md) - [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) -**Updated articles** +### Updated articles - [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) - add keyboard accelerators - new topic for C++ macro tools -- [Walkthrough: Deploying Your Program (C++)](../ide/walkthrough-deploying-your-program-cpp.md) - - update steps +- [Walkthrough: Deploying Your Program (C++)](../ide/walkthrough-deploying-your-program-cpp.md) - update steps -### Linux with C++ in Visual Studio +## Linux with C++ in Visual Studio -**Updated articles** +### Updated articles - [Connect to your target Linux system in Visual Studio](../linux/connect-to-your-remote-linux-computer.md) - Update connect-to-your-remote-linux-computer.md - draft - Update connect-to-your-remote-linux-computer.md -### C/C++ in Visual Studio overview +## C/C++ in Visual Studio overview -**New articles** +### New articles - [Microsoft Visual C++ compiler versioning](../overview/compiler-versions.md) -**Updated articles** +### Updated articles -- [C and C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) - - fix f1 lookup -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017](../overview/cpp-conformance-improvements-2017.md) - - fix f1 lookup -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019](../overview/cpp-conformance-improvements-2019.md) - - fix f1 lookup +- [C and C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) - fix f1 lookup +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017](../overview/cpp-conformance-improvements-2017.md) - fix f1 lookup +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019](../overview/cpp-conformance-improvements-2019.md) - fix f1 lookup - [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - updates for 17.10 - Conformance for 17.10 @@ -564,22 +448,15 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - fix f1 lookup - add link that wasn't ready until release - Whatsnew -- [How to report a problem with the Microsoft C++ toolset or documentation](../overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) - - fix f1 lookup -- [Microsoft C/C++ help and community](../overview/visual-cpp-help-and-community.md) - - fix f1 lookup -- [Microsoft C/C++ language conformance by Visual Studio version](../overview/visual-cpp-language-conformance.md) - - fix f1 lookup -- [Overview of C++ development in Visual Studio](../overview/overview-of-cpp-development.md) - - address perf -- [Supported platforms (Visual C++)](../overview/supported-platforms-visual-cpp.md) - - fix f1 lookup -- [Visual Studio C++ Samples](../overview/visual-cpp-samples.md) - - fix f1 lookup -- [What's new for C++ in Visual Studio 2017](../overview/what-s-new-for-cpp-2017.md) - - fix f1 lookup -- [What's new for C++ in Visual Studio 2019](../overview/what-s-new-for-cpp-2019.md) - - fix f1 lookup +- [How to report a problem with the Microsoft C++ toolset or documentation](../overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) - fix f1 lookup +- [Microsoft C/C++ help and community](../overview/visual-cpp-help-and-community.md) - fix f1 lookup +- [Microsoft C/C++ language conformance by Visual Studio version](../overview/visual-cpp-language-conformance.md) - fix f1 lookup +- [Microsoft C++ docs: What's new for August 2023 to November 2023](../overview/whats-new-cpp-docs.md) - Whatsnew +- [Overview of C++ development in Visual Studio](../overview/overview-of-cpp-development.md) - address perf +- [Supported platforms (Visual C++)](../overview/supported-platforms-visual-cpp.md) - fix f1 lookup +- [Visual Studio C++ Samples](../overview/visual-cpp-samples.md) - fix f1 lookup +- [What's new for C++ in Visual Studio 2017](../overview/what-s-new-for-cpp-2017.md) - fix f1 lookup +- [What's new for C++ in Visual Studio 2019](../overview/what-s-new-for-cpp-2019.md) - fix f1 lookup - [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - updates for 17.10 - fix #4553 - adds release note links @@ -592,22 +469,21 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - Whatsnew - Resolve syncing conflicts from FromPrivateLiveToMaster to main -### Parallel programming in C++ in Visual Studio +## Parallel programming in C++ in Visual Studio -**Updated articles** +### Updated articles - [tile_barrier Class](../parallel/amp/reference/tile-barrier-class.md) - Fix unclosed links -### C++ porting and upgrade guide +## C++ porting and upgrade guide -**Updated articles** +### Updated articles -- [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - - fixes #5290 - clarify linking binaries built with different versions of the toolset +- [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - fixes #5290 - clarify linking binaries built with different versions of the toolset -### C/C++ preprocessor reference +## C/C++ preprocessor reference -**Updated articles** +### Updated articles - [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - add new warning for VS 17.6 - C5266 @@ -617,9 +493,9 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - document __arm_arch macro - add compiler versions article -### C++ Standard Template Library (STL) reference +## C++ Standard Template Library (STL) reference -**Updated articles** +### Updated articles - [`` operators](../standard-library/bitset-operators.md) - Fix stream typos - [`` operators](../standard-library/chrono-operators.md) @@ -632,15 +508,13 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [`bitset` class](../standard-library/bitset-class.md) - Fix various typos - [`deque` Class](../standard-library/deque-class.md) - Address incorrect placement of period - [`elements_view` class (C++ Standard Library)](../standard-library/elements-view-class.md) - Standardize C++ version naming -- [`file_clock` class](../standard-library/file-clock-class.md) - - fix user feedback 227131 +- [`file_clock` class](../standard-library/file-clock-class.md) - fix user feedback 227131 - [`is_clock` structure](../standard-library/is-clock-struct.md) - Standardize C++ version naming - [`keys_view` class (C++ Standard Library)](../standard-library/keys-view-class.md) - Standardize C++ version naming - [`month_day_last` class](../standard-library/month-day-last-class.md) - Standardize C++ version naming - [`month_weekday_last` class](../standard-library/month-weekday-last-class.md) - Standardize C++ version naming - [`month_weekday` class](../standard-library/month-weekday-class.md) - Standardize C++ version naming -- [`mutex` class (C++ Standard Library)](../standard-library/mutex-class-stl.md) - - fixes for customer feedback +- [`mutex` class (C++ Standard Library)](../standard-library/mutex-class-stl.md) - fixes for customer feedback - [`sys_info` struct](../standard-library/sys-info-struct.md) - Address incorrect placement of period - [`valarray` class](../standard-library/valarray-class.md) - Fix various typos - [`values_view` class (C++ Standard Library)](../standard-library/values-view-class.md) - Standardize C++ version naming @@ -656,24 +530,20 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [scoped_allocator_adaptor Class](../standard-library/scoped-allocator-adaptor-class.md) - Fix unclosed links - [type_index Class](../standard-library/type-index-class.md) - Address incorrect placement of period -### Overview of Windows programming in C++ +## Overview of Windows programming in C++ -**Updated articles** +### Updated articles -- [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - - fix github issue - code example wrong +- [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - fix github issue - code example wrong - [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported - Fix #5438 and product team issue - fix #4553 - adds release note links - Update latest-supported-vc-redist.md - Resolve syncing conflicts from FromPrivateLiveToMaster to main -- [Walkthrough: Create a Standard C++ Program (C++)](../windows/walkthrough-creating-a-standard-cpp-program-cpp.md) - - address perf -- [Windows C++ desktop application types](../windows/overview-of-windows-programming-in-cpp.md) - - address perf -- [Working with Resource Files](../windows/working-with-resource-files.md) - - address perf +- [Walkthrough: Create a Standard C++ Program (C++)](../windows/walkthrough-creating-a-standard-cpp-program-cpp.md) - address perf +- [Windows C++ desktop application types](../windows/overview-of-windows-programming-in-cpp.md) - address perf +- [Working with Resource Files](../windows/working-with-resource-files.md) - address perf ## What's new history From 75de6d318a6cc42d37012211c9cd6f77f6309a3e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 26 Jun 2024 15:34:28 -0700 Subject: [PATCH 0286/1239] cleanup pass --- docs/overview/whats-new-cpp-docs.md | 398 ++-------------------------- 1 file changed, 19 insertions(+), 379 deletions(-) diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index f7291e135a..30ad0de055 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -18,29 +18,12 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles -- [__rdtscp](../intrinsics/rdtscp.md) - Nits for rdtsc and rdtscp -- [ARM intrinsics](../intrinsics/arm-intrinsics.md) - Add entries to table for regular ARM intrinsics to arm-intrinsics.md -- [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - - Add entries to table for new arm64 intrinsics to arm64-intrinsics.md - - Update arm64-intrinsics.md to include intrin.h mention +- [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - Added entries to table for new arm64 intrinsics ## Active Template Library (ATL), Microsoft Foundation Classes (MFC) ### Updated articles -- [`CD2DBrush` Class](../mfc/reference/cd2dbrush-class.md) - Fix references to brush -- [`CInternetSession` Class](../mfc/reference/cinternetsession-class.md) - Address incorrect placement of period -- [`CObArray` Class](../mfc/reference/cobarray-class.md) - fix #4824 -- [`CRecordset` class](../mfc/reference/crecordset-class.md) - Fix a few typos -- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - - Fix MFC example - - Remove excess comma -- [`CStringArray` Class](../mfc/reference/cstringarray-class.md) - fix #4824 -- [`CWinAppEx` class](../mfc/reference/cwinappex-class.md) - Remove excess comma -- [CMFCBaseTabCtrl Class](../mfc/reference/cmfcbasetabctrl-class.md) - Fix return typo -- [COleControlSite Class](../mfc/reference/colecontrolsite-class.md) - Fix a few typos -- [CPaneContainer Class](../mfc/reference/cpanecontainer-class.md) - Address incorrect placement of period -- [MFC Classes](../mfc/reference/mfc-classes.md) - Fix a few typos - [Setting the Dialog Box's Background Color](../mfc/setting-the-dialog-boxs-background-color.md) - add code example for setting a dialog box's background color - [Unicode and Multibyte Character Set (MBCS) Support](../atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md) - Clarified MBCS support in unicode-and-multibyte-character-set-mbcs-support.md @@ -61,54 +44,14 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles -- [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no is not recommended for 64-bit apps +- [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no isn't recommended for 64-bit apps - [/Qspectre](../build/reference/qspectre.md) - New /QSpectre flag -- [/Qspectre-load](../build/reference/qspectre-load.md) - New /QSpectre flag -- [/Qspectre-load-cf](../build/reference/qspectre-load-cf.md) - New /QSpectre flag -- [`/arch` (ARM64)](../build/reference/arch-arm64.md) - - document __arm_arch macro - - Add compiler option /feature and update the /arch (ARM64) option -- [`/Fo` (Object File Name)](../build/reference/fo-object-file-name.md) - call out colon form for /fo -- [`/headerUnit` (Use header unit IFC)](../build/reference/headerunit.md) - tech review -- [`/PDBPATH`](../build/reference/pdbpath.md) - fix feedback item ADO:229433 -- [`/sourceDependencies` (List all source-level dependencies)](../build/reference/sourcedependencies.md) - Correct JSON output of sourcedependencies.md -- [`/std` (Specify Language Standard Version)](../build/reference/std-specify-language-standard-version.md) - - clarify how macro value is set - - Whatsnew - - Enhance /std documentation with reference to /Zc:__cplusplus -- [`/Zc:zeroSizeArrayNew` (Call member new/delete on arrays)](../build/reference/zc-zerosizearraynew.md) - Remove stray trailing escapes +- [`/arch` (ARM64)](../build/reference/arch-arm64.md) - document __arm_arch macro - [Advanced Property Page](../build/reference/advanced-property-page.md) - Add SARIF diagnostics documentation -- [Build and run a C++ console app project](../build/vscpp-step-2-build.md) - draft -- [C++ Build Insights](../build-insights/index.yml) - draft -- [Clang/LLVM support in Visual Studio projects](../build/clang-support-msbuild.md) - draft -- [CMake projects in Visual Studio](../build/cmake-projects-in-visual-studio.md) - - draft - - Add links for "Just My Code" and "Edit and Continue". -- [Commands in a makefile](../build/reference/commands-in-a-makefile.md) - Fix unclosed links -- [Common macros for MSBuild commands and properties](../build/reference/common-macros-for-build-commands-and-properties.md) - fixes github #4890 - backslashes -- [Compiler options listed alphabetically](../build/reference/compiler-options-listed-alphabetically.md) - - Add compiler option /feature and update the /arch (ARM64) option - - Whatsnew -- [Compiler options listed by category](../build/reference/compiler-options-listed-by-category.md) - - Add compiler option /feature and update the /arch (ARM64) option - - Whatsnew -- [Creating an .Sbr File](../build/reference/creating-an-dot-sbr-file.md) - Address incorrect placement of period -- [Define an NMAKE macro](../build/reference/defining-an-nmake-macro.md) - Fix unclosed links -- [Inference rules](../build/reference/inference-rules.md) - Fix unclosed links -- [Inline files in a makefile](../build/reference/inline-files-in-a-makefile.md) - Fix unclosed links - [Linker options](../build/reference/linker-options.md) - - fixes for customer feedback - new flag: /LINKREPROFULLPATHRSP - new linker switches for 17.8 - [Linking](../build/reference/linking.md) - new linker switches for 17.8 -- [Makefile preprocessing](../build/reference/makefile-preprocessing.md) - Fix unclosed links -- [NMAKE makefile contents and features](../build/reference/contents-of-a-makefile.md) - Fix unclosed links -- [Overview of x64 ABI conventions](../build/x64-software-conventions.md) - Update x64-software-conventions.md -- [Set compiler and build properties](../build/working-with-project-properties.md) - draft -- [Special NMAKE macros](../build/reference/special-nmake-macros.md) - Fix unclosed links -- [Use an NMAKE macro](../build/reference/using-an-nmake-macro.md) - Fix unclosed links -- [Walkthrough: Build and debug C++ with WSL 2 and Visual Studio 2022](../build/walkthrough-build-debug-wsl2.md) - draft -- [x64 calling convention](../build/x64-calling-convention.md) - Update x64-calling-convention.md ## C language @@ -141,128 +84,29 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles -- [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - - fix github issue - code example wrong - - Update clang-tidy.md - - Update clang-tidy.md -- [Warning C6031](../code-quality/c6031.md) - fix language tagging and some of the code samples -- [Warning C6059](../code-quality/c6059.md) - C6059: Add heuristics -- [Warning C6201](../code-quality/c6201.md) - Add heuristics for C6201 -- [Warning C6328](../code-quality/c6328.md) - Improvements to some format specifier related warnings. -- [Warning C6340](../code-quality/c6340.md) - Improvements to some format specifier related warnings. +- [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - fix code example +- [Warning C6031](../code-quality/c6031.md) - fix some code examples +- [Warning C6059](../code-quality/c6059.md) - Add heuristics +- [Warning C6201](../code-quality/c6201.md) - Add heuristics ## C++ in Visual Studio ### Updated articles - [`break` statement (C++)](../cpp/break-statement-cpp.md) - Break statement documentation fix -- [`Platform::Collections::VectorIterator` class](../cppcx/platform-collections-vectoriterator-class.md) - Remove excess comma -- [`sizeof` Operator](../cpp/sizeof-operator.md) - Make built-in operators title consistent -- [`typeid` Operator](../cpp/typeid-operator.md) - Make built-in operators title consistent -- [Additive Operators: `+` and `-`](../cpp/additive-operators-plus-and.md) - Make built-in operators title consistent -- [Assignment operators](../cpp/assignment-operators.md) - - Make built-in operators title consistent - - Update assignment-operators.md -- [Attributes in C++](../cpp/attributes.md) - Update attributes.md -- [C++ docs - get started, tutorials, reference.](../cpp/index.yml) - address perf -- [Casting](../cpp/casting.md) - fixes for customer feedback -- [char, wchar_t, char8_t, char16_t, char32_t](../cpp/char-wchar-t-char16-t-char32-t.md) - address user feedback 252709 -- [Collections (C++/CX)](../cppcx/collections-c-cx.md) - Fix various typos -- [Comma Operator: `,`](../cpp/comma-operator.md) - Make built-in operators title consistent -- [Data Type Ranges](../cpp/data-type-ranges.md) - fixes for customer feedback -- [Destructors (C++)](../cpp/destructors-cpp.md) - - Update destructors-cpp.md - - Small nits for destructors cpp -- [Equality operators: `==` and `!=`](../cpp/equality-operators-equal-equal-and-exclpt-equal.md) - Make built-in operators title consistent -- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fix github issue - code example wrong -- [Explicit Type Conversion Operator: `()`](../cpp/explicit-type-conversion-operator-parens.md) - Make built-in operators title consistent -- [Explicitly Defaulted and Deleted Functions](../cpp/explicitly-defaulted-and-deleted-functions.md) - New warning topic for C5267 -- [Function Call Operator: `()`](../cpp/function-call-operator-parens.md) - Make built-in operators title consistent -- [How to: Create and Use shared_ptr instances](../cpp/how-to-create-and-use-shared-ptr-instances.md) - draft -- [Indirection Operator: `*`](../cpp/indirection-operator-star.md) - Make built-in operators title consistent -- [Inline functions (C++)](../cpp/inline-functions-cpp.md) - - Address mistakes in inline functions cpp - - Remove the content of the contrast between inline functions and macros -- [Left shift and right shift operators: `<<` and `>>`](../cpp/left-shift-and-right-shift-operators-input-and-output.md) - Fix built-in operators toc yml -- [Logical negation operator: `!`](../cpp/logical-negation-operator-exclpt.md) - Make built-in operators title consistent -- [Modern C++ best practices for exceptions and error handling](../cpp/errors-and-exception-handling-modern-cpp.md) - fix UUF issues -- [Module Class](../cppcx/wrl/module-class.md) - Fix various typos -- [Multiplicative Operators and the Modulus Operator](../cpp/multiplicative-operators-and-the-modulus-operator.md) - Make built-in operators title consistent -- [Mutable Data Members (C++)](../cpp/mutable-data-members-cpp.md) - Tighten wording in mutable data members -- [Named modules tutorial (C++)](../cpp/tutorial-named-modules-cpp.md) - line edits -- [Namespaces (C++)](../cpp/namespaces-cpp.md) - Add file hint in namespaces-cpp.md -- [Nonstandard Behavior](../cpp/nonstandard-behavior.md) - Standardize C++ version naming -- [One's complement operator: `~`](../cpp/one-s-complement-operator-tilde.md) - Make built-in operators title consistent -- [Overview of modules in C++](../cpp/modules-cpp.md) - - line edits - - some line edits -- [Platform::Collections::UnorderedMap Class](../cppcx/platform-collections-unorderedmap-class.md) - Fix various typos -- [Postfix Increment and Decrement Operators: `++` and `--`](../cpp/postfix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent -- [Prefix Increment and Decrement Operators: `++` and `--`](../cpp/prefix-increment-and-decrement-operators-increment-and-decrement.md) - Make built-in operators title consistent -- [Primary Expressions](../cpp/primary-expressions.md) - updates per #4816 -- [protected (C++)](../cpp/protected-cpp.md) - protected-cpp.md - grammar and consistency -- [References (C++)](../cpp/references-cpp.md) - fix UUF issues -- [Relational Operators: `<`, `>`, `<=`, and `>=`](../cpp/relational-operators-equal-and-equal.md) - Make built-in operators title consistent -- [Subscript Operator: `[]`](../cpp/subscript-operator.md) - - Make built-in operators title consistent - - Fix built-in operators toc yml -- [The `this` pointer](../cpp/this-pointer.md) - updates per #4816 -- [Tutorial: Import the C++ standard library using modules from the command line](../cpp/tutorial-import-stl-named-module.md) - - call out colon form for /fo - - update /fo flag info - - explain switch options - - some line edits -- [Unary Plus and Negation Operators: `+` and `-`](../cpp/unary-plus-and-negation-operators-plus-and.md) - Make built-in operators title consistent +- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fix code example +- [Inline functions (C++)](../cpp/inline-functions-cpp.md) - Address mistakes in inline functions cpp and remove content contrasting inline functions and macros ## Cross platform development ### Updated articles -- [Cross-platform mobile development examples](../cross-platform/cross-platform-mobile-development-examples.md) - Fix #5438 and product team issue - [Install cross-platform mobile development with C++](../cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md) - updates regarding Xamarin ## C runtime library ### Updated articles -- [`__RTDynamicCast`](../c-runtime-library/rtdynamiccast.md) - Fixes #3195 - update required header file -- [`_CrtMemDumpStatistics`](../c-runtime-library/reference/crtmemdumpstatistics.md) - Remove stray trailing escapes -- [`_CrtSetBreakAlloc`](../c-runtime-library/reference/crtsetbreakalloc.md) - Remove stray trailing escapes -- [`_CrtSetReportFile`](../c-runtime-library/reference/crtsetreportfile.md) - Remove stray trailing escapes -- [`_fclose_nolock`](../c-runtime-library/reference/fclose-nolock.md) - Tweak nolock function descriptions -- [`_fflush_nolock`](../c-runtime-library/reference/fflush-nolock.md) - Tweak nolock function descriptions -- [`_fgetc_nolock`, `_fgetwc_nolock`](../c-runtime-library/reference/fgetc-nolock-fgetwc-nolock.md) - Tweak nolock function descriptions -- [`_fputc_nolock`, `_fputwc_nolock`](../c-runtime-library/reference/fputc-nolock-fputwc-nolock.md) - Tweak nolock function descriptions -- [`_fread_nolock_s`](../c-runtime-library/reference/fread-nolock-s2.md) - Tweak nolock function descriptions -- [`_fread_nolock`](../c-runtime-library/reference/fread-nolock.md) - Tweak nolock function descriptions -- [`_fseek_nolock`, `_fseeki64_nolock`](../c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md) - Tweak nolock function descriptions -- [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](../c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) - Fixes #3706 -- [`_ftell_nolock`, `_ftelli64_nolock`](../c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md) - Tweak nolock function descriptions -- [`_fwrite_nolock`](../c-runtime-library/reference/fwrite-nolock.md) - Tweak nolock function descriptions -- [`_getc_nolock`, `_getwc_nolock`](../c-runtime-library/reference/getc-nolock-getwc-nolock.md) - Tweak nolock function descriptions -- [`_getch_nolock`, `_getwch_nolock`](../c-runtime-library/reference/getch-nolock-getwch-nolock.md) - Tweak nolock function descriptions -- [`_getchar_nolock`, `_getwchar_nolock`](../c-runtime-library/reference/getchar-nolock-getwchar-nolock.md) - Tweak nolock function descriptions -- [`_getche_nolock`, `_getwche_nolock`](../c-runtime-library/reference/getche-nolock-getwche-nolock.md) - Tweak nolock function descriptions -- [`_nolock` functions](../c-runtime-library/nolock-functions.md) - Tabulate nolock functions -- [`_putc_nolock`, `_putwc_nolock`](../c-runtime-library/reference/putc-nolock-putwc-nolock.md) - Tweak nolock function descriptions -- [`_putch_nolock`, `_putwch_nolock`](../c-runtime-library/reference/putch-nolock-putwch-nolock.md) - Tweak nolock function descriptions -- [`_putchar_nolock`, `_putwchar_nolock`](../c-runtime-library/reference/putchar-nolock-putwchar-nolock.md) - Tweak nolock function descriptions -- [`_read`](../c-runtime-library/reference/read.md) - Remove stray trailing escapes -- [`_set_se_translator`](../c-runtime-library/reference/set-se-translator.md) - Remove stray trailing escapes -- [`_splitpath`, `_wsplitpath`](../c-runtime-library/reference/splitpath-wsplitpath.md) - fix github 4833 -- [`_ungetc_nolock`, `_ungetwc_nolock`](../c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md) - Tweak nolock function descriptions -- [`_vscprintf_p`, `_vscprintf_p_l`, `_vscwprintf_p`, `_vscwprintf_p_l`](../c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md) - Remove stray trailing escapes -- [`freopen`, `_wfreopen`](../c-runtime-library/reference/freopen-wfreopen.md) - Remove stray trailing escapes -- [`memcpy`, `wmemcpy`](../c-runtime-library/reference/memcpy-wmemcpy.md) - - Fixes #3706 - - Remove stray trailing escapes -- [`memmove`, `wmemmove`](../c-runtime-library/reference/memmove-wmemmove.md) - - Fixes #3706 - - Remove stray trailing escapes -- [`set_unexpected` (CRT)](../c-runtime-library/reference/set-unexpected-crt.md) - Remove stray trailing escapes -- [`setlocale`, `_wsetlocale`](../c-runtime-library/reference/setlocale-wsetlocale.md) - fix github 4879 -- [`strncat`, `_strncat_l`, `wcsncat`, `_wcsncat_l`, `_mbsncat`, `_mbsncat_l`](../c-runtime-library/reference/strncat-strncat-l-wcsncat-wcsncat-l-mbsncat-mbsncat-l.md) - Remove stray trailing escapes -- [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](../c-runtime-library/reference/toupper-toupper-towupper-toupper-l-towupper-l.md) - Fixes #3706 - [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that _O_TEXT is ANSI. ## C/C++ compiler and tools errors and warnings @@ -280,131 +124,14 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles -- [Compiler error C2055](../error-messages/compiler-errors-1/compiler-error-c2055.md) - fixes for customer feedback -- [Compiler Error C2101](../error-messages/compiler-errors-1/compiler-error-c2101.md) - Update C2101 -- [Compiler Error C2102](../error-messages/compiler-errors-1/compiler-error-c2102.md) - Add example for C2102 -- [Compiler Error C2103](../error-messages/compiler-errors-1/compiler-error-c2103.md) - Add example for C2103 -- [Compiler Error C2385](../error-messages/compiler-errors-1/compiler-error-c2385.md) - Revamp C2385 -- [Compiler Error C2487](../error-messages/compiler-errors-1/compiler-error-c2487.md) - Add example for C2487 -- [Compiler Error C2526](../error-messages/compiler-errors-2/compiler-error-c2526.md) - Add example for C2526 -- [Compiler Error C2537](../error-messages/compiler-errors-2/compiler-error-c2537.md) - Update C2537 -- [Compiler error C2548](../error-messages/compiler-errors-2/compiler-error-c2548.md) - Improve C2548 -- [Compiler Error C2751](../error-messages/compiler-errors-2/compiler-error-c2751.md) - Improve C2751 -- [Compiler Error C2860](../error-messages/compiler-errors-2/compiler-error-c2860.md) - Update C2860 -- [Compiler Error C3859](../error-messages/compiler-errors-2/compiler-error-c3859.md) - Update compiler-error-c3859.md -- [Compiler errors C2001 - C3999, C7000 - C7999](../error-messages/compiler-errors-1/compiler-errors-c2000-c3999.md) - Error 2000 was never emitted. -- [Compiler errors C2001 through C2099](../error-messages/compiler-errors-1/compiler-errors-c2001-through-c2099.md) - Error 2000 was never emitted. -- [Compiler errors C2300 Through C2399](../error-messages/compiler-errors-1/compiler-errors-c2300-through-c2399.md) - Document C2323 -- [Compiler errors C3300 Through C3399](../error-messages/compiler-errors-2/compiler-errors-c3300-through-c3399.md) - Update compiler-errors-c3300-through-c3399.md -- [Compiler errors C3500 through C3999](../error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md) - Update compiler-error-c3859.md -- [Compiler Warning (level 1 and level 2) C4091](../error-messages/compiler-warnings/compiler-warning-level-1-c4091.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 3) C4133](../error-messages/compiler-warnings/compiler-warning-level-3-c4133.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 3) C4359](../error-messages/compiler-warnings/compiler-warning-level-3-c4359.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1 and level 4, off) C4355](../error-messages/compiler-warnings/compiler-warning-c4355.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1 and level 4) C4052](../error-messages/compiler-warnings/compiler-warning-level-1-c4052.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 4) C4112](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1 and level 4) C4223](../error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4223.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4002](../error-messages/compiler-warnings/compiler-warning-level-1-c4002.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1, Error) C4003](../error-messages/compiler-warnings/compiler-warning-level-1-c4003.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1, Error) C4141](../error-messages/compiler-warnings/compiler-warning-level-1-c4141.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 1, Error) C4229](../error-messages/compiler-warnings/compiler-warning-level-1-c4229.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4233](../error-messages/compiler-warnings/compiler-warning-level-4-c4233.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4235](../error-messages/compiler-warnings/compiler-warning-level-4-c4235.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4368](../error-messages/compiler-warnings/compiler-warning-c4368.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4392](../error-messages/compiler-warnings/compiler-warning-level-1-c4392.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4394](../error-messages/compiler-warnings/compiler-warning-c4394.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1, Error) C4399](../error-messages/compiler-warnings/compiler-warning-level-1-c4399.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4178](../error-messages/compiler-warnings/compiler-warning-level-1-c4178.md) - Rectify example in C4178 -- [Compiler Warning (level 1) C4305](../error-messages/compiler-warnings/compiler-warning-level-1-c4305.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4329](../error-messages/compiler-warnings/compiler-warning-level-1-c4329.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4335](../error-messages/compiler-warnings/compiler-warning-c4335.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 1) C4384](../error-messages/compiler-warnings/compiler-warning-level-1-c4384.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler warning (level 1) C4834](../error-messages/compiler-warnings/c4834.md) - - add new warning for VS 17.6 - C5266 - - Standardize C++ version naming -- [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) - - add warning c5072 - - Capitalize error code -- [Compiler Warning (level 2 and level 4) C4200](../error-messages/compiler-warnings/compiler-warning-levels-2-and-4-c4200.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 2) C4150](../error-messages/compiler-warnings/compiler-warning-level-2-c4150.md) - Update compiler-warning-level-2-c4150.md -- [Compiler Warning (level 2) C4251](../error-messages/compiler-warnings/compiler-warning-level-1-c4251.md) - - Update compiler-warnings-c4200-through-c4399.md - - improve C4251 -- [Compiler Warning (level 3 and level 4) C4101](../error-messages/compiler-warnings/compiler-warning-level-3-c4101.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3 and level 4) C4189](../error-messages/compiler-warnings/compiler-warning-level-4-c4189.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3 and level 4) C4278](../error-messages/compiler-warnings/compiler-warning-level-3-c4278.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3, off) C4165](../error-messages/compiler-warnings/compiler-warning-level-1-c4165.md) - Update warning levels in compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3, off) C4191](../error-messages/compiler-warnings/compiler-warning-level-3-c4191.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3, off) C4242](../error-messages/compiler-warnings/compiler-warning-level-4-c4242.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3, off) C4265](../error-messages/compiler-warnings/compiler-warning-level-3-c4265.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3, off) C4287](../error-messages/compiler-warnings/compiler-warning-level-3-c4287.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 3) C4007](../error-messages/compiler-warnings/compiler-warning-level-2-c4007.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 3) C4066](../error-messages/compiler-warnings/compiler-warning-level-3-c4066.md) - Add example for C4066 -- [Compiler Warning (level 3) C4334](../error-messages/compiler-warnings/compiler-warning-level-3-c4334.md) - Update compiler-warning-level-3-c4334.md -- [Compiler Warning (level 3) C4371](../error-messages/compiler-warnings/c4371.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, no longer emitted) C4001](../error-messages/compiler-warnings/compiler-warning-level-4-c4001.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 4, off) C4061](../error-messages/compiler-warnings/compiler-warning-level-4-c4061.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 4, off) C4062](../error-messages/compiler-warnings/compiler-warning-level-4-c4062.md) - Update compiler-warnings-c4000-through-c4199.md -- [Compiler Warning (level 4, off) C4255](../error-messages/compiler-warnings/compiler-warning-level-4-c4255.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4263](../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4264](../error-messages/compiler-warnings/compiler-warning-level-1-c4264.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4266](../error-messages/compiler-warnings/compiler-warning-level-4-c4266.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4289](../error-messages/compiler-warnings/compiler-warning-level-4-c4289.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4296](../error-messages/compiler-warnings/compiler-warning-level-4-c4296.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4339](../error-messages/compiler-warnings/compiler-warning-level-4-c4339.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4365](../error-messages/compiler-warnings/compiler-warning-level-4-c4365.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4, off) C4388](../error-messages/compiler-warnings/c4388.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4019](../error-messages/compiler-warnings/compiler-warning-level-4-c4019.md) - clarify that only applies to C -- [Compiler Warning (level 4) C4218](../error-messages/compiler-warnings/compiler-warning-level-1-c4218.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4254](../error-messages/compiler-warnings/compiler-warning-level-4-c4254.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4306](../error-messages/compiler-warnings/compiler-warning-level-3-c4306.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4310](../error-messages/compiler-warnings/compiler-warning-level-3-c4310.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4324](../error-messages/compiler-warnings/compiler-warning-level-4-c4324.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4373](../error-messages/compiler-warnings/compiler-warning-level-3-c4373.md) - Update compiler-warnings-c4200-through-c4399.md -- [Compiler Warning (level 4) C4389](../error-messages/compiler-warnings/compiler-warning-level-4-c4389.md) - Capitalize error code -- [Compiler warning (level 4) C5267](../error-messages/compiler-warnings/c5267.md) - - add warning level info - - New warning topic for C5267 -- [Compiler Warning (levels 3 and 4) C4244](../error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244.md) - New warning topic for C5267 -- [Compiler Warning C5243](../error-messages/compiler-warnings/c5243.md) - Update c5243.md -- [Compiler Warnings by compiler version](../error-messages/compiler-warnings/compiler-warnings-by-compiler-version.md) - - Update compiler-warnings-by-compiler-version.md - - add new warning for VS 17.6 - C5266 - - New warning topic for C5267 - - Add links to compiler warnings by compiler version +- Updated many compiler error and warning topics to include or refine examples. - [Linker tools errors and warnings (LNKxxxx)](../error-messages/tool-errors/linker-tools-errors-and-warnings.md) - new linker warnings: 4306 & 4307 -- [Microsoft C/C++ compiler warnings C4000 through C4199](../error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md) - - Split warnings - pull in work RageKing8 did - - Update compiler-warnings-c4000-through-c4199.md - - Update warning levels in compiler-warnings-c4000-through-c4199.md -- [Microsoft C/C++ compiler warnings C4000 through C5399](../error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md) - Split warnings - pull in work RageKing8 did -- [Microsoft C/C++ compiler warnings C4200 through C4399](../error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md) - - Split warnings - pull in work RageKing8 did - - Update compiler-warnings-c4200-through-c4399.md - - Update compiler-warnings-c4200-through-c4399.md -- [Microsoft C/C++ compiler warnings C4400 through C4599](../error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md) - - Split warnings - pull in work RageKing8 did - - Add missing warnings to compiler-warnings-c4400-through-c4599 - - Add some warning entries -- [Microsoft C/C++ compiler warnings C4600 through C4799](../error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md) - - Split warnings - pull in work RageKing8 did - - Update compiler-warnings-c4600-through-c4799.md - - Add some warning entries -- [Microsoft C/C++ compiler warnings C4800 through C4999](../error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md) - - Split warnings - pull in work RageKing8 did - - Update missing warning messages in compiler-warnings-c4800-through-c4999.md - - add warning c5072 - - add new warning for VS 17.6 - C5266 - - New warning topic for C5267 - - Add some warning entries ## C++ in Visual Studio tutorials ### Updated articles - [Create a console calculator in C++](../get-started/tutorial-console-cpp.md) - - update - - draft ## Read and write code using C++ in Visual Studio @@ -415,9 +142,7 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles -- [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) - - add keyboard accelerators - - new topic for C++ macro tools +- [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) - add keyboard accelerators - [Walkthrough: Deploying Your Program (C++)](../ide/walkthrough-deploying-your-program-cpp.md) - update steps ## Linux with C++ in Visual Studio @@ -425,9 +150,6 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles - [Connect to your target Linux system in Visual Studio](../linux/connect-to-your-remote-linux-computer.md) - - Update connect-to-your-remote-linux-computer.md - - draft - - Update connect-to-your-remote-linux-computer.md ## C/C++ in Visual Studio overview @@ -437,113 +159,31 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through ### Updated articles -- [C and C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md) - fix f1 lookup -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2017](../overview/cpp-conformance-improvements-2017.md) - fix f1 lookup -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2019](../overview/cpp-conformance-improvements-2019.md) - fix f1 lookup -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - - updates for 17.10 - - Conformance for 17.10 - - add _alignof - - Conformance - - fix f1 lookup - - add link that wasn't ready until release - - Whatsnew -- [How to report a problem with the Microsoft C++ toolset or documentation](../overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md) - fix f1 lookup -- [Microsoft C/C++ help and community](../overview/visual-cpp-help-and-community.md) - fix f1 lookup -- [Microsoft C/C++ language conformance by Visual Studio version](../overview/visual-cpp-language-conformance.md) - fix f1 lookup -- [Microsoft C++ docs: What's new for August 2023 to November 2023](../overview/whats-new-cpp-docs.md) - Whatsnew -- [Overview of C++ development in Visual Studio](../overview/overview-of-cpp-development.md) - address perf -- [Supported platforms (Visual C++)](../overview/supported-platforms-visual-cpp.md) - fix f1 lookup -- [Visual Studio C++ Samples](../overview/visual-cpp-samples.md) - fix f1 lookup -- [What's new for C++ in Visual Studio 2017](../overview/what-s-new-for-cpp-2017.md) - fix f1 lookup -- [What's new for C++ in Visual Studio 2019](../overview/what-s-new-for-cpp-2019.md) - fix f1 lookup -- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - - updates for 17.10 - - fix #4553 - adds release note links - - add link to backend improvments - - add links - - Conformance - - fix f1 lookup - - remove duplicated section - - add link that wasn't ready until release - - Whatsnew - - Resolve syncing conflicts from FromPrivateLiveToMaster to main - -## Parallel programming in C++ in Visual Studio - -### Updated articles - -- [tile_barrier Class](../parallel/amp/reference/tile-barrier-class.md) - Fix unclosed links +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - updates for 17.10, add `_alignof` +- [Microsoft C++ docs: What's new for August 2023 to November 2023](../overview/whats-new-cpp-docs.md) +- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - updates for 17.10 ## C++ porting and upgrade guide ### Updated articles -- [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - fixes #5290 - clarify linking binaries built with different versions of the toolset +- [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - clarify linking binaries built with different versions of the toolset ## C/C++ preprocessor reference ### Updated articles -- [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - - add new warning for VS 17.6 - C5266 - - add warning level info - - New warning topic for C5267 -- [Predefined macros](../preprocessor/predefined-macros.md) - - document __arm_arch macro - - add compiler versions article +- [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - add new warning for VS 17.6 - C5266, add warning level info, new warning topic for C5267 +- [Predefined macros](../preprocessor/predefined-macros.md) - document `__arm_arch` macro ## C++ Standard Template Library (STL) reference -### Updated articles - -- [`` operators](../standard-library/bitset-operators.md) - Fix stream typos -- [`` operators](../standard-library/chrono-operators.md) - - Remove stray trailing escapes - - Standardize C++ version naming -- [`` functions](../standard-library/iterator-functions.md) - Address incorrect placement of period -- [`` operators](../standard-library/iterator-operators.md) - Address incorrect placement of period -- [`` functions](../standard-library/range-functions.md) - Address incorrect placement of period -- [`` operators](../standard-library/valarray-operators.md) - Fix various typos -- [`bitset` class](../standard-library/bitset-class.md) - Fix various typos -- [`deque` Class](../standard-library/deque-class.md) - Address incorrect placement of period -- [`elements_view` class (C++ Standard Library)](../standard-library/elements-view-class.md) - Standardize C++ version naming -- [`file_clock` class](../standard-library/file-clock-class.md) - fix user feedback 227131 -- [`is_clock` structure](../standard-library/is-clock-struct.md) - Standardize C++ version naming -- [`keys_view` class (C++ Standard Library)](../standard-library/keys-view-class.md) - Standardize C++ version naming -- [`month_day_last` class](../standard-library/month-day-last-class.md) - Standardize C++ version naming -- [`month_weekday_last` class](../standard-library/month-weekday-last-class.md) - Standardize C++ version naming -- [`month_weekday` class](../standard-library/month-weekday-class.md) - Standardize C++ version naming -- [`mutex` class (C++ Standard Library)](../standard-library/mutex-class-stl.md) - fixes for customer feedback -- [`sys_info` struct](../standard-library/sys-info-struct.md) - Address incorrect placement of period -- [`valarray` class](../standard-library/valarray-class.md) - Fix various typos -- [`values_view` class (C++ Standard Library)](../standard-library/values-view-class.md) - Standardize C++ version naming -- [`weekday` class](../standard-library/weekday-class.md) - Standardize C++ version naming -- [`year_month_day` class](../standard-library/year-month-day-class.md) - Standardize C++ version naming -- [`year_month_weekday_last` class](../standard-library/year-month-weekday-last-class.md) - Standardize C++ version naming -- [`year_month_weekday` class](../standard-library/year-month-weekday-class.md) - Standardize C++ version naming -- [forward_list Class](../standard-library/forward-list-class.md) - Address incorrect placement of period -- [iterator_traits Struct](../standard-library/iterator-traits-struct.md) - Address incorrect placement of period -- [move_iterator Class](../standard-library/move-iterator-class.md) - Address incorrect placement of period -- [not_equal_to Struct](../standard-library/not-equal-to-struct.md) - Fix various typos -- [Range adaptors](../standard-library/range-adaptors.md) - Standardize C++ version naming -- [scoped_allocator_adaptor Class](../standard-library/scoped-allocator-adaptor-class.md) - Fix unclosed links -- [type_index Class](../standard-library/type-index-class.md) - Address incorrect placement of period - ## Overview of Windows programming in C++ ### Updated articles -- [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - fix github issue - code example wrong -- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - - note 2013 no longer supported - - Fix #5438 and product team issue - - fix #4553 - adds release note links - - Update latest-supported-vc-redist.md - - Resolve syncing conflicts from FromPrivateLiveToMaster to main -- [Walkthrough: Create a Standard C++ Program (C++)](../windows/walkthrough-creating-a-standard-cpp-program-cpp.md) - address perf -- [Windows C++ desktop application types](../windows/overview-of-windows-programming-in-cpp.md) - address perf -- [Working with Resource Files](../windows/working-with-resource-files.md) - address perf +- [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - fixed code example +- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported and other updates. ## What's new history From 4505636c96ef6f61c4f7832fd4c67b87fd35ed60 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 26 Jun 2024 15:51:43 -0700 Subject: [PATCH 0287/1239] edits --- docs/overview/whats-new-cpp-docs.md | 114 ++++++++++++++-------------- 1 file changed, 55 insertions(+), 59 deletions(-) diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index 30ad0de055..3fb26d611f 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -6,30 +6,30 @@ ms.custom: intro-whats-new monikerRange: '>=msvc-160' --- -# Microsoft C++ docs: What's new for August 2023 to November 2023 +# Microsoft C++ docs: What's new for November 2023 to June 2024 -This article lists major changes to the Microsoft C++ docs for May 2023 through early November 2023. +This article lists major changes to the Microsoft C++ docs for November 2023 to June 2024. - For what was new in the docs in previous months, see [What's new history](#whats-new-history). - For what's new related to C++ in Visual Studio, see [What's new for C++ in Visual Studio](what-s-new-for-visual-cpp-in-visual-studio.md). - For the latest C and C++ conformance with ISO standards status, see [C++ conformance improvements in Visual Studio](cpp-conformance-improvements.md). -## C/C++ compiler intrinsics and assembly language +### C/C++ compiler intrinsics and assembly language -### Updated articles +**Updated articles** - [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - Added entries to table for new arm64 intrinsics -## Active Template Library (ATL), Microsoft Foundation Classes (MFC) +### Active Template Library (ATL), Microsoft Foundation Classes (MFC) -### Updated articles +**Updated articles** - [Setting the Dialog Box's Background Color](../mfc/setting-the-dialog-boxs-background-color.md) - add code example for setting a dialog box's background color - [Unicode and Multibyte Character Set (MBCS) Support](../atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support.md) - Clarified MBCS support in unicode-and-multibyte-character-set-mbcs-support.md ## C/C++ projects and build systems -### New articles +**New articles** - [/ARM64XFUNCTIONPADMINX64 (Minimum x64 function padding)](../build/reference/arm64-function-pad-min-x64.md) - [/NOFUNCTIONPADSECTION (Disable function padding)](../build/reference/no-function-pad-section.md) @@ -42,7 +42,7 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Tutorial: Troubleshoot function inlining on build time](../build-insights/tutorials/build-insights-function-view.md) - [Tutorial: Troubleshoot header file impact on build time](../build-insights/tutorials/build-insights-included-files-view.md) -### Updated articles +**Updated articles** - [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no isn't recommended for 64-bit apps - [/Qspectre](../build/reference/qspectre.md) - New /QSpectre flag @@ -53,21 +53,21 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - new linker switches for 17.8 - [Linking](../build/reference/linking.md) - new linker switches for 17.8 -## C language +### C language -### New articles +**New articles** - [`typeof_unqual`, `__typeof_unqual__` (C23)](../c-language/typeof-unqual-c.md) - [`typeof`, `__typeof__` (C23)](../c-language/typeof-c.md) -### Updated articles +**Updated articles** -- [C Keywords](../c-language/c-keywords.md) - Conformance -- [C Type Specifiers](../c-language/c-type-specifiers.md) - Conformance +- [C Keywords](../c-language/c-keywords.md) - Conformance updates +- [C Type Specifiers](../c-language/c-type-specifiers.md) - Conformance updates -## Code quality +### Code quality -### New articles +**New articles** - [Warning C26459](../code-quality/c26459.md) - [Warning C26837](../code-quality/c26837.md) @@ -82,36 +82,36 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Warning C6397](../code-quality/c6397.md) - [Warning C6398](../code-quality/c6398.md) -### Updated articles +**Updated articles** - [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - fix code example - [Warning C6031](../code-quality/c6031.md) - fix some code examples - [Warning C6059](../code-quality/c6059.md) - Add heuristics - [Warning C6201](../code-quality/c6201.md) - Add heuristics -## C++ in Visual Studio +### C++ in Visual Studio -### Updated articles +**Updated articles** - [`break` statement (C++)](../cpp/break-statement-cpp.md) - Break statement documentation fix - [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fix code example - [Inline functions (C++)](../cpp/inline-functions-cpp.md) - Address mistakes in inline functions cpp and remove content contrasting inline functions and macros -## Cross platform development +### Cross platform development -### Updated articles +**Updated articles** - [Install cross-platform mobile development with C++](../cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md) - updates regarding Xamarin -## C runtime library +### C runtime library -### Updated articles +**Updated articles** -- [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that _O_TEXT is ANSI. +- [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that `_O_TEXT` is ANSI -## C/C++ compiler and tools errors and warnings +### C/C++ compiler and tools errors and warnings -### New articles +**New articles** - [Compiler Error C2323](../error-messages/compiler-errors-1/compiler-error-c2323.md) - [Compiler Warning (level 1) C5072](../error-messages/compiler-warnings/compiler-warning-c5072.md) @@ -122,68 +122,64 @@ This article lists major changes to the Microsoft C++ docs for May 2023 through - [Microsoft C/C++ compiler warnings C5000 through C5199](../error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md) - [Microsoft C/C++ compiler warnings C5200 through C5399](../error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md) -### Updated articles +**Updated articles** -- Updated many compiler error and warning topics to include or refine examples. -- [Linker tools errors and warnings (LNKxxxx)](../error-messages/tool-errors/linker-tools-errors-and-warnings.md) - new linker warnings: 4306 & 4307 +- Updated several compiler error and warning topics to include or refine examples. -## C++ in Visual Studio tutorials +### C++ in Visual Studio tutorials -### Updated articles +**Updated articles** - [Create a console calculator in C++](../get-started/tutorial-console-cpp.md) -## Read and write code using C++ in Visual Studio +### Read and write code using C++ in Visual Studio -### New articles +**New articles** - [C++ Include Diagnostics in Visual Studio](../ide/include-diagnostics.md) - [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) -### Updated articles +**Updated articles** -- [Visualize C/C++ macro expansion](../ide/visualize-macro-expansion.md) - add keyboard accelerators - [Walkthrough: Deploying Your Program (C++)](../ide/walkthrough-deploying-your-program-cpp.md) - update steps -## Linux with C++ in Visual Studio +### Linux with C++ in Visual Studio -### Updated articles +**Updated articles** - [Connect to your target Linux system in Visual Studio](../linux/connect-to-your-remote-linux-computer.md) -## C/C++ in Visual Studio overview +### C/C++ in Visual Studio overview -### New articles +**New articles** - [Microsoft Visual C++ compiler versioning](../overview/compiler-versions.md) -### Updated articles +**Updated articles** -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - updates for 17.10, add `_alignof` +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - updates for 17.10, added `_alignof` - [Microsoft C++ docs: What's new for August 2023 to November 2023](../overview/whats-new-cpp-docs.md) - [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - updates for 17.10 -## C++ porting and upgrade guide +### C++ porting and upgrade guide -### Updated articles +**Updated articles** - [C++ binary compatibility between Visual Studio versions](../porting/binary-compat-2015-2017.md) - clarify linking binaries built with different versions of the toolset -## C/C++ preprocessor reference +### C/C++ preprocessor reference -### Updated articles +**Updated articles** - [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - add new warning for VS 17.6 - C5266, add warning level info, new warning topic for C5267 -- [Predefined macros](../preprocessor/predefined-macros.md) - document `__arm_arch` macro - -## C++ Standard Template Library (STL) reference +- [Predefined macros](../preprocessor/predefined-macros.md) - documented `__arm_arch` macro ## Overview of Windows programming in C++ -### Updated articles +**Updated articles** - [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - fixed code example -- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported and other updates. +- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported, and other updates ## What's new history @@ -206,10 +202,10 @@ This section lists major changes to the Microsoft C++ docs for August 2023 to ea **Updated articles** - [Configure CMake debugging sessions](../build/configure-cmake-debugging-sessions.md) - Updated screenshots. -- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - Reflect new behavior as of 17.6. -- [`/Zc:externConstexpr` (Enable extern constexpr variables)](../build/reference/zc-externconstexpr.md) - Reflect new behavior as of 17.6. -- [Overview of ARM64EC ABI conventions](../build/arm64ec-windows-abi-conventions.md) - Updated register mapping for integer registers table. -- [`/DEBUG` (Generate debug info)](../build/reference/debug-generate-debug-info.md) - Fix documentation for `/DEBUG:FASTLINK` and `/DEBUG`. +- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - Reflect new behavior as of 17.6 +- [`/Zc:externConstexpr` (Enable extern constexpr variables)](../build/reference/zc-externconstexpr.md) - Reflect new behavior as of 17.6 +- [Overview of ARM64EC ABI conventions](../build/arm64ec-windows-abi-conventions.md) - Updated register mapping for integer registers table +- [`/DEBUG` (Generate debug info)](../build/reference/debug-generate-debug-info.md) - Fix documentation for `/DEBUG:FASTLINK` and `/DEBUG` ### Code quality @@ -221,7 +217,7 @@ This section lists major changes to the Microsoft C++ docs for August 2023 to ea **Updated articles** -- [How to specify additional code information by using `_Analysis_assume_`](../code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md) - Updated remarks. +- [How to specify additional code information by using `_Analysis_assume_`](../code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md) - Updated remarks Clarified behavior for the following warnings: @@ -238,11 +234,11 @@ Clarified behavior for the following warnings: **Updated articles** -- [`alignas` (C++)](../cpp/alignas-specifier.md) - Several updates to the remarks. -- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - Improved code examples. -- [__fastcall](../cpp/fastcall.md) - Added info about classes, structs, and unions. -- [`decltype` (C++)](../cpp/decltype-cpp.md) - Fixed code example. -- [noreturn](../cpp/noreturn.md) - Improved example. +- [`alignas` (C++)](../cpp/alignas-specifier.md) - Updates to the remarks +- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - Improved code examples +- [__fastcall](../cpp/fastcall.md) - Added info about classes, structs, and unions +- [`decltype` (C++)](../cpp/decltype-cpp.md) - Fixed code example +- [noreturn](../cpp/noreturn.md) - Improved example ### C runtime library From 98e93692c349ae7665fd268d7593dae56d548a7d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 26 Jun 2024 16:07:16 -0700 Subject: [PATCH 0288/1239] acrolinx --- ...t-a-problem-with-the-visual-cpp-toolset.md | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md index 21a5d2b4ab..bb08377752 100644 --- a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md +++ b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md @@ -13,9 +13,9 @@ If you find problems in the Microsoft C++ compiler (MSVC), the linker, or other ## How to report a C++ toolset issue -The best way to let us know about a problem is to send us a report that includes a description of the problem you've discovered. It should have all the details about how you build your program. And it should include a *repro*, a complete test case we can use to reproduce the problem on our own machines. This information lets us quickly verify that the problem exists in our code and isn't local to your environment. It helps us determine whether it affects other versions of the compiler, and to diagnose its cause. +The best way to let us know about a problem is to send us a report that includes a description of the problem you discovered. It should have all the details about how you build your program. And it should include a *repro*, a complete test case we can use to reproduce the problem on our own machines. This information lets us quickly verify that the problem exists in our code and isn't local to your environment. It helps us determine whether it affects other versions of the compiler, and to diagnose its cause. -In the sections below, you'll read about what makes a good report. We describe how to generate a repro for the kind of issue you've found, and how to send your report to the product team. Your reports are important to us and to other developers like you. Thank you for helping us improve Microsoft C++! +In the following sections, read about what makes a good report. We describe how to generate a repro for the kind of issue you found, and how to send your report to the product team. Your reports are important to us and to other developers like you. Thank you for helping us improve Microsoft C++! ## How to prepare your report @@ -66,15 +66,15 @@ Copy and paste the entire output into your report. ### The command line -We need the exact command line, cl.exe and all of its arguments, used to build your code. That's so we can build it in exactly the same way on our machines. It's important because the problem you've found might only exist when building with a certain argument or combination of arguments. +We need the exact command line, cl.exe and all of its arguments, used to build your code. That's so we can build it in exactly the same way on our machines. It's important because the problem you found might only exist when building with a certain argument or combination of arguments. The best place to find this information is in the build log immediately after you experience the problem. It ensures that the command line contains exactly the same arguments that might contribute to the problem. #### To report the contents of the command line -1. Locate the **CL.command.1.tlog** file and open it. By default, this file is located in your Documents folder in \\Visual Studio *version*\\Projects\\*SolutionName*\\*ProjectName*\\*Configuration*\\*ProjectName*.tlog\\CL.command.1.tlog, or in your User folder under \\Source\\Repos\\*SolutionName*\\*ProjectName*\\*Configuration*\\*ProjectName*.tlog\\CL.command.1.tlog. It may be in a different location if you use another build system, or if you've changed the default location for your project. +1. Locate the **CL.command.1.tlog** file and open it. By default, this file is located in your Documents folder in \\Visual Studio *version*\\Projects\\*SolutionName*\\*ProjectName*\\*Configuration*\\*ProjectName*.tlog\\CL.command.1.tlog, or in your User folder under \\Source\\Repos\\*SolutionName*\\*ProjectName*\\*Configuration*\\*ProjectName*.tlog\\CL.command.1.tlog. It may be in a different location if you use another build system, or if you changed the default location for your project. - Inside this file, you'll find the names of your source code files, followed by the command-line arguments used to compile them, each on separate lines. + Inside this file, find the names of your source code files, followed by the command-line arguments used to compile them, each on separate lines. 1. Locate the line that contains the name of the source code file where the problem occurs. The line below it contains the corresponding cl.exe command arguments. @@ -82,19 +82,19 @@ Copy and paste the entire command line into your report. ### A description of the problem -We need a detailed description of the problem you've found. That's so we can verify that we see the same effect on our machines. It's also sometimes useful for us to know what you were trying to accomplish, and what you expected to happen. +We need a detailed description of the problem you found. That's so we can verify that we see the same effect on our machines. It's also sometimes useful for us to know what you were trying to accomplish, and what you expected to happen. -A good description provides the **exact error messages** given by the toolset, or the exact runtime behavior you see. We need this information to verify that we've properly reproduced the issue. Include **all** of the compiler output, not just the last error message. We need to see everything that led up to the issue you report. If you can duplicate the issue by using the command-line compiler, that compiler output is preferred. The IDE and other build systems may filter the error messages you see, or only capture the first line of an error message. +A good description provides the **exact error messages** given by the toolset, or the exact runtime behavior you see. We need this information to verify that we properly reproduced the issue. Include **all** of the compiler output, not just the last error message. We need to see everything that led up to the issue you report. If you can duplicate the issue by using the command-line compiler, that compiler output is preferred. The IDE and other build systems may filter the error messages you see, or only capture the first line of an error message. If the issue is that the compiler accepts invalid code and doesn't generate a diagnostic, include that in your report. -To report a runtime behavior problem, include an **exact copy** of what the program prints, and what you expect to see. Ideally, you'll embed it in the output statement itself, for example, `printf("This should be 5: %d\n", actual_result);`. If your program crashes or hangs, mention that as well. +To report a runtime behavior problem, include an **exact copy** of what the program prints, and what you expect to see. Ideally, embed it in the output statement itself, for example, `printf("This should be 5: %d\n", actual_result);`. If your program crashes or hangs, mention that as well. -Add any other details that might help us diagnose the problem you found, such as any work-arounds you've discovered. Try not to repeat information found elsewhere in your report. +Add any other details that might help us diagnose the problem you found, such as any work-arounds you discovered. Try not to repeat information found elsewhere in your report. ### The repro -A *repro* is a complete, self-contained source code example. It reproducibly demonstrates the problem you've found, hence the name. We need a repro so that we can reproduce the error on our machines. The code should be sufficient by itself to create a basic executable that compiles and runs. Or, that *would* compile and run, if not for the problem you've found. A repro isn't a code snippet. It should have complete functions and classes, and contain all the necessary #include directives, even for the standard headers. +A *repro* is a complete, self-contained source code example. It reproducibly demonstrates the problem you found, hence the name. We need a repro so that we can reproduce the error on our machines. The code should be sufficient by itself to create a basic executable that compiles and runs. Or, that *would* compile and run, if not for the problem you found. A repro isn't a code snippet. It should have complete functions and classes, and contain all the necessary #include directives, even for the standard headers. #### What makes a good repro @@ -104,9 +104,9 @@ A good repro is: - **Self-Contained.** Repros should avoid unnecessary dependencies. If you can reproduce the problem without third-party libraries, then do so. If you can reproduce the problem without any library code besides simple output statements (for example, `puts("this shouldn't compile");`, `std::cout << value;`, and `printf("%d\n", value);`), then do so. It's ideal if the example can be condensed to a single source code file, without reference to any user headers. Reducing the amount of code we have to consider as a possible contributor to the problem is enormously helpful to us. -- **Against the latest compiler version.** Repros should use the most recent update to the latest version of the toolset whenever possible. Or, use the most recent prerelease version of the next update or next major release. Problems you may find in older versions of the toolset have often been fixed in newer versions. Fixes are backported to older versions only in exceptional circumstances. +- **Against the latest compiler version.** Repros should use the most recent update to the latest version of the toolset whenever possible. Or, use the most recent prerelease version of the next update or next major release. Problems you may find in older versions of the toolset are often fixed in newer versions. Fixes are backported to older versions only in exceptional circumstances. -- **Checked against other compilers** if relevant. Repros that involve portable C++ code should verify behavior against other compilers if possible. The C++ standard ultimately determines program correctness, and no compiler is perfect. However, when Clang and GCC accept your code without a diagnostic, and MSVC doesn't, you've probably found a bug in our compiler. (Other possibilities include differences in Unix and Windows behavior, or different levels of C++ standards implementation, and so on.) When all the compilers reject your code, then it's likely that your code is incorrect. Seeing different error messages may help you diagnose the issue yourself. +- **Checked against other compilers** if relevant. Repros that involve portable C++ code should verify behavior against other compilers if possible. The C++ standard ultimately determines program correctness, and no compiler is perfect. However, when Clang and GCC accept your code without a diagnostic, and MSVC doesn't, you probably found a bug in our compiler. (Other possibilities include differences in Unix and Windows behavior, or different levels of C++ standards implementation, and so on.) When all the compilers reject your code, then it's likely that your code is incorrect. Seeing different error messages may help you diagnose the issue yourself. You can find lists of online compilers to test your code against in [Online C++ compilers](https://isocpp.org/blog/2013/01/online-c-compilers) on the ISO C++ website, or this curated [List of Online C++ Compilers](https://arnemertz.github.io/online-compilers/) on GitHub. Some specific examples include [Wandbox](https://wandbox.org/) and [Compiler Explorer](https://godbolt.org/). @@ -169,7 +169,7 @@ If the line that begins with **INTERNAL COMPILER ERROR** mentions link.exe, rath #### Linker crash -Linker crashes occur during the linking phase, after the compiler has run. Typically, the linker will emit [Linker Tools Error LNK1000](../error-messages/tool-errors/linker-tools-error-lnk1000.md). +Linker crashes occur during the linking phase, after the compiler has run. Typically, the linker emits [Linker Tools Error LNK1000](../error-messages/tool-errors/linker-tools-error-lnk1000.md). > [!NOTE] > If the output mentions C1001 or involves Link-Time Code Generation, refer to [Backend (code generation) crash](#backend-code-generation-crash) instead. @@ -214,7 +214,7 @@ If incremental linking is enabled, and the crash occurred only after a successfu #### Bad code generation -Bad code generation is rare. It occurs when the compiler mistakenly generates incorrect code that causes your application to crash at runtime. Instead, it should generate correct code, or detect a problem at compile time. If you believe the problem you've found results in bad code generation, treat your report the same as a [Backend (code generation) crash](#backend-code-generation-crash). +Bad code generation is rare. It occurs when the compiler mistakenly generates incorrect code that causes your application to crash at runtime. Instead, it should generate correct code, or detect a problem at compile time. If you believe the problem you found results in bad code generation, treat your report the same as a [Backend (code generation) crash](#backend-code-generation-crash). For this kind of crash, provide a [Link repro](#link-repros) if you're using the **/GL** command-line argument to cl.exe. Provide a [Preprocessed repro](#preprocessed-repros) if not. @@ -222,11 +222,11 @@ For this kind of crash, provide a [Link repro](#link-repros) if you're using the To help us track down the source of the problem, a [good repro](#what-makes-a-good-repro) is vital. Before you do any of the steps outlined below for specific kinds of repros, try to condense the code that demonstrates the problem as much as possible. Try to eliminate or minimize dependencies, required headers, and libraries. Limit the compiler options and preprocessor definitions used, if possible. -Below are instructions for generating the various kinds of repros you'll use to report different kinds of problems. +Below are instructions for generating the various kinds of repros to use to report different kinds of problems. ### Preprocessed repros -A *Preprocessed repro* is a single source file that demonstrates a problem. It's generated from the output of the C preprocessor. To create one, use the **/P** compiler option on the original repro source file. This option inlines the included headers to remove dependencies on additional source and header files. The option also resolves macros, #ifdef conditionals, and other preprocessor commands that could depend on your local environment. +A *Preprocessed repro* is a single source file that demonstrates a problem. It's generated from the output of the C preprocessor. To create one, use the **/P** compiler option on the original repro source file. This option inlines the included headers to remove dependencies on other source and header files. The option also resolves macros, #ifdef conditionals, and other preprocessor commands that could depend on your local environment. > [!NOTE] > Preprocessed repros are not as useful for problems that might be the result of bugs in our standard library implementation, because we will often want to substitute our latest, in-progress implementation to see whether we've already fixed the problem. In this case, don't preprocess the repro, and if you can't reduce the problem to a single source file, package your code into a .zip file or similar, or consider using an IDE project repro. For more information, see [Other repros](#other-repros). @@ -241,9 +241,9 @@ A *Preprocessed repro* is a single source file that demonstrates a problem. It's 1. In the developer command prompt console window, enter the command **cl /P** *arguments* *filename.cpp*. For *arguments*, use the list of arguments you captured above. *filename.cpp* is the name of your repro source file. This command replicates the command line you used for the repro, but stops the compilation after the preprocessor pass. Then it writes the preprocessed source code to *filename.i*. -If you're preprocessing a C++/CX source code file, or you're using the C++ Modules feature, some additional steps are required. For more information, see the sections below. +If you're preprocessing a C++/CX source code file, or you're using the C++ Modules feature, some more steps are required. For more information, see the sections below. -After you've generated the preprocessed file, it's a good idea to make sure that the problem still repros when you compile the preprocessed file. +After you generate the preprocessed file, it's a good idea to make sure that the problem still repros when you compile the preprocessed file. #### To confirm the preprocessed file still repros the error @@ -299,7 +299,7 @@ If you're using the Modules feature of the C++ compiler, there are some differen 1. In the developer command prompt console window, enter the command **cl /P** *arguments* *modulename.ixx*. The *arguments* are the arguments captured above, and *modulename.ixx* is the name of the file that creates the module interface. -After you've generated the preprocessed files, it's a good idea to make sure the problem still repros when you use the preprocessed file. +After you generate the preprocessed files, it's a good idea to make sure the problem still repros when you use the preprocessed file. #### To confirm the preprocessed file still repros the error @@ -329,7 +329,7 @@ A *link repro* is the linker-generated contents of a directory, specified either 1. To build the repro project in Visual Studio, in the developer command prompt console window, enter the command **devenv**. It ensures that the value of the **link\_repro** environment variable is visible to Visual Studio. To build the project at the command line, use the command-line arguments captured above to duplicate the repro build. -1. Build your repro project, and confirm that the expected problem has occurred. +1. Build your repro project, and confirm that the expected problem occurred. 1. Close Visual Studio, if you used it to do the build. @@ -364,25 +364,25 @@ You have a couple of good ways to get your report to us. You can use Visual Stud ### Use the Report a Problem tool -The **Report a Problem** tool in Visual Studio is a way for Visual Studio users to report problems with just a few clicks. It pops up a simple form to send detailed information about the problem you've found. You can then submit your report without ever leaving the IDE. +The **Report a Problem** tool in Visual Studio is a way for Visual Studio users to report problems with just a few clicks. It pops up a simple form to send detailed information about the problem you found. You can then submit your report without ever leaving the IDE. Reporting your problem through the **Report a Problem** tool is easy and convenient from the IDE. You can access it from the title bar by choosing the **Send Feedback** icon next to the **Quick Launch** search box. Or, you can find it on the menu bar in **Help** > **Send Feedback** > **Report a Problem**. -When you choose to report a problem, first search the Developer Community for similar problems. In case your problem has been reported before, upvote the report and add comments with additional specifics. If you don't see a similar problem, choose the **Report new problem** button at the bottom of the Visual Studio Feedback dialog and follow the steps to report your problem. +When you choose to report a problem, first search the Developer Community for similar problems. In case your problem has been reported before, upvote the report and add comments with more specifics. If you don't see a similar problem, choose the **Report new problem** button at the bottom of the Visual Studio Feedback dialog and follow the steps to report your problem. ### Use the Visual Studio Developer Community pages The Visual Studio Developer Community pages are another convenient way to report problems and find solutions for Visual Studio and the C++ compiler, tools, and libraries. There are specific Developer Community pages for [Visual Studio](https://aka.ms/feedback/report?space=8), [Visual Studio for Mac](https://aka.ms/feedback/report?space=41), [.NET](https://aka.ms/feedback/report?space=61), [C++](https://aka.ms/feedback/report?space=62), [Azure DevOps](https://aka.ms/feedback/report?space=21), and [Azure DevOps Server](https://aka.ms/feedback/report?space=22). -Beneath the community tabs, near the top of each page, is a search box. You can use it to find posts that report problems similar to yours. You may find a solution or other useful information related to your problem is already available. If someone has reported the same problem before, then upvote and comment on that report, rather than create a new problem report. To comment, vote, or report a new problem, you may be asked to sign in to your Visual Studio account. The first time you sign in, you'll have to agree to give the Developer Community app access to your profile. +Beneath the community tabs, near the top of each page, is a search box. You can use it to find posts that report problems similar to yours. You may find a solution or other useful information related to your problem is already available. If someone has reported the same problem before, then upvote and comment on that report, rather than create a new problem report. To comment, vote, or report a new problem, you may be asked to sign in to your Visual Studio account. The first time you sign in, you have to agree to give the Developer Community app access to your profile. -For issues with the C++ compiler, linker, and other tools and libraries, first search the [C++ Developer Community](https://aka.ms/vsfeedback/browsecpp) page. If you search for your problem, and it hasn't been reported before, choose the **Report a problem** button next to the search box. You can include your repro code and command line, screenshots, links to related discussions, and any other information you think is relevant and useful. +For issues with the C++ compiler, linker, and other tools and libraries, first search the [C++ Developer Community](https://aka.ms/vsfeedback/browsecpp) page. If you search for your problem, and it isn't already reported, choose the **Report a problem** button next to the search box. You can include your repro code and command line, screenshots, links to related discussions, and any other information you think is relevant and useful. > [!TIP] > Information in the initial Developer Community report will always be public. If this is a concern, see the next section about [Reports and privacy](#reports-and-privacy). > [!TIP] -> For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). +> For other kinds of problems you might find in Visual Studio that are unrelated to the C++ toolset (For example, UI issues, broken IDE functionality, or general crashes), use the **Report a Problem** tool in the IDE. This is the best choice, due to its screenshot capabilities and its ability to record UI actions that lead to the problem you found. These kinds of errors can also be looked up on the Visual Studio [Developer Community](https://aka.ms/feedback/report?space=8) site. For more information, see [How to report a problem with Visual Studio](/visualstudio/ide/how-to-report-a-problem-with-visual-studio). ### Reports and privacy @@ -392,7 +392,7 @@ If you're concerned about revealing your identity, [create a new Microsoft accou **Don't put anything you want to keep private in the title or content of the initial report, which is public.** Instead, say that you'll send details privately in a separate comment. To make sure that your report is directed to the right people, include **cppcompiler** in the topic list of your problem report. Once the problem report is created, it's now possible to specify who can see your replies and attachments. -#### To create a problem report for private information +#### To create a problem report for private informationF 1. In the report you created, choose **Add comment** to create your private description of the problem. @@ -408,6 +408,6 @@ To maintain your privacy and keep your sensitive information out of public view, ## How to report a C++ documentation issue -We use GitHub issues to track problems reported in our documentation. You can now create GitHub issues directly from a content page, which enables you interact in a much richer way with writers and product teams. If you see an issue with a document, a bad code sample, a confusing explanation, a critical omission, or even just a typo, you can easily let us know. Scroll to the bottom of the page and select **Sign in to give documentation feedback**. You'll need to create a GitHub account if you don't have one already. When you have a GitHub account, you can see all of our documentation issues and their status. You also get notifications when changes are made for the issue you reported. For more information, see our [Feedback System blog entry](/teamblog/a-new-feedback-system-is-coming-to-docs). +We use GitHub issues to track problems reported in our documentation. You can now create GitHub issues directly from a content page, which enables you interact in a richer way with writers and product teams. If you see an issue with a document, a bad code sample, a confusing explanation, a critical omission, or even just a typo, you can easily let us know. Scroll to the bottom of the page and select **Sign in to give documentation feedback**. You need to create a GitHub account if you don't have one already. When you have a GitHub account, you can see all of our documentation issues and their status. You also get notifications when changes are made for the issue you reported. For more information, see our [Feedback System blog entry](/teamblog/a-new-feedback-system-is-coming-to-docs). You create a documentation issue on GitHub when you use the documentation feedback button. The issue is automatically filled in with some information about the page you created the issue on. That's how we know where the problem is located, so don't edit this information. Just append the details about what's wrong, and if you like, a suggested fix. [Our C++ docs are open source](https://github.com/MicrosoftDocs/cpp-docs/), so if you'd like to submit a fix yourself, you can. For more information about how you can contribute to our documentation, see our [Contributing guide](https://github.com/MicrosoftDocs/cpp-docs/blob/master/CONTRIBUTING.md) on GitHub. From 39ec5137e307b7761b2c8510c514af74bb27c11f Mon Sep 17 00:00:00 2001 From: Jill Grant Date: Wed, 26 Jun 2024 17:43:58 -0600 Subject: [PATCH 0289/1239] Update docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md Typo fix --- .../how-to-report-a-problem-with-the-visual-cpp-toolset.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md index bb08377752..ac9c18371e 100644 --- a/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md +++ b/docs/overview/how-to-report-a-problem-with-the-visual-cpp-toolset.md @@ -392,7 +392,7 @@ If you're concerned about revealing your identity, [create a new Microsoft accou **Don't put anything you want to keep private in the title or content of the initial report, which is public.** Instead, say that you'll send details privately in a separate comment. To make sure that your report is directed to the right people, include **cppcompiler** in the topic list of your problem report. Once the problem report is created, it's now possible to specify who can see your replies and attachments. -#### To create a problem report for private informationF +#### To create a problem report for private information 1. In the report you created, choose **Add comment** to create your private description of the problem. From d09ce031dd3637e570f09de7c01aeaa8e24180ff Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 27 Jun 2024 10:08:22 -0700 Subject: [PATCH 0290/1239] cosmetic updates --- docs/overview/whats-new-cpp-docs.md | 64 ++++++++++++++--------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index 3fb26d611f..1bc8090c5c 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -18,7 +18,7 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to **Updated articles** -- [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - Added entries to table for new arm64 intrinsics +- [ARM64 intrinsics](../intrinsics/arm64-intrinsics.md) - added entries to table for new arm64 intrinsics ### Active Template Library (ATL), Microsoft Foundation Classes (MFC) @@ -47,7 +47,7 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to - [/LARGEADDRESSAWARE (Handle Large Addresses)](../build/reference/largeaddressaware-handle-large-addresses.md) - largeaddressaware:no isn't recommended for 64-bit apps - [/Qspectre](../build/reference/qspectre.md) - New /QSpectre flag - [`/arch` (ARM64)](../build/reference/arch-arm64.md) - document __arm_arch macro -- [Advanced Property Page](../build/reference/advanced-property-page.md) - Add SARIF diagnostics documentation +- [Advanced Property Page](../build/reference/advanced-property-page.md) - add SARIF diagnostics documentation - [Linker options](../build/reference/linker-options.md) - new flag: /LINKREPROFULLPATHRSP - new linker switches for 17.8 @@ -62,8 +62,8 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to **Updated articles** -- [C Keywords](../c-language/c-keywords.md) - Conformance updates -- [C Type Specifiers](../c-language/c-type-specifiers.md) - Conformance updates +- [C Keywords](../c-language/c-keywords.md) - conformance updates +- [C Type Specifiers](../c-language/c-type-specifiers.md) - conformance updates ### Code quality @@ -84,18 +84,18 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to **Updated articles** -- [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - fix code example +- [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) - fixed code example - [Warning C6031](../code-quality/c6031.md) - fix some code examples -- [Warning C6059](../code-quality/c6059.md) - Add heuristics -- [Warning C6201](../code-quality/c6201.md) - Add heuristics +- [Warning C6059](../code-quality/c6059.md) - add heuristics +- [Warning C6201](../code-quality/c6201.md) - add heuristics ### C++ in Visual Studio **Updated articles** -- [`break` statement (C++)](../cpp/break-statement-cpp.md) - Break statement documentation fix -- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fix code example -- [Inline functions (C++)](../cpp/inline-functions-cpp.md) - Address mistakes in inline functions cpp and remove content contrasting inline functions and macros +- [`break` statement (C++)](../cpp/break-statement-cpp.md) - doc fix +- [Examples of Lambda Expressions](../cpp/examples-of-lambda-expressions.md) - fixed code example +- [Inline functions (C++)](../cpp/inline-functions-cpp.md) - address mistakes in inline functions cpp and remove content contrasting inline functions and macros ### Cross platform development @@ -107,7 +107,7 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to **Updated articles** -- [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - Clarify that `_O_TEXT` is ANSI +- [Translation mode constants](../c-runtime-library/translation-mode-constants.md) - clarify that `_O_TEXT` is ANSI ### C/C++ compiler and tools errors and warnings @@ -171,7 +171,7 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to **Updated articles** -- [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - add new warning for VS 17.6 - C5266, add warning level info, new warning topic for C5267 +- [Compiler warnings that are off by default](../preprocessor/compiler-warnings-that-are-off-by-default.md) - add new warning for VS 17.6 - C5266 & C5267 and add warning level info - [Predefined macros](../preprocessor/predefined-macros.md) - documented `__arm_arch` macro ## Overview of Windows programming in C++ @@ -179,7 +179,7 @@ This article lists major changes to the Microsoft C++ docs for November 2023 to **Updated articles** - [ClickOnce Deployment for Visual C++ Applications](../windows/clickonce-deployment-for-visual-cpp-applications.md) - fixed code example -- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported, and other updates +- [Microsoft Visual C++ Redistributable latest supported downloads](../windows/latest-supported-vc-redist.md) - note 2013 no longer supported and other updates ## What's new history @@ -189,7 +189,7 @@ This section lists major changes to the Microsoft C++ docs for August 2023 to ea **Updated articles** -- [CComDynamicUnkArray Class](../atl/reference/ccomdynamicunkarray-class.md) - Updated remarks. +- [CComDynamicUnkArray Class](../atl/reference/ccomdynamicunkarray-class.md) - updated remarks ### C/C++ projects and build systems @@ -201,11 +201,11 @@ This section lists major changes to the Microsoft C++ docs for August 2023 to ea **Updated articles** -- [Configure CMake debugging sessions](../build/configure-cmake-debugging-sessions.md) - Updated screenshots. -- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - Reflect new behavior as of 17.6 -- [`/Zc:externConstexpr` (Enable extern constexpr variables)](../build/reference/zc-externconstexpr.md) - Reflect new behavior as of 17.6 -- [Overview of ARM64EC ABI conventions](../build/arm64ec-windows-abi-conventions.md) - Updated register mapping for integer registers table -- [`/DEBUG` (Generate debug info)](../build/reference/debug-generate-debug-info.md) - Fix documentation for `/DEBUG:FASTLINK` and `/DEBUG` +- [Configure CMake debugging sessions](../build/configure-cmake-debugging-sessions.md) - updated screenshots. +- [`/permissive-` (Standards conformance)](../build/reference/permissive-standards-conformance.md) - reflect new behavior as of 17.6 +- [`/Zc:externConstexpr` (Enable extern constexpr variables)](../build/reference/zc-externconstexpr.md) - reflect new behavior as of 17.6 +- [Overview of ARM64EC ABI conventions](../build/arm64ec-windows-abi-conventions.md) - ppdated register mapping for integer registers table +- [`/DEBUG` (Generate debug info)](../build/reference/debug-generate-debug-info.md) - correct documentation for `/DEBUG:FASTLINK` and `/DEBUG` ### Code quality @@ -217,7 +217,7 @@ This section lists major changes to the Microsoft C++ docs for August 2023 to ea **Updated articles** -- [How to specify additional code information by using `_Analysis_assume_`](../code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md) - Updated remarks +- [How to specify additional code information by using `_Analysis_assume_`](../code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md) - updated remarks Clarified behavior for the following warnings: @@ -234,17 +234,17 @@ Clarified behavior for the following warnings: **Updated articles** -- [`alignas` (C++)](../cpp/alignas-specifier.md) - Updates to the remarks -- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - Improved code examples -- [__fastcall](../cpp/fastcall.md) - Added info about classes, structs, and unions -- [`decltype` (C++)](../cpp/decltype-cpp.md) - Fixed code example -- [noreturn](../cpp/noreturn.md) - Improved example +- [`alignas` (C++)](../cpp/alignas-specifier.md) - updated remarks +- [if-else statement (C++)](../cpp/if-else-statement-cpp.md) - improved code examples +- [__fastcall](../cpp/fastcall.md) - added info about classes, structs, and unions +- [`decltype` (C++)](../cpp/decltype-cpp.md) - fixed code example +- [noreturn](../cpp/noreturn.md) - improved example ### C runtime library **Updated articles** -- [`fegetround`, `fesetround`](../c-runtime-library/reference/fegetround-fesetround2.md) - Noted change of the values for `FE_UPWARD` and `FE_DOWNWARD`. +- [`fegetround`, `fesetround`](../c-runtime-library/reference/fegetround-fesetround2.md) - noted change of values for `FE_UPWARD` and `FE_DOWNWARD` ### C/C++ compiler and tools errors and warnings @@ -274,19 +274,19 @@ Clarified behavior for the following warnings: **Updated articles** -- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - Added conformance updates for 17.7 and 17.8. -- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - Updated what's new in C++. +- [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](../overview/cpp-conformance-improvements.md) - added conformance updates for 17.7 and 17.8. +- [What's new for C++ in Visual Studio 2022](../overview/what-s-new-for-visual-cpp-in-visual-studio.md) - updated what's new in C++. ### C++ Standard Template Library (STL) reference **Updated articles** -- [auto_ptr class](../standard-library/auto-ptr-class.md) - Added deprecation info +- [auto_ptr class](../standard-library/auto-ptr-class.md) - added deprecation info ### Active Template Library (ATL), Microsoft Foundation Classes (MFC) **Updated articles** -- [Connection maps](../mfc/reference/connection-maps.md) - Corrected parameter description of `pRefCount` in `AfxConnection(Un)Advise`. -- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - Updated code example. -- [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - Updated MFC hierarchy chart. \ No newline at end of file +- [Connection maps](../mfc/reference/connection-maps.md) - corrected parameter description of `pRefCount` in `AfxConnection(Un)Advise` +- [`CSimpleStringT` Class](../atl-mfc-shared/reference/csimplestringt-class.md) - updated code example +- [MFC class hierarchy chart](../mfc/hierarchy-chart.md) - updated MFC hierarchy chart \ No newline at end of file From 2271a835302af356c5b120565eeefdd625b0cb7a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 28 Jun 2024 16:07:41 -0700 Subject: [PATCH 0291/1239] update conformance - c11 threads and update instructions in c++ tutorial to indicate what's wrong if you don't see the built exe --- docs/build/vscpp-step-2-build.md | 10 +++++----- docs/overview/visual-cpp-language-conformance.md | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/build/vscpp-step-2-build.md b/docs/build/vscpp-step-2-build.md index c5245431eb..eda1367eaa 100644 --- a/docs/build/vscpp-step-2-build.md +++ b/docs/build/vscpp-step-2-build.md @@ -2,7 +2,7 @@ title: Build and run a C++ console app project description: "Build and run a Hello World console app in Visual C++" ms.custom: "mvc" -ms.date: 07/05/2023 +ms.date: 06/28/2024 ms.topic: "tutorial" ms.devlang: "cpp" --- @@ -24,11 +24,11 @@ If Visual Studio looks like this, you're ready to build and run your app: ## Build and run your code in Visual Studio -1. To build your project, choose **Build Solution** from the **Build** menu. The **Output** window shows the results of the build process. +1. To build your project, **Build** > **Build Solution**. The **Output** window shows the results of the build process. :::image type="complex" source="media/vscpp-build-solution.gif" alt-text="Animated screenshot showing the sequence of actions taken to build a project in Visual Studio."::: First, Build is selected from the main menu. Then Build Solution is selected. The Output window shows the build output messages, including that the build is successful. - :::image-end::: + :::image-end::: 1. To run the code, on the menu bar, choose **Debug**, **Start without debugging**. @@ -50,12 +50,12 @@ Normally, you run console apps at the command prompt, not in Visual Studio. Once ::: moniker range="` | VS 2019 16.8 [C11](#note_C11), [2104](#note_2104) | |  `aligned_alloc` | No [M](#note_M) | |  No return specifiers `` | VS 2019 16.8 [C11](#note_C11), [2104](#note_2104) | -|  Threading support `` | No | -|  Atomic support `` | No | +|  Threading support `` | yes | +|  Atomic support `` | yes - experimental | |  `char16_t`, `char32_t` `` | VS 2019 16.8 [C11](#note_C11) | |  `gets()` removed | VS 2019 16.8 [C11](#note_C11), [N](#note_N) | |  `gets_s()` | VS 2019 16.8 [C11](#note_C11) | @@ -541,6 +541,7 @@ A group of papers listed together indicates a Standard feature along with one or |  `quick_exit` | VS 2019 16.8 [C11](#note_C11) | |  `` macros | VS 2019 16.8 [C11](#note_C11) | |  floating point characteristics `` | VS 2019 16.8 [C11](#note_C11) | +|  C11 threads `` | VS 2022 17.8 [C11](#note_C11) | ### Supported values From 457bc423eb630186b2bb491a173056e8352c94b4 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 28 Jun 2024 16:14:36 -0700 Subject: [PATCH 0292/1239] edits --- docs/build/vscpp-step-2-build.md | 2 +- docs/overview/visual-cpp-language-conformance.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/build/vscpp-step-2-build.md b/docs/build/vscpp-step-2-build.md index eda1367eaa..9ba015cea1 100644 --- a/docs/build/vscpp-step-2-build.md +++ b/docs/build/vscpp-step-2-build.md @@ -24,7 +24,7 @@ If Visual Studio looks like this, you're ready to build and run your app: ## Build and run your code in Visual Studio -1. To build your project, **Build** > **Build Solution**. The **Output** window shows the results of the build process. +1. To build your project, from the main menu choose **Build** > **Build Solution**. The **Output** window shows the results of the build process. :::image type="complex" source="media/vscpp-build-solution.gif" alt-text="Animated screenshot showing the sequence of actions taken to build a project in Visual Studio."::: First, Build is selected from the main menu. Then Build Solution is selected. The Output window shows the build output messages, including that the build is successful. diff --git a/docs/overview/visual-cpp-language-conformance.md b/docs/overview/visual-cpp-language-conformance.md index ba1b536cc3..3c691cc856 100644 --- a/docs/overview/visual-cpp-language-conformance.md +++ b/docs/overview/visual-cpp-language-conformance.md @@ -531,7 +531,7 @@ A group of papers listed together indicates a Standard feature along with one or |  `aligned_alloc` | No [M](#note_M) | |  No return specifiers `` | VS 2019 16.8 [C11](#note_C11), [2104](#note_2104) | |  Threading support `` | yes | -|  Atomic support `` | yes - experimental | +|  Atomic support `` | experimental | |  `char16_t`, `char32_t` `` | VS 2019 16.8 [C11](#note_C11) | |  `gets()` removed | VS 2019 16.8 [C11](#note_C11), [N](#note_N) | |  `gets_s()` | VS 2019 16.8 [C11](#note_C11) | From 50b3d603af20103f158224d2b3c35634790d3a68 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 28 Jun 2024 16:25:00 -0700 Subject: [PATCH 0293/1239] edits --- docs/build/vscpp-step-2-build.md | 11 +++++------ docs/overview/visual-cpp-language-conformance.md | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/build/vscpp-step-2-build.md b/docs/build/vscpp-step-2-build.md index 9ba015cea1..af1e3523f8 100644 --- a/docs/build/vscpp-step-2-build.md +++ b/docs/build/vscpp-step-2-build.md @@ -8,12 +8,11 @@ ms.devlang: "cpp" --- # Build and run a C++ console app project -You've created a C++ console app project and entered your code. Now you can build and run it within Visual Studio. Then, run it as a stand-alone app from the command line. +In [Create a C++ console app project](vscpp-step-1-create) you created a C++ console app project and entered your code. Now you can build and run it within Visual Studio. Then, run it as a stand-alone app from the command line. ## Prerequisites - Have Visual Studio with the Desktop development with C++ workload installed and running on your computer. If it's not installed, follow the steps in [Install C++ support in Visual Studio](vscpp-step-0-installation.md). - - Create a "Hello, World!" project. By default, it contains code to print `Hello World!`. If you haven't done this step yet, follow the steps in [Create a C++ console app project](vscpp-step-1-create.md). If Visual Studio looks like this, you're ready to build and run your app: @@ -38,7 +37,7 @@ If Visual Studio looks like this, you're ready to build and run your app: A console window opens and then runs your app. When you start a console app in Visual Studio, it runs your code, then prints "Press any key to continue . . ." to give you a chance to see the output. -Congratulations! You've created your first "Hello, world!" console app in Visual Studio! Press a key to dismiss the console window and return to Visual Studio. +Congratulations! You created your first "Hello, world!" console app in Visual Studio! Press a key to dismiss the console window and return to Visual Studio. [I ran into a problem.](#build-and-run-your-code-in-visual-studio-issues) @@ -73,7 +72,7 @@ Congratulations, you built and ran a console app in Visual Studio! ## Next Steps -Once you've built and run this simple app, you're ready for more complex projects. For more information, see [Using the Visual Studio IDE for C++ Desktop Development](../ide/using-the-visual-studio-ide-for-cpp-desktop-development.md). It has more detailed walkthroughs that explore the capabilities of Microsoft C++ in Visual Studio. +Once you build and run this simple app, you're ready for more complex projects. For more information, see [Using the Visual Studio IDE for C++ Desktop Development](../ide/using-the-visual-studio-ide-for-cpp-desktop-development.md). It has more detailed walkthroughs that explore the capabilities of Microsoft C++ in Visual Studio. ## Troubleshooting guide @@ -89,14 +88,14 @@ If red squiggles appear under anything in the source code editor, the build may ::: moniker range=" **A** In [`/std:c++14`](../build/reference/std-specify-language-standard-version.md) mode, dynamic exception specifications remain unimplemented, and `throw()` is still treated as a synonym for `__declspec(nothrow)`. In C++17, dynamic exception specifications were mostly removed by P0003R5, except for one vestige: `throw()` is deprecated and required to behave as a synonym for **`noexcept`**. In [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) mode, MSVC now conforms to the Standard by giving `throw()` the same behavior as **`noexcept`**, that is, enforcement via termination. -The compiler option [`/Zc:noexceptTypes`](../build/reference/zc-noexcepttypes.md) requests the old behavior of `__declspec(nothrow)`. It's likely that `throw()` will be removed in a future version of C++. To help with migrating code in response to these changes in the Standard and the Microsoft implementation, new compiler warnings for exception specification issues have been added under [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) and [`/permissive-`](../build/reference/permissive-standards-conformance.md). +The compiler option [`/Zc:noexceptTypes`](../build/reference/zc-noexcepttypes.md) requests the old behavior of `__declspec(nothrow)`. It's likely that `throw()` will be removed in a future version of C++. To help with migrating code in response to these changes in the Standard and the Microsoft implementation, new compiler warnings for exception specification issues are added under [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) and [`/permissive-`](../build/reference/permissive-standards-conformance.md). **B** Supported in [`/permissive-`](../build/reference/permissive-standards-conformance.md) mode in Visual Studio 2017 version 15.7. For more information, see [`Two-phase name lookup support comes to MSVC`](https://devblogs.microsoft.com/cppblog/two-phase-name-lookup-support-comes-to-msvc/). From 5b1ae1f0dfd6d4d2212b543baaea151960dac8c0 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 28 Jun 2024 16:30:11 -0700 Subject: [PATCH 0294/1239] fix link --- docs/build/vscpp-step-2-build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/vscpp-step-2-build.md b/docs/build/vscpp-step-2-build.md index af1e3523f8..d2ce5e0b51 100644 --- a/docs/build/vscpp-step-2-build.md +++ b/docs/build/vscpp-step-2-build.md @@ -8,7 +8,7 @@ ms.devlang: "cpp" --- # Build and run a C++ console app project -In [Create a C++ console app project](vscpp-step-1-create) you created a C++ console app project and entered your code. Now you can build and run it within Visual Studio. Then, run it as a stand-alone app from the command line. +In [Create a C++ console app project](vscpp-step-1-create.md) you created a C++ console app project and entered your code. Now you can build and run it within Visual Studio. Then, run it as a stand-alone app from the command line. ## Prerequisites From ed8749fe8295c1b6d4dbc050588a5792da8f2524 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 3 Jul 2024 16:14:39 -0700 Subject: [PATCH 0295/1239] F1 fixes, and title fixes, and point out the _t* functions better --- .../reference/access-s-waccess-s.md | 5 ++-- .../fprintf-fprintf-l-fwprintf-fwprintf-l.md | 4 +-- ...f-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md | 2 +- ...f-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md | 4 +-- .../reference/putenv-s-wputenv-s.md | 8 +++--- ...cpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md | 13 +++++++--- ...set-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 25 +++++++++++-------- ...-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md | 2 +- 8 files changed, 37 insertions(+), 26 deletions(-) diff --git a/docs/c-runtime-library/reference/access-s-waccess-s.md b/docs/c-runtime-library/reference/access-s-waccess-s.md index 1f3fedc12e..f79431635e 100644 --- a/docs/c-runtime-library/reference/access-s-waccess-s.md +++ b/docs/c-runtime-library/reference/access-s-waccess-s.md @@ -8,12 +8,13 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["waccess_s", "access_s", "_waccess_s", "_access_s"] helpviewer_keywords: ["access_s function", "taccess_s function", "_taccess_s function", "waccess_s function", "_access_s function", "_waccess_s function"] -ms.assetid: fb3004fc-dcd3-4569-8b27-d817546e947e --- -# `_access_s`, `_waccess_s` +# `_access_s`, `_waccess_s`, `taccess_s` Determines file read/write permissions. These functions are versions of [`_access`, `_waccess`](access-waccess.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). +For the `t_*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). + ## Syntax ```C diff --git a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md index 184d2fc5e9..67da532e58 100644 --- a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md +++ b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md @@ -6,8 +6,8 @@ api_name: ["fwprintf", "fprintf", "_fprintf_l", "_fwprintf_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["fprintf", "fwprintf", "_ftprintf"] -helpviewer_keywords: ["_fwprintf_l function", "fprintf function", "fprintf_l function", "_fprintf_l function", "_ftprintf function", "fwprintf function", "ftprintf_l function", "ftprintf function", "_ftprintf_l function", "print formatted data to streams", "fwprintf_l function"] +f1_keywords: ["fprintf", "fwprintf", "_ftprintf", "_fwprintf_l"] +helpviewer_keywords: ["_fwprintf_l function", "fprintf function", "fprintf_l function", "_fprintf_l function", "_ftprintf function", "fwprintf function", "ftprintf_l function", "ftprintf function", "_fwprintf_l function", "_ftprintf_l function", "print formatted data to streams", "fwprintf_l function"] --- # `fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l` diff --git a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md index 877bf4a16d..0d069b0872 100644 --- a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md +++ b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md @@ -6,7 +6,7 @@ api_name: ["_fwprintf_p", "_fprintf_p_l", "_fwprintf_p_l", "_fprintf_p"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_fprintf_p", "_ftprintf_p", "fwprintf_p", "_fwprintf_p", "fprintf_p", "ftprintf_p"] +f1_keywords: ["_fprintf_p", "_ftprintf_p", "fwprintf_p", "_fwprintf_p", "fprintf_p", "ftprintf_p", "_fwprintf_p_l"] helpviewer_keywords: ["fprintf_p_l function", "fprintf_p function", "_fprintf_p_l function", "_fprintf_p function", "_ftprintf_p_l function", "streams, printing formatted data to", "_fwprintf_p function", "fwprintf_p function", "_ftprintf_p function", "_fwprintf_p_l function", "ftprintf_p function", "printing [C++], formatted data to streams", "ftprintf_p_l function", "fwprintf_p_l function"] --- # `_fprintf_p`, `_fprintf_p_l`, `_fwprintf_p`, `_fwprintf_p_l` diff --git a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md index 9cdfdff5fc..5f85397b43 100644 --- a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md +++ b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md @@ -6,8 +6,8 @@ api_name: ["_fprintf_s_l", "fwprintf_s", "fprintf_s", "_fwprintf_s_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_ftprintf_s", "fprintf_s", "fwprintf_s"] -helpviewer_keywords: ["ftprintf_s_l function", "ftprintf_s function", "_fprintf_s_l function", "_ftprintf_s function", "_ftprintf_s_l function", "fwprintf_s_l function", "fwprintf_s function", "fprintf_s_l function", "fprintf_s function", "_fwprintf_s_l function", "print formatted data to streams"] +f1_keywords: ["_ftprintf_s", "fprintf_s", "fwprintf_s", "_fwprintf_s_l"] +helpviewer_keywords: ["ftprintf_s_l function", "ftprintf_s function", "_fprintf_s_l function", "_ftprintf_s function", "_ftprintf_s_l function", "fwprintf_s_l function", "fwprintf_s function", "fprintf_s_l function", "fprintf_s function", "_fwprintf_s_l function", "_fwprintf_s_l function", "print formatted data to streams"] --- # `fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l` diff --git a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md index 31b8fd94bb..277e967540 100644 --- a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md +++ b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md @@ -6,16 +6,18 @@ api_name: ["_wputenv_s", "_putenv_s", "_o__putenv_s", "_o__wputenv_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-environment-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["putenv_s", "wputenv_s", "_wputenv_s", "_putenv_s"] -helpviewer_keywords: ["wputenv_s function", "_putenv_s function", "environment variables, deleting", "putenv_s function", "_wputenv_s function", "environment variables, creating", "environment variables, modifying"] +f1_keywords: ["putenv_s", "wputenv_s", "_wputenv_s", "_putenv_s", "_tputenv_s"] +helpviewer_keywords: ["wputenv_s function", "_putenv_s function", "environment variables, deleting", "putenv_s function", "_wputenv_s function", "environment variables, creating", "environment variables, modifying", "_tputenv_s function"] --- -# `_putenv_s`, `_wputenv_s` +# `_putenv_s`, `_wputenv_s`, `_tputenv_s` Creates, modifies, or removes environment variables. These functions are versions of [`_putenv`, `_wputenv`](putenv-wputenv.md) that have security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). +For the `t_*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). + ## Syntax ```C diff --git a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md index ddf9483e51..f3eb99d129 100644 --- a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md +++ b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md @@ -6,17 +6,18 @@ api_name: ["_mbsncpy_s_l", "wcsncpy_s", "_strncpy_s_l", "strncpy_s", "_mbsncpy_s api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_tcsncpy_s", "_wcsncpy_s_l", "strncpy_s", "_strncpy_s_l", "wcsncpy_s", "_tcsncpy_s_l"] -helpviewer_keywords: ["_wcsncpy_s_l function", "_mbsnbcpy_s function", "_tcsncpy_s_l function", "mbsncpy_s function", "strncpy_s_l function", "_strncpy_s_l function", "strncpy_s function", "mbsncpy_s_l function", "wcsncpy_s function", "copying strings", "strings [C++], copying", "_mbsnbcpy_s_l function", "_tcsncpy_s function", "wcsncpy_s_l function"] -ms.assetid: a971c800-94d1-4d88-92f3-a2fe236a4546 +f1_keywords: ["_tcsncpy_s", "_wcsncpy_s_l", "strncpy_s", "_strncpy_s_l", "wcsncpy_s", "_tcsncpy_s_l", "_tcsnccpy_s", "_tcsnccpy_s_l"] +helpviewer_keywords: ["_wcsncpy_s_l function", "_mbsnbcpy_s function", "_tcsncpy_s_l function", "mbsncpy_s function", "strncpy_s_l function", "_strncpy_s_l function", "strncpy_s function", "mbsncpy_s_l function", "wcsncpy_s function", "_tcsnccpy_s function", "copying strings", "strings [C++], copying", "_mbsnbcpy_s_l function", "_tcsncpy_s function", "wcsncpy_s_l function", "_tcsnccpy_s_l function"] --- -# `strncpy_s`, `_strncpy_s_l`, `wcsncpy_s`, `_wcsncpy_s_l`, `_mbsncpy_s`, `_mbsncpy_s_l` +# `strncpy_s`, `_strncpy_s_l`, `wcsncpy_s`, `_wcsncpy_s_l`, `_mbsncpy_s`, `_mbsncpy_s_l`, `_tcsnccpy_s`, `_tcsnccpy_s_l` Copies characters of one string to another. These versions of [`strncpy`, `_strncpy_l`, `wcsncpy`, `_wcsncpy_l`, `_mbsncpy`, `_mbsncpy_l`](strncpy-strncpy-l-wcsncpy-wcsncpy-l-mbsncpy-mbsncpy-l.md) have security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). > [!IMPORTANT] > **`_mbsncpy_s`** and **`_mbsncpy_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). +For the `_t_*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). + ## Syntax ```C @@ -174,6 +175,10 @@ By default, this function's global state is scoped to the application. To change |---|---|---|---| | `_tcsncpy_s` | **`strncpy_s`** | **`_mbsnbcpy_s`** | **`wcsncpy_s`** | | `_tcsncpy_s_l` | **`_strncpy_s_l`** | **`_mbsnbcpy_s_l`** | **`_wcsncpy_s_l`** | +| `_tcsnccpy_s` | **`strncpy_s`** | **`_mbsncpy_s`** | **`_wcsncpy_s`** | +| `_tcsnccpy_s_l` | **`_strncpy_s_l`** | **`_mbsncpy_s_l`** | **`_wcsncpy_s_l`** | + + > [!NOTE] > **`_strncpy_s_l`**, **`_wcsncpy_s_l`** and **`_mbsncpy_s_l`** have no locale dependence. They're provided just for `_tcsncpy_s_l` and aren't intended to be called directly. diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index 61f514871a..0184d5b3e5 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -6,17 +6,18 @@ api_name: ["_mbsnset_s_l", "_strnset_s", "_mbsnset_s", "_strnset_s_l", "_wcsnset api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_tcsnset_s", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l"] -helpviewer_keywords: ["tcsnset_s function", "mbsnset_s_l function", "initializing characters", "wcsnset_s function", "mbsnset_s function", "_tcsnset_s_l function", "_strnset_s_l function", "_mbsnset_s function", "strnset_s_l function", "_tcsnset_s function", "_strnset_s function", "tcsnset_s_l function", "_mbsnset_s_l function", "strnset_s function", "_wcsnset_s function"] -ms.assetid: 9cf1b321-b5cb-4469-b285-4c07cfbd8813 +f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_tcsnset_s", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l", "_tcsncset_s", "_tcsncset_s", "_tcsncset_s_l"] +helpviewer_keywords: ["tcsnset_s function", "mbsnset_s_l function", "initializing characters", "wcsnset_s function", "mbsnset_s function", "_tcsnset_s_l function", "_strnset_s_l function", "_mbsnset_s function", "strnset_s_l function", "_tcsnset_s function", "_strnset_s function", "tcsnset_s_l function", "_mbsnset_s_l function", "strnset_s function", "_wcsnset_s function", "_tcsncset_s function", "_tcsncset_s_l function"] --- -# `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l` +# `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l`, `_tcsncset_s`, `_tcsncset_s_l` Initializes characters of a string to a given character. These versions of [`_strnset`, `_strnset_l`, `_wcsnset`, `_wcsnset_l`, `_mbsnset`, `_mbsnset_l`](strnset-strnset-l-wcsnset-wcsnset-l-mbsnset-mbsnset-l.md) have security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). > [!IMPORTANT] > **`_mbsnset_s`** and **`_mbsnset_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). +For the `_t*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). + ## Syntax ```C @@ -92,26 +93,28 @@ These functions set, at most, the first *`count`* characters of *`str`* to *`c`* The output value is affected by the setting of the `LC_CTYPE` category setting of the locale. For more information, see [`setlocale`](setlocale-wsetlocale.md). The versions of these functions without the `_l` suffix use the current locale for this locale-dependent behavior; the versions with the `_l` suffix are identical except that they use the locale parameter passed in instead. For more information, see [Locale](../locale.md). -The debug library versions of these functions first fill the buffer with 0xFE. To disable this behavior, use [`_CrtSetDebugFillThreshold`](crtsetdebugfillthreshold.md). +The debug library versions of these functions first fill the buffer with `0xFE`. To disable this behavior, use [`_CrtSetDebugFillThreshold`](crtsetdebugfillthreshold.md). By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). ### Generic-text routine mappings -| TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_tcsnset_s` | **`_strnset_s`** | **`_mbsnbset_s`** | **`_wcsnset_s`** | | `_tcsnset_s_l` | **`_strnset_s_l`** | **`_mbsnbset_s_l`** | **`_wcsnset_s_l`** | +| `_tcsncset_s` | **`_strnset_s`** | **`_mbsnset_s`** | **`_wcsnset_s`** | +| `_tcsncset_s_l` | **`_strnset_s_l`** | **`_mbsnset_s_l`** | **`_wcsnset_s_l`** | ## Requirements | Routine | Required header | |---|---| -| **`_strnset_s`** | \ | -| **`_strnset_s_l`** | \ | -| **`_wcsnset_s`** | \ or \ | -| **`_wcsnset_s_l`** | \ | -| **`_mbsnset_s`**, **`_mbsnset_s_l`** | \ | +| **`_strnset_s`** | `` | +| **`_strnset_s_l`** | `` | +| **`_wcsnset_s`** | `` or `` | +| **`_wcsnset_s_l`** | `` | +| **`_mbsnset_s`**, **`_mbsnset_s_l`** | `` | For more compatibility information, see [Compatibility](../compatibility.md). diff --git a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md index 184d230286..c51780ef4c 100644 --- a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md +++ b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md @@ -6,7 +6,7 @@ api_name: ["_vswprintf_s_l", "vsprintf_s", "vswprintf_s", "_vsprintf_s_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["CORECRT_WSTDIO/vswprintf_s", "STDIO/vsprintf_s", "TCHAR/_vstprintf_s", "vswprintf_s", "vsprintf_s", "_vstprintf_s"] +f1_keywords: ["CORECRT_WSTDIO/vswprintf_s", "STDIO/vsprintf_s", "TCHAR/_vstprintf_s", "vswprintf_s", "vsprintf_s", "_vstprintf_s", "_vswprintf_s_l"] helpviewer_keywords: ["_vstprintf_s_l function", "vsprintf_s_l function", "_vstprintf_s function", "vswprintf_s function", "vstprintf_s function", "vstprintf_s_l function", "vswprintf_s_l function", "vsprintf_s function", "_vsprintf_s_l function", "formatted text [C++]", "_vswprintf_s_l function"] --- # `vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l` From 6cdc7b7cdf0b543732ca35acaeba798d7978b18c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 3 Jul 2024 16:32:07 -0700 Subject: [PATCH 0296/1239] cleanup --- .../reference/access-s-waccess-s.md | 12 ++++++------ .../reference/putenv-s-wputenv-s.md | 2 +- ...-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md | 4 +--- ...-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 4 ++-- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/c-runtime-library/reference/access-s-waccess-s.md b/docs/c-runtime-library/reference/access-s-waccess-s.md index f79431635e..2c82695e23 100644 --- a/docs/c-runtime-library/reference/access-s-waccess-s.md +++ b/docs/c-runtime-library/reference/access-s-waccess-s.md @@ -6,14 +6,14 @@ api_name: ["_access_s", "_waccess_s", "_o__access_s", "_o__waccess_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-filesystem-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["waccess_s", "access_s", "_waccess_s", "_access_s"] -helpviewer_keywords: ["access_s function", "taccess_s function", "_taccess_s function", "waccess_s function", "_access_s function", "_waccess_s function"] +f1_keywords: ["waccess_s", "access_s", "_waccess_s", "_access_s", "taccess_s"] +helpviewer_keywords: ["access_s function", "taccess_s function", "waccess_s function", "_access_s function", "_waccess_s function"] --- # `_access_s`, `_waccess_s`, `taccess_s` Determines file read/write permissions. These functions are versions of [`_access`, `_waccess`](access-waccess.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). -For the `t_*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `taccess_s`, see [Generic-text routine mappings](#generic-text-routine-mappings). ## Syntax @@ -69,7 +69,7 @@ By default, this function's global state is scoped to the application. To change ### Generic-text routine mappings -| Tchar.h routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +| `Tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_taccess_s` | **`_access_s`** | **`_access_s`** | **`_waccess_s`** | @@ -77,8 +77,8 @@ By default, this function's global state is scoped to the application. To change | Routine | Required header | Optional header | |---|---|---| -| **`_access_s`** | \ | \ | -| **`_waccess_s`** | \ or \ | \ | +| **`_access_s`** | `` | `` | +| **`_waccess_s`** | `` or `` | `` | ## Example diff --git a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md index 277e967540..4a37629a4f 100644 --- a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md +++ b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md @@ -16,7 +16,7 @@ Creates, modifies, or removes environment variables. These functions are version > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For the `t_*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tputenv_s`, see [Generic-text routine mappings](#generic-text-routine-mappings). ## Syntax diff --git a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md index f3eb99d129..0dbe62589a 100644 --- a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md +++ b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md @@ -16,7 +16,7 @@ Copies characters of one string to another. These versions of [`strncpy`, `_str > [!IMPORTANT] > **`_mbsncpy_s`** and **`_mbsncpy_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For the `_t_*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tcsnccpy_s` and `_tcsnccpy_s_l`, see [Generic-text routine mappings](#generic-text-routine-mappings). ## Syntax @@ -178,8 +178,6 @@ By default, this function's global state is scoped to the application. To change | `_tcsnccpy_s` | **`strncpy_s`** | **`_mbsncpy_s`** | **`_wcsncpy_s`** | | `_tcsnccpy_s_l` | **`_strncpy_s_l`** | **`_mbsncpy_s_l`** | **`_wcsncpy_s_l`** | - - > [!NOTE] > **`_strncpy_s_l`**, **`_wcsncpy_s_l`** and **`_mbsncpy_s_l`** have no locale dependence. They're provided just for `_tcsncpy_s_l` and aren't intended to be called directly. diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index 0184d5b3e5..ef68ea7299 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -6,7 +6,7 @@ api_name: ["_mbsnset_s_l", "_strnset_s", "_mbsnset_s", "_strnset_s_l", "_wcsnset api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_tcsnset_s", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l", "_tcsncset_s", "_tcsncset_s", "_tcsncset_s_l"] +f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_tcsnset_s", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l", "_tcsncset_s", "_tcsncset_s_l"] helpviewer_keywords: ["tcsnset_s function", "mbsnset_s_l function", "initializing characters", "wcsnset_s function", "mbsnset_s function", "_tcsnset_s_l function", "_strnset_s_l function", "_mbsnset_s function", "strnset_s_l function", "_tcsnset_s function", "_strnset_s function", "tcsnset_s_l function", "_mbsnset_s_l function", "strnset_s function", "_wcsnset_s function", "_tcsncset_s function", "_tcsncset_s_l function"] --- # `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l`, `_tcsncset_s`, `_tcsncset_s_l` @@ -16,7 +16,7 @@ Initializes characters of a string to a given character. These versions of [`_st > [!IMPORTANT] > **`_mbsnset_s`** and **`_mbsnset_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For the `_t*` function variants, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tcsncset_s` and `_tcsncset_s_l` functions, see [Generic-text routine mappings](#generic-text-routine-mappings). ## Syntax From 5957f999905e09c21ba9c6711c54cdb4f73f326f Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 3 Jul 2024 16:40:51 -0700 Subject: [PATCH 0297/1239] small fix --- ...s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index ef68ea7299..8ba47658d3 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -16,7 +16,7 @@ Initializes characters of a string to a given character. These versions of [`_st > [!IMPORTANT] > **`_mbsnset_s`** and **`_mbsnset_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For `_tcsncset_s` and `_tcsncset_s_l` functions, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tcsncset_s` and `_tcsncset_s_l`, see [Generic-text routine mappings](#generic-text-routine-mappings). ## Syntax From 833361465681aad5e9cfe52c34d6b8b503c043be Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 3 Jul 2024 16:59:42 -0700 Subject: [PATCH 0298/1239] make toc match --- docs/c-runtime-library/reference/access-s-waccess-s.md | 4 +++- .../reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md | 4 +++- .../fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md | 4 +++- .../fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md | 4 +++- docs/c-runtime-library/reference/putenv-s-wputenv-s.md | 4 +++- ...cpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md | 4 +++- ...set-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 4 +++- .../vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md | 6 +++++- docs/c-runtime-library/toc.yml | 8 ++++---- 9 files changed, 30 insertions(+), 12 deletions(-) diff --git a/docs/c-runtime-library/reference/access-s-waccess-s.md b/docs/c-runtime-library/reference/access-s-waccess-s.md index 2c82695e23..3adb7ce7cb 100644 --- a/docs/c-runtime-library/reference/access-s-waccess-s.md +++ b/docs/c-runtime-library/reference/access-s-waccess-s.md @@ -69,7 +69,9 @@ By default, this function's global state is scoped to the application. To change ### Generic-text routine mappings -| `Tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_taccess_s` | **`_access_s`** | **`_access_s`** | **`_waccess_s`** | diff --git a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md index 67da532e58..0d03e2c0e0 100644 --- a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md +++ b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md @@ -75,7 +75,9 @@ The versions of these functions with the **`_l`** suffix are identical except th ### Generic-text routine mappings -| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | **`_ftprintf`** | **`fprintf`** | **`fprintf`** | **`fwprintf`** | | **`_ftprintf_l`** | **`_fprintf_l`** | **`_fprintf_l`** | **`_fwprintf_l`** | diff --git a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md index 0d069b0872..ccbd078130 100644 --- a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md +++ b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md @@ -75,7 +75,9 @@ Like the non-secure versions (see [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprin ### Generic-text routine mappings -| Tchar.h routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_ftprintf_p` | **`_fprintf_p`** | **`_fprintf_p`** | **`_fwprintf_p`** | | `_ftprintf_p_l` | **`_fprintf_p_l`** | **`_fprintf_p_l`** | **`_fwprintf_p_l`** | diff --git a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md index 5f85397b43..ea51c1cf9a 100644 --- a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md +++ b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md @@ -76,7 +76,9 @@ Like the non-secure versions (see [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprin ### Generic-text routine mappings -| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | **`_ftprintf_s`** | **`fprintf_s`** | **`fprintf_s`** | **`fwprintf_s`** | | **`_ftprintf_s_l`** | **`_fprintf_s_l`** | **`_fprintf_s_l`** | **`_fwprintf_s_l`** | diff --git a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md index 4a37629a4f..380ace69fb 100644 --- a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md +++ b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md @@ -60,7 +60,9 @@ By default, this function's global state is scoped to the application. To change ### Generic-text routine mappings -| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_tputenv_s` | **`_putenv_s`** | **`_putenv_s`** | **`_wputenv_s`** | diff --git a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md index 0dbe62589a..eb83a03d02 100644 --- a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md +++ b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md @@ -171,7 +171,9 @@ By default, this function's global state is scoped to the application. To change ### Generic-text routine mappings -| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_tcsncpy_s` | **`strncpy_s`** | **`_mbsnbcpy_s`** | **`wcsncpy_s`** | | `_tcsncpy_s_l` | **`_strncpy_s_l`** | **`_mbsnbcpy_s_l`** | **`_wcsncpy_s_l`** | diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index 8ba47658d3..f701dee3cf 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -99,7 +99,9 @@ By default, this function's global state is scoped to the application. To change ### Generic-text routine mappings -| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_tcsnset_s` | **`_strnset_s`** | **`_mbsnbset_s`** | **`_wcsnset_s`** | | `_tcsnset_s_l` | **`_strnset_s_l`** | **`_mbsnbset_s_l`** | **`_wcsnset_s_l`** | diff --git a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md index c51780ef4c..d7efaa250a 100644 --- a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md +++ b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md @@ -13,6 +13,8 @@ helpviewer_keywords: ["_vstprintf_s_l function", "vsprintf_s_l function", "_vstp Write formatted output using a pointer to a list of arguments. These functions are versions of [`vsprintf`, `_vsprintf_l`, `vswprintf`, `_vswprintf_l`, \`__vswprintf_l`](vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). +For `_vstprintf_s` and `_vstprintf_s_l`, see [Generic-text routine mappings](#generic-text-routine-mappings). + ## Syntax ```C @@ -96,7 +98,9 @@ In C++, using these functions is simplified by template overloads. The overloads ### Generic-text routine mappings -| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. + +| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_vstprintf_s` | **`vsprintf_s`** | **`vsprintf_s`** | **`vswprintf_s`** | | `_vstprintf_s_l` | **`_vsprintf_s_l`** | **`_vsprintf_s_l`** | **`_vswprintf_s_l`** | diff --git a/docs/c-runtime-library/toc.yml b/docs/c-runtime-library/toc.yml index b4497d6277..3b46fdbc73 100644 --- a/docs/c-runtime-library/toc.yml +++ b/docs/c-runtime-library/toc.yml @@ -477,7 +477,7 @@ items: href: ../c-runtime-library/reference/access-crt.md - name: _access, _waccess href: ../c-runtime-library/reference/access-waccess.md - - name: _access_s, _waccess_s + - name: _access_s, _waccess_s, taccess_s href: ../c-runtime-library/reference/access-s-waccess-s.md - name: acos, acosf, acosl href: ../c-runtime-library/reference/acos-acosf-acosl.md @@ -1457,7 +1457,7 @@ items: href: ../c-runtime-library/reference/putenv.md - name: _putenv, _wputenv href: ../c-runtime-library/reference/putenv-wputenv.md - - name: _putenv_s, _wputenv_s + - name: _putenv_s, _wputenv_s, _tputenv_s href: ../c-runtime-library/reference/putenv-s-wputenv-s.md - name: puts, _putws href: ../c-runtime-library/reference/puts-putws.md @@ -1737,7 +1737,7 @@ items: href: ../c-runtime-library/reference/strncoll-wcsncoll-mbsncoll-strncoll-l-wcsncoll-l-mbsncoll-l.md - name: strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l href: ../c-runtime-library/reference/strncpy-strncpy-l-wcsncpy-wcsncpy-l-mbsncpy-mbsncpy-l.md - - name: strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l + - name: strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l, _tcsnccpy_s, _tcsnccpy_s_l href: ../c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md - name: _strnextc, _wcsnextc, _mbsnextc, _mbsnextc_l href: ../c-runtime-library/reference/strnextc-wcsnextc-mbsnextc-mbsnextc-l.md @@ -1755,7 +1755,7 @@ items: href: ../c-runtime-library/reference/strnset-wcsnset.md - name: _strnset, _strnset_l, _wcsnset, _wcsnset_l, _mbsnset, _mbsnset_l href: ../c-runtime-library/reference/strnset-strnset-l-wcsnset-wcsnset-l-mbsnset-mbsnset-l.md - - name: _strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l + - name: _strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l, _tcsncset_s, _tcsncset_s_l href: ../c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md - name: strpbrk, wcspbrk, _mbspbrk, _mbspbrk_l href: ../c-runtime-library/reference/strpbrk-wcspbrk-mbspbrk-mbspbrk-l.md From 94dbbdfacc2476bd93882eb5cb4be989925df3eb Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 3 Jul 2024 17:16:41 -0700 Subject: [PATCH 0299/1239] cleanup --- docs/c-runtime-library/reference/access-s-waccess-s.md | 2 +- .../reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md | 4 ++-- .../fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md | 8 ++++---- .../fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md | 4 ++-- docs/c-runtime-library/reference/putenv-s-wputenv-s.md | 4 ++-- ...-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 10 +++++----- ...sprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md | 6 +++--- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/c-runtime-library/reference/access-s-waccess-s.md b/docs/c-runtime-library/reference/access-s-waccess-s.md index 3adb7ce7cb..9aad1accf2 100644 --- a/docs/c-runtime-library/reference/access-s-waccess-s.md +++ b/docs/c-runtime-library/reference/access-s-waccess-s.md @@ -73,7 +73,7 @@ The function in the `tchar.h` column maps to the function in the other columns d | `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| `_taccess_s` | **`_access_s`** | **`_access_s`** | **`_waccess_s`** | +| `_taccess_s` | `_access_s` | `_access_s` | `_waccess_s` | ## Requirements diff --git a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md index 0d03e2c0e0..581d61746a 100644 --- a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md +++ b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md @@ -79,8 +79,8 @@ The function in the `tchar.h` column maps to the function in the other columns d | `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| **`_ftprintf`** | **`fprintf`** | **`fprintf`** | **`fwprintf`** | -| **`_ftprintf_l`** | **`_fprintf_l`** | **`_fprintf_l`** | **`_fwprintf_l`** | +| `_ftprintf` | `fprintf` | `fprintf` | `fwprintf` | +| `_ftprintf_l` | `_fprintf_l` | `_fprintf_l` | `_fwprintf_l` | For more information, see [Format specification syntax](../format-specification-syntax-printf-and-wprintf-functions.md). diff --git a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md index ccbd078130..93b07092f0 100644 --- a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md +++ b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md @@ -79,8 +79,8 @@ The function in the `tchar.h` column maps to the function in the other columns d | `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| `_ftprintf_p` | **`_fprintf_p`** | **`_fprintf_p`** | **`_fwprintf_p`** | -| `_ftprintf_p_l` | **`_fprintf_p_l`** | **`_fprintf_p_l`** | **`_fwprintf_p_l`** | +| `_ftprintf_p` | `_fprintf_p` | `_fprintf_p` | `_fwprintf_p` | +| `_ftprintf_p_l` | `_fprintf_p_l` | `_fprintf_p_l` | `_fwprintf_p_l` | For more information, see [Format specification syntax](../format-specification-syntax-printf-and-wprintf-functions.md). @@ -88,8 +88,8 @@ For more information, see [Format specification syntax](../format-specification- | Function | Required header | |---|---| -| **`_fprintf_p`**, **`_fprintf_p_l`** | \ | -| **`_fwprintf_p`**, **`_fwprintf_p_l`** | \ or \ | +| `_fprintf_p`, `_fprintf_p_l` | `` | +| `_fwprintf_p`, `_fwprintf_p_l` | `` or `` | For more compatibility information, see [Compatibility](../compatibility.md). diff --git a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md index ea51c1cf9a..1b2ac57aaf 100644 --- a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md +++ b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md @@ -80,8 +80,8 @@ The function in the `tchar.h` column maps to the function in the other columns d | `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| **`_ftprintf_s`** | **`fprintf_s`** | **`fprintf_s`** | **`fwprintf_s`** | -| **`_ftprintf_s_l`** | **`_fprintf_s_l`** | **`_fprintf_s_l`** | **`_fwprintf_s_l`** | +| `_ftprintf_s` | `fprintf_s` | `fprintf_s` | `fwprintf_s` | +| `_ftprintf_s_l` | `_fprintf_s_l` | `_fprintf_s_l` | `_fwprintf_s_l` | For more information, see [Format specification syntax](../format-specification-syntax-printf-and-wprintf-functions.md). diff --git a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md index 380ace69fb..d346ac9f5d 100644 --- a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md +++ b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md @@ -62,9 +62,9 @@ By default, this function's global state is scoped to the application. To change The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. -| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| `_tputenv_s` | **`_putenv_s`** | **`_putenv_s`** | **`_wputenv_s`** | +| `_tputenv_s` | `_putenv_s` | `_putenv_s` | `_wputenv_s` | *`varname`* is the name of the environment variable to be added or modified and *`value_string`* is the variable's value. If *`varname`* is already part of the environment, its value is replaced by *`value_string`*; otherwise, the new *`varname`* variable and its *`value_string`* are added to the environment. You can remove a variable from the environment by specifying an empty string (that is, `""`) for *`value_string`*. diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index f701dee3cf..a377069722 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -101,12 +101,12 @@ By default, this function's global state is scoped to the application. To change The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. -| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| `_tcsnset_s` | **`_strnset_s`** | **`_mbsnbset_s`** | **`_wcsnset_s`** | -| `_tcsnset_s_l` | **`_strnset_s_l`** | **`_mbsnbset_s_l`** | **`_wcsnset_s_l`** | -| `_tcsncset_s` | **`_strnset_s`** | **`_mbsnset_s`** | **`_wcsnset_s`** | -| `_tcsncset_s_l` | **`_strnset_s_l`** | **`_mbsnset_s_l`** | **`_wcsnset_s_l`** | +| `_tcsnset_s` | `_strnset_s` | `_mbsnbset_s` | `_wcsnset_s` | +| `_tcsnset_s_l` | `_strnset_s_l` | `_mbsnbset_s_l` | `_wcsnset_s_l` | +| `_tcsncset_s` | `_strnset_s` | `_mbsnset_s` | `_wcsnset_s` | +| `_tcsncset_s_l` | `_strnset_s_l` | `_mbsnset_s_l` | `_wcsnset_s_l` | ## Requirements diff --git a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md index d7efaa250a..c29347d3ea 100644 --- a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md +++ b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md @@ -100,10 +100,10 @@ In C++, using these functions is simplified by template overloads. The overloads The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. -| `tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +| `tchar.h` function | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| -| `_vstprintf_s` | **`vsprintf_s`** | **`vsprintf_s`** | **`vswprintf_s`** | -| `_vstprintf_s_l` | **`_vsprintf_s_l`** | **`_vsprintf_s_l`** | **`_vswprintf_s_l`** | +| `_vstprintf_s` | `vsprintf_s` | `vsprintf_s` | `vswprintf_s` | +| `_vstprintf_s_l` | `_vsprintf_s_l` | `_vsprintf_s_l` | `_vswprintf_s_l` | ## Requirements From e6cbb10ccaa50e0fac12c2f335c74c042459ff0e Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Wed, 10 Jul 2024 15:39:42 -0700 Subject: [PATCH 0300/1239] fix link (#5620) * fix link * add author metdata * fix code escape --------- Co-authored-by: TylerMSFT --- docs/build/customize-cmake-settings.md | 2 +- docs/c-language/index.yml | 1 + docs/code-quality/index.yml | 1 + docs/cpp/index.yml | 1 + docs/intrinsics/index.yml | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/build/customize-cmake-settings.md b/docs/build/customize-cmake-settings.md index 0df13f3b3f..078c550ff5 100644 --- a/docs/build/customize-cmake-settings.md +++ b/docs/build/customize-cmake-settings.md @@ -44,7 +44,7 @@ Corresponds to the **inheritedEnvironments** setting. Defines the compiler envir ### CMake toolchain file -Path to the [CMake toolchain file](https://cmake.org/cmake/help/latest/variable/CMAKE_TOOLCHAIN_FILE.html). This path is passed to CMake as "-DCMAKE_TOOLCHAIN_FILE = \". Toolchain files specify locations of compilers and toolchain utilities, and other target platform and compiler-related information. By default, Visual Studio uses the [vcpkg toolchain file](https://github.com/microsoft/vcpkg/blob/master/docs/examples/installing-and-using-packages.md#cmake) if this setting is unspecified. +Path to the [CMake toolchain file](https://cmake.org/cmake/help/latest/variable/CMAKE_TOOLCHAIN_FILE.html). This path is passed to CMake as `"-DCMAKE_TOOLCHAIN_FILE = `. Toolchain files specify locations of compilers and toolchain utilities, and other target platform and compiler-related information. By default, Visual Studio uses the [vcpkg toolchain file](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/examples/installing-and-using-packages.md#cmake) if this setting is unspecified. ### Build root diff --git a/docs/c-language/index.yml b/docs/c-language/index.yml index feb5f6855e..3f038a096b 100644 --- a/docs/c-language/index.yml +++ b/docs/c-language/index.yml @@ -5,6 +5,7 @@ summary: Learn to use C and the C runtime library. metadata: title: C docs - get started, tutorials, reference. description: C programming reference for users of Microsoft C/C++ and Visual Studio. + ms.author: twhitney ms.topic: landing-page ms.date: 05/28/2020 ms.custom: intro-landing-hub diff --git a/docs/code-quality/index.yml b/docs/code-quality/index.yml index 7ae4caa668..337b3f5afa 100644 --- a/docs/code-quality/index.yml +++ b/docs/code-quality/index.yml @@ -8,6 +8,7 @@ metadata: description: Learn how Visual Studio can help you analyze C and C++ code quality. ms.topic: landing-page ms.date: 05/26/2020 + ms.author: twhitney ms.custom: intro-landing-hub # linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new diff --git a/docs/cpp/index.yml b/docs/cpp/index.yml index c5f89b17cd..4ba7817947 100644 --- a/docs/cpp/index.yml +++ b/docs/cpp/index.yml @@ -7,6 +7,7 @@ metadata: description: C++ programming reference for users of Microsoft C++ and Visual Studio. ms.topic: landing-page ms.date: 03/22/2022 + ms.author: twhitney ms.custom: intro-landing-hub # linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new diff --git a/docs/intrinsics/index.yml b/docs/intrinsics/index.yml index a6d53048f0..9a0f48891f 100644 --- a/docs/intrinsics/index.yml +++ b/docs/intrinsics/index.yml @@ -8,6 +8,7 @@ metadata: description: Visual Studio includes assemblers and compiler intrinsics for low-level programming tasks. ms.topic: landing-page ms.date: 05/26/2020 + ms.author: twhitney ms.custom: intro-landing-hub # linkListType: architecture | concept | deploy | download | get-started | how-to-guide | learn | overview | quickstart | reference | tutorial | video | whats-new From 12df3bd56963773cf627531dc83231260ba9988c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 11 Jul 2024 14:37:56 -0700 Subject: [PATCH 0301/1239] approach1 --- ...fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md | 8 ++++---- ...fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md | 13 ++++++------- .../reference/putenv-s-wputenv-s.md | 4 ++-- ...l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md | 6 +++--- ...l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 6 +++--- docs/c-runtime-library/toc.yml | 6 +++--- 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md index 93b07092f0..810cb69658 100644 --- a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md +++ b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md @@ -1,15 +1,15 @@ --- -description: "Learn more about: _fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l" +description: "Learn more about: _fprintf_p, _fprintf_p_l, _ftprintf_p, _ftprintf_p_l, _fwprintf_p, _fwprintf_p_l" title: "_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l" ms.date: "3/9/2021" api_name: ["_fwprintf_p", "_fprintf_p_l", "_fwprintf_p_l", "_fprintf_p"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_fprintf_p", "_ftprintf_p", "fwprintf_p", "_fwprintf_p", "fprintf_p", "ftprintf_p", "_fwprintf_p_l"] -helpviewer_keywords: ["fprintf_p_l function", "fprintf_p function", "_fprintf_p_l function", "_fprintf_p function", "_ftprintf_p_l function", "streams, printing formatted data to", "_fwprintf_p function", "fwprintf_p function", "_ftprintf_p function", "_fwprintf_p_l function", "ftprintf_p function", "printing [C++], formatted data to streams", "ftprintf_p_l function", "fwprintf_p_l function"] +f1_keywords: ["_fprintf_p", "_ftprintf_p", "_ftprintf_p_l", "fwprintf_p", "_fwprintf_p", "fprintf_p", "ftprintf_p", "_fwprintf_p_l"] +helpviewer_keywords: ["fprintf_p_l function", "fprintf_p function", "_fprintf_p_l function", "_fprintf_p function", "_ftprintf_p function", "_ftprintf_p_l function", "streams, printing formatted data to", "_fwprintf_p function", "fwprintf_p function", "_fwprintf_p_l function", "ftprintf_p function", "printing [C++], formatted data to streams", "ftprintf_p_l function", "fwprintf_p_l function"] --- -# `_fprintf_p`, `_fprintf_p_l`, `_fwprintf_p`, `_fwprintf_p_l` +# `_fprintf_p`, `_fprintf_p_l`, `_ftprintf_p`, `_ftprintf_p_l`, `_fwprintf_p`, `_fwprintf_p_l` Prints formatted data to a stream. diff --git a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md index 1b2ac57aaf..a5e521cc92 100644 --- a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md +++ b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md @@ -1,15 +1,15 @@ --- -description: "Learn more about: fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l" -title: "fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l" +description: "Learn more about: fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l, _ftprintf_s, _ftprintf_s_l" +title: "fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l, _ftprintf_s, _ftprintf_s_l" ms.date: "3/9/2021" -api_name: ["_fprintf_s_l", "fwprintf_s", "fprintf_s", "_fwprintf_s_l"] +api_name: ["_fprintf_s_l", "fwprintf_s", "fprintf_s", "_fwprintf_s_l", "_ftprintf_s", "_ftprintf_s_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_ftprintf_s", "fprintf_s", "fwprintf_s", "_fwprintf_s_l"] -helpviewer_keywords: ["ftprintf_s_l function", "ftprintf_s function", "_fprintf_s_l function", "_ftprintf_s function", "_ftprintf_s_l function", "fwprintf_s_l function", "fwprintf_s function", "fprintf_s_l function", "fprintf_s function", "_fwprintf_s_l function", "_fwprintf_s_l function", "print formatted data to streams"] +f1_keywords: ["_ftprintf_s", "_ftprintf_s_l", "fprintf_s", "fwprintf_s", "_fwprintf_s_l", "_ftprintf" "_ftprintf_l"] +helpviewer_keywords: ["ftprintf_s_l function", "ftprintf_s function", "_ftprintf_l function", "_fprintf_s_l function", "_ftprintf_s function", "_ftprintf_s_l function", "fwprintf_s_l function", "fwprintf_s function", "fprintf_s_l function", "fprintf_s function", "_fwprintf_s_l function", "_fwprintf_s_l function", "print formatted data to streams"] --- -# `fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l` +# `fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l`, `_ftprintf`, `_ftprintf_l`, `_ftprintf_s`, `_ftprintf_s_l` Print formatted data to a stream. These functions are versions of [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](fprintf-fprintf-l-fwprintf-fwprintf-l.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). @@ -69,7 +69,6 @@ The versions of these functions with the **`_l`** suffix are identical except th > [!IMPORTANT] > Ensure that *`format`* is not a user-defined string. > -> > Starting in Windows 10 version 2004 (build 19041), the `printf` family of functions prints exactly representable floating point numbers according to the IEEE 754 rules for rounding. In previous versions of Windows, exactly representable floating point numbers ending in '5' would always round up. IEEE 754 states that they must round to the closest even digit (also known as "Banker's Rounding"). For example, both `printf("%1.0f", 1.5)` and `printf("%1.0f", 2.5)` should round to 2. Previously, 1.5 would round to 2 and 2.5 would round to 3. This change only affects exactly representable numbers. For example, 2.35 (which, when represented in memory, is closer to 2.35000000000000008) continues to round up to 2.4. Rounding done by these functions now also respects the floating point rounding mode set by [`fesetround`](fegetround-fesetround2.md). Previously, rounding always chose `FE_TONEAREST` behavior. This change only affects programs built using Visual Studio 2019 version 16.2 and later. To use the legacy floating point rounding behavior, link with ['legacy_stdio_float_rounding.obj`](../link-options.md). Like the non-secure versions (see [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](fprintf-fprintf-l-fwprintf-fwprintf-l.md)), these functions validate their parameters and invoke the invalid parameter handler, as described in [Parameter validation](../parameter-validation.md), if either *`stream`* or *`format`* is a `NULL` pointer. The format string itself is also validated. If there are any unknown or badly formed formatting specifiers, these functions generate the invalid parameter exception. In all cases, If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`. For more information about return codes, see [`errno`, `_doserrno`, `_sys_errlist`, and `_sys_nerr`](../errno-doserrno-sys-errlist-and-sys-nerr.md). diff --git a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md index d346ac9f5d..2380c0c8d9 100644 --- a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md +++ b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md @@ -1,8 +1,8 @@ --- description: "Learn more about: _putenv_s, _wputenv_s" -title: "_putenv_s, _wputenv_s" +title: "_putenv_s, _wputenv_s, _tputenv_s" ms.date: "4/2/2020" -api_name: ["_wputenv_s", "_putenv_s", "_o__putenv_s", "_o__wputenv_s"] +api_name: ["_wputenv_s", "_putenv_s", "_tputenv_s", "_o__putenv_s", "_o__wputenv_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-environment-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] diff --git a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md index eb83a03d02..cd7f87d364 100644 --- a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md +++ b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md @@ -1,15 +1,15 @@ --- description: "Learn more about: strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l" -title: "strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l" +title: "strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l, _tcsncpy_s, _tcsncpy_s_l, _tcsnccpy_s, _tcsnccpy_s_l" ms.date: "4/2/2020" -api_name: ["_mbsncpy_s_l", "wcsncpy_s", "_strncpy_s_l", "strncpy_s", "_mbsncpy_s", "_wcsncpy_s_l", "_o__mbsncpy_s", "_o__mbsncpy_s_l", "_o_strncpy_s", "_o_wcsncpy_s"] +api_name: ["_mbsncpy_s_l", "wcsncpy_s", "_strncpy_s_l", "strncpy_s", "_mbsncpy_s", "_wcsncpy_s_l", "_o__mbsncpy_s", "_o__mbsncpy_s_l", "_o_strncpy_s", "_o_wcsncpy_s", "_tcsnccpy_s", "_tcsnccpy_s_l", "_tcsncpy_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_tcsncpy_s", "_wcsncpy_s_l", "strncpy_s", "_strncpy_s_l", "wcsncpy_s", "_tcsncpy_s_l", "_tcsnccpy_s", "_tcsnccpy_s_l"] helpviewer_keywords: ["_wcsncpy_s_l function", "_mbsnbcpy_s function", "_tcsncpy_s_l function", "mbsncpy_s function", "strncpy_s_l function", "_strncpy_s_l function", "strncpy_s function", "mbsncpy_s_l function", "wcsncpy_s function", "_tcsnccpy_s function", "copying strings", "strings [C++], copying", "_mbsnbcpy_s_l function", "_tcsncpy_s function", "wcsncpy_s_l function", "_tcsnccpy_s_l function"] --- -# `strncpy_s`, `_strncpy_s_l`, `wcsncpy_s`, `_wcsncpy_s_l`, `_mbsncpy_s`, `_mbsncpy_s_l`, `_tcsnccpy_s`, `_tcsnccpy_s_l` +# `strncpy_s`, `_strncpy_s_l`, `wcsncpy_s`, `_wcsncpy_s_l`, `_mbsncpy_s`, `_mbsncpy_s_l`, `_tcsncpy_s`, `_tcsncpy_s_l`, `_tcsnccpy_s`, `_tcsnccpy_s_l` Copies characters of one string to another. These versions of [`strncpy`, `_strncpy_l`, `wcsncpy`, `_wcsncpy_l`, `_mbsncpy`, `_mbsncpy_l`](strncpy-strncpy-l-wcsncpy-wcsncpy-l-mbsncpy-mbsncpy-l.md) have security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index a377069722..e7e8f11361 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -1,15 +1,15 @@ --- description: "Learn more about: _strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l" -title: "_strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l" +title: "_strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l, "_tcsncset_s", "_tcsncset_s_l" ms.date: "4/2/2020" -api_name: ["_mbsnset_s_l", "_strnset_s", "_mbsnset_s", "_strnset_s_l", "_wcsnset_s_l", "_wcsnset_s", "_o__mbsnset_s", "_o__mbsnset_s_l", "_o__strnset_s", "_o__wcsnset_s"] +api_name: ["_mbsnset_s_l", "_strnset_s", "_mbsnset_s", "_strnset_s_l", "_wcsnset_s_l", "_wcsnset_s", "_o__mbsnset_s", "_o__mbsnset_s_l", "_o__strnset_s", "_o__wcsnset_s", "_tcsncset_s", "_tcsncset_s_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_tcsnset_s", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l", "_tcsncset_s", "_tcsncset_s_l"] helpviewer_keywords: ["tcsnset_s function", "mbsnset_s_l function", "initializing characters", "wcsnset_s function", "mbsnset_s function", "_tcsnset_s_l function", "_strnset_s_l function", "_mbsnset_s function", "strnset_s_l function", "_tcsnset_s function", "_strnset_s function", "tcsnset_s_l function", "_mbsnset_s_l function", "strnset_s function", "_wcsnset_s function", "_tcsncset_s function", "_tcsncset_s_l function"] --- -# `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l`, `_tcsncset_s`, `_tcsncset_s_l` +# `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l`, `_tcsncset_s`, `_tcsncset_s_l`, `_tcsnset_s`, `_tcsnset_s_l` Initializes characters of a string to a given character. These versions of [`_strnset`, `_strnset_l`, `_wcsnset`, `_wcsnset_l`, `_mbsnset`, `_mbsnset_l`](strnset-strnset-l-wcsnset-wcsnset-l-mbsnset-mbsnset-l.md) have security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). diff --git a/docs/c-runtime-library/toc.yml b/docs/c-runtime-library/toc.yml index 3b46fdbc73..16783b1d66 100644 --- a/docs/c-runtime-library/toc.yml +++ b/docs/c-runtime-library/toc.yml @@ -947,9 +947,9 @@ items: href: ../c-runtime-library/reference/fpreset.md - name: fprintf, _fprintf_l, fwprintf, _fwprintf_l href: ../c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md - - name: _fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l + - name: _fprintf_p, _fprintf_p_l, _ftprintf_p, _ftprintf_p_l, _fwprintf_p, _fwprintf_p_l href: ../c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md - - name: fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l + - name: fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l, _ftprintf, _ftprintf_l, _ftprintf_s, _ftprintf_s_l href: ../c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md - name: fputc, fputwc href: ../c-runtime-library/reference/fputc-fputwc.md @@ -1737,7 +1737,7 @@ items: href: ../c-runtime-library/reference/strncoll-wcsncoll-mbsncoll-strncoll-l-wcsncoll-l-mbsncoll-l.md - name: strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l href: ../c-runtime-library/reference/strncpy-strncpy-l-wcsncpy-wcsncpy-l-mbsncpy-mbsncpy-l.md - - name: strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l, _tcsnccpy_s, _tcsnccpy_s_l + - name: strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l, _tcsncpy_s, _tcsncpy_s_l, _tcsnccpy_s, _tcsnccpy_s_l href: ../c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md - name: _strnextc, _wcsnextc, _mbsnextc, _mbsnextc_l href: ../c-runtime-library/reference/strnextc-wcsnextc-mbsnextc-mbsnextc-l.md From e27b0e0952bfc46c54fc509e9e4e37b2b1389712 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 11 Jul 2024 14:42:05 -0700 Subject: [PATCH 0302/1239] approach2 --- .../reference/access-s-waccess-s.md | 10 +++++----- .../fprintf-fprintf-l-fwprintf-fwprintf-l.md | 8 +++++--- docs/c-runtime-library/routine-mappings.md | 14 ++++++++------ docs/c-runtime-library/toc.yml | 2 +- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/docs/c-runtime-library/reference/access-s-waccess-s.md b/docs/c-runtime-library/reference/access-s-waccess-s.md index 9aad1accf2..aac2212fd0 100644 --- a/docs/c-runtime-library/reference/access-s-waccess-s.md +++ b/docs/c-runtime-library/reference/access-s-waccess-s.md @@ -6,14 +6,14 @@ api_name: ["_access_s", "_waccess_s", "_o__access_s", "_o__waccess_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-filesystem-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["waccess_s", "access_s", "_waccess_s", "_access_s", "taccess_s"] -helpviewer_keywords: ["access_s function", "taccess_s function", "waccess_s function", "_access_s function", "_waccess_s function"] +f1_keywords: ["waccess_s", "access_s"] +helpviewer_keywords: ["access_s function", "waccess_s function"] --- -# `_access_s`, `_waccess_s`, `taccess_s` +# `_access_s`, `_waccess_s` Determines file read/write permissions. These functions are versions of [`_access`, `_waccess`](access-waccess.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). -For `taccess_s`, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `taccess_s`, see [Generic-text function mappings](#generic-text-function-mappings). ## Syntax @@ -67,7 +67,7 @@ These functions validate their parameters. If *`path`* is `NULL` or *`mode`* doe By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md index 581d61746a..9ea43968ca 100644 --- a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md +++ b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md @@ -1,5 +1,5 @@ --- -description: "Learn more about: fprintf, _fprintf_l, fwprintf, _fwprintf_l" +description: "Learn more about: fprintf, _fprintf_l, fwprintf" title: "fprintf, _fprintf_l, fwprintf, _fwprintf_l" ms.date: "3/9/2021" api_name: ["fwprintf", "fprintf", "_fprintf_l", "_fwprintf_l"] @@ -7,12 +7,14 @@ api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvc api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["fprintf", "fwprintf", "_ftprintf", "_fwprintf_l"] -helpviewer_keywords: ["_fwprintf_l function", "fprintf function", "fprintf_l function", "_fprintf_l function", "_ftprintf function", "fwprintf function", "ftprintf_l function", "ftprintf function", "_fwprintf_l function", "_ftprintf_l function", "print formatted data to streams", "fwprintf_l function"] +helpviewer_keywords: ["_fwprintf_l function", "fprintf function", "fprintf_l function", "_fprintf_l function", "_ftprintf function", "fwprintf function", "ftprintf_l function", "ftprintf function", "_fwprintf_l function", "print formatted data to streams", "fwprintf_l function"] --- # `fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l` Print formatted data to a stream. More secure versions of these functions are available; see [`fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l`](fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md). +For `_ftprintf` and `_ftprintf_l`, see [Generic-text function mappings](#generic-text-function-mappings). + ## Syntax ```C @@ -73,7 +75,7 @@ The versions of these functions with the **`_l`** suffix are identical except th > > Starting in Windows 10 version 2004 (build 19041), the `printf` family of functions prints exactly representable floating point numbers according to the IEEE 754 rules for rounding. In previous versions of Windows, exactly representable floating point numbers ending in '5' would always round up. IEEE 754 states that they must round to the closest even digit (also known as "Banker's Rounding"). For example, both `printf("%1.0f", 1.5)` and `printf("%1.0f", 2.5)` should round to 2. Previously, 1.5 would round to 2 and 2.5 would round to 3. This change only affects exactly representable numbers. For example, 2.35 (which, when represented in memory, is closer to 2.35000000000000008) continues to round up to 2.4. Rounding done by these functions now also respects the floating point rounding mode set by [`fesetround`](fegetround-fesetround2.md). Previously, rounding always chose `FE_TONEAREST` behavior. This change only affects programs built using Visual Studio 2019 version 16.2 and later. To use the legacy floating point rounding behavior, link with ['legacy_stdio_float_rounding.obj`](../link-options.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/routine-mappings.md b/docs/c-runtime-library/routine-mappings.md index 64d52861ae..2d51733207 100644 --- a/docs/c-runtime-library/routine-mappings.md +++ b/docs/c-runtime-library/routine-mappings.md @@ -1,13 +1,15 @@ --- -description: "Learn more about: Routine Mappings" -title: "Routine Mappings" +description: "Learn more about: Microsoft specific generic-text functions and the CRT functions they map to." +title: "Generic-text function mappings" ms.date: "11/04/2016" -helpviewer_keywords: ["_tWinMain", "TCHAR.H data types, list of routine mappings", "generic-text mappings"] -ms.assetid: 38f33d3b-0f7b-430d-8a4f-75e27c6f1c42 +ms.author: twhitney +api_name: ["foo",] +f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftprintf", "_ftprintf_s", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_taccess_s", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsnccpy_s", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncpy_s", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tputenv_s", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vstprintf_s", "_vtprintf", "_vtprintf_s"] +helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftprintf function", "_ftprintf_s function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_taccess_s function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsnccpy_s function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncpy_s function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tputenv_s function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vstprintf_s function", "_vtprintf function", "_vtprintf_s function"] --- -# Routine mappings +# Generic-text function mappings -The generic-text routine mappings are defined in TCHAR.H. `_tccpy` and `_tclen` map to functions in the MBCS model; they're mapped to macros or inline functions in the SBCS and Unicode models for completeness. For information on a generic text routine, see the help article about the corresponding `SBCS`-, `_MBCS`-, or `_UNICODE`-related routine. +The generic-text routine mappings are defined in `TCHAR.H`. `_tccpy` and `_tclen` map to functions in the MBCS model; they're mapped to macros or inline functions in the SBCS and Unicode models for completeness. For information on a generic text routine, see the help article about the corresponding `SBCS`-, `_MBCS`-, or `_UNICODE`-related routine. More specific information about individual routines listed in the left column in the following table isn't available in this documentation. However, you can easily look up the information on a corresponding `SBCS`-, `_MBCS`-, or `_UNICODE`-related routine. Use the **Search** command on the **Help** menu to look up any generic-text routine listed below. diff --git a/docs/c-runtime-library/toc.yml b/docs/c-runtime-library/toc.yml index 3b46fdbc73..6932e45a96 100644 --- a/docs/c-runtime-library/toc.yml +++ b/docs/c-runtime-library/toc.yml @@ -385,7 +385,7 @@ items: href: ../c-runtime-library/data-type-mappings.md - name: Constant and global variable mappings href: ../c-runtime-library/constant-and-global-variable-mappings.md - - name: Routine mappings + - name: Generic-text function mappings href: ../c-runtime-library/routine-mappings.md - name: Locale names, languages, and country-region strings expanded: false From 6e2be62341f60adedea43da37a8adf0dcdb39612 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 11 Jul 2024 14:50:11 -0700 Subject: [PATCH 0303/1239] f1 --- docs/c-runtime-library/routine-mappings.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/c-runtime-library/routine-mappings.md b/docs/c-runtime-library/routine-mappings.md index 2d51733207..b9e083bd24 100644 --- a/docs/c-runtime-library/routine-mappings.md +++ b/docs/c-runtime-library/routine-mappings.md @@ -4,8 +4,8 @@ title: "Generic-text function mappings" ms.date: "11/04/2016" ms.author: twhitney api_name: ["foo",] -f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftprintf", "_ftprintf_s", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_taccess_s", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsnccpy_s", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncpy_s", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tputenv_s", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vstprintf_s", "_vtprintf", "_vtprintf_s"] -helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftprintf function", "_ftprintf_s function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_taccess_s function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsnccpy_s function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncpy_s function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tputenv_s function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vstprintf_s function", "_vtprintf function", "_vtprintf_s function"] +f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftprintf", "_ftprintf_s", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_ftprintf_l", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_taccess_s", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsnccpy_s", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncpy_s", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tputenv_s", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vstprintf_s", "_vtprintf", "_vtprintf_s"] +helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftprintf function", "_ftprintf_s function", "_ftprintf_l function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_taccess_s function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsnccpy_s function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncpy_s function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tputenv_s function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vstprintf_s function", "_vtprintf function", "_vtprintf_s function"] --- # Generic-text function mappings @@ -15,7 +15,7 @@ More specific information about individual routines listed in the left column in For related information, see [Generic-text mappings in tchar.h](../text/generic-text-mappings-in-tchar-h.md). -### Generic-text routine mappings +### Function mappings | Generic-text routine name | `SBCS` (`_UNICODE` and `MBCS` not defined) | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| @@ -29,6 +29,7 @@ For related information, see [Generic-text mappings in tchar.h](../text/generic- | `_fputtchar` | `_fputchar` | `_fputchar` | `_fputwchar` | | `_fputts` | `fputs` | `fputs` | `fputws` | | `_ftprintf` | `fprintf` | `fprintf` | `fwprintf` | +| `_ftprintf_l` | `_fprintf_l` | `_fprintf_l` | `_fwprintf_l` | | `_ftprintf_s` | `fprintf_s` | `fprintf_s` | `fwprintf_s` | | `_ftscanf` | `fscanf` | `fscanf` | `fwscanf` | | `_ftscanf_s` | `fscanf_s` | `fscanf_s` | `fwscanf_s` | From df2d0047d996ed70944a69533d57caa17d9320d1 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 11 Jul 2024 15:46:18 -0700 Subject: [PATCH 0304/1239] edits --- .../reference/access-s-waccess-s.md | 14 +++++++------- .../fprintf-fprintf-l-fwprintf-fwprintf-l.md | 12 ++++++------ ...printf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md | 4 +++- ...printf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md | 4 +++- .../reference/putenv-s-wputenv-s.md | 4 ++-- ...-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md | 4 ++-- ...-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 14 +++++++------- ...ntf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md | 10 +++++----- docs/c-runtime-library/routine-mappings.md | 4 ++-- docs/c-runtime-library/toc.yml | 6 +++--- 10 files changed, 40 insertions(+), 36 deletions(-) diff --git a/docs/c-runtime-library/reference/access-s-waccess-s.md b/docs/c-runtime-library/reference/access-s-waccess-s.md index aac2212fd0..c054b3b97d 100644 --- a/docs/c-runtime-library/reference/access-s-waccess-s.md +++ b/docs/c-runtime-library/reference/access-s-waccess-s.md @@ -1,19 +1,19 @@ --- -description: "Learn more about: _access_s, _waccess_s" -title: "_access_s, _waccess_s" +description: "Learn more about: _access_s, _waccess_s, _taccess_s" +title: "_access_s, _waccess_s, _taccess_s" ms.date: "4/2/2020" -api_name: ["_access_s", "_waccess_s", "_o__access_s", "_o__waccess_s"] +api_name: ["_access_s", "_waccess_s", "_taccess_s", "_o__access_s", "_o__waccess_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-filesystem-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["waccess_s", "access_s"] -helpviewer_keywords: ["access_s function", "waccess_s function"] +f1_keywords: ["waccess_s", "access_s", "_taccess_s"] +helpviewer_keywords: ["access_s function", "waccess_s function", "_taccess_s function"] --- -# `_access_s`, `_waccess_s` +# `_access_s`, `_waccess_s`, `_taccess_s` Determines file read/write permissions. These functions are versions of [`_access`, `_waccess`](access-waccess.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). -For `taccess_s`, see [Generic-text function mappings](#generic-text-function-mappings). +For `_taccess_s`, see [Generic-text function mappings](#generic-text-function-mappings). ## Syntax diff --git a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md index 9ea43968ca..2d972d963a 100644 --- a/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md +++ b/docs/c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md @@ -1,15 +1,15 @@ --- -description: "Learn more about: fprintf, _fprintf_l, fwprintf" -title: "fprintf, _fprintf_l, fwprintf, _fwprintf_l" +description: "Learn more about: fprintf, _fprintf_l, fwprintf, _ftprintf, _ftprintf_l" +title: "fprintf, _fprintf_l, fwprintf, _fwprintf_l, _ftprintf, _ftprintf_l" ms.date: "3/9/2021" -api_name: ["fwprintf", "fprintf", "_fprintf_l", "_fwprintf_l"] +api_name: ["fwprintf", "fprintf", "_fprintf_l", "_fwprintf_l", "_ftprintf", "_ftprintf_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["fprintf", "fwprintf", "_ftprintf", "_fwprintf_l"] -helpviewer_keywords: ["_fwprintf_l function", "fprintf function", "fprintf_l function", "_fprintf_l function", "_ftprintf function", "fwprintf function", "ftprintf_l function", "ftprintf function", "_fwprintf_l function", "print formatted data to streams", "fwprintf_l function"] +f1_keywords: ["fprintf", "fwprintf", "_ftprintf", "_fwprintf_l", "_ftprintf_l"] +helpviewer_keywords: ["fprintf function", "fprintf_l function", "_fprintf_l function", "_ftprintf function", "fwprintf function", "ftprintf_l function", "ftprintf function", "print formatted data to streams", "fwprintf_l function", "_ftprintf_l function"] --- -# `fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l` +# `fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`, `_ftprintf`, `_ftprintf_l` Print formatted data to a stream. More secure versions of these functions are available; see [`fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l`](fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md). diff --git a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md index 810cb69658..8ed284f343 100644 --- a/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md +++ b/docs/c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md @@ -13,6 +13,8 @@ helpviewer_keywords: ["fprintf_p_l function", "fprintf_p function", "_fprintf_p_ Prints formatted data to a stream. +For `_ftprintf_p` and `_ftprintf_p_l`, see [Generic-text function mappings](#generic-text-function-mappings). + ## Syntax ```C @@ -73,7 +75,7 @@ The versions of these functions with the `_l` suffix are identical except that t Like the non-secure versions (see [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](fprintf-fprintf-l-fwprintf-fwprintf-l.md)), these functions validate their parameters and invoke the invalid parameter handler, as described in [Parameter validation](../parameter-validation.md), if either *`stream`* or *`format`* is a null pointer or if there are any unknown or badly formed formatting specifiers. If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`. -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md index a5e521cc92..5a0355b943 100644 --- a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md +++ b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md @@ -13,6 +13,8 @@ helpviewer_keywords: ["ftprintf_s_l function", "ftprintf_s function", "_ftprintf Print formatted data to a stream. These functions are versions of [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](fprintf-fprintf-l-fwprintf-fwprintf-l.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). +For `_ftprintf_s` and `_ftprintf_s_l`, see [Generic-text function mappings](#generic-text-function-mappings). + ## Syntax ```C @@ -73,7 +75,7 @@ The versions of these functions with the **`_l`** suffix are identical except th Like the non-secure versions (see [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](fprintf-fprintf-l-fwprintf-fwprintf-l.md)), these functions validate their parameters and invoke the invalid parameter handler, as described in [Parameter validation](../parameter-validation.md), if either *`stream`* or *`format`* is a `NULL` pointer. The format string itself is also validated. If there are any unknown or badly formed formatting specifiers, these functions generate the invalid parameter exception. In all cases, If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`. For more information about return codes, see [`errno`, `_doserrno`, `_sys_errlist`, and `_sys_nerr`](../errno-doserrno-sys-errlist-and-sys-nerr.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md index 2380c0c8d9..6437099f5c 100644 --- a/docs/c-runtime-library/reference/putenv-s-wputenv-s.md +++ b/docs/c-runtime-library/reference/putenv-s-wputenv-s.md @@ -16,7 +16,7 @@ Creates, modifies, or removes environment variables. These functions are version > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For `_tputenv_s`, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tputenv_s`, see [Generic-text function mappings](#generic-text-function-mappings). ## Syntax @@ -58,7 +58,7 @@ The **`_putenv_s`** function adds new environment variables or modifies the valu By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md index cd7f87d364..f2c89776a8 100644 --- a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md +++ b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md @@ -16,7 +16,7 @@ Copies characters of one string to another. These versions of [`strncpy`, `_str > [!IMPORTANT] > **`_mbsncpy_s`** and **`_mbsncpy_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For `_tcsnccpy_s` and `_tcsnccpy_s_l`, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tcsnccpy_s`, `_tcsnccpy_s_l`, `_tcsnccpy_s`, and `_tcsnccpy_s_l` see [Generic-text function mappings](#generic-text-function-mappings). ## Syntax @@ -169,7 +169,7 @@ The debug library versions of these functions first fill the buffer with 0xFE. T By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index e7e8f11361..172d915f1a 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -1,22 +1,22 @@ --- description: "Learn more about: _strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l" -title: "_strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l, "_tcsncset_s", "_tcsncset_s_l" +title: "_strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l, _tcsnset_s, _tcsncset_s, _tcsncset_s_l" ms.date: "4/2/2020" -api_name: ["_mbsnset_s_l", "_strnset_s", "_mbsnset_s", "_strnset_s_l", "_wcsnset_s_l", "_wcsnset_s", "_o__mbsnset_s", "_o__mbsnset_s_l", "_o__strnset_s", "_o__wcsnset_s", "_tcsncset_s", "_tcsncset_s_l"] +api_name: ["_mbsnset_s_l", "_strnset_s", "_mbsnset_s", "_strnset_s_l", "_wcsnset_s_l", "_wcsnset_s", "_o__mbsnset_s", "_o__mbsnset_s_l", "_o__strnset_s", "_o__wcsnset_s", "_tcsncset_s", "_tcsncset_s_l", "_tcsnset_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_tcsnset_s", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l", "_tcsncset_s", "_tcsncset_s_l"] -helpviewer_keywords: ["tcsnset_s function", "mbsnset_s_l function", "initializing characters", "wcsnset_s function", "mbsnset_s function", "_tcsnset_s_l function", "_strnset_s_l function", "_mbsnset_s function", "strnset_s_l function", "_tcsnset_s function", "_strnset_s function", "tcsnset_s_l function", "_mbsnset_s_l function", "strnset_s function", "_wcsnset_s function", "_tcsncset_s function", "_tcsncset_s_l function"] +f1_keywords: ["_mbsnset_s_l", "wcsnset_s", "_tcsnset_s", "_tcsnset_s_l", "_wcsnset_s", "_mbsnset_s", "_wcsnset_s_l", "_strnset_s_l", "strnset_s_l", "_strnset_s", "strnset_s", "mbsnset_s_l", "mbsnset_s", "wcsnset_s_l", "_tcsncset_s", "_tcsncset_s_l"] +helpviewer_keywords: ["tcsnset_s function", "mbsnset_s_l function", "initializing characters", "wcsnset_s function", "mbsnset_s function", "_tcsnset_s function", "_tcsnset_s_l function", "_strnset_s_l function", "_mbsnset_s function", "strnset_s_l function", "_strnset_s function", "tcsnset_s_l function", "_mbsnset_s_l function", "strnset_s function", "_wcsnset_s function", "_tcsncset_s function", "_tcsncset_s_l function"] --- -# `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l`, `_tcsncset_s`, `_tcsncset_s_l`, `_tcsnset_s`, `_tcsnset_s_l` +# `_strnset_s`, `_strnset_s_l`, `_wcsnset_s`, `_wcsnset_s_l`, `_mbsnset_s`, `_mbsnset_s_l`, `_tcsnset_s`, `_tcsncset_s`, `_tcsncset_s_l` Initializes characters of a string to a given character. These versions of [`_strnset`, `_strnset_l`, `_wcsnset`, `_wcsnset_l`, `_mbsnset`, `_mbsnset_l`](strnset-strnset-l-wcsnset-wcsnset-l-mbsnset-mbsnset-l.md) have security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). > [!IMPORTANT] > **`_mbsnset_s`** and **`_mbsnset_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For `_tcsncset_s` and `_tcsncset_s_l`, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_tcsnset_s`, `_tcsnset_s_l`, `_tcsncset_s`, and `_tcsncset_s_l` see [Generic-text function mappings](#generic-text-routine-mappings). ## Syntax @@ -97,7 +97,7 @@ The debug library versions of these functions first fill the buffer with `0xFE`. By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md index c29347d3ea..0b6d7671f9 100644 --- a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md +++ b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md @@ -1,19 +1,19 @@ --- description: "Learn more about: vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l" -title: "vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l" +title: "vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l, _vstprintf_s, _vstprintf_s_l" ms.date: "3/9/2021" -api_name: ["_vswprintf_s_l", "vsprintf_s", "vswprintf_s", "_vsprintf_s_l"] +api_name: ["_vswprintf_s_l", "vsprintf_s", "vswprintf_s", "_vsprintf_s_l", _vstprintf_s, _vstprintf_s_l] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["CORECRT_WSTDIO/vswprintf_s", "STDIO/vsprintf_s", "TCHAR/_vstprintf_s", "vswprintf_s", "vsprintf_s", "_vstprintf_s", "_vswprintf_s_l"] helpviewer_keywords: ["_vstprintf_s_l function", "vsprintf_s_l function", "_vstprintf_s function", "vswprintf_s function", "vstprintf_s function", "vstprintf_s_l function", "vswprintf_s_l function", "vsprintf_s function", "_vsprintf_s_l function", "formatted text [C++]", "_vswprintf_s_l function"] --- -# `vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l` +# `vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l`, `_vstprintf_s`, `_vstprintf_s_l` Write formatted output using a pointer to a list of arguments. These functions are versions of [`vsprintf`, `_vsprintf_l`, `vswprintf`, `_vswprintf_l`, \`__vswprintf_l`](vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md). -For `_vstprintf_s` and `_vstprintf_s_l`, see [Generic-text routine mappings](#generic-text-routine-mappings). +For `_vstprintf_s` and `_vstprintf_s_l`, see [Generic-text function mappings](#generic-text-function-mappings). ## Syntax @@ -96,7 +96,7 @@ In C++, using these functions is simplified by template overloads. The overloads > [!IMPORTANT] > Starting in Windows 10 version 2004 (build 19041), the `printf` family of functions prints exactly representable floating point numbers according to the IEEE 754 rules for rounding. In previous versions of Windows, exactly representable floating point numbers ending in '5' would always round up. IEEE 754 states that they must round to the closest even digit (also known as "Banker's Rounding"). For example, both `printf("%1.0f", 1.5)` and `printf("%1.0f", 2.5)` should round to 2. Previously, 1.5 would round to 2 and 2.5 would round to 3. This change only affects exactly representable numbers. For example, 2.35 (which, when represented in memory, is closer to 2.35000000000000008) continues to round up to 2.4. Rounding done by these functions now also respects the floating point rounding mode set by [`fesetround`](fegetround-fesetround2.md). Previously, rounding always chose `FE_TONEAREST` behavior. This change only affects programs built using Visual Studio 2019 version 16.2 and later. To use the legacy floating point rounding behavior, link with ['legacy_stdio_float_rounding.obj`](../link-options.md). -### Generic-text routine mappings +### Generic-text function mappings The function in the `tchar.h` column maps to the function in the other columns depending on the character set that is defined at compile time. diff --git a/docs/c-runtime-library/routine-mappings.md b/docs/c-runtime-library/routine-mappings.md index b9e083bd24..d689b03404 100644 --- a/docs/c-runtime-library/routine-mappings.md +++ b/docs/c-runtime-library/routine-mappings.md @@ -4,8 +4,8 @@ title: "Generic-text function mappings" ms.date: "11/04/2016" ms.author: twhitney api_name: ["foo",] -f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftprintf", "_ftprintf_s", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_ftprintf_l", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_taccess_s", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsnccpy_s", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncpy_s", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tputenv_s", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vstprintf_s", "_vtprintf", "_vtprintf_s"] -helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftprintf function", "_ftprintf_s function", "_ftprintf_l function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_taccess_s function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsnccpy_s function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncpy_s function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tputenv_s function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vstprintf_s function", "_vtprintf function", "_vtprintf_s function"] +f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftprintf", "_ftprintf_s", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_ftprintf_l", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsnccpy_s", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncpy_s", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tputenv_s", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vstprintf_s", "_vtprintf", "_vtprintf_s"] +helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftprintf function", "_ftprintf_s function", "_ftprintf_l function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsnccpy_s function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncpy_s function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tputenv_s function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vstprintf_s function", "_vtprintf function", "_vtprintf_s function"] --- # Generic-text function mappings diff --git a/docs/c-runtime-library/toc.yml b/docs/c-runtime-library/toc.yml index 08cc382232..6af2db900e 100644 --- a/docs/c-runtime-library/toc.yml +++ b/docs/c-runtime-library/toc.yml @@ -475,7 +475,7 @@ items: href: ../c-runtime-library/reference/abs-labs-llabs-abs64.md - name: access (CRT) href: ../c-runtime-library/reference/access-crt.md - - name: _access, _waccess + - name: _access, _waccess, taccess_s href: ../c-runtime-library/reference/access-waccess.md - name: _access_s, _waccess_s, taccess_s href: ../c-runtime-library/reference/access-s-waccess-s.md @@ -945,7 +945,7 @@ items: href: ../c-runtime-library/reference/fpieee-flt.md - name: _fpreset href: ../c-runtime-library/reference/fpreset.md - - name: fprintf, _fprintf_l, fwprintf, _fwprintf_l + - name: fprintf, _fprintf_l, fwprintf, _fwprintf_l, _ftprintf, _ftprintf_l href: ../c-runtime-library/reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md - name: _fprintf_p, _fprintf_p_l, _ftprintf_p, _ftprintf_p_l, _fwprintf_p, _fwprintf_p_l href: ../c-runtime-library/reference/fprintf-p-fprintf-p-l-fwprintf-p-fwprintf-p-l.md @@ -1929,7 +1929,7 @@ items: href: ../c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md - name: _vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l href: ../c-runtime-library/reference/vsprintf-p-vsprintf-p-l-vswprintf-p-vswprintf-p-l.md - - name: vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l + - name: vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l, _vstprintf_s, _vstprintf_s_l href: ../c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md - name: vsscanf, vswscanf href: ../c-runtime-library/reference/vsscanf-vswscanf.md From c41724d2e9276bf2bbe4ec352db482d35a10292d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 11 Jul 2024 16:22:44 -0700 Subject: [PATCH 0305/1239] edits --- docs/c-runtime-library/reference/access-waccess.md | 9 +++++---- ...py-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md | 2 +- .../vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md | 2 +- docs/c-runtime-library/routine-mappings.md | 4 ++-- docs/c-runtime-library/toc.yml | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/docs/c-runtime-library/reference/access-waccess.md b/docs/c-runtime-library/reference/access-waccess.md index b6c08cc8bf..87fadbc2ba 100644 --- a/docs/c-runtime-library/reference/access-waccess.md +++ b/docs/c-runtime-library/reference/access-waccess.md @@ -2,18 +2,19 @@ description: "Learn more about: _access, _waccess" title: "_access, _waccess" ms.date: "4/2/2020" -api_name: ["_access", "_waccess", "_o__access", "_o__waccess"] +api_name: ["_access", "_waccess", "t_access", "_o__access", "_o__waccess"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-filesystem-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_waccess", "_access", "taccess", "waccess", "_taccess"] helpviewer_keywords: ["access function", "_taccess function", "waccess function", "_access function", "_waccess function", "taccess function"] -ms.assetid: ba34f745-85c3-49e5-a7d4-3590bd249dd3 --- -# `_access`, `_waccess` +# `_access`, `_waccess`, `t_access` Determines if a file is read-only or not. More secure versions are available; see [`_access_s`, `_waccess_s`](access-s-waccess-s.md). +For `_taccess`, see [Generic-text function mappings](#generic-text-function-mappings). + ## Syntax ```C @@ -66,7 +67,7 @@ This function validates its parameters. If *`path`* is `NULL` or *`mode`* doesn' By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -### Generic-text routine mappings +### Generic-text function mappings | `Tchar.h` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| diff --git a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md index f2c89776a8..784bbae4d5 100644 --- a/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md +++ b/docs/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l.md @@ -2,7 +2,7 @@ description: "Learn more about: strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l" title: "strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l, _tcsncpy_s, _tcsncpy_s_l, _tcsnccpy_s, _tcsnccpy_s_l" ms.date: "4/2/2020" -api_name: ["_mbsncpy_s_l", "wcsncpy_s", "_strncpy_s_l", "strncpy_s", "_mbsncpy_s", "_wcsncpy_s_l", "_o__mbsncpy_s", "_o__mbsncpy_s_l", "_o_strncpy_s", "_o_wcsncpy_s", "_tcsnccpy_s", "_tcsnccpy_s_l", "_tcsncpy_s"] +api_name: ["_mbsncpy_s_l", "wcsncpy_s", "_strncpy_s_l", "strncpy_s", "_mbsncpy_s", "_wcsncpy_s_l", "_o__mbsncpy_s", "_o__mbsncpy_s_l", "_o_strncpy_s", "_o_wcsncpy_s", "_tcsnccpy_s", "_tcsnccpy_s_l", "_tcsncpy_s", "_tcsncpy_s_l"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "api-ms-win-crt-string-l1-1-0.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] diff --git a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md index 0b6d7671f9..991b132063 100644 --- a/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md +++ b/docs/c-runtime-library/reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md @@ -6,7 +6,7 @@ api_name: ["_vswprintf_s_l", "vsprintf_s", "vswprintf_s", "_vsprintf_s_l", _vstp api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "ntoskrnl.exe"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["CORECRT_WSTDIO/vswprintf_s", "STDIO/vsprintf_s", "TCHAR/_vstprintf_s", "vswprintf_s", "vsprintf_s", "_vstprintf_s", "_vswprintf_s_l"] +f1_keywords: ["CORECRT_WSTDIO/vswprintf_s", "STDIO/vsprintf_s", "TCHAR/_vstprintf_s", "vswprintf_s", "vsprintf_s", "_vstprintf_s", "_vstprintf_s_l", "_vswprintf_s_l"] helpviewer_keywords: ["_vstprintf_s_l function", "vsprintf_s_l function", "_vstprintf_s function", "vswprintf_s function", "vstprintf_s function", "vstprintf_s_l function", "vswprintf_s_l function", "vsprintf_s function", "_vsprintf_s_l function", "formatted text [C++]", "_vswprintf_s_l function"] --- # `vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l`, `_vstprintf_s`, `_vstprintf_s_l` diff --git a/docs/c-runtime-library/routine-mappings.md b/docs/c-runtime-library/routine-mappings.md index d689b03404..087515c0cd 100644 --- a/docs/c-runtime-library/routine-mappings.md +++ b/docs/c-runtime-library/routine-mappings.md @@ -4,8 +4,8 @@ title: "Generic-text function mappings" ms.date: "11/04/2016" ms.author: twhitney api_name: ["foo",] -f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftprintf", "_ftprintf_s", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_ftprintf_l", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsnccpy_s", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncpy_s", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tputenv_s", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vstprintf_s", "_vtprintf", "_vtprintf_s"] -helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftprintf function", "_ftprintf_s function", "_ftprintf_l function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsnccpy_s function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncpy_s function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tputenv_s function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vstprintf_s function", "_vtprintf function", "_vtprintf_s function"] +f1_keywords: ["_cgetts", "_cgetts_s", "_cputts", "_fgettc", "_fgettchar", "_fgetts", "_fputtc", "_fputtchar", "_fputts", "_ftscanf", "_ftscanf_s", "_gettc", "_gettch", "_gettchar", "_gettche", "_getts", "_getts_s", "_istalnum", "_istalpha", "_istascii", "_istcntrl", "_istdigit", "_istgraph", "_istlead", "_istleadbyte", "_istlegal", "_istlower", "_istprint", "_istpunct", "_istspace", "_istupper", "_istxdigit", "_itot", "_itot_s", "_ltot", "_ltot_s", "_puttc", "_puttch", "_puttchar", "_putts", "_sctprintf", "_sntprintf", "_sntprintf_s", "_sntscanf", "_sntscanf_s", "_stprintf", "_stprintf_s", "_stscanf", "_stscanf_s", "_taccess", "_tasctime", "_tasctime_s", "_tccmp", "_tccpy", "_tccpy_s", "_tchdir", "_tclen", "_tchmod", "_tcprintf", "_tcprintf_s", "_tcreat", "_tcscanf", "_tcscanf_s", "_tcscat", "_tcscat_s", "_tcschr", "_tcsclen", "_tcsclen_s", "_tcscmp", "_tcscoll", "_tcscpy", "_tcscpy_s", "_tcscspn", "_tcsdec", "_tcsdup", "_tcserror", "_tcserror_s", "_tcsftime", "_tcsicmp", "_tcsicoll", "_tcsinc", "_tcslen", "_tcslwr", "_tcslwr_s", "_tcsnbcnt", "_tcsncat", "_tcsncat_s", "_tcsnccat", "_tcsnccmp", "_tcsnccmp_s", "_tcsnccoll", "_tcsncmp", "_tcsnccnt", "_tcsnccpy", "_tcsncicmp", "_tcsncicoll", "_tcsncpy", "_tcsncset", "_tcsnextc", "_tcsnicmp", "_tcsnicoll", "_tcsninc", "_tcsnccnt", "_tcsnset", "_tcspbrk", "_tcsspnp", "_tcsrchr", "_tcsrev", "_tcsset", "_tcsspn", "_tcsstr", "_tcstod", "_tcstoi64", "_tcstok", "_tcstok_s", "_tcstol", "_tcstoui64", "_tcstoul", "_tcsupr", "_tcsupr_s", "_tcsxfrm", "_tctime", "_tctime_s", "_tctime32", "_tctime32_s", "_tctime64", "_tctime64_s", "_texecl", "_texecle", "_texeclp", "_texeclpe", "_texecv", "_texecve", "_texecvp", "_texecvpe", "_tfdopen", "_tfindfirst", "_tfindnext", "_tfindnext32", "_tfindnext64", "_tfindnexti64", "_tfindnexti6432", "_tfindnext32i64", "_tfopen", "_tfopen_s", "_tfreopen", "_tfreopen_s", "_tfsopen", "_tfullpath", "_tgetcwd", "_tgetdcwd", "_tgetenv", "_tgetenv_s", "_tmain", "_tmakepath", "_tmakepath_s", "_tmkdir", "_tmktemp", "_tmktemp_s", "_topen", "_topen_s", "_totlower", "_totupper", "_tperror", "_tpopen", "_tprintf", "_tprintf_s", "_tputenv", "_tremove", "_trename", "_trmdir", "_tsearchenv", "_tsearchenv_s", "_tscanf", "_tscanf_s", "_tsetlocale", "_tsopen", "_tsopen_s", "_tspawnl", "_tspawnle", "_tspawnlp", "_tspawnlpe", "_tspawnv", "_tspawnve", "_tspawnvp", "_tspawnvpe", "_tsplitpath", "_tstat", "_tstat32", "_tstati32", "_tstat64", "_tstati64", "_tstof", "_tstoi", "_tstoi64", "_tstol", "_tstrdate", "_tstrdate_s", "_tstrtime", "_tstrtime_s", "_tsystem", "_ttempnam", "_ttmpnam", "_ttmpnam_s", "_ttoi", "_ttoi64", "_ttol", "_tunlink", "_tutime", "_tutime32", "_tutime64", "_tWinMain", "_ui64tot", "_ui64tot_s", "_ultot", "_ultot_s", "_ungettc", "_ungettch", "_vftprintf", "_vftprintf_s", "_vsctprintf", "_vsctprintf_s", "_vsntprintf", "_vsntprintf_s", "_vstprintf", "_vtprintf", "_vtprintf_s"] +helpviewer_keywords: ["_tWinMain", "TCHAR.H functions, list of generic-text function mappings", "generic-text mappings", "_cgetts function", "_cgetts_s function", "_cputts function", "_fgettc function", "_fgettchar function", "_fgetts function", "_fputtc function", "_fputtchar function", "_fputts function", "_ftscanf function", "_ftscanf_s function", "_gettc function", "_gettch function", "_gettchar function", "_gettche function", "_getts function", "_getts_s function", "_istalnum function", "_istalpha function", "_istascii function", "_istcntrl function", "_istdigit function", "_istgraph function", "_istlead function", "_istleadbyte function", "_istlegal function", "_istlower function", "_istprint function", "_istpunct function", "_istspace function", "_istupper function", "_istxdigit function", "_itot function", "_itot_s function", "_ltot function", "_ltot_s function", "_puttc function", "_puttch function", "_puttchar function", "_putts function", "_sctprintf function", "_sntprintf function", "_sntprintf_s function", "_sntscanf function", "_sntscanf_s function", "_stprintf function", "_stprintf_s function", "_stscanf function", "_stscanf_s function", "_taccess function", "_tasctime function", "_tasctime_s function", "_tccmp function", "_tccpy function", "_tccpy_s function", "_tchdir function", "_tclen function", "_tchmod function", "_tcprintf function", "_tcprintf_s function", "_tcreat function", "_tcscanf function", "_tcscanf_s function", "_tcscat function", "_tcscat_s function", "_tcschr function", "_tcsclen function", "_tcsclen_s function", "_tcscmp function", "_tcscoll function", "_tcscpy function", "_tcscpy_s function", "_tcscspn function", "_tcsdec function", "_tcsdup function", "_tcserror function", "_tcserror_s function", "_tcsftime function", "_tcsicmp function", "_tcsicoll function", "_tcsinc function", "_tcslen function", "_tcslwr function", "_tcslwr_s function", "_tcsnbcnt function", "_tcsncat function", "_tcsncat_s function", "_tcsnccat function", "_tcsnccmp function", "_tcsnccmp_s function", "_tcsnccoll function", "_tcsncmp function", "_tcsnccnt function", "_tcsnccpy function", "_tcsncicmp function", "_tcsncicoll function", "_tcsncpy function", "_tcsncset function", "_tcsnextc function", "_tcsnicmp function", "_tcsnicoll function", "_tcsninc function", "_tcsnccnt function", "_tcsnset function", "_tcspbrk function", "_tcsspnp function", "_tcsrchr function", "_tcsrev function", "_tcsset function", "_tcsspn function", "_tcsstr function", "_tcstod function", "_tcstoi64 function", "_tcstok function", "_tcstok_s function", "_tcstol function", "_tcstoui64 function", "_tcstoul function", "_tcsupr function", "_tcsupr_s function", "_tcsxfrm function", "_tctime function", "_tctime_s function", "_tctime32 function", "_tctime32_s function", "_tctime64 function", "_tctime64_s function", "_texecl function", "_texecle function", "_texeclp function", "_texeclpe function", "_texecv function", "_texecve function", "_texecvp function", "_texecvpe function", "_tfdopen function", "_tfindfirst function", "_tfindnext function", "_tfindnext32 function", "_tfindnext64 function", "_tfindnexti64 function", "_tfindnexti6432 function", "_tfindnext32i64 function", "_tfopen function", "_tfopen_s function", "_tfreopen function", "_tfreopen_s function", "_tfsopen function", "_tfullpath function", "_tgetcwd function", "_tgetdcwd function", "_tgetenv function", "_tgetenv_s function", "_tmain function", "_tmakepath function", "_tmakepath_s function", "_tmkdir function", "_tmktemp function", "_tmktemp_s function", "_topen function", "_topen_s function", "_totlower function", "_totupper function", "_tperror function", "_tpopen function", "_tprintf function", "_tprintf_s function", "_tputenv function", "_tremove function", "_trename function", "_trmdir function", "_tsearchenv function", "_tsearchenv_s function", "_tscanf function", "_tscanf_s function", "_tsetlocale function", "_tsopen function", "_tsopen_s function", "_tspawnl function", "_tspawnle function", "_tspawnlp function", "_tspawnlpe function", "_tspawnv function", "_tspawnve function", "_tspawnvp function", "_tspawnvpe function", "_tsplitpath function", "_tstat function", "_tstat32 function", "_tstati32 function", "_tstat64 function", "_tstati64 function", "_tstof function", "_tstoi function", "_tstoi64 function", "_tstol function", "_tstrdate function", "_tstrdate_s function", "_tstrtime function", "_tstrtime_s function", "_tsystem function", "_ttempnam function", "_ttmpnam function", "_ttmpnam_s function", "_ttoi function", "_ttoi64 function", "_ttol function", "_tunlink function", "_tutime function", "_tutime32 function", "_tutime64 function", "_tWinMain function", "_ui64tot function", "_ui64tot_s function", "_ultot function", "_ultot_s function", "_ungettc function", "_ungettch function", "_vftprintf function", "_vftprintf_s function", "_vsctprintf function", "_vsctprintf_s function", "_vsntprintf function", "_vsntprintf_s function", "_vstprintf function", "_vtprintf function", "_vtprintf_s function"] --- # Generic-text function mappings diff --git a/docs/c-runtime-library/toc.yml b/docs/c-runtime-library/toc.yml index 6af2db900e..4eb9c708b3 100644 --- a/docs/c-runtime-library/toc.yml +++ b/docs/c-runtime-library/toc.yml @@ -477,7 +477,7 @@ items: href: ../c-runtime-library/reference/access-crt.md - name: _access, _waccess, taccess_s href: ../c-runtime-library/reference/access-waccess.md - - name: _access_s, _waccess_s, taccess_s + - name: _access_s, _waccess_s, _taccess_s href: ../c-runtime-library/reference/access-s-waccess-s.md - name: acos, acosf, acosl href: ../c-runtime-library/reference/acos-acosf-acosl.md @@ -1755,7 +1755,7 @@ items: href: ../c-runtime-library/reference/strnset-wcsnset.md - name: _strnset, _strnset_l, _wcsnset, _wcsnset_l, _mbsnset, _mbsnset_l href: ../c-runtime-library/reference/strnset-strnset-l-wcsnset-wcsnset-l-mbsnset-mbsnset-l.md - - name: _strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l, _tcsncset_s, _tcsncset_s_l + - name: _strnset_s, _strnset_s_l, _wcsnset_s, _wcsnset_s_l, _mbsnset_s, _mbsnset_s_l, _tcsnset_s, _tcsncset_s, _tcsncset_s_l href: ../c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md - name: strpbrk, wcspbrk, _mbspbrk, _mbspbrk_l href: ../c-runtime-library/reference/strpbrk-wcspbrk-mbspbrk-mbspbrk-l.md From ac2d31f3fbff0b452fdc357a6e7d433a3e36fcb9 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 11 Jul 2024 16:37:15 -0700 Subject: [PATCH 0306/1239] fix tags --- .../reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md | 2 +- ...s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md index 5a0355b943..225ec4abc7 100644 --- a/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md +++ b/docs/c-runtime-library/reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md @@ -6,7 +6,7 @@ api_name: ["_fprintf_s_l", "fwprintf_s", "fprintf_s", "_fwprintf_s_l", "_ftprint api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] -f1_keywords: ["_ftprintf_s", "_ftprintf_s_l", "fprintf_s", "fwprintf_s", "_fwprintf_s_l", "_ftprintf" "_ftprintf_l"] +f1_keywords: ["_ftprintf_s", "_ftprintf_s_l", "fprintf_s", "fwprintf_s", "_fwprintf_s_l", "_ftprintf", "_ftprintf_l"] helpviewer_keywords: ["ftprintf_s_l function", "ftprintf_s function", "_ftprintf_l function", "_fprintf_s_l function", "_ftprintf_s function", "_ftprintf_s_l function", "fwprintf_s_l function", "fwprintf_s function", "fprintf_s_l function", "fprintf_s function", "_fwprintf_s_l function", "_fwprintf_s_l function", "print formatted data to streams"] --- # `fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l`, `_ftprintf`, `_ftprintf_l`, `_ftprintf_s`, `_ftprintf_s_l` diff --git a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md index 172d915f1a..e7d55e8de2 100644 --- a/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md +++ b/docs/c-runtime-library/reference/strnset-s-strnset-s-l-wcsnset-s-wcsnset-s-l-mbsnset-s-mbsnset-s-l.md @@ -16,7 +16,7 @@ Initializes characters of a string to a given character. These versions of [`_st > [!IMPORTANT] > **`_mbsnset_s`** and **`_mbsnset_s_l`** cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). -For `_tcsnset_s`, `_tcsnset_s_l`, `_tcsncset_s`, and `_tcsncset_s_l` see [Generic-text function mappings](#generic-text-routine-mappings). +For `_tcsnset_s`, `_tcsnset_s_l`, `_tcsncset_s`, and `_tcsncset_s_l` see [Generic-text function mappings](#generic-text-function-mappings). ## Syntax From daa42ed3dc97c6c3a857475ebf6317cbdf75332b Mon Sep 17 00:00:00 2001 From: Amy Wishnousky Date: Fri, 12 Jul 2024 16:15:49 -0700 Subject: [PATCH 0307/1239] Update asan-building.md for ASan+PGO (#5621) * Update asan-building.md ASan + PGO is not supported * fix typo --- docs/sanitizers/asan-building.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sanitizers/asan-building.md b/docs/sanitizers/asan-building.md index 5ea53819c8..e1255cb13f 100644 --- a/docs/sanitizers/asan-building.md +++ b/docs/sanitizers/asan-building.md @@ -58,7 +58,7 @@ void test3() { The [**`/fsanitize=address`**](../build/reference/fsanitize.md) compiler option instruments memory references in your code to catch memory safety errors at runtime. The instrumentation hooks loads, stores, scopes, `alloca`, and CRT functions. It can detect hidden bugs such as out-of-bounds, use-after-free, use-after-scope, and so on. For a nonexhaustive list of errors detected at runtime, see [AddressSanitizer error examples](./asan-error-examples.md). -**`/fsanitize=address`** is compatible with all existing C++ or C optimization levels (for example, **`/Od`**, **`/O1`**, **`/O2`**, **`/O2 /GL`**, and profile guided optimization). The code produced with this option works with static and dynamic CRTs (for example, **`/MD`**, **`/MDd`**, **`/MT`**, and **`/MTd`**). This compiler option can be used to create an .EXE or .DLL targeting x86 or x64. Debug information is required for optimal formatting of call stacks. +**`/fsanitize=address`** is compatible with all existing C++ or C optimization levels (for example, **`/Od`**, **`/O1`**, **`/O2`**, and **`/O2 /GL`**). The code produced with this option works with static and dynamic CRTs (for example, **`/MD`**, **`/MDd`**, **`/MT`**, and **`/MTd`**). This compiler option can be used to create an .EXE or .DLL targeting x86 or x64. Debug information is required for optimal formatting of call stacks. This compiler option is not supported with profile guided optimization. For examples of code that demonstrates several kinds of error detection, see [AddressSanitizer error examples](asan-error-examples.md). From bf7cc8bc38416a237ba0fc9b3a42b10ba482f243 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Sat, 20 Jul 2024 01:50:05 +0800 Subject: [PATCH 0308/1239] Resolve address typos (#5069) --- .../reference/largeaddressaware-handle-large-addresses.md | 6 +++--- docs/intrinsics/addressofreturnaddress.md | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/build/reference/largeaddressaware-handle-large-addresses.md b/docs/build/reference/largeaddressaware-handle-large-addresses.md index 611fab4f7a..4d3910054e 100644 --- a/docs/build/reference/largeaddressaware-handle-large-addresses.md +++ b/docs/build/reference/largeaddressaware-handle-large-addresses.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: /LARGEADDRESSAWARE (Handle Large Addresses)" title: "/LARGEADDRESSAWARE (Handle Large Addresses)" +description: "Learn more about: /LARGEADDRESSAWARE (Handle Large Addresses)" ms.date: "02/12/2024" f1_keywords: ["VC.Project.VCLinkerTool.LargeAddressAware", "/largeaddressaware"] helpviewer_keywords: ["LARGEADDRESSAWARE linker option", "-LARGEADDRESSAWARE linker option", "/LARGEADDRESSAWARE linker option"] @@ -17,7 +17,7 @@ The /LARGEADDRESSAWARE option tells the linker that the application can handle a If an application was linked with `/LARGEADDRESSAWARE`, `DUMPBIN` [/HEADERS](headers.md) will display information to that effect. -Linking 64-bit applications with **`/LARGEADDRESSAWARE:NO`** is not recommended because it restricts the available address space, which can result in runtime failures if the app exhausts memory. It may also prevent x64 apps from running on ARM64 systems because the emulation runtime will try to reserve 4GB of virtual address space. If the app was linked with `/LARGEADRESSAWARE:NO`, the app won't launch because it can't allocate that much address space. +Linking 64-bit applications with **`/LARGEADDRESSAWARE:NO`** is not recommended because it restricts the available address space, which can result in runtime failures if the app exhausts memory. It may also prevent x64 apps from running on ARM64 systems because the emulation runtime will try to reserve 4GB of virtual address space. If the app was linked with `/LARGEADDRESSAWARE:NO`, the app won't launch because it can't allocate that much address space. ### To set this linker option in the Visual Studio development environment @@ -33,5 +33,5 @@ Linking 64-bit applications with **`/LARGEADDRESSAWARE:NO`** is not recommended ## See also -[MSVC linker reference](linking.md)
+[MSVC linker reference](linking.md)\ [MSVC Linker Options](linker-options.md) diff --git a/docs/intrinsics/addressofreturnaddress.md b/docs/intrinsics/addressofreturnaddress.md index 62708c065e..62ed8bddb9 100644 --- a/docs/intrinsics/addressofreturnaddress.md +++ b/docs/intrinsics/addressofreturnaddress.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: _AddressOfReturnAddress" title: "_AddressOfReturnAddress" +description: "Learn more about: _AddressOfReturnAddress" ms.date: "09/02/2019" f1_keywords: ["_AddressOfReturnAddress_cpp", "_AddressOfReturnAddress"] helpviewer_keywords: ["_AddressOfReturnAddress intrinsic", "AddressOfReturnAddress intrinsic"] -ms.assetid: c7e10b8c-445e-4236-a602-e2d90200f70a --- # _AddressOfReturnAddress @@ -41,7 +40,7 @@ This routine is only available as an intrinsic. #include // This function will print three values: -// (1) The address retrieved from _AddressOfReturnAdress +// (1) The address retrieved from _AddressOfReturnAddress // (2) The return address stored at the location returned in (1) // (3) The return address retrieved the _ReturnAddress* intrinsic // Note that (2) and (3) should be the same address. From 69c8aa56e3e9011b6d29ec5b3b33b6ed070022eb Mon Sep 17 00:00:00 2001 From: Liron Newman Date: Wed, 24 Jul 2024 12:41:19 +0100 Subject: [PATCH 0309/1239] Make it clear that the reference shouldn't be commented. --- .../compiler-warnings/compiler-warning-level-4-c4100.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md index 189fa4462c..78f8e5ba23 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md @@ -21,7 +21,7 @@ The following sample generates C4100: // compile with: /W4 void func(int i) { // C4100, delete the unreferenced parameter to //resolve the warning - // i; // or, add a reference like this + i; // or, add a reference like this } int main() From a0a8b99c671c4f9c1a2aed374c56a6a09180833a Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Wed, 24 Jul 2024 13:51:48 -0700 Subject: [PATCH 0310/1239] Update compiler-warning-level-4-c4100.md --- .../compiler-warnings/compiler-warning-level-4-c4100.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md index 78f8e5ba23..a899f9b100 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4100.md @@ -21,7 +21,7 @@ The following sample generates C4100: // compile with: /W4 void func(int i) { // C4100, delete the unreferenced parameter to //resolve the warning - i; // or, add a reference like this + // i; // Or uncomment this line to add a reference } int main() From 33408fb2cdbe32afbe0ed4e856b89f34f7bb52fe Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 26 Jul 2024 15:41:11 -0700 Subject: [PATCH 0311/1239] UUF 270582 --- docs/c-runtime-library/reference/findfirst-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/findfirst-functions.md b/docs/c-runtime-library/reference/findfirst-functions.md index d34d13c777..12ba5ddb78 100644 --- a/docs/c-runtime-library/reference/findfirst-functions.md +++ b/docs/c-runtime-library/reference/findfirst-functions.md @@ -72,7 +72,7 @@ intptr_t _wfindfirst64i32( Target file specification (can include wildcard characters). *`fileinfo`*\ -File information buffer. +File information buffer. For more information about the `fileinfo` structs, see the Remarks in [Filename search functions](../filename-search-functions.md) and see [Data type mappings](data-type-mappings.md). The structs are defined in the same header file as the function that uses them as a parameter. ## Return value From 8e3d5207485a5c3e53485e86fb41e4ec984e0573 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 26 Jul 2024 16:08:44 -0700 Subject: [PATCH 0312/1239] uuf fixes --- docs/c-runtime-library/reference/findfirst-functions.md | 2 +- docs/c-runtime-library/reference/msize-dbg.md | 5 ++--- docs/c-runtime-library/reference/msize.md | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/c-runtime-library/reference/findfirst-functions.md b/docs/c-runtime-library/reference/findfirst-functions.md index 12ba5ddb78..6a5bf3d935 100644 --- a/docs/c-runtime-library/reference/findfirst-functions.md +++ b/docs/c-runtime-library/reference/findfirst-functions.md @@ -101,7 +101,7 @@ These functions use various forms of the **`_finddata_t`** structure for the *`f The variations that use a 64-bit time type enable file-creation dates to be expressed up through 23:59:59, December 31, 3000, UTC. The ones that use 32-bit time types represent dates only through 23:59:59 January 18, 2038, UTC. Midnight, January 1, 1970, is the lower bound of the date range for all these functions. -Unless you have a specific reason to use the versions that specify the time size explicitly, use **`_findfirst`** or **`_wfindfirst`** or, if you need to support file sizes larger than 3 GB, use **`_findfirsti64`** or **`_wfindfirsti64`**. All these functions use the 64-bit time type. In earlier versions, these functions used a 32-bit time type. If this change is a breaking change for an application, you might define `_USE_32BIT_TIME_T` to revert to the old behavior. If `_USE_32BIT_TIME_T` is defined, **`_findfirst`**, **`_finfirsti64`**, and their corresponding Unicode versions use a 32-bit time. +Unless you have a specific reason to use the versions that specify the time size explicitly, use **`_findfirst`** or **`_wfindfirst`** or, if you need to support file sizes larger than 3 GB, use **`_findfirsti64`** or **`_wfindfirsti64`**. All these functions use the 64-bit time type. In earlier versions, these functions used a 32-bit time type. If this change is a breaking change for an application, you might define `_USE_32BIT_TIME_T` to revert to the old behavior. If `_USE_32BIT_TIME_T` is defined, **`_findfirst`**, **`_findfirsti64`**, and their corresponding Unicode versions use a 32-bit time. By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). diff --git a/docs/c-runtime-library/reference/msize-dbg.md b/docs/c-runtime-library/reference/msize-dbg.md index b1edd1a907..01ea05ea49 100644 --- a/docs/c-runtime-library/reference/msize-dbg.md +++ b/docs/c-runtime-library/reference/msize-dbg.md @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_msize_dbg", "msize_dbg"] helpviewer_keywords: ["memory blocks", "_msize_dbg function", "msize_dbg function"] -ms.assetid: a333f4b6-f8a2-4e61-bb69-cb34063b8cef --- # `_msize_dbg` @@ -41,13 +40,13 @@ On successful completion, **`_msize_dbg`** returns the size (in bytes) of the sp For information about how memory blocks are allocated, initialized, and managed in the debug version of the base heap, see [CRT debug heap details](../crt-debug-heap-details.md). For information about the allocation block types and how they're used, see [Types of blocks on the debug heap](../crt-debug-heap-details.md#types-of-blocks-on-the-debug-heap). For information about the differences between standard heap functions and the debug versions, see [Debug versions of heap allocation functions](../debug-versions-of-heap-allocation-functions.md). -This function validates its parameter. If *`memblock`* is a null pointer, **`_msize_dbg`** invokes an invalid parameter handler, as described in [Parameter validation](../parameter-validation.md). If the error is handled, the function sets `errno` to `EINVAL` and returns -1. +This function validates its parameter. If *`memblock`* is a null pointer, **`_msize_dbg`** invokes an invalid parameter handler, as described in [Parameter validation](../parameter-validation.md). If the error is handled, the function sets `errno` to `EINVAL` and returns -1 (18,446,744,073,709,551,615 unsigned). ## Requirements | Routine | Required header | |---|---| -| **`_msize_dbg`** | \ | +| **`_msize_dbg`** | `` | For more compatibility information, see [Compatibility](../compatibility.md). diff --git a/docs/c-runtime-library/reference/msize.md b/docs/c-runtime-library/reference/msize.md index db66cf4361..b5d1cad10b 100644 --- a/docs/c-runtime-library/reference/msize.md +++ b/docs/c-runtime-library/reference/msize.md @@ -1,7 +1,7 @@ --- description: "Learn more about: _msize" title: "_msize" -ms.date: "4/2/2020" +ms.date: 07/26/2024 api_name: ["_msize", "_o__msize"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-heap-l1-1-0.dll"] api_type: ["DLLExport"] @@ -36,7 +36,7 @@ The **`_msize`** function returns the size, in bytes, of the memory block alloca When the application is linked with a debug version of the C run-time libraries, **`_msize`** resolves to [`_msize_dbg`](msize-dbg.md). For more information about how the heap is managed during the debugging process, see [The CRT debug heap](../crt-debug-heap-details.md). -This function validates its parameter. If *`memblock`* is a `NULL` pointer, **`_msize`** invokes an invalid parameter handler, as described in [Parameter validation](../parameter-validation.md). If the error is handled, the function sets `errno` to `EINVAL` and returns -1. +This function validates its parameter. If *`memblock`* is a `NULL` pointer, **`_msize`** invokes an invalid parameter handler, as described in [Parameter validation](../parameter-validation.md). If the error is handled, the function sets `errno` to `EINVAL` and returns -1 (18,446,744,073,709,551,615 unsigned). By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). From d3cd23744c275b0a2788b88ff728400473289b6e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 26 Jul 2024 16:28:00 -0700 Subject: [PATCH 0313/1239] fix link --- docs/c-runtime-library/reference/findfirst-functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/findfirst-functions.md b/docs/c-runtime-library/reference/findfirst-functions.md index 6a5bf3d935..dcfbffe363 100644 --- a/docs/c-runtime-library/reference/findfirst-functions.md +++ b/docs/c-runtime-library/reference/findfirst-functions.md @@ -72,7 +72,7 @@ intptr_t _wfindfirst64i32( Target file specification (can include wildcard characters). *`fileinfo`*\ -File information buffer. For more information about the `fileinfo` structs, see the Remarks in [Filename search functions](../filename-search-functions.md) and see [Data type mappings](data-type-mappings.md). The structs are defined in the same header file as the function that uses them as a parameter. +File information buffer. For more information about the `fileinfo` structs, see the Remarks in [Filename search functions](../filename-search-functions.md) and see [Data type mappings](../data-type-mappings.md). The structs are defined in the same header file as the function that uses them as a parameter. ## Return value From c7b8b0de4bf7078ad0c7b3d482edd247656a66e9 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 26 Jul 2024 17:32:40 -0700 Subject: [PATCH 0314/1239] fix 263930 (#5631) --- .../reference/cmfccolorpickerctrl-class.md | 168 ++++++++---------- 1 file changed, 78 insertions(+), 90 deletions(-) diff --git a/docs/mfc/reference/cmfccolorpickerctrl-class.md b/docs/mfc/reference/cmfccolorpickerctrl-class.md index a00150e5a1..dc47c78a25 100644 --- a/docs/mfc/reference/cmfccolorpickerctrl-class.md +++ b/docs/mfc/reference/cmfccolorpickerctrl-class.md @@ -4,7 +4,6 @@ title: "CMFCColorPickerCtrl Class" ms.date: "11/19/2018" f1_keywords: ["CMFCColorPickerCtrl", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::CMFCColorPickerCtrl", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::GetColor", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::GetHLS", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::GetHue", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::GetLuminance", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::GetSaturation", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SelectCellHexagon", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetColor", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetHLS", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetHue", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetLuminance", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetLuminanceBarWidth", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetOriginalColor", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetPalette", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetSaturation", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::SetType", "AFXCOLORPICKERCTRL/CMFCColorPickerCtrl::DrawCursor"] helpviewer_keywords: ["CMFCColorPickerCtrl [MFC], CMFCColorPickerCtrl", "CMFCColorPickerCtrl [MFC], GetColor", "CMFCColorPickerCtrl [MFC], GetHLS", "CMFCColorPickerCtrl [MFC], GetHue", "CMFCColorPickerCtrl [MFC], GetLuminance", "CMFCColorPickerCtrl [MFC], GetSaturation", "CMFCColorPickerCtrl [MFC], SelectCellHexagon", "CMFCColorPickerCtrl [MFC], SetColor", "CMFCColorPickerCtrl [MFC], SetHLS", "CMFCColorPickerCtrl [MFC], SetHue", "CMFCColorPickerCtrl [MFC], SetLuminance", "CMFCColorPickerCtrl [MFC], SetLuminanceBarWidth", "CMFCColorPickerCtrl [MFC], SetOriginalColor", "CMFCColorPickerCtrl [MFC], SetPalette", "CMFCColorPickerCtrl [MFC], SetSaturation", "CMFCColorPickerCtrl [MFC], SetType", "CMFCColorPickerCtrl [MFC], DrawCursor"] -ms.assetid: b9bbd03c-beb0-4b55-9765-9985fd05e5dc --- # CMFCColorPickerCtrl Class @@ -12,7 +11,7 @@ The `CMFCColorPickerCtrl` class provides functionality for a control that is use ## Syntax -``` +```cpp class CMFCColorPickerCtrl : public CButton ``` @@ -22,43 +21,43 @@ class CMFCColorPickerCtrl : public CButton |Name|Description| |----------|-----------------| -|[CMFCColorPickerCtrl::CMFCColorPickerCtrl](#cmfccolorpickerctrl)|Constructs a `CMFCColorPickerCtrl` object.| +|[`CMFCColorPickerCtrl::CMFCColorPickerCtrl`](#cmfccolorpickerctrl)|Constructs a `CMFCColorPickerCtrl` object.| ### Public Methods |Name|Description| |----------|-----------------| -|[CMFCColorPickerCtrl::GetColor](#getcolor)|Retrieves the color that the user selects.| -|[CMFCColorPickerCtrl::GetHLS](#gethls)|Retrieves the hue, luminance and saturation values of the color that the user selects.| -|[CMFCColorPickerCtrl::GetHue](#gethue)|Retrieves the hue component of the color that the user selects.| -|[CMFCColorPickerCtrl::GetLuminance](#getluminance)|Retrieves the luminance component of the color that the user selects.| -|[CMFCColorPickerCtrl::GetSaturation](#getsaturation)|Retrieves the saturation component of the color that the user selects.| -|[CMFCColorPickerCtrl::SelectCellHexagon](#selectcellhexagon)|Sets the current color to the color defined by the specified RGB color components or the specified cell hexagon.| -|[CMFCColorPickerCtrl::SetColor](#setcolor)|Sets the current color to the specified RGB color value.| -|[CMFCColorPickerCtrl::SetHLS](#sethls)|Sets the current color to the specified HLS color value.| -|[CMFCColorPickerCtrl::SetHue](#sethue)|Changes the hue component of the currently selected color.| -|[CMFCColorPickerCtrl::SetLuminance](#setluminance)|Changes the luminance component of the currently selected color.| -|[CMFCColorPickerCtrl::SetLuminanceBarWidth](#setluminancebarwidth)|Sets the width of the luminance bar in the color picker control.| -|[CMFCColorPickerCtrl::SetOriginalColor](#setoriginalcolor)|Sets the initial selected color.| -|[CMFCColorPickerCtrl::SetPalette](#setpalette)|Sets the current color palette.| -|[CMFCColorPickerCtrl::SetSaturation](#setsaturation)|Changes the saturation component of the currently selected color.| -|[CMFCColorPickerCtrl::SetType](#settype)|Sets the type of color picker control to display.| +|[`CMFCColorPickerCtrl::GetColor`](#getcolor)|Retrieves the color that the user selects.| +|[`CMFCColorPickerCtrl::GetHLS`](#gethls)|Retrieves the hue, luminance and saturation values of the color that the user selects.| +|[`CMFCColorPickerCtrl::GetHue`](#gethue)|Retrieves the hue component of the color that the user selects.| +|[`CMFCColorPickerCtrl::GetLuminance`](#getluminance)|Retrieves the luminance component of the color that the user selects.| +|[`CMFCColorPickerCtrl::GetSaturation`](#getsaturation)|Retrieves the saturation component of the color that the user selects.| +|[`CMFCColorPickerCtrl::SelectCellHexagon`](#selectcellhexagon)|Sets the current color to the color defined by the specified RGB color components or the specified cell hexagon.| +|[`CMFCColorPickerCtrl::SetColor`](#setcolor)|Sets the current color to the specified RGB color value.| +|[`CMFCColorPickerCtrl::SetHLS`](#sethls)|Sets the current color to the specified HLS color value.| +|[`CMFCColorPickerCtrl::SetHue`](#sethue)|Changes the hue component of the currently selected color.| +|[`CMFCColorPickerCtrl::SetLuminance`](#setluminance)|Changes the luminance component of the currently selected color.| +|[`CMFCColorPickerCtrl::SetLuminanceBarWidth`](#setluminancebarwidth)|Sets the width of the luminance bar in the color picker control.| +|[`CMFCColorPickerCtrl::SetOriginalColor`](#setoriginalcolor)|Sets the initial selected color.| +|[`CMFCColorPickerCtrl::SetPalette`](#setpalette)|Sets the current color palette.| +|[`CMFCColorPickerCtrl::SetSaturation`](#setsaturation)|Changes the saturation component of the currently selected color.| +|[`CMFCColorPickerCtrl::SetType`](#settype)|Sets the type of color picker control to display.| ### Protected Methods |Name|Description| |----------|-----------------| -|[CMFCColorPickerCtrl::DrawCursor](#drawcursor)|Called by the framework before a cursor that points to the selected color is displayed.| +|[`CMFCColorPickerCtrl::DrawCursor`](#drawcursor)|Called by the framework before a cursor that points to the selected color is displayed.| ## Remarks -Standard colors are selected from a hexagonal color palette, and custom colors are selected from a luminance bar where colors are specified using either red/green/blue notation or hue/satuaration/luminance notation. +Standard colors are selected from a hexagonal color palette, and custom colors are selected from a luminance bar where colors are specified using either red/green/blue notation or hue/saturation/luminance notation. The following illustration depicts several `CMFCColorPickerCtrl` objects. -![CMFCColorPickerCtrl dialog box.](../../mfc/reference/media/colorpicker.png "CMFCColorPickerCtrl dialog box") +![`CMFCColorPickerCtrl` dialog box.](../../mfc/reference/media/colorpicker.png "CMFCColorPickerCtrl dialog box") -The `CMFCColorPickerCtrl` supports two pairs of styles. The HEX and HEX_GREYSCALE styles are appropriate for standard color selection. The PICKER and LUMINANCE styles are appropriate for custom color selection. +The `CMFCColorPickerCtrl` supports two pairs of styles. The `HEX` and `HEX_GREYSCALE` styles are appropriate for standard color selection. The `PICKER` and `LUMINANCE` styles are appropriate for custom color selection. Perform the following steps to incorporate the `CMFCColorPickerCtrl` control into your dialog box: @@ -68,34 +67,23 @@ Perform the following steps to incorporate the `CMFCColorPickerCtrl` control int 1. Insert the `WM_INITDIALOG` message handler for the dialog box class. In the handler, set the type, palette, and initial selected color of the `CMFCColorPickerCtrl` control. -## Example - -The following example demonstrates how to configure a `CMFCColorPickerCtrl` object by using various methods in the `CMFCColorPickerCtrl` class. The example demonstrates how to set the type of the picker control, and how to set its color, hue, luminance, and saturation. The example is part of the [New Controls sample](../../overview/visual-cpp-samples.md). - -[!code-cpp[NVC_MFC_NewControls#4](../../mfc/reference/codesnippet/cpp/cmfccolorpickerctrl-class_1.h)] -[!code-cpp[NVC_MFC_NewControls#5](../../mfc/reference/codesnippet/cpp/cmfccolorpickerctrl-class_2.cpp)] - ## Inheritance Hierarchy -[CObject](../../mfc/reference/cobject-class.md) - -[CCmdTarget](../../mfc/reference/ccmdtarget-class.md) - -[CWnd](../../mfc/reference/cwnd-class.md) - -[CButton](../../mfc/reference/cbutton-class.md) - -[CMFCColorPickerCtrl](../../mfc/reference/cmfccolorpickerctrl-class.md) +[`CObject`](../../mfc/reference/cobject-class.md)\ +[`CCmdTarget`](../../mfc/reference/ccmdtarget-class.md)\ +[`CWnd`](../../mfc/reference/cwnd-class.md)\ +[`CButton`](../../mfc/reference/cbutton-class.md)\ +[`CMFCColorPickerCtrl`](../../mfc/reference/cmfccolorpickerctrl-class.md) ## Requirements -**Header:** afxcolorpickerctrl.h +**Header:** `afxcolorpickerctrl.h` ## CMFCColorPickerCtrl::CMFCColorPickerCtrl Constructs a `CMFCColorPickerCtrl` object. -``` +```cpp CMFCColorPickerCtrl(); ``` @@ -103,11 +91,11 @@ CMFCColorPickerCtrl(); ### Remarks -## CMFCColorPickerCtrl::DrawCursor +## `CMFCColorPickerCtrl::DrawCursor` Called by the framework before a cursor that points to the selected color is displayed. -``` +```cpp virtual void DrawCursor( CDC* pDC, const CRect& rect); @@ -115,21 +103,21 @@ virtual void DrawCursor( ### Parameters -*pDC*
+`pDC`\ [in] Pointer to a device context. -*rect*
+`rect`\ [in] Specifies a rectangular area around the selected color. ### Remarks Override this method when you need to change the shape of the cursor that points to the selected color. -## CMFCColorPickerCtrl::GetColor +## `CMFCColorPickerCtrl::GetColor` Retrieves the color that the user selects. -``` +```cpp COLORREF GetColor() const; ``` @@ -139,7 +127,7 @@ The RGB value of the selected color. ### Remarks -## CMFCColorPickerCtrl::GetHLS +## `CMFCColorPickerCtrl::GetHLS` Retrieves the hue, luminance and saturation values of the color that the user selects. @@ -152,22 +140,22 @@ void GetHLS( ### Parameters -*hue*
+`hue`\ [out] Pointer to a variable of type double that receives hue information. -*luminance*
+`luminance`\ [out] Pointer to a variable of type double that receives luminance information. -*saturation*
+`saturation`\ [out] Pointer to a variable of type double that receives saturation information. ### Remarks -## CMFCColorPickerCtrl::GetHue +## `CMFCColorPickerCtrl::GetHue` Retrieves the hue component of the color that the user selects. -``` +```cpp double GetHue() const; ``` @@ -177,11 +165,11 @@ The hue component of the selected color. ### Remarks -## CMFCColorPickerCtrl::GetLuminance +## `CMFCColorPickerCtrl::GetLuminance` Retrieves the luminance component of the color that the user selects. -``` +```cpp double GetLuminance() const; ``` @@ -191,11 +179,11 @@ The luminance component of the selected color. ### Remarks -## CMFCColorPickerCtrl::GetSaturation +## `CMFCColorPickerCtrl::GetSaturation` Retrieves the saturation value of the color that the user selects. -``` +```cpp double GetSaturation() const; ``` @@ -205,7 +193,7 @@ The saturation component of the selected color. ### Remarks -## CMFCColorPickerCtrl::SelectCellHexagon +## `CMFCColorPickerCtrl::SelectCellHexagon` Sets the current color to the color defined by the specified RGB color components or the specified cell hexagon. @@ -222,19 +210,19 @@ BOOL SelectCellHexagon( ### Parameters -*R*
+`R`\ [in] The red color component. -*G*
+`G`\ [in] The green color component. -*B*
+`B`\ [in] The blue color component. -*x*
+`x`\ [in] The x-coordinate of the cursor, which points to a cell hexagon. -*y*
+`y`\ [in] The y-coordinate of the cursor, which points to a cell hexagon. ### Return Value @@ -247,7 +235,7 @@ The first overload of this method sets the current color to the color that corre The second overload of this method sets the current color to the color of the cell hexagon that is pointed to by the specified cursor location. -## CMFCColorPickerCtrl::SetColor +## `CMFCColorPickerCtrl::SetColor` Sets the current color to the specified RGB color value. @@ -257,12 +245,12 @@ void SetColor(COLORREF Color); ### Parameters -*Color*
+`Color`\ [in] An RGB color value. ### Remarks -## CMFCColorPickerCtrl::SetHLS +## `CMFCColorPickerCtrl::SetHLS` Sets the current color to the specified HLS color value. @@ -276,21 +264,21 @@ void SetHLS( ### Parameters -*hue*
+`hue`\ [in] A hue value. -*luminance*
+`luminance`\ [in] A luminance value. -*saturation*
+`saturation`\ [in] A saturation value. -*bInvalidate*
-[in] TRUE to force the window to immediately update to the new color; otherwise, FALSE. The default is TRUE. +`bInvalidate`\ +[in] `TRUE` to force the window to immediately update to the new color; otherwise, `FALSE`. The default is `TRUE`. ### Remarks -## CMFCColorPickerCtrl::SetHue +## `CMFCColorPickerCtrl::SetHue` Changes the hue of the currently selected color. @@ -300,12 +288,12 @@ void SetHue(double Hue); ### Parameters -*Hue*
+`Hue`\ [in] A hue value. ### Remarks -## CMFCColorPickerCtrl::SetLuminance +## `CMFCColorPickerCtrl::SetLuminance` Changes the luminance of the currently selected color. @@ -315,12 +303,12 @@ void SetLuminance(double Luminance); ### Parameters -*Luminance*
+`Luminance`\ [in] A luminance value. ### Remarks -## CMFCColorPickerCtrl::SetLuminanceBarWidth +## `CMFCColorPickerCtrl::SetLuminanceBarWidth` Sets the width of the luminance bar in the color picker control. @@ -330,14 +318,14 @@ void SetLuminanceBarWidth(int w); ### Parameters -*w*
+`w`\ [in] The width of the luminance bar measured in pixels. ### Remarks -Use this method to resize the luminance bar, which is on the **Custom** tab of the color picker control. The *w* parameter specifies the new width of the luminance bar. The width value is ignored if it exceeds three-fourths of the client area width. +Use this method to resize the luminance bar, which is on the **Custom** tab of the color picker control. The `w` parameter specifies the new width of the luminance bar. The width value is ignored if it exceeds three-fourths of the client area width. -## CMFCColorPickerCtrl::SetOriginalColor +## `CMFCColorPickerCtrl::SetOriginalColor` Sets the initial selected color. @@ -347,14 +335,14 @@ void SetOriginalColor(COLORREF ref); ### Parameters -*ref*
+`ref`\ [in] An RGB color value. ### Remarks Call this method when the color picker control is initialized. -## CMFCColorPickerCtrl::SetPalette +## `CMFCColorPickerCtrl::SetPalette` Sets the current color palette. @@ -364,14 +352,14 @@ void SetPalette(CPalette* pPalette); ### Parameters -*pPalette*
+`pPalette`\ [in] Pointer to a color palette. ### Remarks The color palette defines the array of colors that is presented in the color picker control. -## CMFCColorPickerCtrl::SetSaturation +## `CMFCColorPickerCtrl::SetSaturation` Changes the saturation of the currently selected color. @@ -381,12 +369,12 @@ void SetSaturation(double Saturation); ### Parameters -*Saturation*
-[in] A saturation value. +`Saturation`\ +[`in`] A saturation value. ### Remarks -## CMFCColorPickerCtrl::SetType +## `CMFCColorPickerCtrl::SetType` Sets the type of color picker control to display. @@ -396,10 +384,10 @@ void SetType(COLORTYPE colorType); ### Parameters -*colorType*
+`colorType`\ [in] A color picker control type. -The types are defined by the `CMFCColorPickerCtrl::COLORTYPE` enumeration. The possible types are LUMINANCE, PICKER, HEX and HEX_GREYSCALE. The default type is PICKER. +The types are defined by the `CMFCColorPickerCtrl::COLORTYPE` enumeration. The possible types are `LUMINANCE`, `PICKER`, `HEX` and `HEX_GREYSCALE`. The default type is `PICKER`. ### Remarks @@ -407,6 +395,6 @@ To specify a color picker control type, call this method before the Windows cont ## See also -[Hierarchy Chart](../../mfc/hierarchy-chart.md)
-[Classes](../../mfc/reference/mfc-classes.md)
-[CMFCColorDialog Class](../../mfc/reference/cmfccolordialog-class.md) +[Hierarchy Chart](../../mfc/hierarchy-chart.md)\ +[Classes](../../mfc/reference/mfc-classes.md)\ +[`CMFCColorDialog` Class](../../mfc/reference/cmfccolordialog-class.md) From 5a729ee994935da6d1e8dfa05dd8d545827b57d0 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Thu, 1 Aug 2024 04:31:57 +0800 Subject: [PATCH 0315/1239] Fix a bunch of mistakes around backticks (#5074) --- docs/build/reference/analyze-code-analysis.md | 3 +-- docs/build/walkthrough-import-stl-header-units.md | 6 +++--- .../c-runtime-library/reference/nextafter-functions.md | 2 +- docs/c-runtime-library/reference/stat-functions.md | 4 ++-- docs/code-quality/c26837.md | 4 ++-- .../add-interface-definition-library-method-wizard.md | 4 ++-- docs/linux/connect-to-your-remote-linux-computer.md | 2 +- docs/mfc/reference/cdc-class.md | 4 ++-- docs/mfc/reference/crecordset-class.md | 4 ++-- .../what-s-new-for-visual-cpp-in-visual-studio.md | 2 +- .../concrt/reference/source-link-manager-class.md | 9 ++++----- docs/standard-library/chrono-functions.md | 4 ++-- docs/standard-library/chrono.md | 4 ++-- docs/standard-library/clock-time-conversion-struct.md | 4 ++-- docs/standard-library/iterator-functions.md | 4 ++-- docs/standard-library/leap-second-info-struct.md | 4 ++-- docs/standard-library/local_t.md | 4 ++-- docs/standard-library/range-functions.md | 2 +- docs/standard-library/subrange-class.md | 2 +- docs/standard-library/wbuffer-convert-class.md | 4 ++-- docs/standard-library/year-month-day-class.md | 10 +++++----- 21 files changed, 42 insertions(+), 44 deletions(-) diff --git a/docs/build/reference/analyze-code-analysis.md b/docs/build/reference/analyze-code-analysis.md index c283067977..8064dc9e98 100644 --- a/docs/build/reference/analyze-code-analysis.md +++ b/docs/build/reference/analyze-code-analysis.md @@ -4,7 +4,6 @@ description: "The Microsoft C++ compiler /analyze option syntax and usage." ms.date: 02/17/2022 f1_keywords: ["VC.Project.VCCLCompilerTool.EnablePREfast", "/analyze", "VC.Project.VCCLCompilerTool.PREfastAdditionalOptions", "VC.Project.VCCLCompilerTool.PREfastAdditionalPlugins", "VC.Project.VCCLCompilerTool.DisableAnalyzeExternal", "VC.Project.VCCLCompilerTool.AnalyzeExternalRuleset"] helpviewer_keywords: ["/analyze compiler option [C++]", "-analyze compiler option [C++]", "analyze compiler option [C++]"] -ms.assetid: 81da536a-e030-4bd4-be18-383927597d08 --- # `/analyze` (Code analysis) @@ -135,7 +134,7 @@ Then, use compiler option `/analyze:plugin EspXEngine.dll` to use the EspXEngine #### External file analysis options -Starting in Visual Studio 2019 version 16.10, you can specify different analysis rules and behavior for external headers. Use the **`/external:I`**, **`/external:env`**, or **`/external:anglebrackets`** options to specify directories as "external" directories. Any files that are included by using `#include`from an external directory or its subdirectories are considered as external headers. For more information, see [`/external` (External headers diagnostics)](external-external-headers-diagnostics.md). +Starting in Visual Studio 2019 version 16.10, you can specify different analysis rules and behavior for external headers. Use the **`/external:I`**, **`/external:env`**, or **`/external:anglebrackets`** options to specify directories as "external" directories. Any files that are included by using `#include` from an external directory or its subdirectories are considered as external headers. For more information, see [`/external` (External headers diagnostics)](external-external-headers-diagnostics.md). Code analysis provides these options to control analysis of external files: diff --git a/docs/build/walkthrough-import-stl-header-units.md b/docs/build/walkthrough-import-stl-header-units.md index 80708ae720..4a6f8830b1 100644 --- a/docs/build/walkthrough-import-stl-header-units.md +++ b/docs/build/walkthrough-import-stl-header-units.md @@ -1,6 +1,6 @@ --- -description: "Learn to use header units to import C++ Standard Template Library (STL) libraries in Visual Studio." title: "Walkthrough: Import STL libraries as header units" +description: "Learn to use header units to import C++ Standard Template Library (STL) libraries in Visual Studio." ms.date: 10/15/2022 ms.custom: "conceptual" author: "tylermsft" @@ -170,7 +170,7 @@ This option is convenient when your project includes many STL header files acros This approach is less flexible than the static library approach, because it doesn't lend itself towards reusing the built header units in other projects. This approach might not be appropriate for larger projects: It doesn't guarantee an optimal build time, since all of the sources must be scanned for `#include` statements. -Not all header files can be automatically converted to header units. For example, headers that depend on conditional compilation via macros shouldn't be converted to header units. There's an allowlist in the form of a `header-units.json`file for the STL headers that the compiler uses when `/translateInclude` is specified. It determines which STL headers can be compiled into header units. The `header-units.json` file is under the installation directory for Visual Studio. For example, `%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.30.30705\include\header-units.json`. If the STL header file isn't on the list, it's treated as a normal `#include` instead of importing it as a header unit. Another advantage of the `header-units.json` file is that it prevents symbol duplication in the built header units. That is, if compiling a header unit brings in another library header multiple times, the symbols won't be duplicated. +Not all header files can be automatically converted to header units. For example, headers that depend on conditional compilation via macros shouldn't be converted to header units. There's an allowlist in the form of a `header-units.json` file for the STL headers that the compiler uses when `/translateInclude` is specified. It determines which STL headers can be compiled into header units. The `header-units.json` file is under the installation directory for Visual Studio. For example, `%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.30.30705\include\header-units.json`. If the STL header file isn't on the list, it's treated as a normal `#include` instead of importing it as a header unit. Another advantage of the `header-units.json` file is that it prevents symbol duplication in the built header units. That is, if compiling a header unit brings in another library header multiple times, the symbols won't be duplicated. To try out this approach, create a project that includes two STL libraries. Then, change the project's properties so that it imports the libraries as header units instead of including them, as described in the next section. @@ -222,4 +222,4 @@ The main consideration for whether to use this approach is the balance between c [Compare header units, modules, and precompiled headers](compare-inclusion-methods.md)\ [Tutorial: Import the C++ standard library using modules](../cpp/tutorial-import-stl-named-module.md)\ [Walkthrough: Build and import header units in your Visual C++ projects](walkthrough-header-units.md)\ -[`/translateInclude`](./reference/translateinclude.md) \ No newline at end of file +[`/translateInclude`](./reference/translateinclude.md) diff --git a/docs/c-runtime-library/reference/nextafter-functions.md b/docs/c-runtime-library/reference/nextafter-functions.md index da24da3c06..f4945d818e 100644 --- a/docs/c-runtime-library/reference/nextafter-functions.md +++ b/docs/c-runtime-library/reference/nextafter-functions.md @@ -56,7 +56,7 @@ The **`nextafter`** and **`nexttoward`** function families are equivalent, excep Because C++ allows overloading, if you include `` you can call overloads of **`nextafter`** and **`nexttoward`** that return **`float`** and **`long double`** types. In a C program, unless you're using the `` macro to call this function, **`nextafter`** and **`nexttoward`** always return **`double`**. -If you use the `nextafter` or `nexttoward`macro from ``, the type of the argument determines which version of the function is selected. See [Type-generic math](../tgmath.md) for details. +If you use the `nextafter` or `nexttoward` macro from ``, the type of the argument determines which version of the function is selected. See [Type-generic math](../tgmath.md) for details. The **`_nextafter`** and **`_nextafterf`** functions are Microsoft-specific. The **`_nextafterf`** function is only available when compiling for x64. diff --git a/docs/c-runtime-library/reference/stat-functions.md b/docs/c-runtime-library/reference/stat-functions.md index 797cf701fc..b1a5efc58f 100644 --- a/docs/c-runtime-library/reference/stat-functions.md +++ b/docs/c-runtime-library/reference/stat-functions.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32, _wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32" title: "_stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32, _wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32" +description: "Learn more about: _stat, _stat32, _stat64, _stati64, _stat32i64, _stat64i32, _wstat, _wstat32, _wstat64, _wstati64, _wstat32i64, _wstat64i32" ms.date: "5/25/2023" api_name: ["_wstat64", "_stati64", "_stat32", "_stat32i64", "_stat", "_wstati64", "_wstat32", "_wstat64i32", "_wstat", "_stat64", "_stat64i32", "_wstat32i64", "_o__stat32", "_o__stat32i64", "_o__stat64", "_o__stat64i32", "_o__wstat32", "_o__wstat32i64", "_o__wstat64", "_o__wstat64i32"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-filesystem-l1-1-0.dll"] @@ -94,7 +94,7 @@ Variations of these functions support 32-bit or 64-bit time types, and 32-bit or > [!NOTE] > **`_wstat`** does not work with Windows Vista symbolic links. In these cases, **`_wstat`** will always report a file size of 0. **`_stat`** does work correctly with symbolic links. -> The `_stat`family of functions use `CreateFile` in Visual Studio 2015, instead of `FindFirstFile` as in Visual Studio 2013 and earlier. This means that `_stat` on a path ending with a slash succeeds if the path refers to a directory, as opposed to before when the function would error with `errno` set to `ENOENT`. +> The `_stat` family of functions use `CreateFile` in Visual Studio 2015, instead of `FindFirstFile` as in Visual Studio 2013 and earlier. This means that `_stat` on a path ending with a slash succeeds if the path refers to a directory, as opposed to before when the function would error with `errno` set to `ENOENT`. This function validates its parameters. If either *`path`* or *`buffer`* is `NULL`, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). diff --git a/docs/code-quality/c26837.md b/docs/code-quality/c26837.md index 021978ff09..2be95d94db 100644 --- a/docs/code-quality/c26837.md +++ b/docs/code-quality/c26837.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Warning C26837" title: Warning C26837 +description: "Learn more about: Warning C26837" ms.date: 11/29/2023 f1_keywords: ["C26837", "INTERLOCKED_COMPARE_EXCHANGE_MISUSE", "__WARNING_INTERLOCKED_COMPARE_EXCHANGE_MISUSE"] helpviewer_keywords: ["C26837"] @@ -34,7 +34,7 @@ The intent of this code is: 1. Check if this current value has the least significant bit set. 1. If it does have least significant bit set, clear the bit while preserving the other bits of the current value. -To accomplish this, a copy of the current value is read from the`plock` pointer and saved to a stack variable `lock`. `lock` is used three times: +To accomplish this, a copy of the current value is read from the `plock` pointer and saved to a stack variable `lock`. `lock` is used three times: 1. First, to check if the least-significant bit is set. 1. Second, as the `Comparand` value to `InterlockedCompareExchange64`. diff --git a/docs/ide/add-interface-definition-library-method-wizard.md b/docs/ide/add-interface-definition-library-method-wizard.md index cfde869e82..6f4430b635 100644 --- a/docs/ide/add-interface-definition-library-method-wizard.md +++ b/docs/ide/add-interface-definition-library-method-wizard.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Use a Microsoft Visual Studio wizard to add a method to an interface definition language (IDL) interface in your project" title: "Add an IDL method" +description: "Learn more about: Use a Microsoft Visual Studio wizard to add a method to an interface definition language (IDL) interface in your project" ms.date: "04/13/2022" f1_keywords: ["vc.codewiz.method.overview", "vc.codewiz.method.idlattrib"] helpviewer_keywords: ["add IDL method wizard [C++]", "IDL methods [C++], adding", "methods [C++], adding using wizards", "IDL attributes, add an IDL method wizard"] @@ -20,7 +20,7 @@ This wizard differs from the [**Add method**](adding-a-method-visual-cpp.md) wiz 1. On the **View** menu, select **Class View**. -1. In the **Class View** pane, expand the project node to display the IDL interface (`.idl`file) to which you want to add the method. +1. In the **Class View** pane, expand the project node to display the IDL interface (`.idl` file) to which you want to add the method. 1. Right-click the name of the interface. diff --git a/docs/linux/connect-to-your-remote-linux-computer.md b/docs/linux/connect-to-your-remote-linux-computer.md index b7147b0589..4d9b28f1c6 100644 --- a/docs/linux/connect-to-your-remote-linux-computer.md +++ b/docs/linux/connect-to-your-remote-linux-computer.md @@ -247,7 +247,7 @@ sudo apt install g++ gdb make ninja-build rsync zip ### Fix WSL `localhost` connection problems -When connecting to Windows Subsystem for Linux (WSL) on `localhost`, you may run into a conflict with the Windows `ssh` client on port 22. In WSL, change the port that `ssh`expects requests from to 23 in `/etc/ssh/sshd_config`: +When connecting to Windows Subsystem for Linux (WSL) on `localhost`, you may run into a conflict with the Windows `ssh` client on port 22. In WSL, change the port that `ssh` expects requests from to 23 in `/etc/ssh/sshd_config`: ```bash Port 23 diff --git a/docs/mfc/reference/cdc-class.md b/docs/mfc/reference/cdc-class.md index fef69aae5e..5c2e0f0847 100644 --- a/docs/mfc/reference/cdc-class.md +++ b/docs/mfc/reference/cdc-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: CDC Class" title: "CDC Class" +description: "Learn more about: CDC Class" ms.date: "11/19/2018" f1_keywords: ["CDC", "AFXWIN/CDC", "AFXWIN/CDC::CDC", "AFXWIN/CDC::AbortDoc", "AFXWIN/CDC::AbortPath", "AFXWIN/CDC::AddMetaFileComment", "AFXWIN/CDC::AlphaBlend", "AFXWIN/CDC::AngleArc", "AFXWIN/CDC::Arc", "AFXWIN/CDC::ArcTo", "AFXWIN/CDC::Attach", "AFXWIN/CDC::BeginPath", "AFXWIN/CDC::BitBlt", "AFXWIN/CDC::Chord", "AFXWIN/CDC::CloseFigure", "AFXWIN/CDC::CreateCompatibleDC", "AFXWIN/CDC::CreateDC", "AFXWIN/CDC::CreateIC", "AFXWIN/CDC::DeleteDC", "AFXWIN/CDC::DeleteTempMap", "AFXWIN/CDC::Detach", "AFXWIN/CDC::DPtoHIMETRIC", "AFXWIN/CDC::DPtoLP", "AFXWIN/CDC::Draw3dRect", "AFXWIN/CDC::DrawDragRect", "AFXWIN/CDC::DrawEdge", "AFXWIN/CDC::DrawEscape", "AFXWIN/CDC::DrawFocusRect", "AFXWIN/CDC::DrawFrameControl", "AFXWIN/CDC::DrawIcon", "AFXWIN/CDC::DrawState", "AFXWIN/CDC::DrawText", "AFXWIN/CDC::DrawTextEx", "AFXWIN/CDC::Ellipse", "AFXWIN/CDC::EndDoc", "AFXWIN/CDC::EndPage", "AFXWIN/CDC::EndPath", "AFXWIN/CDC::EnumObjects", "AFXWIN/CDC::Escape", "AFXWIN/CDC::ExcludeClipRect", "AFXWIN/CDC::ExcludeUpdateRgn", "AFXWIN/CDC::ExtFloodFill", "AFXWIN/CDC::ExtTextOut", "AFXWIN/CDC::FillPath", "AFXWIN/CDC::FillRect", "AFXWIN/CDC::FillRgn", "AFXWIN/CDC::FillSolidRect", "AFXWIN/CDC::FlattenPath", "AFXWIN/CDC::FloodFill", "AFXWIN/CDC::FrameRect", "AFXWIN/CDC::FrameRgn", "AFXWIN/CDC::FromHandle", "AFXWIN/CDC::GetArcDirection", "AFXWIN/CDC::GetAspectRatioFilter", "AFXWIN/CDC::GetBkColor", "AFXWIN/CDC::GetBkMode", "AFXWIN/CDC::GetBoundsRect", "AFXWIN/CDC::GetBrushOrg", "AFXWIN/CDC::GetCharABCWidths", "AFXWIN/CDC::GetCharABCWidthsI", "AFXWIN/CDC::GetCharacterPlacement", "AFXWIN/CDC::GetCharWidth", "AFXWIN/CDC::GetCharWidthI", "AFXWIN/CDC::GetClipBox", "AFXWIN/CDC::GetColorAdjustment", "AFXWIN/CDC::GetCurrentBitmap", "AFXWIN/CDC::GetCurrentBrush", "AFXWIN/CDC::GetCurrentFont", "AFXWIN/CDC::GetCurrentPalette", "AFXWIN/CDC::GetCurrentPen", "AFXWIN/CDC::GetCurrentPosition", "AFXWIN/CDC::GetDCBrushColor", "AFXWIN/CDC::GetDCPenColor", "AFXWIN/CDC::GetDeviceCaps", "AFXWIN/CDC::GetFontData", "AFXWIN/CDC::GetFontLanguageInfo", "AFXWIN/CDC::GetGlyphOutline", "AFXWIN/CDC::GetGraphicsMode", "AFXWIN/CDC::GetHalftoneBrush", "AFXWIN/CDC::GetKerningPairs", "AFXWIN/CDC::GetLayout", "AFXWIN/CDC::GetMapMode", "AFXWIN/CDC::GetMiterLimit", "AFXWIN/CDC::GetNearestColor", "AFXWIN/CDC::GetOutlineTextMetrics", "AFXWIN/CDC::GetOutputCharWidth", "AFXWIN/CDC::GetOutputTabbedTextExtent", "AFXWIN/CDC::GetOutputTextExtent", "AFXWIN/CDC::GetOutputTextMetrics", "AFXWIN/CDC::GetPath", "AFXWIN/CDC::GetPixel", "AFXWIN/CDC::GetPolyFillMode", "AFXWIN/CDC::GetROP2", "AFXWIN/CDC::GetSafeHdc", "AFXWIN/CDC::GetStretchBltMode", "AFXWIN/CDC::GetTabbedTextExtent", "AFXWIN/CDC::GetTextAlign", "AFXWIN/CDC::GetTextCharacterExtra", "AFXWIN/CDC::GetTextColor", "AFXWIN/CDC::GetTextExtent", "AFXWIN/CDC::GetTextExtentExPointI", "AFXWIN/CDC::GetTextExtentPointI", "AFXWIN/CDC::GetTextFace", "AFXWIN/CDC::GetTextMetrics", "AFXWIN/CDC::GetViewportExt", "AFXWIN/CDC::GetViewportOrg", "AFXWIN/CDC::GetWindow", "AFXWIN/CDC::GetWindowExt", "AFXWIN/CDC::GetWindowOrg", "AFXWIN/CDC::GetWorldTransform", "AFXWIN/CDC::GradientFill", "AFXWIN/CDC::GrayString", "AFXWIN/CDC::HIMETRICtoDP", "AFXWIN/CDC::HIMETRICtoLP", "AFXWIN/CDC::IntersectClipRect", "AFXWIN/CDC::InvertRect", "AFXWIN/CDC::InvertRgn", "AFXWIN/CDC::IsPrinting", "AFXWIN/CDC::LineTo", "AFXWIN/CDC::LPtoDP", "AFXWIN/CDC::LPtoHIMETRIC", "AFXWIN/CDC::MaskBlt", "AFXWIN/CDC::ModifyWorldTransform", "AFXWIN/CDC::MoveTo", "AFXWIN/CDC::OffsetClipRgn", "AFXWIN/CDC::OffsetViewportOrg", "AFXWIN/CDC::OffsetWindowOrg", "AFXWIN/CDC::PaintRgn", "AFXWIN/CDC::PatBlt", "AFXWIN/CDC::Pie", "AFXWIN/CDC::PlayMetaFile", "AFXWIN/CDC::PlgBlt", "AFXWIN/CDC::PolyBezier", "AFXWIN/CDC::PolyBezierTo", "AFXWIN/CDC::PolyDraw", "AFXWIN/CDC::Polygon", "AFXWIN/CDC::Polyline", "AFXWIN/CDC::PolylineTo", "AFXWIN/CDC::PolyPolygon", "AFXWIN/CDC::PolyPolyline", "AFXWIN/CDC::PtVisible", "AFXWIN/CDC::RealizePalette", "AFXWIN/CDC::Rectangle", "AFXWIN/CDC::RectVisible", "AFXWIN/CDC::ReleaseAttribDC", "AFXWIN/CDC::ReleaseOutputDC", "AFXWIN/CDC::ResetDC", "AFXWIN/CDC::RestoreDC", "AFXWIN/CDC::RoundRect", "AFXWIN/CDC::SaveDC", "AFXWIN/CDC::ScaleViewportExt", "AFXWIN/CDC::ScaleWindowExt", "AFXWIN/CDC::ScrollDC", "AFXWIN/CDC::SelectClipPath", "AFXWIN/CDC::SelectClipRgn", "AFXWIN/CDC::SelectObject", "AFXWIN/CDC::SelectPalette", "AFXWIN/CDC::SelectStockObject", "AFXWIN/CDC::SetAbortProc", "AFXWIN/CDC::SetArcDirection", "AFXWIN/CDC::SetAttribDC", "AFXWIN/CDC::SetBkColor", "AFXWIN/CDC::SetBkMode", "AFXWIN/CDC::SetBoundsRect", "AFXWIN/CDC::SetBrushOrg", "AFXWIN/CDC::SetColorAdjustment", "AFXWIN/CDC::SetDCBrushColor", "AFXWIN/CDC::SetDCPenColor", "AFXWIN/CDC::SetGraphicsMode", "AFXWIN/CDC::SetLayout", "AFXWIN/CDC::SetMapMode", "AFXWIN/CDC::SetMapperFlags", "AFXWIN/CDC::SetMiterLimit", "AFXWIN/CDC::SetOutputDC", "AFXWIN/CDC::SetPixel", "AFXWIN/CDC::SetPixelV", "AFXWIN/CDC::SetPolyFillMode", "AFXWIN/CDC::SetROP2", "AFXWIN/CDC::SetStretchBltMode", "AFXWIN/CDC::SetTextAlign", "AFXWIN/CDC::SetTextCharacterExtra", "AFXWIN/CDC::SetTextColor", "AFXWIN/CDC::SetTextJustification", "AFXWIN/CDC::SetViewportExt", "AFXWIN/CDC::SetViewportOrg", "AFXWIN/CDC::SetWindowExt", "AFXWIN/CDC::SetWindowOrg", "AFXWIN/CDC::SetWorldTransform", "AFXWIN/CDC::StartDoc", "AFXWIN/CDC::StartPage", "AFXWIN/CDC::StretchBlt", "AFXWIN/CDC::StrokeAndFillPath", "AFXWIN/CDC::StrokePath", "AFXWIN/CDC::TabbedTextOut", "AFXWIN/CDC::TextOut", "AFXWIN/CDC::TransparentBlt", "AFXWIN/CDC::UpdateColors", "AFXWIN/CDC::WidenPath", "AFXWIN/CDC::m_hAttribDC", "AFXWIN/CDC::m_hDC"] helpviewer_keywords: ["CDC [MFC], CDC", "CDC [MFC], AbortDoc", "CDC [MFC], AbortPath", "CDC [MFC], AddMetaFileComment", "CDC [MFC], AlphaBlend", "CDC [MFC], AngleArc", "CDC [MFC], Arc", "CDC [MFC], ArcTo", "CDC [MFC], Attach", "CDC [MFC], BeginPath", "CDC [MFC], BitBlt", "CDC [MFC], Chord", "CDC [MFC], CloseFigure", "CDC [MFC], CreateCompatibleDC", "CDC [MFC], CreateDC", "CDC [MFC], CreateIC", "CDC [MFC], DeleteDC", "CDC [MFC], DeleteTempMap", "CDC [MFC], Detach", "CDC [MFC], DPtoHIMETRIC", "CDC [MFC], DPtoLP", "CDC [MFC], Draw3dRect", "CDC [MFC], DrawDragRect", "CDC [MFC], DrawEdge", "CDC [MFC], DrawEscape", "CDC [MFC], DrawFocusRect", "CDC [MFC], DrawFrameControl", "CDC [MFC], DrawIcon", "CDC [MFC], DrawState", "CDC [MFC], DrawText", "CDC [MFC], DrawTextEx", "CDC [MFC], Ellipse", "CDC [MFC], EndDoc", "CDC [MFC], EndPage", "CDC [MFC], EndPath", "CDC [MFC], EnumObjects", "CDC [MFC], Escape", "CDC [MFC], ExcludeClipRect", "CDC [MFC], ExcludeUpdateRgn", "CDC [MFC], ExtFloodFill", "CDC [MFC], ExtTextOut", "CDC [MFC], FillPath", "CDC [MFC], FillRect", "CDC [MFC], FillRgn", "CDC [MFC], FillSolidRect", "CDC [MFC], FlattenPath", "CDC [MFC], FloodFill", "CDC [MFC], FrameRect", "CDC [MFC], FrameRgn", "CDC [MFC], FromHandle", "CDC [MFC], GetArcDirection", "CDC [MFC], GetAspectRatioFilter", "CDC [MFC], GetBkColor", "CDC [MFC], GetBkMode", "CDC [MFC], GetBoundsRect", "CDC [MFC], GetBrushOrg", "CDC [MFC], GetCharABCWidths", "CDC [MFC], GetCharABCWidthsI", "CDC [MFC], GetCharacterPlacement", "CDC [MFC], GetCharWidth", "CDC [MFC], GetCharWidthI", "CDC [MFC], GetClipBox", "CDC [MFC], GetColorAdjustment", "CDC [MFC], GetCurrentBitmap", "CDC [MFC], GetCurrentBrush", "CDC [MFC], GetCurrentFont", "CDC [MFC], GetCurrentPalette", "CDC [MFC], GetCurrentPen", "CDC [MFC], GetCurrentPosition", "CDC [MFC], GetDCBrushColor", "CDC [MFC], GetDCPenColor", "CDC [MFC], GetDeviceCaps", "CDC [MFC], GetFontData", "CDC [MFC], GetFontLanguageInfo", "CDC [MFC], GetGlyphOutline", "CDC [MFC], GetGraphicsMode", "CDC [MFC], GetHalftoneBrush", "CDC [MFC], GetKerningPairs", "CDC [MFC], GetLayout", "CDC [MFC], GetMapMode", "CDC [MFC], GetMiterLimit", "CDC [MFC], GetNearestColor", "CDC [MFC], GetOutlineTextMetrics", "CDC [MFC], GetOutputCharWidth", "CDC [MFC], GetOutputTabbedTextExtent", "CDC [MFC], GetOutputTextExtent", "CDC [MFC], GetOutputTextMetrics", "CDC [MFC], GetPath", "CDC [MFC], GetPixel", "CDC [MFC], GetPolyFillMode", "CDC [MFC], GetROP2", "CDC [MFC], GetSafeHdc", "CDC [MFC], GetStretchBltMode", "CDC [MFC], GetTabbedTextExtent", "CDC [MFC], GetTextAlign", "CDC [MFC], GetTextCharacterExtra", "CDC [MFC], GetTextColor", "CDC [MFC], GetTextExtent", "CDC [MFC], GetTextExtentExPointI", "CDC [MFC], GetTextExtentPointI", "CDC [MFC], GetTextFace", "CDC [MFC], GetTextMetrics", "CDC [MFC], GetViewportExt", "CDC [MFC], GetViewportOrg", "CDC [MFC], GetWindow", "CDC [MFC], GetWindowExt", "CDC [MFC], GetWindowOrg", "CDC [MFC], GetWorldTransform", "CDC [MFC], GradientFill", "CDC [MFC], GrayString", "CDC [MFC], HIMETRICtoDP", "CDC [MFC], HIMETRICtoLP", "CDC [MFC], IntersectClipRect", "CDC [MFC], InvertRect", "CDC [MFC], InvertRgn", "CDC [MFC], IsPrinting", "CDC [MFC], LineTo", "CDC [MFC], LPtoDP", "CDC [MFC], LPtoHIMETRIC", "CDC [MFC], MaskBlt", "CDC [MFC], ModifyWorldTransform", "CDC [MFC], MoveTo", "CDC [MFC], OffsetClipRgn", "CDC [MFC], OffsetViewportOrg", "CDC [MFC], OffsetWindowOrg", "CDC [MFC], PaintRgn", "CDC [MFC], PatBlt", "CDC [MFC], Pie", "CDC [MFC], PlayMetaFile", "CDC [MFC], PlgBlt", "CDC [MFC], PolyBezier", "CDC [MFC], PolyBezierTo", "CDC [MFC], PolyDraw", "CDC [MFC], Polygon", "CDC [MFC], Polyline", "CDC [MFC], PolylineTo", "CDC [MFC], PolyPolygon", "CDC [MFC], PolyPolyline", "CDC [MFC], PtVisible", "CDC [MFC], RealizePalette", "CDC [MFC], Rectangle", "CDC [MFC], RectVisible", "CDC [MFC], ReleaseAttribDC", "CDC [MFC], ReleaseOutputDC", "CDC [MFC], ResetDC", "CDC [MFC], RestoreDC", "CDC [MFC], RoundRect", "CDC [MFC], SaveDC", "CDC [MFC], ScaleViewportExt", "CDC [MFC], ScaleWindowExt", "CDC [MFC], ScrollDC", "CDC [MFC], SelectClipPath", "CDC [MFC], SelectClipRgn", "CDC [MFC], SelectObject", "CDC [MFC], SelectPalette", "CDC [MFC], SelectStockObject", "CDC [MFC], SetAbortProc", "CDC [MFC], SetArcDirection", "CDC [MFC], SetAttribDC", "CDC [MFC], SetBkColor", "CDC [MFC], SetBkMode", "CDC [MFC], SetBoundsRect", "CDC [MFC], SetBrushOrg", "CDC [MFC], SetColorAdjustment", "CDC [MFC], SetDCBrushColor", "CDC [MFC], SetDCPenColor", "CDC [MFC], SetGraphicsMode", "CDC [MFC], SetLayout", "CDC [MFC], SetMapMode", "CDC [MFC], SetMapperFlags", "CDC [MFC], SetMiterLimit", "CDC [MFC], SetOutputDC", "CDC [MFC], SetPixel", "CDC [MFC], SetPixelV", "CDC [MFC], SetPolyFillMode", "CDC [MFC], SetROP2", "CDC [MFC], SetStretchBltMode", "CDC [MFC], SetTextAlign", "CDC [MFC], SetTextCharacterExtra", "CDC [MFC], SetTextColor", "CDC [MFC], SetTextJustification", "CDC [MFC], SetViewportExt", "CDC [MFC], SetViewportOrg", "CDC [MFC], SetWindowExt", "CDC [MFC], SetWindowOrg", "CDC [MFC], SetWorldTransform", "CDC [MFC], StartDoc", "CDC [MFC], StartPage", "CDC [MFC], StretchBlt", "CDC [MFC], StrokeAndFillPath", "CDC [MFC], StrokePath", "CDC [MFC], TabbedTextOut", "CDC [MFC], TextOut", "CDC [MFC], TransparentBlt", "CDC [MFC], UpdateColors", "CDC [MFC], WidenPath", "CDC [MFC], m_hAttribDC", "CDC [MFC], m_hDC"] @@ -928,7 +928,7 @@ The `DeleteDC` function is generally used to delete device contexts created with ## `CDC::DeleteTempMap` -Called automatically by the `CWinApp` idle-time handler, `DeleteTempMap` deletes any temporary `CDC` objects created by `FromHandle`, but doesn't destroy the device context handles ( `hDC`s) temporarily associated with the `CDC` objects. +Called automatically by the `CWinApp` idle-time handler, `DeleteTempMap` deletes any temporary `CDC` objects created by `FromHandle`, but doesn't destroy the device context handles (`hDC`s) temporarily associated with the `CDC` objects. ``` static void PASCAL DeleteTempMap(); diff --git a/docs/mfc/reference/crecordset-class.md b/docs/mfc/reference/crecordset-class.md index 04e0851f0d..0f955069ad 100644 --- a/docs/mfc/reference/crecordset-class.md +++ b/docs/mfc/reference/crecordset-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: CRecordset Class" title: "CRecordset Class" +description: "Learn more about: CRecordset Class" ms.date: "05/11/2022" f1_keywords: ["CRecordset", "AFXDB/CRecordset", "AFXDB/CRecordset::CRecordset", "AFXDB/CRecordset::AddNew", "AFXDB/CRecordset::CanAppend", "AFXDB/CRecordset::CanBookmark", "AFXDB/CRecordset::Cancel", "AFXDB/CRecordset::CancelUpdate", "AFXDB/CRecordset::CanRestart", "AFXDB/CRecordset::CanScroll", "AFXDB/CRecordset::CanTransact", "AFXDB/CRecordset::CanUpdate", "AFXDB/CRecordset::CheckRowsetError", "AFXDB/CRecordset::Close", "AFXDB/CRecordset::Delete", "AFXDB/CRecordset::DoBulkFieldExchange", "AFXDB/CRecordset::DoFieldExchange", "AFXDB/CRecordset::Edit", "AFXDB/CRecordset::FlushResultSet", "AFXDB/CRecordset::GetBookmark", "AFXDB/CRecordset::GetDefaultConnect", "AFXDB/CRecordset::GetDefaultSQL", "AFXDB/CRecordset::GetFieldValue", "AFXDB/CRecordset::GetODBCFieldCount", "AFXDB/CRecordset::GetODBCFieldInfo", "AFXDB/CRecordset::GetRecordCount", "AFXDB/CRecordset::GetRowsetSize", "AFXDB/CRecordset::GetRowsFetched", "AFXDB/CRecordset::GetRowStatus", "AFXDB/CRecordset::GetSQL", "AFXDB/CRecordset::GetStatus", "AFXDB/CRecordset::GetTableName", "AFXDB/CRecordset::IsBOF", "AFXDB/CRecordset::IsDeleted", "AFXDB/CRecordset::IsEOF", "AFXDB/CRecordset::IsFieldDirty", "AFXDB/CRecordset::IsFieldNull", "AFXDB/CRecordset::IsFieldNullable", "AFXDB/CRecordset::IsOpen", "AFXDB/CRecordset::Move", "AFXDB/CRecordset::MoveFirst", "AFXDB/CRecordset::MoveLast", "AFXDB/CRecordset::MoveNext", "AFXDB/CRecordset::MovePrev", "AFXDB/CRecordset::OnSetOptions", "AFXDB/CRecordset::OnSetUpdateOptions", "AFXDB/CRecordset::Open", "AFXDB/CRecordset::RefreshRowset", "AFXDB/CRecordset::Requery", "AFXDB/CRecordset::SetAbsolutePosition", "AFXDB/CRecordset::SetBookmark", "AFXDB/CRecordset::SetFieldDirty", "AFXDB/CRecordset::SetFieldNull", "AFXDB/CRecordset::SetLockingMode", "AFXDB/CRecordset::SetParamNull", "AFXDB/CRecordset::SetRowsetCursorPosition", "AFXDB/CRecordset::SetRowsetSize", "AFXDB/CRecordset::Update", "AFXDB/CRecordset::m_hstmt", "AFXDB/CRecordset::m_nFields", "AFXDB/CRecordset::m_nParams", "AFXDB/CRecordset::m_pDatabase", "AFXDB/CRecordset::m_strFilter", "AFXDB/CRecordset::m_strSort"] helpviewer_keywords: ["CRecordset [MFC], CRecordset", "CRecordset [MFC], AddNew", "CRecordset [MFC], CanAppend", "CRecordset [MFC], CanBookmark", "CRecordset [MFC], Cancel", "CRecordset [MFC], CancelUpdate", "CRecordset [MFC], CanRestart", "CRecordset [MFC], CanScroll", "CRecordset [MFC], CanTransact", "CRecordset [MFC], CanUpdate", "CRecordset [MFC], CheckRowsetError", "CRecordset [MFC], Close", "CRecordset [MFC], Delete", "CRecordset [MFC], DoBulkFieldExchange", "CRecordset [MFC], DoFieldExchange", "CRecordset [MFC], Edit", "CRecordset [MFC], FlushResultSet", "CRecordset [MFC], GetBookmark", "CRecordset [MFC], GetDefaultConnect", "CRecordset [MFC], GetDefaultSQL", "CRecordset [MFC], GetFieldValue", "CRecordset [MFC], GetODBCFieldCount", "CRecordset [MFC], GetODBCFieldInfo", "CRecordset [MFC], GetRecordCount", "CRecordset [MFC], GetRowsetSize", "CRecordset [MFC], GetRowsFetched", "CRecordset [MFC], GetRowStatus", "CRecordset [MFC], GetSQL", "CRecordset [MFC], GetStatus", "CRecordset [MFC], GetTableName", "CRecordset [MFC], IsBOF", "CRecordset [MFC], IsDeleted", "CRecordset [MFC], IsEOF", "CRecordset [MFC], IsFieldDirty", "CRecordset [MFC], IsFieldNull", "CRecordset [MFC], IsFieldNullable", "CRecordset [MFC], IsOpen", "CRecordset [MFC], Move", "CRecordset [MFC], MoveFirst", "CRecordset [MFC], MoveLast", "CRecordset [MFC], MoveNext", "CRecordset [MFC], MovePrev", "CRecordset [MFC], OnSetOptions", "CRecordset [MFC], OnSetUpdateOptions", "CRecordset [MFC], Open", "CRecordset [MFC], RefreshRowset", "CRecordset [MFC], Requery", "CRecordset [MFC], SetAbsolutePosition", "CRecordset [MFC], SetBookmark", "CRecordset [MFC], SetFieldDirty", "CRecordset [MFC], SetFieldNull", "CRecordset [MFC], SetLockingMode", "CRecordset [MFC], SetParamNull", "CRecordset [MFC], SetRowsetCursorPosition", "CRecordset [MFC], SetRowsetSize", "CRecordset [MFC], Update", "CRecordset [MFC], m_hstmt", "CRecordset [MFC], m_nFields", "CRecordset [MFC], m_nParams", "CRecordset [MFC], m_pDatabase", "CRecordset [MFC], m_strFilter", "CRecordset [MFC], m_strSort"] @@ -1624,7 +1624,7 @@ void SetFieldDirty(void* pv, BOOL bDirty = TRUE); ### Parameters *`pv`*\ -Contains the address of a field data member in the recordset or `NUL`L. If `NULL`, all field data members in the recordset are flagged. (C++ `NULL` isn't the same as Null in database terminology, which means "having no value.") +Contains the address of a field data member in the recordset or `NULL`. If `NULL`, all field data members in the recordset are flagged. (C++ `NULL` isn't the same as Null in database terminology, which means "having no value.") *`bDirty`*\ `TRUE` if the field data member is to be flagged as "dirty" (changed). Otherwise `FALSE` if the field data member is to be flagged as "clean" (unchanged). diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 42e13dd66a..7449be85c3 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -367,7 +367,7 @@ Select Standard Library (STL) improvements are highlighted here. For a comprehen - [P1679R3](https://wg21.link/P1679R3) `contains()` For `basic_string` and `basic_string_view` - [P1682R3](https://wg21.link/P1682R3) `to_underlying()` for enumerations - [P2162R2](https://wg21.link/P2162R2) Allow inheriting from `std::variant` -- [P2166R1](https://wg21.link/P2166R1) Prohibit constructing`basic_string` and `basic_string_view` from `nullptr`. This change is a source-breaking change. Code that previously had undefined behavior at runtime is now rejected with compiler errors. +- [P2166R1](https://wg21.link/P2166R1) Prohibit constructing `basic_string` and `basic_string_view` from `nullptr`. This change is a source-breaking change. Code that previously had undefined behavior at runtime is now rejected with compiler errors. - [P2186R2](https://wg21.link/P2186R2) Removed garbage collection support. This change removes `declare_reachable`, `undeclare_reachable`, `declare_no_pointers`, `undeclare_no_pointers`, `get_pointer_safety`. Previously, these functions had no effect. **Highlighted performance improvements** diff --git a/docs/parallel/concrt/reference/source-link-manager-class.md b/docs/parallel/concrt/reference/source-link-manager-class.md index d3ab18135c..ce7031d816 100644 --- a/docs/parallel/concrt/reference/source-link-manager-class.md +++ b/docs/parallel/concrt/reference/source-link-manager-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: source_link_manager Class" title: "source_link_manager Class" +description: "Learn more about: source_link_manager Class" ms.date: "11/04/2016" f1_keywords: ["source_link_manager", "AGENTS/concurrency::source_link_manager", "AGENTS/concurrency::source_link_manager::source_link_manager", "AGENTS/concurrency::source_link_manager::add", "AGENTS/concurrency::source_link_manager::begin", "AGENTS/concurrency::source_link_manager::contains", "AGENTS/concurrency::source_link_manager::count", "AGENTS/concurrency::source_link_manager::reference", "AGENTS/concurrency::source_link_manager::register_target_block", "AGENTS/concurrency::source_link_manager::release", "AGENTS/concurrency::source_link_manager::remove", "AGENTS/concurrency::source_link_manager::set_bound"] helpviewer_keywords: ["source_link_manager class"] -ms.assetid: 287487cf-e0fe-4c35-aa3c-24f081d1ddae --- # source_link_manager Class @@ -56,7 +55,7 @@ The network link registry. ## Remarks -Currently, the source blocks are reference counted. This is a wrapper on a `network_link_registry` object that allows concurrent access to the links and provides the ability to reference the links through callbacks. Message blocks ( `target_block`s or `propagator_block`s) should use this class for their source links. +Currently, the source blocks are reference counted. This is a wrapper on a `network_link_registry` object that allows concurrent access to the links and provides the ability to reference the links through callbacks. Message blocks (`target_block`s or `propagator_block`s) should use this class for their source links. ## Inheritance Hierarchy @@ -203,6 +202,6 @@ Destroys the `source_link_manager` object. ## See also -[concurrency Namespace](concurrency-namespace.md)
-[single_link_registry Class](single-link-registry-class.md)
+[concurrency Namespace](concurrency-namespace.md)\ +[single_link_registry Class](single-link-registry-class.md)\ [multi_link_registry Class](multi-link-registry-class.md) diff --git a/docs/standard-library/chrono-functions.md b/docs/standard-library/chrono-functions.md index f18ca679fe..5f4e4a2587 100644 --- a/docs/standard-library/chrono-functions.md +++ b/docs/standard-library/chrono-functions.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: functions" title: " functions" +description: "Learn more about: functions" ms.date: 10/15/2021 f1_keywords: ["chrono/std::duration_cast", "chrono/std::time_point_cast", "chrono/std::chrono::clock_cast", "chrono/std::chrono::duration_cast", "chrono/std::chrono::time_point_cast", "chrono/std::chrono::from_stream", "chrono/std::chrono::abs", "chrono/std::chrono::floor", "chrono/std::chrono::ceil", "chrono/std::chrono::round", "chrono/std::chrono::is_am", "chrono/std::chrono::is_pm", "chrono/std::chrono::make12", "chrono/std::chrono::make24", "chrono/std::chrono::get_leap_second_info", "chrono/std::chrono::get_tzdb", "chrono/std::chrono::get_tzdb_list", "chrono/std::chrono::locate_zone", "chrono/std::chrono::current_zone", "chrono/std::chrono::reload_tzdb", "chrono/std::chrono::remote_version"] helpviewer_keywords: ["std::duration_cast function", "std::time_point_cast function", "std::chrono::clock_cast", "std::chrono::duration_cast function", "std::chrono::time_point_cast function", "std::chrono::from_stream function", "std::chrono::floor function", "std::chrono::ceil function", "std::chrono::round function", "std::chrono::is_am function", "std::chrono::is_pm function", "std::chrono::make12 function", "std::chrono::make24 function", "std::chrono::get_leap_second_info function", "std::chrono::get_tzdb function", "std::chrono::get_tzdb_list function", "std::chrono::locate_zone function", "std::chrono::current_zone function", "std::chrono::reload_tzdb function", "std::chrono::remote_version function"] @@ -704,7 +704,7 @@ The source `utc_time` to get the `leap_second_info` for. ### Return value -Returns a `leap_second_info` whose member `is_leap_second` is **`true`** if *`ut`* is during a positive leap second insertion; otherwise, **`false`**. The `elapsed` member holds the sum of leap seconds between the epoch date `1970-01-01`and *`ut`*. If `is_leap_second` is **`true`**, the leap second referred to by *`ut`* is included in the `elapsed` sum. +Returns a `leap_second_info` whose member `is_leap_second` is **`true`** if *`ut`* is during a positive leap second insertion; otherwise, **`false`**. The `elapsed` member holds the sum of leap seconds between the epoch date `1970-01-01` and *`ut`*. If `is_leap_second` is **`true`**, the leap second referred to by *`ut`* is included in the `elapsed` sum. ## `get_tzdb` diff --git a/docs/standard-library/chrono.md b/docs/standard-library/chrono.md index 5127822f11..82bc6ae824 100644 --- a/docs/standard-library/chrono.md +++ b/docs/standard-library/chrono.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: " title: "" +description: "Learn more about: " ms.date: 05/31/2022 f1_keywords: ["", "chrono/std::chrono::nanoseconds", "chrono/std::chrono::minutes", "chrono/std::chrono::seconds", "chrono/std::chrono::hours", "chrono/std::chrono::milliseconds", "chrono/std::chrono::microseconds"] --- @@ -170,7 +170,7 @@ For more information about ratio types that are used in the following typedefs, | `tai_seconds` | A synonym for `tai_time`. A count of seconds, represented by a `time_point` that is associated with a [`tai_clock`](tai-clock-class.md). | | `tai_time` | A synonym for `time_point`. You provide the `Duration`, for example, `tai_time tt;`. Represents a `time_point` for a [`tai_clock`](tai-clock-class.md). | | `utc_seconds` | A synonym for `utc_time;` | -| `utc_time` | A synonym for `time_point`. You provide the `Duration`, for example, `utc_time ut;`. Represents a `time_point`for a [`utc_clock`](utc-clock-class.md). | +| `utc_time` | A synonym for `time_point`. You provide the `Duration`, for example, `utc_time ut;`. Represents a `time_point` for a [`utc_clock`](utc-clock-class.md). | ## Type traits diff --git a/docs/standard-library/clock-time-conversion-struct.md b/docs/standard-library/clock-time-conversion-struct.md index 4f5ff0e47e..a014ea0308 100644 --- a/docs/standard-library/clock-time-conversion-struct.md +++ b/docs/standard-library/clock-time-conversion-struct.md @@ -1,6 +1,6 @@ --- -description: "Learn more about clock_conversion trait" title: "clock_conversion struct" +description: "Learn more about clock_conversion trait" ms.date: 10/12/2021 f1_keywords: ["chrono/std::chrono::clock_time_conversion"] helpviewer_keywords: ["std::chrono [C++], clock_time_conversion"] @@ -44,7 +44,7 @@ The traits provide the following conversions: 2-4\) Identity conversions. Returns the same clock you pass in.\ 5-6\) Converting between `sys_time` and `utc_time` calls `utc_clock::to_sys` or `utc_clock::from_sys` depending on the direction of the conversion.\ 7-8\) Converting between `sys_time` and the specified clock, when the specified clock supports `to_sys` and `from_sys`, results in a call to `Clock::to_sys` or `Clock::from_sys`, depending on the direction of the conversion.\ -9-10\) Converting between `utc_time`and the specified clock, when the specified clock supports `from_utc` and `to_sys`, results in a call to `Clock::to_utc` or `Clock::from_utc`, depending on the direction of the conversion. +9-10\) Converting between `utc_time` and the specified clock, when the specified clock supports `from_utc` and `to_sys`, results in a call to `Clock::to_utc` or `Clock::from_utc`, depending on the direction of the conversion. ## Members diff --git a/docs/standard-library/iterator-functions.md b/docs/standard-library/iterator-functions.md index c9046156cd..99b7df088f 100644 --- a/docs/standard-library/iterator-functions.md +++ b/docs/standard-library/iterator-functions.md @@ -386,7 +386,7 @@ The sentinel follows the last element in a reversed view of the container. :::image type="content" source="media/crbegin-crend-sentinel.png" alt-text="Picture of a vector containing the elements 10, 20, and 30. There's an imaginary box before the leftmost element (the leftmost element contains the number 10) that represents the sentinel. It's labeled crend(). The first element in the vector contains the number 10, and is labeled 'last element'. The rightmost element in the vector contains 30 and is labeled crbegin()."::: -### `crend`example +### `crend` example ```cpp #include @@ -1096,7 +1096,7 @@ A reverse iterator to the sentinel at the end of the container. The sentinel fol :::image type="content" source="media/rbegin-rend-sentinel.png" alt-text="Picture of a vector containing the elements 10, 20, and 30. There's an imaginary box before the leftmost element (the leftmost element contains the number 10) that represents the sentinel. It's labeled rend(). The first element in the vector contains the number 10, and is labeled 'last element'. The rightmost element in the vector contains 30 and is labeled rbegin()."::: -### `rend`example +### `rend` example ```cpp #include diff --git a/docs/standard-library/leap-second-info-struct.md b/docs/standard-library/leap-second-info-struct.md index 3f2508e219..fe7095c841 100644 --- a/docs/standard-library/leap-second-info-struct.md +++ b/docs/standard-library/leap-second-info-struct.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: leap_second_info struct" title: "leap_second_info struct" +description: "Learn more about: leap_second_info struct" ms.date: 05/31/2022 f1_keywords: ["chrono/std::chrono::leap_second_info", "chrono/std::chrono::leap_second_info::is_leap_second", "chrono/std::chrono::leap_second_info::elapsed"] helpviewer_keywords: ["std::chrono [C++], leap_second_info struct", "std::chrono::leap_second_info::date function", "std::chrono::leap_second_info::value function"] @@ -20,7 +20,7 @@ struct leap_second_info; // C++20 | Name | Description | |--|--| | `is_leap_second` | The `is_leap_second` member is **`true`** only if the specified time point occurs during the insertion of a positive leap second. | -| `elapsed` | The `elapsed` member holds the sum of all the leap seconds between the epoch date (the starting date from which the clock measures time) `1970-01-01`and the specified time. If `is_leap_second` is **`true`**, the leap second referred to by the specified time is included in the `elapsed` sum. | +| `elapsed` | The `elapsed` member holds the sum of all the leap seconds between the epoch date (the starting date from which the clock measures time) `1970-01-01` and the specified time. If `is_leap_second` is **`true`**, the leap second referred to by the specified time is included in the `elapsed` sum. | ## Requirements diff --git a/docs/standard-library/local_t.md b/docs/standard-library/local_t.md index e856ae1976..c16c7b8978 100644 --- a/docs/standard-library/local_t.md +++ b/docs/standard-library/local_t.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: local_t struct" title: "local_t struct" +description: "Learn more about: local_t struct" ms.date: 09/02/2021 f1_keywords: ["chrono/std::chrono::local_t", chrono/std::chrono::local_t:local_time", "chrono/std::chrono::local_days", "chrono/std::chrono::local_seconds"] helpviewer_keywords: ["std::chrono [C++], local_t"] @@ -34,7 +34,7 @@ As an example of how `local_t` is used, consider the declaration `local_days ld{ |Name|Description| |----------|-----------------| -|`local_days`|A synonym for l`local_time`. Defined in `std::chrono`.| +|`local_days`|A synonym for `local_time`. Defined in `std::chrono`.| |`local_seconds`|A synonym for `local_time`. Defined in `std::chrono`.| |`local_time`|A synonym for `template using local_time = time_point`. Useful for representing a `time_point` for a local time. You specify the `Duration`. Defined in `std::chrono`.| diff --git a/docs/standard-library/range-functions.md b/docs/standard-library/range-functions.md index c24faade65..359201dcd0 100644 --- a/docs/standard-library/range-functions.md +++ b/docs/standard-library/range-functions.md @@ -289,7 +289,7 @@ The sentinel at the end of what `cbegin()` returns. The sentinel follows the las `ranges::crend()` works on all bidirectional ranges, whereas `std::crend()` may not. -### `crend`example +### `crend` example ```cpp // requires /std:c++20 or later diff --git a/docs/standard-library/subrange-class.md b/docs/standard-library/subrange-class.md index 52de035e0a..7f269483d0 100644 --- a/docs/standard-library/subrange-class.md +++ b/docs/standard-library/subrange-class.md @@ -111,7 +111,7 @@ For information about template parameter types, see [Template parameters](#templ ### Return value -A `subrange`instance. +A `subrange` instance. ### Remarks diff --git a/docs/standard-library/wbuffer-convert-class.md b/docs/standard-library/wbuffer-convert-class.md index b70a646411..b1f8f7691b 100644 --- a/docs/standard-library/wbuffer-convert-class.md +++ b/docs/standard-library/wbuffer-convert-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: wbuffer_convert class" title: "wbuffer_convert class" +description: "Learn more about: wbuffer_convert class" ms.date: "11/29/2021" f1_keywords: ["xlocmon/stdext::cvt::wbuffer_convert"] helpviewer_keywords: ["wbuffer_convert class"] @@ -37,4 +37,4 @@ Conversion between a sequence of `Elem` values and multibyte sequences is perfor An object of this class template stores: - A pointer to its underlying byte stream buffer.\ -- A pointer to an allocated conversion facet object, which is freed when the `wbuffer_convert`is destroyed. +- A pointer to an allocated conversion facet object, which is freed when the `wbuffer_convert` is destroyed. diff --git a/docs/standard-library/year-month-day-class.md b/docs/standard-library/year-month-day-class.md index bba8ce3854..e153349e08 100644 --- a/docs/standard-library/year-month-day-class.md +++ b/docs/standard-library/year-month-day-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: year_month_day class" title: "year_month_day class" +description: "Learn more about: year_month_day class" ms.date: "06/28/2021" f1_keywords: ["chrono/std::chrono::year_month_day", "chrono/std::chrono::year::operator+=", "chrono/std::chrono::year::operator-=", "chrono/std::chrono::year::sysdays", "chrono/std::chrono::year::localdays", "chrono/std::chrono::year::ok"] helpviewer_keywords: ["std::chrono [C++], year_month_day"] @@ -81,10 +81,10 @@ A `year_month_day_last` value. ### Remarks 1\) The default constructor doesn't initialize the month or day.\ -2\) Constructs a `year_month_day`with the specified year, month, and day.\ -3\) Constructs a `year_month_day`with the specified year, month, and day from *`ymdl`*\ -4\) Constructs a `year_month_day`with the same date as *`dp`*.\ -5\) Constructs a `year_month_day`with the same date as *`dp`* but as though constructed by `year_month_day(sys_days(dp.time_since_epoch()))`. +2\) Constructs a `year_month_day` with the specified year, month, and day.\ +3\) Constructs a `year_month_day` with the specified year, month, and day from *`ymdl`*\ +4\) Constructs a `year_month_day` with the same date as *`dp`*.\ +5\) Constructs a `year_month_day` with the same date as *`dp`* but as though constructed by `year_month_day(sys_days(dp.time_since_epoch()))`. For information about C++20 syntax used to specify dates, see [`operator/`](chrono-operators.md#op_/) From 1bf51e14fa558f078ecb671f195db7759d24f630 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 2 Aug 2024 15:37:03 -0700 Subject: [PATCH 0316/1239] draft --- ...-operators-equal-equal-and-exclpt-equal.md | 13 ++++-- docs/overview/cpp-conformance-improvements.md | 12 +++++- docs/overview/media/copilot-rename.png | Bin 0 -> 63925 bytes .../media/github-copilot-quick-info.png | Bin 0 -> 24225 bytes ...t-s-new-for-visual-cpp-in-visual-studio.md | 37 +++++++++++++++++- 5 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 docs/overview/media/copilot-rename.png create mode 100644 docs/overview/media/github-copilot-quick-info.png diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 0b19a7b204..cce78daff4 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -1,10 +1,9 @@ --- title: "Equality operators: == and !=" description: "The C++ standard language equal-to and not-equal-to operator syntax and use." -ms.date: 07/23/2020 +ms.date: 07/26/2024 f1_keywords: ["!=", "==", "not_eq_cpp"] helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparison operator", "equality operator [C++], syntax", "== operator", "not_eq operator", "equal to operator"] -ms.assetid: ba4e9659-2392-4fb4-be5a-910a2a6df45a --- # Equality operators: `==` and `!=` @@ -23,7 +22,15 @@ The equal-to operator (**`==`**) returns **`true`** if both operands have the sa ## Operator keyword for != -C++ specifies **`not_eq`** as an alternative spelling for **`!=`**. (There's no alternative spelling for **`==`**.) In C, the alternative spelling is provided as a macro in the \ header. In C++, the alternative spelling is a keyword; use of \ or the C++ equivalent \ is deprecated. In Microsoft C++, the [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. +C++: +- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. +- The alternative spelling is treated as a keyword. +- There's no alternative spelling for **`==`**. +- Use of `` or `` is deprecated. + +C: +- The alternative spelling is provided as a macro in the `` header. +- The laternative spelling isn't treated as a keyword. ## Example diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index d3b8b4c9a5..36be06c35b 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -1,7 +1,7 @@ --- title: "C++ conformance improvements in Visual Studio 2022" description: "Microsoft C++ in Visual Studio is improving standards conformance and fixing bugs regularly." -ms.date: 06/06/2024 +ms.date: 8/2/2024 ms.service: "visual-cpp" ms.subservice: "cpp-lang" --- @@ -15,6 +15,16 @@ For changes in Visual Studio 2019, see [C++ conformance improvements in Visual S For changes in Visual Studio 2017, see [C++ conformance improvements in Visual Studio 2017](cpp-conformance-improvements-2017.md).\ For changes in older versions, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). +## Conformance improvements in Visual Studio 2022 version 17.11 + +Visual Studio 2022 version 17.11 has the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. + +For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes, and performance improvements, see [STL Changelog VS 2022 17.11](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711). + +### Implemented `range_formatter` + +Per [P2286R8](https://wg21.link/P2286R8), `range_formatter` is now implemented. This feature is available when compiling with `/std:c++23`. + ## Conformance improvements in Visual Studio 2022 version 17.10 Visual Studio 2022 version 17.10 has the following conformance improvements, bug fixes, and behavior changes in the Microsoft C/C++ compiler. diff --git a/docs/overview/media/copilot-rename.png b/docs/overview/media/copilot-rename.png new file mode 100644 index 0000000000000000000000000000000000000000..7919d0d70ab6fe167145984b89ff4bc82bd983da GIT binary patch literal 63925 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 DE(V}g literal 0 HcmV?d00001 diff --git a/docs/overview/media/github-copilot-quick-info.png b/docs/overview/media/github-copilot-quick-info.png new file mode 100644 index 0000000000000000000000000000000000000000..c01f573bbb75269042fc7c0fe5998d79514fe880 GIT binary patch literal 24225 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 literal 0 HcmV?d00001 diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 42e13dd66a..280f50bcac 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -1,7 +1,7 @@ --- title: "What's new for C++ in Visual Studio" description: "The new features and fixes in the Microsoft C/C++ compiler and tools in Visual Studio." -ms.date: 06/6/2024 +ms.date: 8/2/2024 ms.service: "visual-cpp" ms.subservice: "ide" ms.custom: intro-whats-new @@ -16,6 +16,41 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a - For information about what's new in the C++ docs, see [Microsoft C++ docs: What's new](./whats-new-cpp-docs.md). - For information about version build dates, see [Visual Studio 2022 Release History](/visualstudio/releases/2022/release-history). +## What's new for C++ in Visual Studio version 17.11 + +*Released August 2024* + +| For more information about | See | +|---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.11](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-11/) | +| Standard Library (STL) merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.11](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711) | +| New features in the Visual Studio 17.11 IDE |[Visual Studio 2022 version 17.11 Release Notes](/visualstudio/releases/2022/release-notes) | +| C++ language conformance improvements in Visual Studio 2022 17.11 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.11](cpp-conformance-improvements.md#improvements_1711) | + +A partial list of new features: + +- Standard Library Enhancements: + - Advancements to our formatted output implementation include `std::range_formatter` and formatters for `std::pair` and `std::tuple`. Also added support for calling `std::println()` with no arguments, which prints a blank line as proposed in [P3142R0](https://wg21.link/P3142R0). + - Improved vectorization for several algorithms including `replace_copy()`, `replace_copy_if()`, `ranges::replace_copy`, `ranges::replace_copy_if`, `find_first_of()` and `ranges::find_first_of` for 8-bit and 16-bit elements, `mismatch()`, `ranges::mismatch`, `count()` `ranges::count`, `find()`, `ranges::find`, `ranges::find_last`, and `ranges::iota`. + +- Game development in C++ + - Unreal Engine: You can now add common Unreal Engine class templates, modules, and plugins from within Visual Studio. For more information, see [Add Unreal Engine classes, modules, and plugins in Visual Studio](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-add-class-module-plugin). + - The new Unreal Engine toolbar provides quick access to Unreal Engine related actions from within Visual Studio. The toolbar is available when you have an Unreal Engine project loaded in Visual Studio. The toolbar allows you to quickly attach to Unreal Engine processes, rescan the Blueprints cache, quickly access the Unreal Engine Log, and provides quick access to the Unreal Engine Configuration Page for Visual Studio. For more information, see [Unreal Engine Toolbar](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart#unreal-engine-toolbar). + +- CMake debugging + - You can now debug your CMake scripts and `CMakeLists.txt` files in the Visual Studio debugger for CMake projects that target Linux via Windows Subsystem for Linux (WSL) or SSH. To start a CMake debugging session in Visual Studio, set a breakpoint in your `CMakeLists.txt` file and then navigate to **Project** > **Configure Cache with CMake Debugging**. + +- Copilot + - When you hover over symbols in the code editor, click the Copilot **Tell me more** button in the Quick Info dialog to learn more about a given symbol: + :::image type="complex" source="media/github-copilot-quick-info" alt-text="A screenshot of the Quick Info window."::: + The Quick Info window is shown above a function. The Tell me more link is highlighted. + :::image-end::: + - GitHub Copilot can generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is being used and the style of your code. + :::image type="complex" source="media/copilot-rename.png" alt-text="A screenshot of the GitHub Copilot Rename dialog"::: + The Rename dialog has a New name field with a dropdown list that shows these choices: text_color,font_color, display_color, console_color, and menu_text_color. + :::image-end::: + You need an active [GitHub Copilot subscription](https://visualstudio.microsoft.com/github-copilot/). Right-click the variable you wish to rename, and choose **Rename** (`Ctrl+R`, `Ctrl+R`). Select the GitHub Copilot sparkle icon to generate naming suggestions. + ## What's new for C++ in Visual Studio version 17.10 *Released May 2024* From 09a49ac7c4f0a649fda845af9322dd4512286ea1 Mon Sep 17 00:00:00 2001 From: Raymond Chen Date: Mon, 5 Aug 2024 11:27:16 -0700 Subject: [PATCH 0317/1239] wchar_t is no longer sufficient to represent all Unicode code points This is leftover text from the carefree and naive days of UCS-16. Fixing to catch up to UTF-16. https://stackoverflow.com/questions/78835753/microsoft-claims-that-a-wchar-t-can-hold-any-unicode-character-is-this-true --- docs/c-runtime-library/unicode-the-wide-character-set.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/unicode-the-wide-character-set.md b/docs/c-runtime-library/unicode-the-wide-character-set.md index a45fbb30f3..9fbde6648e 100644 --- a/docs/c-runtime-library/unicode-the-wide-character-set.md +++ b/docs/c-runtime-library/unicode-the-wide-character-set.md @@ -8,7 +8,7 @@ ms.assetid: b6a05a21-59a5-4d30-8c85-2dbe185f7a74 --- # Unicode: The wide-character set -A wide character is a 2-byte multilingual character code. Any character in use in modern computing worldwide, including technical symbols and special publishing characters, can be represented according to the Unicode specification as a wide character. Developed and maintained by a large consortium that includes Microsoft, the Unicode standard is now widely accepted. +A wide character is a 2-byte multilingual character code. Any character in use in modern computing worldwide, including technical symbols and special publishing characters, can be represented according to the Unicode specification as one or more wide characters. Developed and maintained by a large consortium that includes Microsoft, the Unicode standard is now widely accepted. A wide character is of type **`wchar_t`**. A wide-character string is represented as a **`wchar_t[]`** array. You point to the array with a `wchar_t*` pointer. From 26cb552ff7c3ac3af30e36228fb82e156bf73450 Mon Sep 17 00:00:00 2001 From: David Luco <5156878+dluco@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:34:36 -0700 Subject: [PATCH 0318/1239] Fix link to previous subsection 2.7 Fixes the incomplete link to the previous subsection header. --- docs/code-quality/build-reliable-secure-programs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/code-quality/build-reliable-secure-programs.md b/docs/code-quality/build-reliable-secure-programs.md index 39cdc8e125..0e9bee041e 100644 --- a/docs/code-quality/build-reliable-secure-programs.md +++ b/docs/code-quality/build-reliable-secure-programs.md @@ -354,7 +354,7 @@ Historical test cases, also known as regression test cases, prevent old issues f **Key qualities, and relation to other sections** -Since they test for bug regressions, these tests should be quick and easy to run, so they can run alongside the [Code Based Test Cases] and contribute to the overall code coverage of the product. Along with this, using real examples from customers to inspire new test cases is a great way to improve coverage and quality of tests. +Since they test for bug regressions, these tests should be quick and easy to run, so they can run alongside the [Code Based Test Cases](#27-code-based-test-cases) and contribute to the overall code coverage of the product. Along with this, using real examples from customers to inspire new test cases is a great way to improve coverage and quality of tests. **Visual Studio** From 19fcd76e1e7bd337e5993743c2cec6296709ea6c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 5 Aug 2024 15:44:18 -0700 Subject: [PATCH 0319/1239] draft --- ...-operators-equal-equal-and-exclpt-equal.md | 60 ++++++++++++------- ...t-s-new-for-visual-cpp-in-visual-studio.md | 2 +- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index cce78daff4..192eb3959d 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -1,7 +1,7 @@ --- title: "Equality operators: == and !=" description: "The C++ standard language equal-to and not-equal-to operator syntax and use." -ms.date: 07/26/2024 +ms.date: 8/2/2024 f1_keywords: ["!=", "==", "not_eq_cpp"] helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparison operator", "equality operator [C++], syntax", "== operator", "not_eq operator", "equal to operator"] --- @@ -14,43 +14,61 @@ helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparis ## Remarks -The binary equality operators compare their operands for strict equality or inequality. +The binary equality operators compare their operands for strict equality or inequality. If you are looking for information about overloading these operators instead, see [Operator overloading](../cpp/overloading.md). -The equality operators, equal to (**`==`**) and not equal to (**`!=`**), have lower precedence than the relational operators, but they behave similarly. The result type for these operators is **`bool`**. - -The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise, it returns **`false`**. The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise, it returns **`false`**. +The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise **`false`**.\ +The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ +The alternative spelling `not_eq` returns **`true`** if the operands don't have the same value; otherwise **`false`**. ## Operator keyword for != C++: -- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. -- The alternative spelling is treated as a keyword. +- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. - There's no alternative spelling for **`==`**. -- Use of `` or `` is deprecated. +- Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. C: -- The alternative spelling is provided as a macro in the `` header. -- The laternative spelling isn't treated as a keyword. +- **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. +- The alternative spelling isn't treated as a keyword. +- There's no alternative spelling for **`==`**. ## Example ```cpp -// expre_Equality_Operators.cpp -// compile with: /EHsc #include -using namespace std; - -int main() { - cout << boolalpha - << "The true expression 3 != 2 yields: " - << (3 != 2) << endl - << "The false expression 20 == 10 yields: " - << (20 == 10) << endl; +int main() +{ + int x = 1, y = 1, z = 2; + + if (x == y) + { + std::cout << "Equal\n"; + } + + if (x != z) + { + std::cout << "Not equal\n"; + } + + if (x not_eq z) // demonstrates the alternative spelling + { + std::cout << "Not equal\n"; + } } ``` -Equality operators can compare pointers to members of the same type. In such a comparison, pointer-to-member conversions are performed. Pointers to members can also be compared to a constant expression that evaluates to 0. +```output +Equal +Not equal +Not equal +``` + +Equality operators can compare pointers to members of the same type. The pointers are equal if they point to the same member or if they are both **`nullptr`**. Otherwise, they are not equal. For examle + +```cpp + +``` ## See also diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 280f50bcac..b4fa7d5a1b 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -42,7 +42,7 @@ A partial list of new features: - Copilot - When you hover over symbols in the code editor, click the Copilot **Tell me more** button in the Quick Info dialog to learn more about a given symbol: - :::image type="complex" source="media/github-copilot-quick-info" alt-text="A screenshot of the Quick Info window."::: + :::image type="complex" source="media/github-copilot-quick-info.png" alt-text="A screenshot of the Quick Info window."::: The Quick Info window is shown above a function. The Tell me more link is highlighted. :::image-end::: - GitHub Copilot can generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is being used and the style of your code. From b05a83478839636bd716200da23c3d2d2481fa8e Mon Sep 17 00:00:00 2001 From: Michelle Matias <38734287+michelleangela@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:55:13 -0700 Subject: [PATCH 0320/1239] Add FEAT_LRCPC2 --- docs/build/reference/feature-arm64.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/build/reference/feature-arm64.md b/docs/build/reference/feature-arm64.md index 0cff61d52c..2954b4fed1 100644 --- a/docs/build/reference/feature-arm64.md +++ b/docs/build/reference/feature-arm64.md @@ -14,10 +14,11 @@ Enable one or more Arm A-Profile architecture features for an ARM64 extension as ## Arguments To enable one or more features the targeted ARM64 extension supports, specify one or more of the following feature arguments: -| Feature argument | Feature identifier | Optional from | Enabled by default | Description | -|--|--|--|--|--| -|**`lse`** | `FEAT_LSE` | Armv8.0 | Armv8.1 | Large System Extensions. | -|**`rcpc`** | `FEAT_LRCPC` | Armv8.2 | Armv8.3 | Load-Acquire RCpc instructions. | +| Feature argument | Feature identifier | Optional from | Enabled by default | Description | Supported in version +|--|--|--|--|--|--| +|**`lse`** | `FEAT_LSE` | Armv8.0 | Armv8.1 | Large System Extensions. | Visual Studio 2022 17.10 +|**`rcpc`** | `FEAT_LRCPC` | Armv8.2 | Armv8.3 | Load-Acquire RCpc instructions. | Visual Studio 2022 17.10 +|**`rcpc2`** | `FEAT_LRCPC2` | Armv8.2 | Armv8.4 | Load-Acquire RCpc instructions v2. | Visual Studio 2022 17.11 ## Remarks From 3fbb3b5214641eced0554d0f8c2071aca15c90f3 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 7 Aug 2024 14:27:20 -0700 Subject: [PATCH 0321/1239] add deprecated note --- docs/mfc/reference/cdaodatabase-class.md | 6 ++++-- docs/mfc/reference/cdaodatabaseinfo-structure.md | 8 +++++--- docs/mfc/reference/cdaoerrorinfo-structure.md | 8 +++++--- docs/mfc/reference/cdaoexception-class.md | 10 ++++++---- docs/mfc/reference/cdaofieldexchange-class.md | 8 ++++---- docs/mfc/reference/cdaofieldinfo-structure.md | 6 +++--- docs/mfc/reference/cdaoindexfieldinfo-structure.md | 6 +++--- docs/mfc/reference/cdaoindexinfo-structure.md | 6 ++++-- docs/mfc/reference/cdaoparameterinfo-structure.md | 8 +++++--- docs/mfc/reference/cdaoquerydef-class.md | 6 ++++-- docs/mfc/reference/cdaoquerydefinfo-structure.md | 6 ++++-- docs/mfc/reference/cdaorecordset-class.md | 7 +++++-- docs/mfc/reference/cdaorecordview-class.md | 6 ++++-- docs/mfc/reference/cdaorelationfieldinfo-structure.md | 6 ++++-- docs/mfc/reference/cdaorelationinfo-structure.md | 8 +++++--- docs/mfc/reference/cdaotabledef-class.md | 6 ++++-- docs/mfc/reference/cdaotabledefinfo-structure.md | 6 ++++-- docs/mfc/reference/cdaoworkspace-class.md | 8 +++++--- docs/mfc/reference/cdaoworkspaceinfo-structure.md | 6 ++++-- 19 files changed, 82 insertions(+), 49 deletions(-) diff --git a/docs/mfc/reference/cdaodatabase-class.md b/docs/mfc/reference/cdaodatabase-class.md index 81d9b3cb0d..fa713d62f6 100644 --- a/docs/mfc/reference/cdaodatabase-class.md +++ b/docs/mfc/reference/cdaodatabase-class.md @@ -4,11 +4,13 @@ title: "CDaoDatabase Class" ms.date: "09/17/2019" f1_keywords: ["CDaoDatabase", "AFXDAO/CDaoDatabase", "AFXDAO/CDaoDatabase::CDaoDatabase", "AFXDAO/CDaoDatabase::CanTransact", "AFXDAO/CDaoDatabase::CanUpdate", "AFXDAO/CDaoDatabase::Close", "AFXDAO/CDaoDatabase::Create", "AFXDAO/CDaoDatabase::CreateRelation", "AFXDAO/CDaoDatabase::DeleteQueryDef", "AFXDAO/CDaoDatabase::DeleteRelation", "AFXDAO/CDaoDatabase::DeleteTableDef", "AFXDAO/CDaoDatabase::Execute", "AFXDAO/CDaoDatabase::GetConnect", "AFXDAO/CDaoDatabase::GetName", "AFXDAO/CDaoDatabase::GetQueryDefCount", "AFXDAO/CDaoDatabase::GetQueryDefInfo", "AFXDAO/CDaoDatabase::GetQueryTimeout", "AFXDAO/CDaoDatabase::GetRecordsAffected", "AFXDAO/CDaoDatabase::GetRelationCount", "AFXDAO/CDaoDatabase::GetRelationInfo", "AFXDAO/CDaoDatabase::GetTableDefCount", "AFXDAO/CDaoDatabase::GetTableDefInfo", "AFXDAO/CDaoDatabase::GetVersion", "AFXDAO/CDaoDatabase::IsOpen", "AFXDAO/CDaoDatabase::Open", "AFXDAO/CDaoDatabase::SetQueryTimeout", "AFXDAO/CDaoDatabase::m_pDAODatabase", "AFXDAO/CDaoDatabase::m_pWorkspace"] helpviewer_keywords: ["CDaoDatabase [MFC], CDaoDatabase", "CDaoDatabase [MFC], CanTransact", "CDaoDatabase [MFC], CanUpdate", "CDaoDatabase [MFC], Close", "CDaoDatabase [MFC], Create", "CDaoDatabase [MFC], CreateRelation", "CDaoDatabase [MFC], DeleteQueryDef", "CDaoDatabase [MFC], DeleteRelation", "CDaoDatabase [MFC], DeleteTableDef", "CDaoDatabase [MFC], Execute", "CDaoDatabase [MFC], GetConnect", "CDaoDatabase [MFC], GetName", "CDaoDatabase [MFC], GetQueryDefCount", "CDaoDatabase [MFC], GetQueryDefInfo", "CDaoDatabase [MFC], GetQueryTimeout", "CDaoDatabase [MFC], GetRecordsAffected", "CDaoDatabase [MFC], GetRelationCount", "CDaoDatabase [MFC], GetRelationInfo", "CDaoDatabase [MFC], GetTableDefCount", "CDaoDatabase [MFC], GetTableDefInfo", "CDaoDatabase [MFC], GetVersion", "CDaoDatabase [MFC], IsOpen", "CDaoDatabase [MFC], Open", "CDaoDatabase [MFC], SetQueryTimeout", "CDaoDatabase [MFC], m_pDAODatabase", "CDaoDatabase [MFC], m_pWorkspace"] -ms.assetid: 8ff5b342-964d-449d-bef1-d0ff56aadf6d --- # CDaoDatabase Class -Represents a connection to an Access database using Data Access Objects (DAO). DAO is supported through Office 2013. DAO 3.6 is the final version, and it is considered obsolete. +Represents a connection to an Access database using Data Access Objects (DAO). + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaodatabaseinfo-structure.md b/docs/mfc/reference/cdaodatabaseinfo-structure.md index 0c65d02f3c..24d774536b 100644 --- a/docs/mfc/reference/cdaodatabaseinfo-structure.md +++ b/docs/mfc/reference/cdaodatabaseinfo-structure.md @@ -4,11 +4,13 @@ title: "CDaoDatabaseInfo Structure" ms.date: "09/17/2019" f1_keywords: ["CDaoDatabaseInfo"] helpviewer_keywords: ["CDaoDatabaseInfo structure [MFC]", "DAO (Data Access Objects), Databases collection"] -ms.assetid: 68e9e0da-8382-4fc6-8115-1b1519392ddb --- # CDaoDatabaseInfo Structure -The `CDaoDatabaseInfo` structure contains information about a database object defined for data access objects (DAO). DAO 3.6 is the final version, and it is considered obsolete. +The `CDaoDatabaseInfo` structure contains information about a database object defined for data access objects (DAO). + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -94,7 +96,7 @@ Information retrieved by the [CDaoWorkspace::GetDatabaseInfo](../../mfc/referenc ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoerrorinfo-structure.md b/docs/mfc/reference/cdaoerrorinfo-structure.md index 686a487153..0848f939ef 100644 --- a/docs/mfc/reference/cdaoerrorinfo-structure.md +++ b/docs/mfc/reference/cdaoerrorinfo-structure.md @@ -4,11 +4,13 @@ title: "CDaoErrorInfo Structure" ms.date: "09/17/2019" f1_keywords: ["CDaoErrorInfo"] helpviewer_keywords: ["CDaoErrorInfo structure [MFC]", "DAO (Data Access Objects), Errors collection"] -ms.assetid: cd37ef71-b0b3-401d-bc2b-540c9147f532 --- # CDaoErrorInfo Structure -The `CDaoErrorInfo` structure contains information about an error object defined for data access objects (DAO). DAO 3.6 is the final version, and it is considered obsolete. +The `CDaoErrorInfo` structure contains information about an error object defined for data access objects (DAO). + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -50,7 +52,7 @@ Information retrieved by the [CDaoException::GetErrorInfo](../../mfc/reference/c ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoexception-class.md b/docs/mfc/reference/cdaoexception-class.md index 10e48df062..108e653c07 100644 --- a/docs/mfc/reference/cdaoexception-class.md +++ b/docs/mfc/reference/cdaoexception-class.md @@ -4,15 +4,17 @@ title: "CDaoException Class" ms.date: "09/17/2019" f1_keywords: ["CDaoException", "AFXDAO/CDaoException", "AFXDAO/CDaoException::CDaoException", "AFXDAO/CDaoException::GetErrorCount", "AFXDAO/CDaoException::GetErrorInfo", "AFXDAO/CDaoException::m_nAfxDaoError", "AFXDAO/CDaoException::m_pErrorInfo", "AFXDAO/CDaoException::m_scode"] helpviewer_keywords: ["CDaoException [MFC], CDaoException", "CDaoException [MFC], GetErrorCount", "CDaoException [MFC], GetErrorInfo", "CDaoException [MFC], m_nAfxDaoError", "CDaoException [MFC], m_pErrorInfo", "CDaoException [MFC], m_scode"] -ms.assetid: b2b01fa9-7ce2-42a1-842e-40f13dc50da4 --- # CDaoException Class -Represents an exception condition arising from the MFC database classes based on data access objects (DAO). DAO 3.6 is the final version, and it is considered obsolete. +Represents an exception condition arising from the MFC database classes based on data access objects (DAO). + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax -``` +```cpp class CDaoException : public CException ``` @@ -64,7 +66,7 @@ For more information about exception handling in general, or about `CDaoExceptio ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoException::CDaoException diff --git a/docs/mfc/reference/cdaofieldexchange-class.md b/docs/mfc/reference/cdaofieldexchange-class.md index 44eab5cdfe..e38d0fa693 100644 --- a/docs/mfc/reference/cdaofieldexchange-class.md +++ b/docs/mfc/reference/cdaofieldexchange-class.md @@ -4,13 +4,13 @@ title: "CDaoFieldExchange Class" ms.date: "09/17/2019" f1_keywords: ["CDaoFieldExchange", "AFXDAO/CDaoFieldExchange", "AFXDAO/CDaoFieldExchange::IsValidOperation", "AFXDAO/CDaoFieldExchange::SetFieldType", "AFXDAO/CDaoFieldExchange::m_nOperation", "AFXDAO/CDaoFieldExchange::m_prs"] helpviewer_keywords: ["CDaoFieldExchange [MFC], IsValidOperation", "CDaoFieldExchange [MFC], SetFieldType", "CDaoFieldExchange [MFC], m_nOperation", "CDaoFieldExchange [MFC], m_prs"] -ms.assetid: 350a663e-92ff-44ab-ad53-d94efa2e5823 --- # CDaoFieldExchange Class Supports the DAO record field exchange (DFX) routines used by the DAO database classes. -DAO is supported through Office 2013. DAO 3.6 is the final version, and it is considered obsolete. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -60,7 +60,7 @@ The [IsValidOperation](#isvalidoperation) member function is provided for writin ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoFieldExchange::IsValidOperation @@ -89,7 +89,7 @@ Identifies the operation to be performed on the [CDaoRecordset](../../mfc/refere The `CDaoFieldExchange` object supplies the context for a number of different DFX operations on the recordset. > [!NOTE] -> The PSEUDONULL value described under the MarkForAddNew and SetFieldNull operations below is a value used to mark fields Null. The DAO record field exchange mechanism (DFX) uses this value to determine which fields have been explicitly marked Null. PSEUDONULL is not required for [COleDateTime](../../atl-mfc-shared/reference/coledatetime-class.md) and [COleCurrency](../../mfc/reference/colecurrency-class.md) fields. +> The `PSEUDONULL` value described under the `MarkForAddNew` and `SetFieldNull` operations below is a value used to mark fields Null. The DAO record field exchange mechanism (DFX) uses this value to determine which fields have been explicitly marked Null. `PSEUDONULL` is not required for [`COleDateTime`](../../atl-mfc-shared/reference/coledatetime-class.md) and [`COleCurrency`](../../mfc/reference/colecurrency-class.md) fields. Possible values of `m_nOperation` are: diff --git a/docs/mfc/reference/cdaofieldinfo-structure.md b/docs/mfc/reference/cdaofieldinfo-structure.md index b816e163d4..1935ec2f72 100644 --- a/docs/mfc/reference/cdaofieldinfo-structure.md +++ b/docs/mfc/reference/cdaofieldinfo-structure.md @@ -4,13 +4,13 @@ title: "CDaoFieldInfo Structure" ms.date: "09/17/2019" f1_keywords: ["CDaoFieldInfo"] helpviewer_keywords: ["DAO (Data Access Objects), Fields collection", "CDaoFieldInfo structure [MFC]"] -ms.assetid: 91b13e3f-bdb8-440c-86fc-ba4181ea0182 --- # CDaoFieldInfo Structure The `CDaoFieldInfo` structure contains information about a field object defined for data access objects (DAO). -DAO is supported through Office 2013. DAO 3.6 is the final version, and it is considered obsolete. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -146,7 +146,7 @@ Information retrieved by the `GetFieldInfo` member function (of the class that c ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoindexfieldinfo-structure.md b/docs/mfc/reference/cdaoindexfieldinfo-structure.md index 160831669c..c75e91b586 100644 --- a/docs/mfc/reference/cdaoindexfieldinfo-structure.md +++ b/docs/mfc/reference/cdaoindexfieldinfo-structure.md @@ -4,13 +4,13 @@ title: "CDaoIndexFieldInfo Structure" ms.date: "09/17/2019" f1_keywords: ["CDaoIndexFieldInfo"] helpviewer_keywords: ["CDaoIndexFieldInfo structure [MFC]", "DAO (Data Access Objects), Index Fields collection"] -ms.assetid: 097ee8a6-83b1-4db7-8f05-d62a2deefe19 --- # CDaoIndexFieldInfo Structure The `CDaoIndexFieldInfo` structure contains information about an index field object defined for data access objects (DAO). -DAO is supported through Office 2013. DAO 3.6 is the final version, and it is considered obsolete. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -40,7 +40,7 @@ Call the `GetIndexInfo` member function of the containing tabledef or recordset ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoindexinfo-structure.md b/docs/mfc/reference/cdaoindexinfo-structure.md index 390978f486..e7558e5bae 100644 --- a/docs/mfc/reference/cdaoindexinfo-structure.md +++ b/docs/mfc/reference/cdaoindexinfo-structure.md @@ -4,12 +4,14 @@ title: "CDaoIndexInfo Structure" ms.date: "06/25/2018" f1_keywords: ["CDaoIndexInfo"] helpviewer_keywords: ["DAO (Data Access Objects), Indexes collection", "CDaoIndexInfo structure [MFC]"] -ms.assetid: 251d8285-78ce-4716-a0b3-ccc3395fc437 --- # CDaoIndexInfo Structure The `CDaoIndexInfo` structure contains information about an index object defined for data access objects (DAO). +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ```cpp @@ -98,7 +100,7 @@ Information retrieved by the `GetIndexInfo` member function of a tabledef object ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoparameterinfo-structure.md b/docs/mfc/reference/cdaoparameterinfo-structure.md index 50b0f3407d..40eaa76497 100644 --- a/docs/mfc/reference/cdaoparameterinfo-structure.md +++ b/docs/mfc/reference/cdaoparameterinfo-structure.md @@ -4,11 +4,13 @@ title: "CDaoParameterInfo Structure" ms.date: "09/17/2019" f1_keywords: ["CDaoParameterInfo"] helpviewer_keywords: ["CDaoParameterInfo structure [MFC]", "DAO (Data Access Objects), Parameters collection"] -ms.assetid: 45fd53cd-cb84-4e12-b48d-7f2979f898ad --- # CDaoParameterInfo Structure -The `CDaoParameterInfo` structure contains information about a parameter object defined for data access objects (DAO). DAO 3.6 is the final version, and it is considered obsolete. +The `CDaoParameterInfo` structure contains information about a parameter object defined for data access objects (DAO). + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -47,7 +49,7 @@ Information retrieved by the [CDaoQueryDef::GetParameterInfo](../../mfc/referenc ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoquerydef-class.md b/docs/mfc/reference/cdaoquerydef-class.md index a1613f393f..80d5a67b30 100644 --- a/docs/mfc/reference/cdaoquerydef-class.md +++ b/docs/mfc/reference/cdaoquerydef-class.md @@ -4,12 +4,14 @@ title: "CDaoQueryDef Class" ms.date: "11/04/2016" f1_keywords: ["CDaoQueryDef", "AFXDAO/CDaoQueryDef", "AFXDAO/CDaoQueryDef::CDaoQueryDef", "AFXDAO/CDaoQueryDef::Append", "AFXDAO/CDaoQueryDef::CanUpdate", "AFXDAO/CDaoQueryDef::Close", "AFXDAO/CDaoQueryDef::Create", "AFXDAO/CDaoQueryDef::Execute", "AFXDAO/CDaoQueryDef::GetConnect", "AFXDAO/CDaoQueryDef::GetDateCreated", "AFXDAO/CDaoQueryDef::GetDateLastUpdated", "AFXDAO/CDaoQueryDef::GetFieldCount", "AFXDAO/CDaoQueryDef::GetFieldInfo", "AFXDAO/CDaoQueryDef::GetName", "AFXDAO/CDaoQueryDef::GetODBCTimeout", "AFXDAO/CDaoQueryDef::GetParameterCount", "AFXDAO/CDaoQueryDef::GetParameterInfo", "AFXDAO/CDaoQueryDef::GetParamValue", "AFXDAO/CDaoQueryDef::GetRecordsAffected", "AFXDAO/CDaoQueryDef::GetReturnsRecords", "AFXDAO/CDaoQueryDef::GetSQL", "AFXDAO/CDaoQueryDef::GetType", "AFXDAO/CDaoQueryDef::IsOpen", "AFXDAO/CDaoQueryDef::Open", "AFXDAO/CDaoQueryDef::SetConnect", "AFXDAO/CDaoQueryDef::SetName", "AFXDAO/CDaoQueryDef::SetODBCTimeout", "AFXDAO/CDaoQueryDef::SetParamValue", "AFXDAO/CDaoQueryDef::SetReturnsRecords", "AFXDAO/CDaoQueryDef::SetSQL", "AFXDAO/CDaoQueryDef::m_pDAOQueryDef", "AFXDAO/CDaoQueryDef::m_pDatabase"] helpviewer_keywords: ["CDaoQueryDef [MFC], CDaoQueryDef", "CDaoQueryDef [MFC], Append", "CDaoQueryDef [MFC], CanUpdate", "CDaoQueryDef [MFC], Close", "CDaoQueryDef [MFC], Create", "CDaoQueryDef [MFC], Execute", "CDaoQueryDef [MFC], GetConnect", "CDaoQueryDef [MFC], GetDateCreated", "CDaoQueryDef [MFC], GetDateLastUpdated", "CDaoQueryDef [MFC], GetFieldCount", "CDaoQueryDef [MFC], GetFieldInfo", "CDaoQueryDef [MFC], GetName", "CDaoQueryDef [MFC], GetODBCTimeout", "CDaoQueryDef [MFC], GetParameterCount", "CDaoQueryDef [MFC], GetParameterInfo", "CDaoQueryDef [MFC], GetParamValue", "CDaoQueryDef [MFC], GetRecordsAffected", "CDaoQueryDef [MFC], GetReturnsRecords", "CDaoQueryDef [MFC], GetSQL", "CDaoQueryDef [MFC], GetType", "CDaoQueryDef [MFC], IsOpen", "CDaoQueryDef [MFC], Open", "CDaoQueryDef [MFC], SetConnect", "CDaoQueryDef [MFC], SetName", "CDaoQueryDef [MFC], SetODBCTimeout", "CDaoQueryDef [MFC], SetParamValue", "CDaoQueryDef [MFC], SetReturnsRecords", "CDaoQueryDef [MFC], SetSQL", "CDaoQueryDef [MFC], m_pDAOQueryDef", "CDaoQueryDef [MFC], m_pDatabase"] -ms.assetid: 9676a4a3-c712-44d4-8c5d-d1cc78288d3a --- # CDaoQueryDef Class Represents a query definition, or "querydef," usually one saved in a database. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -122,7 +124,7 @@ For related information, see the topics "QueryDef Object", "QueryDefs Collection ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoQueryDef::Append diff --git a/docs/mfc/reference/cdaoquerydefinfo-structure.md b/docs/mfc/reference/cdaoquerydefinfo-structure.md index c42b9f3333..aa6c9ddcb0 100644 --- a/docs/mfc/reference/cdaoquerydefinfo-structure.md +++ b/docs/mfc/reference/cdaoquerydefinfo-structure.md @@ -4,12 +4,14 @@ title: "CDaoQueryDefInfo Structure" ms.date: "11/04/2016" f1_keywords: ["CDaoQueryDefInfo"] helpviewer_keywords: ["DAO (Data Access Objects), QueryDefs collection", "CDaoQueryDefInfo structure [MFC]"] -ms.assetid: e20837dc-e78d-4171-a195-1b4075fb5d2a --- # CDaoQueryDefInfo Structure The `CDaoQueryDefInfo` structure contains information about a querydef object defined for data access objects (DAO). +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -95,7 +97,7 @@ The date and time settings are derived from the computer on which the querydef w ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaorecordset-class.md b/docs/mfc/reference/cdaorecordset-class.md index 1e04df6fb4..bce0f44cab 100644 --- a/docs/mfc/reference/cdaorecordset-class.md +++ b/docs/mfc/reference/cdaorecordset-class.md @@ -4,12 +4,15 @@ title: "CDaoRecordset Class" ms.date: "08/27/2018" f1_keywords: ["CDaoRecordset", "AFXDAO/CDaoRecordset", "AFXDAO/CDaoRecordset::CDaoRecordset", "AFXDAO/CDaoRecordset::AddNew", "AFXDAO/CDaoRecordset::CanAppend", "AFXDAO/CDaoRecordset::CanBookmark", "AFXDAO/CDaoRecordset::CancelUpdate", "AFXDAO/CDaoRecordset::CanRestart", "AFXDAO/CDaoRecordset::CanScroll", "AFXDAO/CDaoRecordset::CanTransact", "AFXDAO/CDaoRecordset::CanUpdate", "AFXDAO/CDaoRecordset::Close", "AFXDAO/CDaoRecordset::Delete", "AFXDAO/CDaoRecordset::DoFieldExchange", "AFXDAO/CDaoRecordset::Edit", "AFXDAO/CDaoRecordset::FillCache", "AFXDAO/CDaoRecordset::Find", "AFXDAO/CDaoRecordset::FindFirst", "AFXDAO/CDaoRecordset::FindLast", "AFXDAO/CDaoRecordset::FindNext", "AFXDAO/CDaoRecordset::FindPrev", "AFXDAO/CDaoRecordset::GetAbsolutePosition", "AFXDAO/CDaoRecordset::GetBookmark", "AFXDAO/CDaoRecordset::GetCacheSize", "AFXDAO/CDaoRecordset::GetCacheStart", "AFXDAO/CDaoRecordset::GetCurrentIndex", "AFXDAO/CDaoRecordset::GetDateCreated", "AFXDAO/CDaoRecordset::GetDateLastUpdated", "AFXDAO/CDaoRecordset::GetDefaultDBName", "AFXDAO/CDaoRecordset::GetDefaultSQL", "AFXDAO/CDaoRecordset::GetEditMode", "AFXDAO/CDaoRecordset::GetFieldCount", "AFXDAO/CDaoRecordset::GetFieldInfo", "AFXDAO/CDaoRecordset::GetFieldValue", "AFXDAO/CDaoRecordset::GetIndexCount", "AFXDAO/CDaoRecordset::GetIndexInfo", "AFXDAO/CDaoRecordset::GetLastModifiedBookmark", "AFXDAO/CDaoRecordset::GetLockingMode", "AFXDAO/CDaoRecordset::GetName", "AFXDAO/CDaoRecordset::GetParamValue", "AFXDAO/CDaoRecordset::GetPercentPosition", "AFXDAO/CDaoRecordset::GetRecordCount", "AFXDAO/CDaoRecordset::GetSQL", "AFXDAO/CDaoRecordset::GetType", "AFXDAO/CDaoRecordset::GetValidationRule", "AFXDAO/CDaoRecordset::GetValidationText", "AFXDAO/CDaoRecordset::IsBOF", "AFXDAO/CDaoRecordset::IsDeleted", "AFXDAO/CDaoRecordset::IsEOF", "AFXDAO/CDaoRecordset::IsFieldDirty", "AFXDAO/CDaoRecordset::IsFieldNull", "AFXDAO/CDaoRecordset::IsFieldNullable", "AFXDAO/CDaoRecordset::IsOpen", "AFXDAO/CDaoRecordset::Move", "AFXDAO/CDaoRecordset::MoveFirst", "AFXDAO/CDaoRecordset::MoveLast", "AFXDAO/CDaoRecordset::MoveNext", "AFXDAO/CDaoRecordset::MovePrev", "AFXDAO/CDaoRecordset::Open", "AFXDAO/CDaoRecordset::Requery", "AFXDAO/CDaoRecordset::Seek", "AFXDAO/CDaoRecordset::SetAbsolutePosition", "AFXDAO/CDaoRecordset::SetBookmark", "AFXDAO/CDaoRecordset::SetCacheSize", "AFXDAO/CDaoRecordset::SetCacheStart", "AFXDAO/CDaoRecordset::SetCurrentIndex", "AFXDAO/CDaoRecordset::SetFieldDirty", "AFXDAO/CDaoRecordset::SetFieldNull", "AFXDAO/CDaoRecordset::SetFieldValue", "AFXDAO/CDaoRecordset::SetFieldValueNull", "AFXDAO/CDaoRecordset::SetLockingMode", "AFXDAO/CDaoRecordset::SetParamValue", "AFXDAO/CDaoRecordset::SetParamValueNull", "AFXDAO/CDaoRecordset::SetPercentPosition", "AFXDAO/CDaoRecordset::Update", "AFXDAO/CDaoRecordset::m_bCheckCacheForDirtyFields", "AFXDAO/CDaoRecordset::m_nFields", "AFXDAO/CDaoRecordset::m_nParams", "AFXDAO/CDaoRecordset::m_pDAORecordset", "AFXDAO/CDaoRecordset::m_pDatabase", "AFXDAO/CDaoRecordset::m_strFilter", "AFXDAO/CDaoRecordset::m_strSort"] helpviewer_keywords: ["CDaoRecordset [MFC], CDaoRecordset", "CDaoRecordset [MFC], AddNew", "CDaoRecordset [MFC], CanAppend", "CDaoRecordset [MFC], CanBookmark", "CDaoRecordset [MFC], CancelUpdate", "CDaoRecordset [MFC], CanRestart", "CDaoRecordset [MFC], CanScroll", "CDaoRecordset [MFC], CanTransact", "CDaoRecordset [MFC], CanUpdate", "CDaoRecordset [MFC], Close", "CDaoRecordset [MFC], Delete", "CDaoRecordset [MFC], DoFieldExchange", "CDaoRecordset [MFC], Edit", "CDaoRecordset [MFC], FillCache", "CDaoRecordset [MFC], Find", "CDaoRecordset [MFC], FindFirst", "CDaoRecordset [MFC], FindLast", "CDaoRecordset [MFC], FindNext", "CDaoRecordset [MFC], FindPrev", "CDaoRecordset [MFC], GetAbsolutePosition", "CDaoRecordset [MFC], GetBookmark", "CDaoRecordset [MFC], GetCacheSize", "CDaoRecordset [MFC], GetCacheStart", "CDaoRecordset [MFC], GetCurrentIndex", "CDaoRecordset [MFC], GetDateCreated", "CDaoRecordset [MFC], GetDateLastUpdated", "CDaoRecordset [MFC], GetDefaultDBName", "CDaoRecordset [MFC], GetDefaultSQL", "CDaoRecordset [MFC], GetEditMode", "CDaoRecordset [MFC], GetFieldCount", "CDaoRecordset [MFC], GetFieldInfo", "CDaoRecordset [MFC], GetFieldValue", "CDaoRecordset [MFC], GetIndexCount", "CDaoRecordset [MFC], GetIndexInfo", "CDaoRecordset [MFC], GetLastModifiedBookmark", "CDaoRecordset [MFC], GetLockingMode", "CDaoRecordset [MFC], GetName", "CDaoRecordset [MFC], GetParamValue", "CDaoRecordset [MFC], GetPercentPosition", "CDaoRecordset [MFC], GetRecordCount", "CDaoRecordset [MFC], GetSQL", "CDaoRecordset [MFC], GetType", "CDaoRecordset [MFC], GetValidationRule", "CDaoRecordset [MFC], GetValidationText", "CDaoRecordset [MFC], IsBOF", "CDaoRecordset [MFC], IsDeleted", "CDaoRecordset [MFC], IsEOF", "CDaoRecordset [MFC], IsFieldDirty", "CDaoRecordset [MFC], IsFieldNull", "CDaoRecordset [MFC], IsFieldNullable", "CDaoRecordset [MFC], IsOpen", "CDaoRecordset [MFC], Move", "CDaoRecordset [MFC], MoveFirst", "CDaoRecordset [MFC], MoveLast", "CDaoRecordset [MFC], MoveNext", "CDaoRecordset [MFC], MovePrev", "CDaoRecordset [MFC], Open", "CDaoRecordset [MFC], Requery", "CDaoRecordset [MFC], Seek", "CDaoRecordset [MFC], SetAbsolutePosition", "CDaoRecordset [MFC], SetBookmark", "CDaoRecordset [MFC], SetCacheSize", "CDaoRecordset [MFC], SetCacheStart", "CDaoRecordset [MFC], SetCurrentIndex", "CDaoRecordset [MFC], SetFieldDirty", "CDaoRecordset [MFC], SetFieldNull", "CDaoRecordset [MFC], SetFieldValue", "CDaoRecordset [MFC], SetFieldValueNull", "CDaoRecordset [MFC], SetLockingMode", "CDaoRecordset [MFC], SetParamValue", "CDaoRecordset [MFC], SetParamValueNull", "CDaoRecordset [MFC], SetPercentPosition", "CDaoRecordset [MFC], Update", "CDaoRecordset [MFC], m_bCheckCacheForDirtyFields", "CDaoRecordset [MFC], m_nFields", "CDaoRecordset [MFC], m_nParams", "CDaoRecordset [MFC], m_pDAORecordset", "CDaoRecordset [MFC], m_pDatabase", "CDaoRecordset [MFC], m_strFilter", "CDaoRecordset [MFC], m_strSort"] -ms.assetid: 2322067f-1027-4662-a5d7-aa2fc7488630 --- # CDaoRecordset Class Represents a set of records selected from a data source. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + + ## Syntax ```cpp @@ -160,7 +163,7 @@ For related information, see the topic "Recordset Object" in DAO Help. ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoRecordset::AddNew diff --git a/docs/mfc/reference/cdaorecordview-class.md b/docs/mfc/reference/cdaorecordview-class.md index 616077e525..e2baaabc9e 100644 --- a/docs/mfc/reference/cdaorecordview-class.md +++ b/docs/mfc/reference/cdaorecordview-class.md @@ -4,12 +4,14 @@ title: "CDaoRecordView Class" ms.date: "11/04/2016" f1_keywords: ["CDaoRecordView", "AFXDAO/CDaoRecordView", "AFXDAO/CDaoRecordView::CDaoRecordView", "AFXDAO/CDaoRecordView::IsOnFirstRecord", "AFXDAO/CDaoRecordView::IsOnLastRecord", "AFXDAO/CDaoRecordView::OnGetRecordset", "AFXDAO/CDaoRecordView::OnMove"] helpviewer_keywords: ["CDaoRecordView [MFC], CDaoRecordView", "CDaoRecordView [MFC], IsOnFirstRecord", "CDaoRecordView [MFC], IsOnLastRecord", "CDaoRecordView [MFC], OnGetRecordset", "CDaoRecordView [MFC], OnMove"] -ms.assetid: 5aa7d0e2-bd05-413e-b216-80c404ce18ac --- # CDaoRecordView Class A view that displays database records in controls. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -70,7 +72,7 @@ For more information about declaring and using your record view and recordset cl ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoRecordView::CDaoRecordView diff --git a/docs/mfc/reference/cdaorelationfieldinfo-structure.md b/docs/mfc/reference/cdaorelationfieldinfo-structure.md index f77f5502ff..e0119efea4 100644 --- a/docs/mfc/reference/cdaorelationfieldinfo-structure.md +++ b/docs/mfc/reference/cdaorelationfieldinfo-structure.md @@ -4,12 +4,14 @@ title: "CDaoRelationFieldInfo Structure" ms.date: "11/04/2016" f1_keywords: ["CDaoRelationFieldInfo"] helpviewer_keywords: ["DAO (Data Access Objects), Relations collection", "CDaoRelationFieldInfo structure [MFC]"] -ms.assetid: 47cb89ca-dc80-47ce-96fd-cc4b88512558 --- # CDaoRelationFieldInfo Structure The `CDaoRelationFieldInfo` structure contains information about a field in a relation defined for data access objects (DAO). +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -38,7 +40,7 @@ Call the [GetRelationInfo](../../mfc/reference/cdaodatabase-class.md#getrelation ## Requirements -**Header:** afxdao.h +**Header:** `afxdao`.h ## See also diff --git a/docs/mfc/reference/cdaorelationinfo-structure.md b/docs/mfc/reference/cdaorelationinfo-structure.md index 5152258fe0..d93623b3d7 100644 --- a/docs/mfc/reference/cdaorelationinfo-structure.md +++ b/docs/mfc/reference/cdaorelationinfo-structure.md @@ -4,11 +4,13 @@ title: "CDaoRelationInfo Structure" ms.date: "06/25/2018" f1_keywords: ["CDaoRelationInfo"] helpviewer_keywords: ["DAO (Data Access Objects), Relations collection", "CDaoRelationInfo structure [MFC]"] -ms.assetid: 92dda090-fe72-4090-84ec-429498a48aad --- # CDaoRelationInfo Structure -The `CDaoRelationInfo` structure contains information about a relation defined between fields of two tables in a [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object. +The `CDaoRelationInfo` structure contains information about a relation defined between fields of two tables in a [`CDaoDatabase`](../../mfc/reference/cdaodatabase-class.md) object. + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -71,7 +73,7 @@ Information retrieved by the [CDaoDatabase::GetRelationInfo](../../mfc/reference ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaotabledef-class.md b/docs/mfc/reference/cdaotabledef-class.md index a527297ab3..5ad89da173 100644 --- a/docs/mfc/reference/cdaotabledef-class.md +++ b/docs/mfc/reference/cdaotabledef-class.md @@ -4,12 +4,14 @@ title: "CDaoTableDef Class" ms.date: "11/04/2016" f1_keywords: ["CDaoTableDef", "AFXDAO/CDaoTableDef", "AFXDAO/CDaoTableDef::CDaoTableDef", "AFXDAO/CDaoTableDef::Append", "AFXDAO/CDaoTableDef::CanUpdate", "AFXDAO/CDaoTableDef::Close", "AFXDAO/CDaoTableDef::Create", "AFXDAO/CDaoTableDef::CreateField", "AFXDAO/CDaoTableDef::CreateIndex", "AFXDAO/CDaoTableDef::DeleteField", "AFXDAO/CDaoTableDef::DeleteIndex", "AFXDAO/CDaoTableDef::GetAttributes", "AFXDAO/CDaoTableDef::GetConnect", "AFXDAO/CDaoTableDef::GetDateCreated", "AFXDAO/CDaoTableDef::GetDateLastUpdated", "AFXDAO/CDaoTableDef::GetFieldCount", "AFXDAO/CDaoTableDef::GetFieldInfo", "AFXDAO/CDaoTableDef::GetIndexCount", "AFXDAO/CDaoTableDef::GetIndexInfo", "AFXDAO/CDaoTableDef::GetName", "AFXDAO/CDaoTableDef::GetRecordCount", "AFXDAO/CDaoTableDef::GetSourceTableName", "AFXDAO/CDaoTableDef::GetValidationRule", "AFXDAO/CDaoTableDef::GetValidationText", "AFXDAO/CDaoTableDef::IsOpen", "AFXDAO/CDaoTableDef::Open", "AFXDAO/CDaoTableDef::RefreshLink", "AFXDAO/CDaoTableDef::SetAttributes", "AFXDAO/CDaoTableDef::SetConnect", "AFXDAO/CDaoTableDef::SetName", "AFXDAO/CDaoTableDef::SetSourceTableName", "AFXDAO/CDaoTableDef::SetValidationRule", "AFXDAO/CDaoTableDef::SetValidationText", "AFXDAO/CDaoTableDef::m_pDAOTableDef", "AFXDAO/CDaoTableDef::m_pDatabase"] helpviewer_keywords: ["CDaoTableDef [MFC], CDaoTableDef", "CDaoTableDef [MFC], Append", "CDaoTableDef [MFC], CanUpdate", "CDaoTableDef [MFC], Close", "CDaoTableDef [MFC], Create", "CDaoTableDef [MFC], CreateField", "CDaoTableDef [MFC], CreateIndex", "CDaoTableDef [MFC], DeleteField", "CDaoTableDef [MFC], DeleteIndex", "CDaoTableDef [MFC], GetAttributes", "CDaoTableDef [MFC], GetConnect", "CDaoTableDef [MFC], GetDateCreated", "CDaoTableDef [MFC], GetDateLastUpdated", "CDaoTableDef [MFC], GetFieldCount", "CDaoTableDef [MFC], GetFieldInfo", "CDaoTableDef [MFC], GetIndexCount", "CDaoTableDef [MFC], GetIndexInfo", "CDaoTableDef [MFC], GetName", "CDaoTableDef [MFC], GetRecordCount", "CDaoTableDef [MFC], GetSourceTableName", "CDaoTableDef [MFC], GetValidationRule", "CDaoTableDef [MFC], GetValidationText", "CDaoTableDef [MFC], IsOpen", "CDaoTableDef [MFC], Open", "CDaoTableDef [MFC], RefreshLink", "CDaoTableDef [MFC], SetAttributes", "CDaoTableDef [MFC], SetConnect", "CDaoTableDef [MFC], SetName", "CDaoTableDef [MFC], SetSourceTableName", "CDaoTableDef [MFC], SetValidationRule", "CDaoTableDef [MFC], SetValidationText", "CDaoTableDef [MFC], m_pDAOTableDef", "CDaoTableDef [MFC], m_pDatabase"] -ms.assetid: 7c5d2254-8475-43c4-8a6c-2d32ead194c9 --- # CDaoTableDef Class Represents the stored definition of a base table or an attached table. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -114,7 +116,7 @@ When you finish using a tabledef object, call its [Close](../../mfc/reference/cd ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoTableDef::Append diff --git a/docs/mfc/reference/cdaotabledefinfo-structure.md b/docs/mfc/reference/cdaotabledefinfo-structure.md index eef34d4ef3..ca83c7daed 100644 --- a/docs/mfc/reference/cdaotabledefinfo-structure.md +++ b/docs/mfc/reference/cdaotabledefinfo-structure.md @@ -4,12 +4,14 @@ title: "CDaoTableDefInfo Structure" ms.date: "11/04/2016" f1_keywords: ["CDaoTableDefInfo"] helpviewer_keywords: ["CDaoTableDefInfo structure [MFC]", "DAO (Data Access Objects), TableDefs collection"] -ms.assetid: c01ccebb-5615-434e-883c-4f60eac943dd --- # CDaoTableDefInfo Structure The `CDaoTableDefInfo` structure contains information about a tabledef object defined for data access objects (DAO). +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -82,7 +84,7 @@ The date and time settings are derived from the computer on which the base table ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also diff --git a/docs/mfc/reference/cdaoworkspace-class.md b/docs/mfc/reference/cdaoworkspace-class.md index 0b0f9fb591..346128c174 100644 --- a/docs/mfc/reference/cdaoworkspace-class.md +++ b/docs/mfc/reference/cdaoworkspace-class.md @@ -4,11 +4,13 @@ title: "CDaoWorkspace Class" ms.date: "11/04/2016" f1_keywords: ["CDaoWorkspace", "AFXDAO/CDaoWorkspace", "AFXDAO/CDaoWorkspace::CDaoWorkspace", "AFXDAO/CDaoWorkspace::Append", "AFXDAO/CDaoWorkspace::BeginTrans", "AFXDAO/CDaoWorkspace::Close", "AFXDAO/CDaoWorkspace::CommitTrans", "AFXDAO/CDaoWorkspace::CompactDatabase", "AFXDAO/CDaoWorkspace::Create", "AFXDAO/CDaoWorkspace::GetDatabaseCount", "AFXDAO/CDaoWorkspace::GetDatabaseInfo", "AFXDAO/CDaoWorkspace::GetIniPath", "AFXDAO/CDaoWorkspace::GetIsolateODBCTrans", "AFXDAO/CDaoWorkspace::GetLoginTimeout", "AFXDAO/CDaoWorkspace::GetName", "AFXDAO/CDaoWorkspace::GetUserName", "AFXDAO/CDaoWorkspace::GetVersion", "AFXDAO/CDaoWorkspace::GetWorkspaceCount", "AFXDAO/CDaoWorkspace::GetWorkspaceInfo", "AFXDAO/CDaoWorkspace::Idle", "AFXDAO/CDaoWorkspace::IsOpen", "AFXDAO/CDaoWorkspace::Open", "AFXDAO/CDaoWorkspace::RepairDatabase", "AFXDAO/CDaoWorkspace::Rollback", "AFXDAO/CDaoWorkspace::SetDefaultPassword", "AFXDAO/CDaoWorkspace::SetDefaultUser", "AFXDAO/CDaoWorkspace::SetIniPath", "AFXDAO/CDaoWorkspace::SetIsolateODBCTrans", "AFXDAO/CDaoWorkspace::SetLoginTimeout", "AFXDAO/CDaoWorkspace::m_pDAOWorkspace"] helpviewer_keywords: ["CDaoWorkspace [MFC], CDaoWorkspace", "CDaoWorkspace [MFC], Append", "CDaoWorkspace [MFC], BeginTrans", "CDaoWorkspace [MFC], Close", "CDaoWorkspace [MFC], CommitTrans", "CDaoWorkspace [MFC], CompactDatabase", "CDaoWorkspace [MFC], Create", "CDaoWorkspace [MFC], GetDatabaseCount", "CDaoWorkspace [MFC], GetDatabaseInfo", "CDaoWorkspace [MFC], GetIniPath", "CDaoWorkspace [MFC], GetIsolateODBCTrans", "CDaoWorkspace [MFC], GetLoginTimeout", "CDaoWorkspace [MFC], GetName", "CDaoWorkspace [MFC], GetUserName", "CDaoWorkspace [MFC], GetVersion", "CDaoWorkspace [MFC], GetWorkspaceCount", "CDaoWorkspace [MFC], GetWorkspaceInfo", "CDaoWorkspace [MFC], Idle", "CDaoWorkspace [MFC], IsOpen", "CDaoWorkspace [MFC], Open", "CDaoWorkspace [MFC], RepairDatabase", "CDaoWorkspace [MFC], Rollback", "CDaoWorkspace [MFC], SetDefaultPassword", "CDaoWorkspace [MFC], SetDefaultUser", "CDaoWorkspace [MFC], SetIniPath", "CDaoWorkspace [MFC], SetIsolateODBCTrans", "CDaoWorkspace [MFC], SetLoginTimeout", "CDaoWorkspace [MFC], m_pDAOWorkspace"] -ms.assetid: 64f60de6-4df1-4d4a-a65b-c489b5257d52 --- # CDaoWorkspace Class -Manages a named, password-protected database session from login to logoff, by a single user. DAO is supported through Office 2013. DAO 3.6 is the final version, and it is considered obsolete. +Manages a named, password-protected database session from login to logoff, by a single user. + +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -128,7 +130,7 @@ For information about calling DAO directly and about DAO security, see [Technica ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## CDaoWorkspace::Append diff --git a/docs/mfc/reference/cdaoworkspaceinfo-structure.md b/docs/mfc/reference/cdaoworkspaceinfo-structure.md index 790e286f32..906f4cc2f3 100644 --- a/docs/mfc/reference/cdaoworkspaceinfo-structure.md +++ b/docs/mfc/reference/cdaoworkspaceinfo-structure.md @@ -4,12 +4,14 @@ title: "CDaoWorkspaceInfo Structure" ms.date: "11/04/2016" f1_keywords: ["CDaoWorkspaceInfo"] helpviewer_keywords: ["CDaoWorkspaceInfo structure [MFC]", "DAO (Data Access Objects), Workspaces collection"] -ms.assetid: a1f4b25e-f9c6-4196-b075-d1df99c54124 --- # CDaoWorkspaceInfo Structure The `CDaoWorkspaceInfo` structure contains information about a workspace defined for data access objects (DAO) database access. +> [!NOTE] +> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. + ## Syntax ``` @@ -40,7 +42,7 @@ Information retrieved by the [CDaoWorkspace::GetWorkspaceInfo](../../mfc/referen ## Requirements -**Header:** afxdao.h +**Header:** `afxdao.h` ## See also From a9680cef6998032bbc3605349bad3f39d4f229fa Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 7 Aug 2024 14:54:39 -0700 Subject: [PATCH 0322/1239] update equality topic to address negative feedback --- ...-operators-equal-equal-and-exclpt-equal.md | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 0b19a7b204..192eb3959d 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -1,10 +1,9 @@ --- title: "Equality operators: == and !=" description: "The C++ standard language equal-to and not-equal-to operator syntax and use." -ms.date: 07/23/2020 +ms.date: 8/2/2024 f1_keywords: ["!=", "==", "not_eq_cpp"] helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparison operator", "equality operator [C++], syntax", "== operator", "not_eq operator", "equal to operator"] -ms.assetid: ba4e9659-2392-4fb4-be5a-910a2a6df45a --- # Equality operators: `==` and `!=` @@ -15,35 +14,61 @@ ms.assetid: ba4e9659-2392-4fb4-be5a-910a2a6df45a ## Remarks -The binary equality operators compare their operands for strict equality or inequality. +The binary equality operators compare their operands for strict equality or inequality. If you are looking for information about overloading these operators instead, see [Operator overloading](../cpp/overloading.md). -The equality operators, equal to (**`==`**) and not equal to (**`!=`**), have lower precedence than the relational operators, but they behave similarly. The result type for these operators is **`bool`**. - -The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise, it returns **`false`**. The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise, it returns **`false`**. +The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise **`false`**.\ +The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ +The alternative spelling `not_eq` returns **`true`** if the operands don't have the same value; otherwise **`false`**. ## Operator keyword for != -C++ specifies **`not_eq`** as an alternative spelling for **`!=`**. (There's no alternative spelling for **`==`**.) In C, the alternative spelling is provided as a macro in the \ header. In C++, the alternative spelling is a keyword; use of \ or the C++ equivalent \ is deprecated. In Microsoft C++, the [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. +C++: +- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. +- There's no alternative spelling for **`==`**. +- Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. + +C: +- **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. +- The alternative spelling isn't treated as a keyword. +- There's no alternative spelling for **`==`**. ## Example ```cpp -// expre_Equality_Operators.cpp -// compile with: /EHsc #include -using namespace std; - -int main() { - cout << boolalpha - << "The true expression 3 != 2 yields: " - << (3 != 2) << endl - << "The false expression 20 == 10 yields: " - << (20 == 10) << endl; +int main() +{ + int x = 1, y = 1, z = 2; + + if (x == y) + { + std::cout << "Equal\n"; + } + + if (x != z) + { + std::cout << "Not equal\n"; + } + + if (x not_eq z) // demonstrates the alternative spelling + { + std::cout << "Not equal\n"; + } } ``` -Equality operators can compare pointers to members of the same type. In such a comparison, pointer-to-member conversions are performed. Pointers to members can also be compared to a constant expression that evaluates to 0. +```output +Equal +Not equal +Not equal +``` + +Equality operators can compare pointers to members of the same type. The pointers are equal if they point to the same member or if they are both **`nullptr`**. Otherwise, they are not equal. For examle + +```cpp + +``` ## See also From 4c0ac6707cb0a7fb581a67e740746e596f4806b2 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 7 Aug 2024 15:43:25 -0700 Subject: [PATCH 0323/1239] clarify example --- docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 192eb3959d..faa25f0b65 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -51,7 +51,11 @@ int main() std::cout << "Not equal\n"; } - if (x not_eq z) // demonstrates the alternative spelling + // The alternative spelling is available in C++ and C + // This example is for C++, so no header file is needed to use the alternative spelling + // When compiling for C, #include to use the alternative spelling because + // C doesn't treat it as a keyword like C++ does. + if (x not_eq z) { std::cout << "Not equal\n"; } From 5b7695dc43fd3dcf8be7f551cebf46b3dbdba74e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 09:57:45 -0700 Subject: [PATCH 0324/1239] updates --- docs/c-runtime-library/reference/not-eq.md | 15 +++++++++++---- ...lity-operators-equal-equal-and-exclpt-equal.md | 5 +++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/docs/c-runtime-library/reference/not-eq.md b/docs/c-runtime-library/reference/not-eq.md index e89211cb5c..47b76e07f5 100644 --- a/docs/c-runtime-library/reference/not-eq.md +++ b/docs/c-runtime-library/reference/not-eq.md @@ -1,13 +1,12 @@ --- description: "Learn more about: not_eq" title: "not_eq" -ms.date: "11/04/2016" +ms.date: "8/7/2024" api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["ISO646/not_eq", "not_eq", "std::not_eq", "std.not_eq"] helpviewer_keywords: ["not_eq function"] -ms.assetid: d87ad299-8b50-4393-a57f-06f70e1f23fb --- # `not_eq` @@ -21,12 +20,20 @@ An alternative to the **`!=`** operator. ## Remarks +C++: +- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. +- There's no alternative spelling for **`==`**. +- Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. + +C: +- **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. +- The alternative spelling isn't treated as a keyword. +- There's no alternative spelling for **`==`**. The macro yields the operator **`!=`**. ## Example ```cpp -// iso646_not_eq.cpp // compile with: /EHsc #include #include @@ -51,4 +58,4 @@ a is not equal to b ## Requirements -**Header:** \ +**Header:** `` Only necessary if you are compiling for C. In C++, the alternative spelling is treated as a keyword. diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index faa25f0b65..34f9dd13a0 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -20,10 +20,10 @@ The equal-to operator (**`==`**) returns **`true`** if both operands have the sa The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ The alternative spelling `not_eq` returns **`true`** if the operands don't have the same value; otherwise **`false`**. -## Operator keyword for != +## `not_eq` keyword for `!=` C++: -- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. +- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. - There's no alternative spelling for **`==`**. - Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. @@ -76,6 +76,7 @@ Equality operators can compare pointers to members of the same type. The pointer ## See also +[not_eq](/cpp/c-runtime-library/reference/not-eq)\ [Expressions with binary operators](../cpp/expressions-with-binary-operators.md)\ [C++ built-in operators, precedence; and associativity](../cpp/cpp-built-in-operators-precedence-and-associativity.md)\ [C relational and equality operators](../c-language/c-relational-and-equality-operators.md) From 68228b58b54042d3381e65b5359a3ee792cfdfb4 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 10:05:02 -0700 Subject: [PATCH 0325/1239] remove equality topic, fix link --- ...-operators-equal-equal-and-exclpt-equal.md | 60 +++++++------------ ...t-s-new-for-visual-cpp-in-visual-studio.md | 4 +- 2 files changed, 23 insertions(+), 41 deletions(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 192eb3959d..cce78daff4 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -1,7 +1,7 @@ --- title: "Equality operators: == and !=" description: "The C++ standard language equal-to and not-equal-to operator syntax and use." -ms.date: 8/2/2024 +ms.date: 07/26/2024 f1_keywords: ["!=", "==", "not_eq_cpp"] helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparison operator", "equality operator [C++], syntax", "== operator", "not_eq operator", "equal to operator"] --- @@ -14,61 +14,43 @@ helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparis ## Remarks -The binary equality operators compare their operands for strict equality or inequality. If you are looking for information about overloading these operators instead, see [Operator overloading](../cpp/overloading.md). +The binary equality operators compare their operands for strict equality or inequality. -The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise **`false`**.\ -The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ -The alternative spelling `not_eq` returns **`true`** if the operands don't have the same value; otherwise **`false`**. +The equality operators, equal to (**`==`**) and not equal to (**`!=`**), have lower precedence than the relational operators, but they behave similarly. The result type for these operators is **`bool`**. + +The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise, it returns **`false`**. The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise, it returns **`false`**. ## Operator keyword for != C++: -- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. +- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. +- The alternative spelling is treated as a keyword. - There's no alternative spelling for **`==`**. -- Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. +- Use of `` or `` is deprecated. C: -- **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. -- The alternative spelling isn't treated as a keyword. -- There's no alternative spelling for **`==`**. +- The alternative spelling is provided as a macro in the `` header. +- The laternative spelling isn't treated as a keyword. ## Example ```cpp +// expre_Equality_Operators.cpp +// compile with: /EHsc #include -int main() -{ - int x = 1, y = 1, z = 2; - - if (x == y) - { - std::cout << "Equal\n"; - } - - if (x != z) - { - std::cout << "Not equal\n"; - } - - if (x not_eq z) // demonstrates the alternative spelling - { - std::cout << "Not equal\n"; - } -} -``` +using namespace std; -```output -Equal -Not equal -Not equal +int main() { + cout << boolalpha + << "The true expression 3 != 2 yields: " + << (3 != 2) << endl + << "The false expression 20 == 10 yields: " + << (20 == 10) << endl; +} ``` -Equality operators can compare pointers to members of the same type. The pointers are equal if they point to the same member or if they are both **`nullptr`**. Otherwise, they are not equal. For examle - -```cpp - -``` +Equality operators can compare pointers to members of the same type. In such a comparison, pointer-to-member conversions are performed. Pointers to members can also be compared to a constant expression that evaluates to 0. ## See also diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index b4fa7d5a1b..27ca2391b3 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -42,11 +42,11 @@ A partial list of new features: - Copilot - When you hover over symbols in the code editor, click the Copilot **Tell me more** button in the Quick Info dialog to learn more about a given symbol: - :::image type="complex" source="media/github-copilot-quick-info.png" alt-text="A screenshot of the Quick Info window."::: + :::image type="complex" source="./media/github-copilot-quick-info.png" alt-text="A screenshot of the Quick Info window."::: The Quick Info window is shown above a function. The Tell me more link is highlighted. :::image-end::: - GitHub Copilot can generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is being used and the style of your code. - :::image type="complex" source="media/copilot-rename.png" alt-text="A screenshot of the GitHub Copilot Rename dialog"::: + :::image type="complex" source="./media/copilot-rename.png" alt-text="A screenshot of the GitHub Copilot Rename dialog"::: The Rename dialog has a New name field with a dropdown list that shows these choices: text_color,font_color, display_color, console_color, and menu_text_color. :::image-end::: You need an active [GitHub Copilot subscription](https://visualstudio.microsoft.com/github-copilot/). Right-click the variable you wish to rename, and choose **Rename** (`Ctrl+R`, `Ctrl+R`). Select the GitHub Copilot sparkle icon to generate naming suggestions. From 30decadb5ce6271da168a5f1f11b157c06e38be6 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 10:17:42 -0700 Subject: [PATCH 0326/1239] reverting changes to equality-operators-equal-equal-and-exclpt-equal.md --- ...uality-operators-equal-equal-and-exclpt-equal.md | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index cce78daff4..0b19a7b204 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -1,9 +1,10 @@ --- title: "Equality operators: == and !=" description: "The C++ standard language equal-to and not-equal-to operator syntax and use." -ms.date: 07/26/2024 +ms.date: 07/23/2020 f1_keywords: ["!=", "==", "not_eq_cpp"] helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparison operator", "equality operator [C++], syntax", "== operator", "not_eq operator", "equal to operator"] +ms.assetid: ba4e9659-2392-4fb4-be5a-910a2a6df45a --- # Equality operators: `==` and `!=` @@ -22,15 +23,7 @@ The equal-to operator (**`==`**) returns **`true`** if both operands have the sa ## Operator keyword for != -C++: -- **`not_eq`** is an alternative spelling for **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. -- The alternative spelling is treated as a keyword. -- There's no alternative spelling for **`==`**. -- Use of `` or `` is deprecated. - -C: -- The alternative spelling is provided as a macro in the `` header. -- The laternative spelling isn't treated as a keyword. +C++ specifies **`not_eq`** as an alternative spelling for **`!=`**. (There's no alternative spelling for **`==`**.) In C, the alternative spelling is provided as a macro in the \ header. In C++, the alternative spelling is a keyword; use of \ or the C++ equivalent \ is deprecated. In Microsoft C++, the [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to enable the alternative spelling. ## Example From 6f105a992d4e25e876727cf09db871bb6a11e520 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 14:40:50 -0700 Subject: [PATCH 0327/1239] draft --- docs/c-runtime-library/reference/not-eq.md | 32 +++++++++++-------- ...-operators-equal-equal-and-exclpt-equal.md | 26 ++------------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/docs/c-runtime-library/reference/not-eq.md b/docs/c-runtime-library/reference/not-eq.md index 47b76e07f5..5a6184320c 100644 --- a/docs/c-runtime-library/reference/not-eq.md +++ b/docs/c-runtime-library/reference/not-eq.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["not_eq function"] --- # `not_eq` -An alternative to the **`!=`** operator. +An alternative spelling for the **`!=`** operator. ## Syntax @@ -23,13 +23,12 @@ An alternative to the **`!=`** operator. C++: - **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. - There's no alternative spelling for **`==`**. -- Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. +- Including `` or `` is deprecated. Use the alternative spelling directly. C: - **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. - The alternative spelling isn't treated as a keyword. - There's no alternative spelling for **`==`**. -The macro yields the operator **`!=`**. ## Example @@ -40,22 +39,27 @@ The macro yields the operator **`!=`**. int main( ) { - using namespace std; - int a = 0, b = 1; - - if (a != b) - cout << "a is not equal to b" << endl; - - if (a not_eq b) - cout << "a is not equal to b" << endl; + int x = 1, y = 2; + + // The alternative spelling is available in C++ and C + // This example is for C++, so no header file is needed to use the alternative spelling + // When compiling for C, #include to use the alternative spelling + if (x not_eq y) + { + std::cout << "Not equal\n"; + } } ``` ```Output -a is not equal to b -a is not equal to b +Not equal ``` ## Requirements -**Header:** `` Only necessary if you are compiling for C. In C++, the alternative spelling is treated as a keyword. +**Header:** `` is only necessary if you are compiling for C. In C++ the alternative spelling is recognized automatically. + +## See also + +[and_eq](/cpp/c-runtime-library/reference/and-eq?.md)\ +[or_eq](/cpp/c-runtime-library/reference/or-eq?.md)\ \ No newline at end of file diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 34f9dd13a0..129f339378 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -20,17 +20,7 @@ The equal-to operator (**`==`**) returns **`true`** if both operands have the sa The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ The alternative spelling `not_eq` returns **`true`** if the operands don't have the same value; otherwise **`false`**. -## `not_eq` keyword for `!=` - -C++: -- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. -- There's no alternative spelling for **`==`**. -- Including `` or `` to use the keyword is deprecated. Use the alternative spelling directly as it is now treated as a keyword. - -C: -- **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. -- The alternative spelling isn't treated as a keyword. -- There's no alternative spelling for **`==`**. +In C and C++, **`not_eq`** can be used as alternative to **`!=`**. For more information, see [`not-eq`](../c-runtime-library/reference/not-eq.md). ## Example @@ -50,25 +40,15 @@ int main() { std::cout << "Not equal\n"; } - - // The alternative spelling is available in C++ and C - // This example is for C++, so no header file is needed to use the alternative spelling - // When compiling for C, #include to use the alternative spelling because - // C doesn't treat it as a keyword like C++ does. - if (x not_eq z) - { - std::cout << "Not equal\n"; - } } ``` ```output Equal Not equal -Not equal ``` -Equality operators can compare pointers to members of the same type. The pointers are equal if they point to the same member or if they are both **`nullptr`**. Otherwise, they are not equal. For examle +Equality operators can compare pointers to members of the same type. The pointers are equal if they point to the same member or if they are both **`nullptr`**. Otherwise, they are not equal. For example ```cpp @@ -76,7 +56,7 @@ Equality operators can compare pointers to members of the same type. The pointer ## See also -[not_eq](/cpp/c-runtime-library/reference/not-eq)\ +[`not-eq`](../c-runtime-library/reference/not-eq.md)\ [Expressions with binary operators](../cpp/expressions-with-binary-operators.md)\ [C++ built-in operators, precedence; and associativity](../cpp/cpp-built-in-operators-precedence-and-associativity.md)\ [C relational and equality operators](../c-language/c-relational-and-equality-operators.md) From 5de5d85da70cec826e8d66d63aa2201a81cf0a94 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 15:28:14 -0700 Subject: [PATCH 0328/1239] tech review --- docs/overview/cpp-conformance-improvements.md | 14 +++++++++++++- .../media/include-diagnostics-improved.png | Bin 0 -> 271607 bytes ...at-s-new-for-visual-cpp-in-visual-studio.md | 15 ++++++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 docs/overview/media/include-diagnostics-improved.png diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 36be06c35b..68fb36dcdb 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -1,7 +1,7 @@ --- title: "C++ conformance improvements in Visual Studio 2022" description: "Microsoft C++ in Visual Studio is improving standards conformance and fixing bugs regularly." -ms.date: 8/2/2024 +ms.date: 08/08/2024 ms.service: "visual-cpp" ms.subservice: "cpp-lang" --- @@ -21,6 +21,18 @@ Visual Studio 2022 version 17.11 has the following conformance improvements, bug For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes, and performance improvements, see [STL Changelog VS 2022 17.11](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711). +### Printing blank lines with `println` + +Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf) it is now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. +Before this change, to generate a blank line, you wrote: `println("");`. Now you simply write: `println();`. + +The following are the same: + +```cpp +void println(); is equivalent to println(stdout); +void println(FILE* stream); is equivalent to println(stream, "\n"); +``` + ### Implemented `range_formatter` Per [P2286R8](https://wg21.link/P2286R8), `range_formatter` is now implemented. This feature is available when compiling with `/std:c++23`. diff --git a/docs/overview/media/include-diagnostics-improved.png b/docs/overview/media/include-diagnostics-improved.png new file mode 100644 index 0000000000000000000000000000000000000000..326070a28e2e7592637f8613475b4648f6557b35 GIT binary patch literal 271607 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 z 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

muSv~Es29|jS2x-Ga*o1jC8ac) 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 **Configure Cache with CMake Debugging**. @@ -51,6 +55,15 @@ A partial list of new features: :::image-end::: You need an active [GitHub Copilot subscription](https://visualstudio.microsoft.com/github-copilot/). Right-click the variable you wish to rename, and choose **Rename** (`Ctrl+R`, `Ctrl+R`). Select the GitHub Copilot sparkle icon to generate naming suggestions. +- Debugging + - Conditional breakpoints in C++ are significantly faster. + +Beginning with version 17.11, our initial assessment finds that execution time is almost four times as fast, reducing execution time from 80 seconds to 21 seconds over 80,000 iterations. + +- Diagnostics improvements + - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. MSVC used to report: `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. Now it reports: `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` + - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. MSVC used to report: `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` Now it reports more details: `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` + ## What's new for C++ in Visual Studio version 17.10 *Released May 2024* From 42a119f4af8e4366f59aa96a627cafe3db018793 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 15:38:10 -0700 Subject: [PATCH 0329/1239] edits --- docs/overview/cpp-conformance-improvements.md | 13 ++++--------- .../what-s-new-for-visual-cpp-in-visual-studio.md | 15 ++++++++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 68fb36dcdb..59247679b6 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -23,19 +23,14 @@ For an in-depth summary of changes made to the Standard Template Library, includ ### Printing blank lines with `println` -Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf) it is now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. +Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf), it is now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. Before this change, to generate a blank line, you wrote: `println("");`. Now you simply write: `println();`. - -The following are the same: - -```cpp -void println(); is equivalent to println(stdout); -void println(FILE* stream); is equivalent to println(stream, "\n"); -``` +- `println();` is equivalent to `println(stdout);` +- `println(FILE* stream);` is equivalent to `println(stream, "\n");` ### Implemented `range_formatter` -Per [P2286R8](https://wg21.link/P2286R8), `range_formatter` is now implemented. This feature is available when compiling with `/std:c++23`. +Per [P2286R8](https://wg21.link/P2286R8), `range_formatter` is now implemented. This feature is available when compiling with `/std:c++latest`. ## Conformance improvements in Visual Studio 2022 version 17.10 diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 3c6d397ffd..c36b6a428e 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -30,14 +30,15 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a A partial list of new features: - Standard Library Enhancements: - - Advancements to our formatted output implementation include `std::range_formatter` and formatters for `std::pair` and `std::tuple`. Also added support for calling `std::println()` with no arguments, which prints a blank line as proposed in [P3142R0](https://wg21.link/P3142R0). - - Improved vectorization for several algorithms including `replace_copy()`, `replace_copy_if()`, `ranges::replace_copy`, `ranges::replace_copy_if`, `find_first_of()` and `ranges::find_first_of` for 8-bit and 16-bit elements, `mismatch()`, `ranges::mismatch`, `count()` `ranges::count`, `find()`, `ranges::find`, `ranges::find_last`, and `ranges::iota`. + - Formatted output implementation now includes `std::range_formatter` and formatters for `std::pair` and `std::tuple`. + - Added support for `std::println()` with no arguments, which prints a blank line as proposed in [P3142R0](https://wg21.link/P3142R0). + - Improved vectorization for several algorithms including `replace_copy()`, `replace_copy_if()`, `ranges::replace_copy`, `ranges::replace_copy_if`, `find_first_of()` and `ranges::find_first_of`, for 8-bit and 16-bit elements, `mismatch()`, `ranges::mismatch`, `count()` `ranges::count`, `find()`, `ranges::find`, `ranges::find_last`, and `ranges::iota`. - Game development in C++ - Unreal Engine: You can now add common Unreal Engine class templates, modules, and plugins from within Visual Studio. For more information, see [Add Unreal Engine classes, modules, and plugins in Visual Studio](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-add-class-module-plugin). - The new Unreal Engine toolbar provides quick access to Unreal Engine related actions from within Visual Studio. The toolbar is available when you have an Unreal Engine project loaded in Visual Studio. The toolbar allows you to quickly attach to Unreal Engine processes, rescan the Blueprints cache, quickly access the Unreal Engine Log, and provides quick access to the Unreal Engine Configuration Page for Visual Studio. For more information, see [Unreal Engine Toolbar](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart#unreal-engine-toolbar). - You can now filter trace results by project. Results in each row now show the relative path and file name instead of the full path. Results grouping in the Included Files view is also improved: - :::image type="complex" source="./media/include-diagnostics-improved" alt-text="A screenshot of the improved Included Files diagnostics results."::: + :::image type="complex" source="./media/include-diagnostics-improved.png" alt-text="A screenshot of the improved Included Files diagnostics results."::: The Included Files view has a new column for the project. The Project column is selected and projects such as (Select All), CompilerIdC, OpenAL, common, and so on are selected. The included files are listed by relative path and file name and grouped together. :::image-end::: @@ -61,8 +62,12 @@ A partial list of new features: Beginning with version 17.11, our initial assessment finds that execution time is almost four times as fast, reducing execution time from 80 seconds to 21 seconds over 80,000 iterations. - Diagnostics improvements - - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. MSVC used to report: `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. Now it reports: `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` - - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. MSVC used to report: `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` Now it reports more details: `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` + - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. + - MSVC used to report: `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. + - Now it reports: `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` + - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. + - MSVC used to report: `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` + - Now it reports: `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` ## What's new for C++ in Visual Studio version 17.10 From df817ab4a9a0dba2956435fec5a364daffa8bc87 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 15:46:10 -0700 Subject: [PATCH 0330/1239] formatting --- docs/overview/cpp-conformance-improvements.md | 2 +- ...t-s-new-for-visual-cpp-in-visual-studio.md | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 59247679b6..1103985996 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -24,7 +24,7 @@ For an in-depth summary of changes made to the Standard Template Library, includ ### Printing blank lines with `println` Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf), it is now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. -Before this change, to generate a blank line, you wrote: `println("");`. Now you simply write: `println();`. +Before this change, you wrote: `println("");`. Now you simply write: `println();`. - `println();` is equivalent to `println(stdout);` - `println(FILE* stream);` is equivalent to `println(stream, "\n");` diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index c36b6a428e..6597a3a7c2 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -31,7 +31,7 @@ A partial list of new features: - Standard Library Enhancements: - Formatted output implementation now includes `std::range_formatter` and formatters for `std::pair` and `std::tuple`. - - Added support for `std::println()` with no arguments, which prints a blank line as proposed in [P3142R0](https://wg21.link/P3142R0). + - Added support for `std::println()` with no arguments. This prints a blank line as proposed in [P3142R0](https://wg21.link/P3142R0). - Improved vectorization for several algorithms including `replace_copy()`, `replace_copy_if()`, `ranges::replace_copy`, `ranges::replace_copy_if`, `find_first_of()` and `ranges::find_first_of`, for 8-bit and 16-bit elements, `mismatch()`, `ranges::mismatch`, `count()` `ranges::count`, `find()`, `ranges::find`, `ranges::find_last`, and `ranges::iota`. - Game development in C++ @@ -57,17 +57,17 @@ A partial list of new features: You need an active [GitHub Copilot subscription](https://visualstudio.microsoft.com/github-copilot/). Right-click the variable you wish to rename, and choose **Rename** (`Ctrl+R`, `Ctrl+R`). Select the GitHub Copilot sparkle icon to generate naming suggestions. - Debugging - - Conditional breakpoints in C++ are significantly faster. - -Beginning with version 17.11, our initial assessment finds that execution time is almost four times as fast, reducing execution time from 80 seconds to 21 seconds over 80,000 iterations. + - Conditional breakpoints in C++ are significantly faster. - Diagnostics improvements - - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. - - MSVC used to report: `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. - - Now it reports: `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` - - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. - - MSVC used to report: `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` - - Now it reports: `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` + - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. MSVC used to report: + `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. + - Now it reports: + `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` + - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. MSVC used to report: + `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` + - Now it reports: + `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` ## What's new for C++ in Visual Studio version 17.10 From 36745da616c194aecd675753f66cef65cb80ad99 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 16:05:11 -0700 Subject: [PATCH 0331/1239] formatting --- docs/overview/cpp-conformance-improvements.md | 4 ++-- ...t-s-new-for-visual-cpp-in-visual-studio.md | 20 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index 1103985996..e511178322 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -21,10 +21,10 @@ Visual Studio 2022 version 17.11 has the following conformance improvements, bug For an in-depth summary of changes made to the Standard Template Library, including conformance changes, bug fixes, and performance improvements, see [STL Changelog VS 2022 17.11](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711). -### Printing blank lines with `println` +### Print blank lines with `println` Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf), it is now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. -Before this change, you wrote: `println("");`. Now you simply write: `println();`. +Before this change, you wrote: `println("");` Now you simply write: `println();`. - `println();` is equivalent to `println(stdout);` - `println(FILE* stream);` is equivalent to `println(stream, "\n");` diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 6597a3a7c2..ffc2796f39 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -30,14 +30,14 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a A partial list of new features: - Standard Library Enhancements: - - Formatted output implementation now includes `std::range_formatter` and formatters for `std::pair` and `std::tuple`. + - The formatted output implementation now includes `std::range_formatter` and formatters for `std::pair` and `std::tuple`. - Added support for `std::println()` with no arguments. This prints a blank line as proposed in [P3142R0](https://wg21.link/P3142R0). - Improved vectorization for several algorithms including `replace_copy()`, `replace_copy_if()`, `ranges::replace_copy`, `ranges::replace_copy_if`, `find_first_of()` and `ranges::find_first_of`, for 8-bit and 16-bit elements, `mismatch()`, `ranges::mismatch`, `count()` `ranges::count`, `find()`, `ranges::find`, `ranges::find_last`, and `ranges::iota`. - Game development in C++ - Unreal Engine: You can now add common Unreal Engine class templates, modules, and plugins from within Visual Studio. For more information, see [Add Unreal Engine classes, modules, and plugins in Visual Studio](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-add-class-module-plugin). - The new Unreal Engine toolbar provides quick access to Unreal Engine related actions from within Visual Studio. The toolbar is available when you have an Unreal Engine project loaded in Visual Studio. The toolbar allows you to quickly attach to Unreal Engine processes, rescan the Blueprints cache, quickly access the Unreal Engine Log, and provides quick access to the Unreal Engine Configuration Page for Visual Studio. For more information, see [Unreal Engine Toolbar](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart#unreal-engine-toolbar). - - You can now filter trace results by project. Results in each row now show the relative path and file name instead of the full path. Results grouping in the Included Files view is also improved: + - You can now filter trace results by project. Also, results in each row now show the relative path and file name instead of the full path. Results grouping in the **Included Files** view is also improved: :::image type="complex" source="./media/include-diagnostics-improved.png" alt-text="A screenshot of the improved Included Files diagnostics results."::: The Included Files view has a new column for the project. The Project column is selected and projects such as (Select All), CompilerIdC, OpenAL, common, and so on are selected. The included files are listed by relative path and file name and grouped together. :::image-end::: @@ -60,13 +60,15 @@ A partial list of new features: - Conditional breakpoints in C++ are significantly faster. - Diagnostics improvements - - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. MSVC used to report: - `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. - - Now it reports: - `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` - - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. MSVC used to report: - `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` - - Now it reports: + - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. + MSVC used to report: + `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. + Now it reports: + `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` + - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. + MSVC used to report: + `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` + Now it reports: `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` ## What's new for C++ in Visual Studio version 17.10 From 35282139a95b4d9fe4bc133301b319fbc9b15cf3 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 16:13:50 -0700 Subject: [PATCH 0332/1239] acrolinx --- docs/overview/cpp-conformance-improvements.md | 4 +-- ...t-s-new-for-visual-cpp-in-visual-studio.md | 26 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/overview/cpp-conformance-improvements.md b/docs/overview/cpp-conformance-improvements.md index e511178322..d600fe9755 100644 --- a/docs/overview/cpp-conformance-improvements.md +++ b/docs/overview/cpp-conformance-improvements.md @@ -23,8 +23,8 @@ For an in-depth summary of changes made to the Standard Template Library, includ ### Print blank lines with `println` -Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf), it is now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. -Before this change, you wrote: `println("");` Now you simply write: `println();`. +Per [P3142R0](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf), it's now easy to generate a blank line with `println`. This feature is available when compiling with `/std:c++latest`. +Before this change, you wrote: `println("");` Now you write: `println();`. - `println();` is equivalent to `println(stdout);` - `println(FILE* stream);` is equivalent to `println(stream, "\n");` diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index ffc2796f39..48ba10e9c6 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -39,7 +39,7 @@ A partial list of new features: - The new Unreal Engine toolbar provides quick access to Unreal Engine related actions from within Visual Studio. The toolbar is available when you have an Unreal Engine project loaded in Visual Studio. The toolbar allows you to quickly attach to Unreal Engine processes, rescan the Blueprints cache, quickly access the Unreal Engine Log, and provides quick access to the Unreal Engine Configuration Page for Visual Studio. For more information, see [Unreal Engine Toolbar](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart#unreal-engine-toolbar). - You can now filter trace results by project. Also, results in each row now show the relative path and file name instead of the full path. Results grouping in the **Included Files** view is also improved: :::image type="complex" source="./media/include-diagnostics-improved.png" alt-text="A screenshot of the improved Included Files diagnostics results."::: - The Included Files view has a new column for the project. The Project column is selected and projects such as (Select All), CompilerIdC, OpenAL, common, and so on are selected. The included files are listed by relative path and file name and grouped together. + The Included Files view has a new column for the project. The Project column is selected and projects such as (Select All), CompilerIdC, OpenAL, common, and so on, are selected. The included files are listed by relative path and file name and grouped together. :::image-end::: - CMake debugging @@ -50,9 +50,9 @@ A partial list of new features: :::image type="complex" source="./media/github-copilot-quick-info.png" alt-text="A screenshot of the Quick Info window."::: The Quick Info window is shown above a function. The Tell me more link is highlighted. :::image-end::: - - GitHub Copilot can generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is being used and the style of your code. + - GitHub Copilot can generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is used and the style of your code. :::image type="complex" source="./media/copilot-rename.png" alt-text="A screenshot of the GitHub Copilot Rename dialog"::: - The Rename dialog has a New name field with a dropdown list that shows these choices: text_color,font_color, display_color, console_color, and menu_text_color. + The Rename dialog has a New name field with a dropdown list that shows these choices: text_color, font_color, display_color, console_color, and menu_text_color. :::image-end::: You need an active [GitHub Copilot subscription](https://visualstudio.microsoft.com/github-copilot/). Right-click the variable you wish to rename, and choose **Rename** (`Ctrl+R`, `Ctrl+R`). Select the GitHub Copilot sparkle icon to generate naming suggestions. @@ -77,7 +77,7 @@ A partial list of new features: | For more information about | See | |---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | +| What's new for C++ developers | [What's new for C++ Developers in Visual Studio 2022 17.10](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-10/) | | Standard Library (STL) merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.10](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) | | New features in the Visual Studio 17.10 IDE |[Visual Studio 2022 version 17.10 Release Notes](/visualstudio/releases/2022/release-notes) | | C++ language conformance improvements in Visual Studio 2022 17.10 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.10](cpp-conformance-improvements.md#improvements_1710) | @@ -85,7 +85,7 @@ A partial list of new features: A partial list of new features: - **MSVC Toolset Update**: The MSVC toolset version is updated from 19.39 to 19.40. This may affect projects that have version assumptions. For more information about some ways in which this will affect projects that assume that MSVC versions are all 19.3X for Visual Studio 2022 releases, see [MSVC Toolset Minor Version Number 14.40 in VS 2022 v17.10](https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/). -- **Standard Library Enhancements**: The standard library added support for [P2510R3 Formatting Pointers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf) which brings the set of format specifiers for pointers when using `std::format` more in line with those that already exist for integers. Improved the vectorized implementations of `std::min_element`, `std::ranges::min`, and friends. +- **Standard Library Enhancements**: The standard library added support for [P2510R3 Formatting Pointers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf), which brings the set of format specifiers for pointers when using `std::format` more in line with those that already exist for integers. Improved the vectorized implementations of `std::min_element`, `std::ranges::min`, and friends. - **Build Insights**: Now provides template instantiation information. See [Templates View for Build Insights in Visual Studio](https://devblogs.microsoft.com/cppblog/templates-view-for-build-insights-in-visual-studio-2/) or the [Pure Virtual C++ - Templates view for Build Insights in Visual Studio](https://youtu.be/68pOEQ5YA5s) recording. - **Unreal Engine Plugin**: There's a new opt-in feature for the Unreal Engine Plugin to run in the background, reducing startup costs. This is an opt-in feature that is activated via **Tools** > **Options** > **Unreal Engine**. - **New features for Linux**: See [New Linux Development Features in Visual Studio](https://youtu.be/jZTMRvm8AwY). @@ -93,13 +93,13 @@ A partial list of new features: - **Connection Manager UX**: The user experience provides a more seamless experience when connecting to remote systems. For more information, see [Usability Improvements in the Visual Studio Connection Manager](https://devblogs.microsoft.com/cppblog/usability-improvements-in-the-visual-studio-connection-manager/). - **Pull request comments**: You can now view GitHub and Azure DevOps comments directly in your working file. Enable the feature flag, **Pull Request Comments** in **Options** > **Environment** > **Preview Features** and checkout the pull request branch to get started. - **AI-Generated Content**: GitHub Copilot can now draft pull request descriptions. Requires an active GitHub Copilot subscription. Try it out by clicking the **Add AI Generated Pull Request Description** sparkle pen icon within the **Create a Pull Request** window. -- **Image Preview**: Hover over an image path to see a preview with size details. The size is capped to 500px wide and high. +- **Image Preview**: Hover over an image path to see a preview with size details. The size is capped to 500 px wide and high. :::image type="complex" source="media/hover-preview.png" alt-text="Screenshot of hover preview."::: - The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it is 251 x 500 pixels and 13.65 KB in size. + The mouse is hovering over the line std::filesystem::path vs_logo_path = "../images/vs_logo.png". Underneath appears a preview of the Visual Studio logo and the information that it's 251 x 500 pixels and 13.65 KB in size. :::image-end::: - **Breakpoint/Tracepoint Creation**: You can now create conditional breakpoints or tracepoints directly from expressions in the source code from the right-click menu. This works on property or field names and values from autos, locals, watch windows, or DataTips. - **Attach to Process Dialog**: The functionality provided by the Attach to Process dialog is more user-friendly. You can now easily switch between tree and list views, organize processes better with collapsible sections, and select code types with a simplified combobox. Also, the "Select/Track Window" feature is now easier to use, allowing two-way tracking: selecting a process highlights its window, and clicking on a window selects its process. -- **GitHub Copilot Integration**: We have unified the GitHub Copilot and Copilot Chat extensions and now ship them directly in Visual Studio. To install it, install the **GitHub Copilot** component in the **Visual Studio Installer**: +- **GitHub Copilot Integration**: GitHub Copilot and Copilot Chat extensions are now unified and now ship directly in Visual Studio. To install it, install the **GitHub Copilot** component in the **Visual Studio Installer**: :::image type="complex" source="media/github-copilot-install-option.png" alt-text="Screenshot of the Visual Studio Installer GitHub Copilot installation option." lightbox="media/github-copilot-install-option-expanded.png"::: The Visual Studio installer is open to the Workloads tab. In the installation details pane, GitHub Copilot is shown as selected. :::image-end::: @@ -114,7 +114,7 @@ A partial list of new features: | For more information about | See | |---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | +| What's new for C++ developers | [What's new for C++ Developers in Visual Studio 2022 17.9](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-9/) | | Standard Library (STL) merged C++23 features, performance improvements, enhanced behavior, LWG issue resolutions, and fixed bugs | [STL Changelog 17.9](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-179) | | New features in the Visual Studio 17.9 IDE |[Visual Studio 2022 version 17.9 Release Notes](/visualstudio/releases/2022/release-notes-v17.9) | | C++ language conformance improvements in Visual Studio 2022 17.9 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_179) | @@ -124,7 +124,7 @@ A partial list of new features: - `#include` diagnostics, which provides a detailed analysis of your `#include` directives. Activate this feature by right-clicking an `#include` and choosing **#include directives** > **Turn #include directive diagnostics on**. Above each `#include` is the number of times your code references that `#include` file. Click the **reference** link to navigate to where your code uses something from that header file. To view the build time of your `#include` directives, run Build Insights by navigating to **Build** > **Run Build Insights on Solution** > **Build**. :::image type="complex" source="media/include-diagnostics.png" alt-text="Screenshot of #include diagnostics."::: - Above the # include is a **reference** link and a number of the references to this # include file (in this case 1). The build time is also listed (in this case less than 1/2 a second). + Above the # include is a **reference** link and many of the references to this # include file (in this case 1). The build time is also listed (in this case less than 1/2 a second). :::image-end::: - Memory layout visualization, which shows how memory is arranged for your classes, structs, and unions. Hover over a type and choose the **Memory Layout** link in the **Quick Info** to open a dedicated window displaying the memory layout of the selected type. Hovering over individual data types within this window provides detailed information about their size and offset within the type. :::image type="complex" source="media/memory-layout-window.png" alt-text="Screenshot of the memory layout window"::: @@ -147,7 +147,7 @@ A partial list of new features: | For more information about | See | |---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | +| What's new for C++ developers | [What's new for C++ Developers in Visual Studio 2022 17.8](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-8/) | | Standard Library (STL) merged C++26, C++23 features, C++20 extensions, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.8](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-178) | | New features in the Visual Studio 17.8 IDE |[Visual Studio 2022 version 17.8 Release Notes](/visualstudio/releases/2022/release-notes-v17.8) | | C++ language conformance improvements in Visual Studio 2022 17.8 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022](cpp-conformance-improvements.md#improvements_178) | @@ -172,7 +172,7 @@ A partial list of new features: | For more information about | See | |---|---| -| What's new for C++ developers | [What’s New for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/) | +| What's new for C++ developers | [What’s new for C++ Developers in Visual Studio 2022 17.7](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-7/) | | New C++ features specific to game development | [Unleashing the Power of Visual Studio 2022 for C++ Game Development](https://devblogs.microsoft.com/visualstudio/unleashing-the-power-of-visual-studio-2022-for-c-game-development/) | | Standard Library (STL) merged C++23 features, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.7](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) | | New features in the Visual Studio 17.7 IDE |[Visual Studio 2022 version 17.7 Release Notes](/visualstudio/releases/2022/release-notes-v17.7) | @@ -468,7 +468,7 @@ Release notes for older C++ versions are also available: - For information on what's new for C++ in Visual Studio 2019, see [What's new for C++ in Visual Studio 2019](what-s-new-for-cpp-2019.md). - For information on what's new for C++ in Visual Studio 2017, see [What's new for C++ in Visual Studio 2017](what-s-new-for-cpp-2017.md). -- For information on what's new in earlier versions, see [Visual C++ What's New 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). +- For information on what's new in earlier versions, see [Visual C++ What's new 2003 through 2015](../porting/visual-cpp-what-s-new-2003-through-2015.md). ## Known issues From e2cee1db863e1897c7ec987c560ef8f9d5617f95 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 16:21:25 -0700 Subject: [PATCH 0333/1239] formatting --- ...t-s-new-for-visual-cpp-in-visual-studio.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 48ba10e9c6..e2fe189eeb 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -35,9 +35,9 @@ A partial list of new features: - Improved vectorization for several algorithms including `replace_copy()`, `replace_copy_if()`, `ranges::replace_copy`, `ranges::replace_copy_if`, `find_first_of()` and `ranges::find_first_of`, for 8-bit and 16-bit elements, `mismatch()`, `ranges::mismatch`, `count()` `ranges::count`, `find()`, `ranges::find`, `ranges::find_last`, and `ranges::iota`. - Game development in C++ - - Unreal Engine: You can now add common Unreal Engine class templates, modules, and plugins from within Visual Studio. For more information, see [Add Unreal Engine classes, modules, and plugins in Visual Studio](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-add-class-module-plugin). - - The new Unreal Engine toolbar provides quick access to Unreal Engine related actions from within Visual Studio. The toolbar is available when you have an Unreal Engine project loaded in Visual Studio. The toolbar allows you to quickly attach to Unreal Engine processes, rescan the Blueprints cache, quickly access the Unreal Engine Log, and provides quick access to the Unreal Engine Configuration Page for Visual Studio. For more information, see [Unreal Engine Toolbar](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart#unreal-engine-toolbar). - - You can now filter trace results by project. Also, results in each row now show the relative path and file name instead of the full path. Results grouping in the **Included Files** view is also improved: + - You can now add common Unreal Engine class templates, modules, and plugins from within Visual Studio. For more information, see [Add Unreal Engine classes, modules, and plugins in Visual Studio](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-add-class-module-plugin). + - The new Unreal Engine toolbar provides quick access to Unreal Engine related actions from within Visual Studio. The toolbar allows you to quickly attach to Unreal Engine processes, rescan the Blueprints cache, quickly access the Unreal Engine Log, and provides quick access to the Unreal Engine Configuration Page for Visual Studio. For more information, see [Unreal Engine Toolbar](/visualstudio/gamedev/unreal/get-started/vs-tools-unreal-quickstart#unreal-engine-toolbar). + - You can now filter trace results by project. Also, results in each row show the relative path and file name instead of the full path. Results grouping in the **Included Files** view is also improved: :::image type="complex" source="./media/include-diagnostics-improved.png" alt-text="A screenshot of the improved Included Files diagnostics results."::: The Included Files view has a new column for the project. The Project column is selected and projects such as (Select All), CompilerIdC, OpenAL, common, and so on, are selected. The included files are listed by relative path and file name and grouped together. :::image-end::: @@ -60,15 +60,15 @@ A partial list of new features: - Conditional breakpoints in C++ are significantly faster. - Diagnostics improvements - - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. - MSVC used to report: - `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`. - Now it reports: - `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` - - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. - MSVC used to report: - `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'` - Now it reports: + - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments.\ + MSVC used to report:\ + `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`.\ + Now it reports:\ + `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'`\ + - Improved diagnostics when `std::ranges::to` is unable to construct the requested result.\ + MSVC used to report:\ + `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'`\ + Now it reports:\ `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` ## What's new for C++ in Visual Studio version 17.10 From 07cc5d64ab0e8ce60dbce36402d45368f1809fa7 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 16:27:42 -0700 Subject: [PATCH 0334/1239] formatting --- docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index e2fe189eeb..7646786a4e 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -60,13 +60,11 @@ A partial list of new features: - Conditional breakpoints in C++ are significantly faster. - Diagnostics improvements - - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments.\ - MSVC used to report:\ + - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. MSVC used to report:\ `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`.\ Now it reports:\ `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'`\ - - Improved diagnostics when `std::ranges::to` is unable to construct the requested result.\ - MSVC used to report:\ + - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. MSVC used to report:\ `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'`\ Now it reports:\ `error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'` From ec57b32d5b246b2beadbf41719785fe46e792964 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 8 Aug 2024 16:34:27 -0700 Subject: [PATCH 0335/1239] formatting --- docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 7646786a4e..139bdf8496 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -63,7 +63,7 @@ A partial list of new features: - Improved diagnostics when calling `std::get` on a `std::tuple` that has multiple instances of `T` in its template arguments. MSVC used to report:\ `error C2338: static_assert failed: 'duplicate type T in get(tuple)'`.\ Now it reports:\ - `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'`\ + `error C2338: static_assert failed: 'get(tuple&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'` - Improved diagnostics when `std::ranges::to` is unable to construct the requested result. MSVC used to report:\ `error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'`\ Now it reports:\ From 7322e25add93ddc02709f81f70d6d601ef8b15bc Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 10:43:34 -0700 Subject: [PATCH 0336/1239] edits --- docs/c-runtime-library/reference/not-eq.md | 19 +++++++++---------- ...-operators-equal-equal-and-exclpt-equal.md | 15 ++++----------- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/docs/c-runtime-library/reference/not-eq.md b/docs/c-runtime-library/reference/not-eq.md index 5a6184320c..7bee5b739d 100644 --- a/docs/c-runtime-library/reference/not-eq.md +++ b/docs/c-runtime-library/reference/not-eq.md @@ -1,7 +1,7 @@ --- description: "Learn more about: not_eq" title: "not_eq" -ms.date: "8/7/2024" +ms.date: 08/09/2024 api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] @@ -21,13 +21,12 @@ An alternative spelling for the **`!=`** operator. ## Remarks C++: -- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required to use the alternative spelling. +- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required. +- Including `` or `` is deprecated. You can use the alternative spelling without including any header files. - There's no alternative spelling for **`==`**. -- Including `` or `` is deprecated. Use the alternative spelling directly. C: - **`not_eq`** is an alternative spelling for **`!=`**. It is provided as a macro in ``, which you must `#include`. -- The alternative spelling isn't treated as a keyword. - There's no alternative spelling for **`==`**. ## Example @@ -41,9 +40,9 @@ int main( ) { int x = 1, y = 2; - // The alternative spelling is available in C++ and C - // This example is for C++, so no header file is needed to use the alternative spelling - // When compiling for C, #include to use the alternative spelling + // not_eq is available in C++ and C + // This example is for C++, so no header file is needed to use not_eq + // When compiling for C, #include to use not_eq if (x not_eq y) { std::cout << "Not equal\n"; @@ -57,9 +56,9 @@ Not equal ## Requirements -**Header:** `` is only necessary if you are compiling for C. In C++ the alternative spelling is recognized automatically. +**Header:** `` is necessary if you are compiling for C. ## See also -[and_eq](/cpp/c-runtime-library/reference/and-eq?.md)\ -[or_eq](/cpp/c-runtime-library/reference/or-eq?.md)\ \ No newline at end of file +[`and_eq`](/cpp/c-runtime-library/reference/and-eq?.md)\ +[`or_eq`](/cpp/c-runtime-library/reference/or-eq?.md)\ diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 129f339378..f8e13969a4 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -1,9 +1,9 @@ --- title: "Equality operators: == and !=" description: "The C++ standard language equal-to and not-equal-to operator syntax and use." -ms.date: 8/2/2024 -f1_keywords: ["!=", "==", "not_eq_cpp"] -helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparison operator", "equality operator [C++], syntax", "== operator", "not_eq operator", "equal to operator"] +ms.date: 08/09/2024 +f1_keywords: ["!=", "=="] +helpviewer_keywords: ["!= operator", "equality operator", "not equal to operator", "equality operator [C++], syntax", "== operator", "equal to operator"] --- # Equality operators: `==` and `!=` @@ -14,11 +14,10 @@ helpviewer_keywords: ["!= operator", "equality operator", "not equal to comparis ## Remarks -The binary equality operators compare their operands for strict equality or inequality. If you are looking for information about overloading these operators instead, see [Operator overloading](../cpp/overloading.md). +The equality operators compare their operands for strict equality or inequality. If you are looking for information about overloading these operators, see [Operator overloading](../cpp/overloading.md). The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise **`false`**.\ The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ -The alternative spelling `not_eq` returns **`true`** if the operands don't have the same value; otherwise **`false`**. In C and C++, **`not_eq`** can be used as alternative to **`!=`**. For more information, see [`not-eq`](../c-runtime-library/reference/not-eq.md). @@ -48,12 +47,6 @@ Equal Not equal ``` -Equality operators can compare pointers to members of the same type. The pointers are equal if they point to the same member or if they are both **`nullptr`**. Otherwise, they are not equal. For example - -```cpp - -``` - ## See also [`not-eq`](../c-runtime-library/reference/not-eq.md)\ From 5a6a6c8f103d5da7978ed5c23dd922bf401307ae Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 11:20:23 -0700 Subject: [PATCH 0337/1239] edits --- docs/c-runtime-library/reference/not-eq.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/c-runtime-library/reference/not-eq.md b/docs/c-runtime-library/reference/not-eq.md index 7bee5b739d..805648d998 100644 --- a/docs/c-runtime-library/reference/not-eq.md +++ b/docs/c-runtime-library/reference/not-eq.md @@ -56,9 +56,4 @@ Not equal ## Requirements -**Header:** `` is necessary if you are compiling for C. - -## See also - -[`and_eq`](/cpp/c-runtime-library/reference/and-eq?.md)\ -[`or_eq`](/cpp/c-runtime-library/reference/or-eq?.md)\ +**Header:** `` is necessary if you are compiling for C. \ No newline at end of file From 1138b1e3b526e736d57e0b6f14584b0dc5afbe98 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 11:30:58 -0700 Subject: [PATCH 0338/1239] edits --- docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index f8e13969a4..0a6b7fe1d6 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -14,8 +14,6 @@ helpviewer_keywords: ["!= operator", "equality operator", "not equal to operator ## Remarks -The equality operators compare their operands for strict equality or inequality. If you are looking for information about overloading these operators, see [Operator overloading](../cpp/overloading.md). - The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise **`false`**.\ The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ @@ -50,6 +48,7 @@ Not equal ## See also [`not-eq`](../c-runtime-library/reference/not-eq.md)\ +[Operator overloading](../cpp/operator-overloading.md)\ [Expressions with binary operators](../cpp/expressions-with-binary-operators.md)\ [C++ built-in operators, precedence; and associativity](../cpp/cpp-built-in-operators-precedence-and-associativity.md)\ [C relational and equality operators](../c-language/c-relational-and-equality-operators.md) From 43185b67579e7f1c3c378d7406104268395f60d4 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 13:27:25 -0700 Subject: [PATCH 0339/1239] acrolinx --- docs/c-runtime-library/reference/not-eq.md | 2 +- docs/mfc/reference/cdaodatabase-class.md | 66 ++-- docs/mfc/reference/cdaoexception-class.md | 27 +- .../reference/cdaoparameterinfo-structure.md | 2 +- docs/mfc/reference/cdaoquerydef-class.md | 84 ++--- .../reference/cdaoquerydefinfo-structure.md | 30 +- docs/mfc/reference/cdaorecordset-class.md | 304 +++++++++--------- 7 files changed, 257 insertions(+), 258 deletions(-) diff --git a/docs/c-runtime-library/reference/not-eq.md b/docs/c-runtime-library/reference/not-eq.md index 805648d998..90877cd219 100644 --- a/docs/c-runtime-library/reference/not-eq.md +++ b/docs/c-runtime-library/reference/not-eq.md @@ -21,7 +21,7 @@ An alternative spelling for the **`!=`** operator. ## Remarks C++: -- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../build/reference/permissive-standards-conformance.md) or [`/Za`](../build/reference/za-ze-disable-language-extensions.md) compiler option is required. +- **`not_eq`** can be used as alternative to **`!=`**. The [`/permissive-`](../../build/reference/permissive-standards-conformance.md) or [`/Za`](../../build/reference/za-ze-disable-language-extensions.md) compiler option is required. - Including `` or `` is deprecated. You can use the alternative spelling without including any header files. - There's no alternative spelling for **`==`**. diff --git a/docs/mfc/reference/cdaodatabase-class.md b/docs/mfc/reference/cdaodatabase-class.md index fa713d62f6..579a4d3ed1 100644 --- a/docs/mfc/reference/cdaodatabase-class.md +++ b/docs/mfc/reference/cdaodatabase-class.md @@ -43,7 +43,7 @@ class CDaoDatabase : public CObject |[CDaoDatabase::GetName](#getname)|Returns the name of the database currently in use.| |[CDaoDatabase::GetQueryDefCount](#getquerydefcount)|Returns the number of queries defined for the database.| |[CDaoDatabase::GetQueryDefInfo](#getquerydefinfo)|Returns information about a specified query defined in the database.| -|[CDaoDatabase::GetQueryTimeout](#getquerytimeout)|Returns the number of seconds after which database query operations will time out. Affects all subsequent open, add new, update, and edit operations and other operations on ODBC data sources (only) such as `Execute` calls.| +|[CDaoDatabase::GetQueryTimeout](#getquerytimeout)|Returns the number of seconds after which database query operations time out. Affects all subsequent open, add new, update, and edit operations and other operations on ODBC data sources (only) such as `Execute` calls.| |[CDaoDatabase::GetRecordsAffected](#getrecordsaffected)|Returns the number of records affected by the last update, edit, or add operation or by a call to `Execute`.| |[CDaoDatabase::GetRelationCount](#getrelationcount)|Returns the number of relations defined between tables in the database.| |[CDaoDatabase::GetRelationInfo](#getrelationinfo)|Returns information about a specified relation defined between tables in the database.| @@ -52,7 +52,7 @@ class CDaoDatabase : public CObject |[CDaoDatabase::GetVersion](#getversion)|Returns the version of the database engine associated with the database.| |[CDaoDatabase::IsOpen](#isopen)|Returns nonzero if the `CDaoDatabase` object is currently connected to a database.| |[CDaoDatabase::Open](#open)|Establishes a connection to a database.| -|[CDaoDatabase::SetQueryTimeout](#setquerytimeout)|Sets the number of seconds after which database query operations (on ODBC data sources only) will time out. Affects all subsequent open, add new, update, and delete operations.| +|[CDaoDatabase::SetQueryTimeout](#setquerytimeout)|Sets the number of seconds after which database query operations (on ODBC data sources only) time out. Affects all subsequent open, add new, update, and delete operations.| ### Public Data Members @@ -77,15 +77,15 @@ To create a new Microsoft Jet (.MDB) database, construct a `CDaoDatabase` object To open an existing database, construct a `CDaoDatabase` object and call its [Open](#open) member function. -Any of these techniques appends the DAO database object to the workspace's Databases collection and opens a connection to the data. When you then construct [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md), [CDaoTableDef](../../mfc/reference/cdaotabledef-class.md), or [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md) objects for operating on the connected database, pass the constructors for these objects a pointer to your `CDaoDatabase` object. When you finish using the connection, call the [Close](#close) member function and destroy the `CDaoDatabase` object. `Close` closes any recordsets you have not closed previously. +Any of these techniques appends the DAO database object to the workspace's Databases collection and opens a connection to the data. When you then construct [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md), [CDaoTableDef](../../mfc/reference/cdaotabledef-class.md), or [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md) objects for operating on the connected database, pass the constructors for these objects a pointer to your `CDaoDatabase` object. When you finish using the connection, call the [Close](#close) member function and destroy the `CDaoDatabase` object. `Close` closes any recordsets you have not already closed. ## Transactions -Database transaction processing is supplied at the workspace level — see the [BeginTrans](../../mfc/reference/cdaoworkspace-class.md#begintrans), [CommitTrans](../../mfc/reference/cdaoworkspace-class.md#committrans), and [Rollback](../../mfc/reference/cdaoworkspace-class.md#rollback) member functions of class `CDaoWorkspace`. +Database transaction processing is supplied at the workspace level—see the [BeginTrans](../../mfc/reference/cdaoworkspace-class.md#begintrans), [CommitTrans](../../mfc/reference/cdaoworkspace-class.md#committrans), and [Rollback](../../mfc/reference/cdaoworkspace-class.md#rollback) member functions of class `CDaoWorkspace`. ## ODBC Connections -The recommended way to work with ODBC data sources is to attach external tables to a Microsoft Jet (.MDB) database. +The recommended way to work with Open Database Base Connectivity (ODBC) data sources is to attach external tables to a Microsoft Jet (`.MDB`) database. ## Collections @@ -96,7 +96,7 @@ Each database maintains its own collections of tabledef, querydef, recordset, an ## Inheritance Hierarchy -[CObject](../../mfc/reference/cobject-class.md) +[`CObject`](../../mfc/reference/cobject-class.md) `CDaoDatabase` @@ -170,15 +170,15 @@ virtual void Close(); ### Remarks -It is good practice to close these objects yourself before you call this member function. Closing a `CDaoDatabase` object removes it from the Databases collection in the associated [workspace](../../mfc/reference/cdaoworkspace-class.md). Because `Close` does not destroy the `CDaoDatabase` object, you can reuse the object by opening the same database or a different database. +It's good practice to close these objects yourself before you call this member function. Closing a `CDaoDatabase` object removes it from the Databases collection in the associated [workspace](../../mfc/reference/cdaoworkspace-class.md). Because `Close` doesn't destroy the `CDaoDatabase` object, you can reuse the object by opening the same database or a different database. > [!CAUTION] > Call the [Update](../../mfc/reference/cdaorecordset-class.md#update) member function (if there are pending edits) and the `Close` member function on all open recordset objects before you close a database. If you exit a function that declares [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) or `CDaoDatabase` objects on the stack, the database is closed, any unsaved changes are lost, all pending transactions are rolled back, and any pending edits to your data are lost. > [!CAUTION] -> If you try to close a database object while any recordset objects are open, or if you try to close a workspace object while any database objects belonging to that specific workspace are open, those recordset objects will be closed and any pending updates or edits will be rolled back. If you try to close a workspace object while any database objects belonging to it are open, the operation closes all database objects belonging to that specific workspace object, which may result in unclosed recordset objects being closed. If you do not close your database object, MFC reports an assertion failure in debug builds. +> If you try to close a database object while any recordset objects are open, or if you try to close a workspace object while any database objects belonging to that specific workspace are open, those recordset objects will be closed and any pending updates or edits will be rolled back. If you try to close a workspace object while any database objects belonging to it are open, the operation closes all database objects belonging to that specific workspace object, which may result in unclosed recordset objects being closed. If you don't close your database object, MFC reports an assertion failure in debug builds. -If the database object is defined outside the scope of a function, and you exit the function without closing it, the database object will remain open until explicitly closed or the module in which it is defined is out of scope. +If the database object is defined outside the scope of a function, and you exit the function without closing it, the database object will remain open until explicitly closed or the module in which it's defined is out of scope. ## CDaoDatabase::Create @@ -194,7 +194,7 @@ virtual void Create( ### Parameters *lpszName*
-A string expression that is the name of the database file that you are creating. It can be the full path and filename, such as "C:\\\MYDB.MDB". You must supply a name. If you do not supply a filename extension, .MDB is appended. If your network supports the uniform naming convention (UNC), you can also specify a network path, such as "\\\\\\\MYSERVER\\\MYSHARE\\\MYDIR\\\MYDB". Only Microsoft Jet (.MDB) database files can be created using this member function. (Double backslashes are required in string literals because "\\" is the C++ escape character.) +A string expression that is the name of the database file that you are creating. It can be the full path and filename, such as "C:\\\MYDB.MDB". You must supply a name. If you don't supply a filename extension, .MDB is appended. If your network supports the uniform naming convention (UNC), you can also specify a network path, such as "\\\\\\\MYSERVER\\\MYSHARE\\\MYDIR\\\MYDB". Only Microsoft Jet (.MDB) database files can be created using this member function. (Double backslashes are required in string literals because "\\" is the C++ escape character.) *lpszLocale*
A string expression used to specify collating order for creating the database. The default value is `dbLangGeneral`. Possible values are: @@ -245,11 +245,11 @@ An integer that indicates one or more options. Possible values are: If you omit the encryption constant, an unencrypted database is created. You can specify only one version constant. If you omit a version constant, a database that uses the Microsoft Jet database version 3.0 is created. > [!CAUTION] -> If a database is not encrypted, it is possible, even if you implement user/password security, to directly read the binary disk file that constitutes the database. +> If a database is not encrypted, it's possible, even if you implement user/password security, to directly read the binary disk file that constitutes the database. ### Remarks -`Create` creates the database file and the underlying DAO database object and initializes the C++ object. The object is appended to the associated workspace's Databases collection. The database object is in an open state; do not call `Open*` after `Create`. +`Create` creates the database file and the underlying DAO database object and initializes the C++ object. The object is appended to the associated workspace's Databases collection. The database object is in an open state; don't call `Open*` after `Create`. > [!NOTE] > With `Create`, you can create only Microsoft Jet (.MDB) databases. You cannot create ISAM databases or ODBC databases. @@ -276,10 +276,10 @@ void CreateRelation(CDaoRelationInfo& relinfo); The unique name of the relation object. The name must start with a letter and can contain a maximum of 40 characters. It can include numbers and underscore characters but cannot include punctuation or spaces. *lpszTable*
-The name of the primary table in the relation. If the table does not exist, MFC throws an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). +The name of the primary table in the relation. If the table doesn't exist, MFC throws an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). *lpszForeignTable*
-The name of the foreign table in the relation. If the table does not exist, MFC throws an exception of type `CDaoException`. +The name of the foreign table in the relation. If the table doesn't exist, MFC throws an exception of type `CDaoException`. *lAttributes*
A long value that contains information about the relationship type. You can use this value to enforce referential integrity, among other things. You can use the bitwise-OR operator (**`|`**) to combine any of the following values (as long as the combination makes sense): @@ -309,7 +309,7 @@ The relationship cannot involve a query or an attached table from an external da Use the first version of the function when the relation involves one field in each of the two tables. Use the second version when the relation involves multiple fields. The maximum number of fields in a relation is 14. -This action creates an underlying DAO relation object, but this is an MFC implementation detail since MFC's encapsulation of relation objects is contained within class `CDaoDatabase`. MFC does not supply a class for relations. +This action creates an underlying DAO relation object, but this is an MFC implementation detail since MFC's encapsulation of relation objects is contained within class `CDaoDatabase`. MFC doesn't supply a class for relations. If you set the relation object's attributes to activate cascade operations, the database engine automatically updates or deletes records in one or more other tables when changes are made to related primary key tables. @@ -319,7 +319,7 @@ For related information, see the topic "CreateRelation Method" in DAO Help. ## CDaoDatabase::DeleteQueryDef -Call this member function to delete the specified querydef — saved query — from the `CDaoDatabase` object's QueryDefs collection. +Call this member function to delete the specified querydef—saved query—from the `CDaoDatabase` object's QueryDefs collection. ```cpp void DeleteQueryDef(LPCTSTR lpszName); @@ -395,7 +395,7 @@ void Execute( Pointer to a null-terminated string containing a valid SQL command to execute. *nOptions*
-An integer that specifies options relating to the integrity of the query. You can use the bitwise-OR operator (**`|`**) to combine any of the following constants (provided the combination makes sense — for example, you would not combine `dbInconsistent` with `dbConsistent`): +An integer that specifies options relating to the integrity of the query. You can use the bitwise-OR operator (**`|`**) to combine any of the following constants provided the combination makes sense. For example, you would not combine `dbInconsistent` with `dbConsistent`: - `dbDenyWrite` Deny write permission to other users. @@ -414,16 +414,16 @@ An integer that specifies options relating to the integrity of the query. You ca ### Remarks -`Execute` works only for action queries or SQL pass-through queries that do not return results. It does not work for select queries, which return records. +`Execute` works only for action queries or SQL pass-through queries that don't return results. It doesn't work for select queries, which return records. For a definition and information about action queries, see the topics "Action Query" and "Execute Method" in DAO Help. > [!TIP] -> Given a syntactically correct SQL statement and proper permissions, the `Execute` member function will not fail even if not a single row can be modified or deleted. Therefore, always use the `dbFailOnError` option when using the `Execute` member function to run an update or delete query. This option causes MFC to throw an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md) and rolls back all successful changes if any of the records affected are locked and cannot be updated or deleted. Note that you can always call `GetRecordsAffected` to see how many records were affected. +> Given a syntactically correct SQL statement and proper permissions, the `Execute` member function won't fail even if not a single row can be modified or deleted. Therefore, always use the `dbFailOnError` option when using the `Execute` member function to run an update or delete query. This option causes MFC to throw an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md) and rolls back all successful changes if any of the records affected are locked and cannot be updated or deleted. Note that you can always call `GetRecordsAffected` to see how many records were affected. -Call the [GetRecordsAffected](#getrecordsaffected) member function of the database object to determine the number of records affected by the most recent `Execute` call. For example, `GetRecordsAffected` returns information about the number of records deleted, updated, or inserted when executing an action query. The count returned will not reflect changes in related tables when cascade updates or deletes are in effect. +Call the [GetRecordsAffected](#getrecordsaffected) member function of the database object to determine the number of records affected by the most recent `Execute` call. For example, `GetRecordsAffected` returns information about the number of records deleted, updated, or inserted when executing an action query. The count returned doesn't reflect changes in related tables when cascade updates or deletes are in effect. -`Execute` does not return a recordset. Using `Execute` on a query that selects records causes MFC to throw an exception of type `CDaoException`. (There is no `ExecuteSQL` member function analogous to `CDatabase::ExecuteSQL`.) +`Execute` doesn't return a recordset. Using `Execute` on a query that selects records causes MFC to throw an exception of type `CDaoException`. (There is no `ExecuteSQL` member function analogous to `CDatabase::ExecuteSQL`.) ## CDaoDatabase::GetConnect @@ -445,7 +445,7 @@ The string provides information about the source of an open database or a databa > Using the MFC DAO classes to connect to a data source via ODBC is less efficient than connecting via an attached table. > [!NOTE] -> The connection string is used to pass additional information to ODBC and certain ISAM drivers as needed. It is not used for .MDB databases. For Microsoft Jet database base tables, the connection string is an empty string ("") except when you use it for a SQL pass-through query as described under Return Value above. +> The connection string is used to pass additional information to ODBC and certain ISAM drivers as needed. It's not used for .MDB databases. For Microsoft Jet database base tables, the connection string is an empty string ("") except when you use it for a SQL pass-through query as described under Return Value above. See the [Open](#open) member function for a description of how the connection string is created. Once the connection string has been set in the `Open` call, you can later use it to check the setting to determine the type, path, user ID, Password, or ODBC data source of the database. @@ -554,7 +554,7 @@ A short integer containing the timeout value in seconds. ### Remarks -An operation might time out due to network access problems, excessive query processing time, and so on. While the setting is in effect, it affects all open, add new, update, and delete operations on any recordsets associated with this `CDaoDatabase` object. You can change the current timeout setting by calling [SetQueryTimeout](#setquerytimeout). Changing the query timeout value for a recordset after opening does not change the value for the recordset. For example, subsequent [Move](../../mfc/reference/cdaorecordset-class.md#move) operations do not use the new value. The default value is initially set when the database engine is initialized. +An operation might time out due to network access problems, excessive query processing time, and so on. While the setting is in effect, it affects all open, add new, update, and delete operations on any recordsets associated with this `CDaoDatabase` object. You can change the current timeout setting by calling [SetQueryTimeout](#setquerytimeout). Changing the query timeout value for a recordset after opening doesn't change the value for the recordset. For example, subsequent [Move](../../mfc/reference/cdaorecordset-class.md#move) operations don't use the new value. The default value is initially set when the database engine is initialized. The default value for query timeouts is taken from the Windows registry. If there is no registry setting, the default is 60 seconds. Not all databases support the ability to set a query timeout value. If you set a query timeout value of 0, no timeout occurs; and communication with the database may stop responding. This behavior may be useful during development. If the call fails, MFC throws an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). @@ -574,7 +574,7 @@ A long integer containing the number of records affected. ### Remarks -The value returned includes the number of records deleted, updated, or inserted by an action query run with `Execute`. The count returned will not reflect changes in related tables when cascade updates or deletes are in effect. +The value returned includes the number of records deleted, updated, or inserted by an action query run with `Execute`. The count returned doesn't reflect changes in related tables when cascade updates or deletes are in effect. For related information, see the topic "RecordsAffected Property" in DAO Help. @@ -748,7 +748,7 @@ Contains a pointer to the [CDaoWorkspace](../../mfc/reference/cdaoworkspace-clas ### Remarks -Use this pointer if you need to access the workspace directly — for example, to obtain pointers to other database objects in the workspace's Databases collection. +Use this pointer if you need to access the workspace directly. For example, to obtain pointers to other database objects in the workspace's Databases collection. ## CDaoDatabase::Open @@ -765,7 +765,7 @@ virtual void Open( ### Parameters *lpszName*
-A string expression that is the name of an existing Microsoft Jet (.MDB) database file. If the filename has an extension, it is required. If your network supports the uniform naming convention (UNC), you can also specify a network path, such as "\\\\\\\MYSERVER\\\MYSHARE\\\MYDIR\\\MYDB.MDB". (Double backslashes are required in string literals because "\\" is the C++ escape character.) +A string expression that is the name of an existing Microsoft Jet (.MDB) database file. If the filename has an extension, it's required. If your network supports the uniform naming convention (UNC), you can also specify a network path, such as "\\\\\\\MYSERVER\\\MYSHARE\\\MYDIR\\\MYDB.MDB". (Double backslashes are required in string literals because "\\" is the C++ escape character.) Some considerations apply when using *lpszName*. If it: @@ -773,7 +773,7 @@ Some considerations apply when using *lpszName*. If it: - Is an empty string ("") and *lpszConnect* is "ODBC;", a dialog box listing all registered ODBC data source names is displayed so the user can select a database. You should avoid direct connections to ODBC data sources; use an attached table instead. -- Otherwise does not refer to an existing database or valid ODBC data source name, MFC throws an exception of type `CDaoException`. +- Otherwise doesn't refer to an existing database or valid ODBC data source name, MFC throws an exception of type `CDaoException`. > [!NOTE] > For details about DAO error codes, see the DAOERR.H file. For related information, see the topic "Trappable Data Access Errors" in DAO Help. @@ -785,11 +785,11 @@ A Boolean value that is TRUE if the database is to be opened for exclusive (nons A Boolean value that is TRUE if the database is to be opened for read-only access and FALSE if the database is to be opened for read/write access. If you omit this argument, the database is opened for read/write access. All dependent recordsets inherit this attribute. *lpszConnect*
-A string expression used for opening the database. This string constitutes the ODBC connect arguments. You must supply the exclusive and read-only arguments to supply a source string. If the database is a Microsoft Jet database (.MDB), this string is empty (""). The syntax for the default value — **_T**("") — provides portability for Unicode as well as ANSI builds of your application. +A string expression used for opening the database. This string constitutes the ODBC connect arguments. You must supply the exclusive and read-only arguments to supply a source string. If the database is a Microsoft Jet database (.MDB), this string is empty (""). The syntax for the default value—**_T**("")—provides portability for Unicode as well as ANSI builds of your application. ### Remarks -`Open` associates the database with the underlying DAO object. You cannot use the database object to construct recordset, tabledef, or querydef objects until it is initialized. `Open` appends the database object to the associated workspace's Databases collection. +`Open` associates the database with the underlying DAO object. You cannot use the database object to construct recordset, tabledef, or querydef objects until it's initialized. `Open` appends the database object to the associated workspace's Databases collection. Use the parameters as follows: @@ -800,13 +800,13 @@ Use the parameters as follows: For related information, see the topic "OpenDatabase Method" in DAO Help. > [!NOTE] -> For better performance when accessing external databases, including ISAM databases and ODBC data sources, it is recommended that you attach external database tables to a Microsoft Jet engine database (.MDB) rather than connecting directly to the data source. +> For better performance when accessing external databases, including ISAM databases and ODBC data sources, it's recommended that you attach external database tables to a Microsoft Jet engine database (.MDB) rather than connecting directly to the data source. -It is possible for a connection attempt to time out if, for example, the DBMS host is unavailable. If the connection attempt fails, `Open` throws an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). +It's possible for a connection attempt to time out if, for example, the DBMS host is unavailable. If the connection attempt fails, `Open` throws an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). The remaining remarks apply only to ODBC databases: -If the database is an ODBC database and the parameters in your `Open` call do not contain enough information to make the connection, the ODBC driver opens a dialog box to obtain the necessary information from the user. When you call `Open`, your connection string, *lpszConnect*, is stored privately and is available by calling the [GetConnect](#getconnect) member function. +If the database is an ODBC database and the parameters in your `Open` call don't contain enough information to make the connection, the ODBC driver opens a dialog box to obtain the necessary information from the user. When you call `Open`, your connection string, *lpszConnect*, is stored privately and is available by calling the [GetConnect](#getconnect) member function. If you wish, you can open your own dialog box before you call `Open` to get information from the user, such as a password, then add that information to the connection string you pass to `Open`. Or you might want to save the connection string you pass (perhaps in the Windows registry) so you can reuse it the next time your application calls `Open` on a `CDaoDatabase` object. @@ -827,7 +827,7 @@ The number of seconds to allow before a query attempt times out. ### Remarks -An operation might time out because of network access problems, excessive query processing time, and so on. Call `SetQueryTimeout` before opening your recordset or before calling the recordset's [AddNew](../../mfc/reference/cdaorecordset-class.md#addnew), [Update](../../mfc/reference/cdaorecordset-class.md#update), or [Delete](../../mfc/reference/cdaorecordset-class.md#delete) member functions if you want to change the query timeout value. The setting affects all subsequent [Open](../../mfc/reference/cdaorecordset-class.md#open), `AddNew`, `Update`, and `Delete` calls to any recordsets associated with this `CDaoDatabase` object. Changing the query timeout value for a recordset after opening does not change the value for the recordset. For example, subsequent [Move](../../mfc/reference/cdaorecordset-class.md#move) operations do not use the new value. +An operation might time out because of network access problems, excessive query processing time, and so on. Call `SetQueryTimeout` before opening your recordset or before calling the recordset's [AddNew](../../mfc/reference/cdaorecordset-class.md#addnew), [Update](../../mfc/reference/cdaorecordset-class.md#update), or [Delete](../../mfc/reference/cdaorecordset-class.md#delete) member functions if you want to change the query timeout value. The setting affects all subsequent [Open](../../mfc/reference/cdaorecordset-class.md#open), `AddNew`, `Update`, and `Delete` calls to any recordsets associated with this `CDaoDatabase` object. Changing the query timeout value for a recordset after opening doesn't change the value for the recordset. For example, subsequent [Move](../../mfc/reference/cdaorecordset-class.md#move) operations don't use the new value. The default value for query timeouts is 60 seconds. Not all databases support the ability to set a query timeout value. If you set a query timeout value of 0, no timeout occurs; the communication with the database may stop responding. This behavior may be useful during development. diff --git a/docs/mfc/reference/cdaoexception-class.md b/docs/mfc/reference/cdaoexception-class.md index 108e653c07..adde02e05e 100644 --- a/docs/mfc/reference/cdaoexception-class.md +++ b/docs/mfc/reference/cdaoexception-class.md @@ -50,7 +50,7 @@ The class includes public data members you can use to determine the cause of the You can access exception objects within the scope of a [CATCH](../../mfc/reference/exception-processing.md#catch) expression. You can also throw `CDaoException` objects from your own code with the [AfxThrowDaoException](../../mfc/reference/exception-processing.md#afxthrowdaoexception) global function. -In MFC, all DAO errors are expressed as exceptions, of type `CDaoException`. When you catch an exception of this type, you can use `CDaoException` member functions to retrieve information from any DAO error objects stored in the database engine's Errors collection. As each error occurs, one or more error objects are placed in the Errors collection. (Normally the collection contains only one error object; if you are using an ODBC data source, you are more likely to get multiple error objects.) When another DAO operation generates an error, the Errors collection is cleared, and the new error object is placed in the Errors collection. DAO operations that do not generate an error have no effect on the Errors collection. +In MFC, all DAO errors are expressed as exceptions, of type `CDaoException`. When you catch an exception of this type, you can use `CDaoException` member functions to retrieve information from any DAO error objects stored in the database engine's Errors collection. As each error occurs, one or more error objects are placed in the Errors collection. (Normally the collection contains only one error object; if you're using an ODBC data source, you're more likely to get multiple error objects.) When another DAO operation generates an error, the Errors collection is cleared, and the new error object is placed in the Errors collection. DAO operations that do not generate an error have no effect on the Errors collection. For DAO error codes, see the file DAOERR.H. For related information, see the topic "Trappable Data Access Errors" in DAO Help. @@ -58,9 +58,9 @@ For more information about exception handling in general, or about `CDaoExceptio ## Inheritance Hierarchy -[CObject](../../mfc/reference/cobject-class.md) +[`CObject`](../../mfc/reference/cobject-class.md) -[CException](../../mfc/reference/cexception-class.md) +[`CException`](../../mfc/reference/cexception-class.md) `CDaoException` @@ -80,13 +80,13 @@ CDaoException(); Ordinarily, the framework creates exception objects when its code throws an exception. You seldom need to construct an exception object explicitly. If you want to throw a `CDaoException` from your own code, call the global function [AfxThrowDaoException](../../mfc/reference/exception-processing.md#afxthrowdaoexception). -However, you might want to explicitly create an exception object if you are making direct calls to DAO via the DAO interface pointers that MFC classes encapsulate. In that case, you might need to retrieve error information from DAO. Suppose an error occurs in DAO when you call a DAO method via the DAODatabases interface to a workspace's Databases collection. +However, you might want to explicitly create an exception object if you're making direct calls to DAO via the DAO interface pointers that MFC classes encapsulate. In that case, you might need to retrieve error information from DAO. Suppose an error occurs in DAO when you call a DAO method via the DAODatabases interface to a workspace's Databases collection. ##### To retrieve the DAO error information 1. Construct a `CDaoException` object. -1. Call the exception object's [GetErrorCount](#geterrorcount) member function to determine how many error objects are in the database engine's Errors collection. (Normally only one, unless you are using an ODBC data source.) +1. Call the exception object's [GetErrorCount](#geterrorcount) member function to determine how many error objects are in the database engine's Errors collection. (Normally only one, unless you're using an ODBC data source.) 1. Call the exception object's [GetErrorInfo](#geterrorinfo) member function to retrieve one specific error object at a time, by index in the collection, via the exception object. Think of the exception object as a proxy for one DAO error object. @@ -112,10 +112,10 @@ The number of DAO error objects in the database engine's Errors collection. ### Remarks -This information is useful for looping through the Errors collection to retrieve each of the one or more DAO error objects in the collection. To retrieve an error object by index or by DAO error number, call the [GetErrorInfo](#geterrorinfo) member function. +This information is useful for looping through the Errors collection to retrieve each of one or more DAO error objects in the collection. To retrieve an error object by index or by DAO error number, call the [GetErrorInfo](#geterrorinfo) member function. > [!NOTE] -> Normally there is only one error object in the Errors collection. If you are working with an ODBC data source, however, there could be more than one. +> Normally there is only one error object in the Errors collection. If you're working with an ODBC data source, however, there could be more than one. ## CDaoException::GetErrorInfo @@ -158,13 +158,13 @@ This code is supplied in cases where a specific component of the MFC DAO classes Possible values are: -- NO_AFX_DAO_ERROR The most recent operation did not result in an MFC extended error. However, the operation could have produced other errors from DAO or OLE, so you should check [m_pErrorInfo](#m_perrorinfo) and possibly [m_scode](#m_scode). +- NO_AFX_DAO_ERROR The most recent operation didn't result in an MFC extended error. However, the operation could have produced other errors from DAO or OLE, so you should check [m_pErrorInfo](#m_perrorinfo) and possibly [m_scode](#m_scode). - AFX_DAO_ERROR_ENGINE_INITIALIZATION MFC could not initialize the Microsoft Jet database engine. OLE might have failed to initialize, or it might have been impossible to create an instance of the DAO database engine object. These problems usually suggest a bad installation of either DAO or OLE. -- AFX_DAO_ERROR_DFX_BIND An address used in a DAO record field exchange (DFX) function call does not exist or is invalid (the address was not used to bind data). You might have passed a bad address in a DFX call, or the address might have become invalid between DFX operations. +- AFX_DAO_ERROR_DFX_BIND An address used in a DAO record field exchange (DFX) function call doesn't exist or is invalid (the address wasn't used to bind data). You might have passed a bad address in a DFX call, or the address might have become invalid between DFX operations. -- AFX_DAO_ERROR_OBJECT_NOT_OPEN You attempted to open a recordset based on a querydef or a tabledef object that was not in an open state. +- AFX_DAO_ERROR_OBJECT_NOT_OPEN You attempted to open a recordset based on a querydef or a tabledef object that wasn't in an open state. ## CDaoException::m_pErrorInfo @@ -190,12 +190,11 @@ Contains a value of type `SCODE` that describes the error. ### Remarks -This is an OLE code. You will seldom need to use this value because, in almost all cases, more specific MFC or DAO error information is available in the other `CDaoException` data members. +This is an OLE code. You'll seldom need to use this value because, in almost all cases, more specific MFC or DAO error information is available in the other `CDaoException` data members. For information about SCODE, see the topic [Structure of OLE Error Codes](/windows/win32/com/structure-of-com-error-codes) in the Windows SDK. The SCODE data type maps to the HRESULT data type. ## See also -[CException Class](../../mfc/reference/cexception-class.md)
-[Hierarchy Chart](../../mfc/hierarchy-chart.md)
-[CException Class](../../mfc/reference/cexception-class.md) +[CException Class](../../mfc/reference/cexception-class.md)\ +[Hierarchy Chart](../../mfc/hierarchy-chart.md) \ No newline at end of file diff --git a/docs/mfc/reference/cdaoparameterinfo-structure.md b/docs/mfc/reference/cdaoparameterinfo-structure.md index 40eaa76497..34f4617838 100644 --- a/docs/mfc/reference/cdaoparameterinfo-structure.md +++ b/docs/mfc/reference/cdaoparameterinfo-structure.md @@ -38,7 +38,7 @@ The value of the parameter, stored in a [COleVariant](../../mfc/reference/coleva The references to Primary and Secondary above indicate how the information is returned by the [GetParameterInfo](../../mfc/reference/cdaoquerydef-class.md#getparameterinfo) member function in class `CDaoQueryDef`. -MFC does not encapsulate DAO parameter objects in a class. DAO querydef objects underlying MFC `CDaoQueryDef` objects store parameters in their Parameters collections. To access the parameter objects in a [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md) object, call the querydef object's `GetParameterInfo` member function for a particular parameter name or an index into the Parameters collection. You can use the [CDaoQueryDef::GetParameterCount](../../mfc/reference/cdaoquerydef-class.md#getparametercount) member function in conjunction with `GetParameterInfo` to loop through the Parameters collection. +The Microsoft Foundation Classes (MFC) don't encapsulate DAO parameter objects in a class. DAO querydef objects underlying MFC `CDaoQueryDef` objects store parameters in their Parameters collections. To access the parameter objects in a [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md) object, call the querydef object's `GetParameterInfo` member function for a particular parameter name or an index into the Parameters collection. You can use the [CDaoQueryDef::GetParameterCount](../../mfc/reference/cdaoquerydef-class.md#getparametercount) member function in conjunction with `GetParameterInfo` to loop through the Parameters collection. Information retrieved by the [CDaoQueryDef::GetParameterInfo](../../mfc/reference/cdaoquerydef-class.md#getparameterinfo) member function is stored in a `CDaoParameterInfo` structure. Call `GetParameterInfo` for the querydef object in whose Parameters collection the parameter object is stored. diff --git a/docs/mfc/reference/cdaoquerydef-class.md b/docs/mfc/reference/cdaoquerydef-class.md index 80d5a67b30..c41c5be7d6 100644 --- a/docs/mfc/reference/cdaoquerydef-class.md +++ b/docs/mfc/reference/cdaoquerydef-class.md @@ -5,7 +5,7 @@ ms.date: "11/04/2016" f1_keywords: ["CDaoQueryDef", "AFXDAO/CDaoQueryDef", "AFXDAO/CDaoQueryDef::CDaoQueryDef", "AFXDAO/CDaoQueryDef::Append", "AFXDAO/CDaoQueryDef::CanUpdate", "AFXDAO/CDaoQueryDef::Close", "AFXDAO/CDaoQueryDef::Create", "AFXDAO/CDaoQueryDef::Execute", "AFXDAO/CDaoQueryDef::GetConnect", "AFXDAO/CDaoQueryDef::GetDateCreated", "AFXDAO/CDaoQueryDef::GetDateLastUpdated", "AFXDAO/CDaoQueryDef::GetFieldCount", "AFXDAO/CDaoQueryDef::GetFieldInfo", "AFXDAO/CDaoQueryDef::GetName", "AFXDAO/CDaoQueryDef::GetODBCTimeout", "AFXDAO/CDaoQueryDef::GetParameterCount", "AFXDAO/CDaoQueryDef::GetParameterInfo", "AFXDAO/CDaoQueryDef::GetParamValue", "AFXDAO/CDaoQueryDef::GetRecordsAffected", "AFXDAO/CDaoQueryDef::GetReturnsRecords", "AFXDAO/CDaoQueryDef::GetSQL", "AFXDAO/CDaoQueryDef::GetType", "AFXDAO/CDaoQueryDef::IsOpen", "AFXDAO/CDaoQueryDef::Open", "AFXDAO/CDaoQueryDef::SetConnect", "AFXDAO/CDaoQueryDef::SetName", "AFXDAO/CDaoQueryDef::SetODBCTimeout", "AFXDAO/CDaoQueryDef::SetParamValue", "AFXDAO/CDaoQueryDef::SetReturnsRecords", "AFXDAO/CDaoQueryDef::SetSQL", "AFXDAO/CDaoQueryDef::m_pDAOQueryDef", "AFXDAO/CDaoQueryDef::m_pDatabase"] helpviewer_keywords: ["CDaoQueryDef [MFC], CDaoQueryDef", "CDaoQueryDef [MFC], Append", "CDaoQueryDef [MFC], CanUpdate", "CDaoQueryDef [MFC], Close", "CDaoQueryDef [MFC], Create", "CDaoQueryDef [MFC], Execute", "CDaoQueryDef [MFC], GetConnect", "CDaoQueryDef [MFC], GetDateCreated", "CDaoQueryDef [MFC], GetDateLastUpdated", "CDaoQueryDef [MFC], GetFieldCount", "CDaoQueryDef [MFC], GetFieldInfo", "CDaoQueryDef [MFC], GetName", "CDaoQueryDef [MFC], GetODBCTimeout", "CDaoQueryDef [MFC], GetParameterCount", "CDaoQueryDef [MFC], GetParameterInfo", "CDaoQueryDef [MFC], GetParamValue", "CDaoQueryDef [MFC], GetRecordsAffected", "CDaoQueryDef [MFC], GetReturnsRecords", "CDaoQueryDef [MFC], GetSQL", "CDaoQueryDef [MFC], GetType", "CDaoQueryDef [MFC], IsOpen", "CDaoQueryDef [MFC], Open", "CDaoQueryDef [MFC], SetConnect", "CDaoQueryDef [MFC], SetName", "CDaoQueryDef [MFC], SetODBCTimeout", "CDaoQueryDef [MFC], SetParamValue", "CDaoQueryDef [MFC], SetReturnsRecords", "CDaoQueryDef [MFC], SetSQL", "CDaoQueryDef [MFC], m_pDAOQueryDef", "CDaoQueryDef [MFC], m_pDatabase"] --- -# CDaoQueryDef Class +# `CDaoQueryDef` Class Represents a query definition, or "querydef," usually one saved in a database. @@ -14,7 +14,7 @@ Represents a query definition, or "querydef," usually one saved in a database. ## Syntax -``` +```cpp class CDaoQueryDef : public CObject ``` @@ -67,7 +67,7 @@ class CDaoQueryDef : public CObject ## Remarks -A querydef is a data access object that contains the SQL statement that describes a query, and its properties, such as "Date Created" and "ODBC Timeout." You can also create temporary querydef objects without saving them, but it is convenient — and much more efficient — to save commonly reused queries in a database. A [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object maintains a collection, called the QueryDefs collection, that contains its saved querydefs. +A querydef is a data access object that contains the SQL statement that describes a query, and its properties, such as "Date Created" and "ODBC Timeout." You can also create temporary querydef objects without saving them, but it's convenient—and much more efficient—to save commonly reused queries in a database. A [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object maintains a collection, called the QueryDefs collection, that contains its saved querydefs. > [!NOTE] > The DAO database classes are distinct from the MFC database classes based on Open Database Connectivity (ODBC). All DAO database class names have the "CDao" prefix. You can still access ODBC data sources with the DAO classes. In general, the MFC classes based on DAO are more capable than the MFC classes based on ODBC; the DAO-based classes can access data, including through ODBC drivers, via their own database engine. The DAO-based classes also support Data Definition Language (DDL) operations, such as adding tables via the classes, without having to call DAO directly. @@ -82,9 +82,9 @@ Use querydef objects either to work with an existing saved query or to create a - To use an existing saved query, call the querydef object's [Open](#open) member function, supplying the name of the saved query. - - To create a new saved query, call the querydef object's [Create](#create) member function, supplying the name of the query. Then call [Append](#append) to save the query by appending it to the database's QueryDefs collection. `Create` puts the querydef into an open state, so after calling `Create` you do not call `Open`. + - To create a new saved query, call the querydef object's [Create](#create) member function, supplying the name of the query. Then call [Append](#append) to save the query by appending it to the database's QueryDefs collection. `Create` puts the querydef into an open state, so after calling `Create` you don't call `Open`. - - To create a temporary querydef, call `Create`. Pass an empty string for the query name. Do not call `Append`. + - To create a temporary querydef, call `Create`. Pass an empty string for the query name. Don't call `Append`. When you finish using a querydef object, call its [Close](#close) member function; then destroy the querydef object. @@ -99,13 +99,13 @@ You can use a querydef object for any of the following purposes: - To call the object's `Execute` member function to directly execute an action query or a SQL pass-through query -You can use a querydef object for any type of query, including select, action, crosstab, delete, update, append, make-table, data definition, SQL pass-through, union, and bulk queries. The query's type is determined by the content of the SQL statement that you supply. For information about query types, see the `Execute` and [GetType](#gettype) member functions. Recordsets are commonly used for row-returning queries, usually those using the **SELECT ... FROM** keywords. `Execute` is most commonly used for bulk operations. For more information, see [Execute](#execute) and [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md). +You can use a querydef object for any type of query, including select, action, crosstab, delete, update, append, make-table, data definition, SQL pass-through, union, and bulk queries. The content of the SQL statement that you supply determines the query's type. For information about query types, see the `Execute` and [`GetType`](#gettype) member functions. Recordsets are commonly used for row-returning queries, usually those using the **SELECT ... FROM** keywords. `Execute` is most commonly used for bulk operations. For more information, see [`Execute`](#execute) and [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). ## Querydefs and Recordsets -To use a querydef object to create a `CDaoRecordset` object, you typically create or open a querydef as described above. Then construct a recordset object, passing a pointer to your querydef object when you call [CDaoRecordset::Open](../../mfc/reference/cdaorecordset-class.md#open). The querydef you pass must be in an open state. For more information, see class [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md). +To use a querydef object to create a `CDaoRecordset` object, you typically create or open a querydef as described above. Then construct a recordset object, passing a pointer to your querydef object when you call [`CDaoRecordset::Open`](../../mfc/reference/cdaorecordset-class.md#open). The querydef you pass must be in an open state. For more information, see class [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). -You cannot use a querydef to create a recordset (the most common use for a querydef) unless it is in an open state. Put the querydef into an open state by calling either `Open` or `Create`. +You cannot use a querydef to create a recordset (the most common use for a querydef) unless it's in an open state. Put the querydef into an open state by calling either `Open` or `Create`. ## External Databases @@ -142,7 +142,7 @@ If you attempt to append a temporary querydef object, MFC throws an exception of ## CDaoQueryDef::CanUpdate -Call this member function to determine whether you can modify the querydef — such as changing its name or SQL string. +Call this member function to determine whether you can modify the querydef—such as changing its name or SQL string. ``` BOOL CanUpdate(); @@ -156,11 +156,11 @@ Nonzero if you are permitted to modify the querydef; otherwise 0. You can modify the querydef if: -- It is not based on a database that is open read-only. +- It's not based on a database that is open read-only. - You have update permissions for the database. - This depends on whether you have implemented security features. MFC does not provide support for security; you must implement it yourself by calling DAO directly or by using Microsoft Access. See the topic "Permissions Property" in DAO Help. + This depends on whether you've implemented security features. MFC doesn't provide support for security; you must implement it yourself by calling DAO directly or by using Microsoft Access. See the topic "Permissions Property" in DAO Help. ## CDaoQueryDef::CDaoQueryDef @@ -183,7 +183,7 @@ The object can represent an existing querydef stored in the database's QueryDefs - If the object represents a new querydef to be saved, call the object's [Create](#create) member function. This adds the object to the database's QueryDefs collection. Then call `CDaoQueryDef` member functions to set the object's attributes. Finally, call [Append](#append). -- If the object represents a temporary querydef (not to be saved in the database), call `Create`, passing an empty string for the query's name. After calling `Create`, initialize the querydef by directly setting its attributes. Do not call `Append`. +- If the object represents a temporary querydef (not to be saved in the database), call `Create`, passing an empty string for the query's name. After calling `Create`, initialize the querydef by directly setting its attributes. Don't call `Append`. To set the attributes of the querydef, you can use the [SetName](#setname), [SetSQL](#setsql), [SetConnect](#setconnect), [SetODBCTimeout](#setodbctimeout), and [SetReturnsRecords](#setreturnsrecords) member functions. @@ -199,7 +199,7 @@ virtual void Close(); ### Remarks -Closing the querydef releases the underlying DAO object but does not destroy the saved DAO querydef object or the C++ `CDaoQueryDef` object. This is not the same as [CDaoDatabase::DeleteQueryDef](../../mfc/reference/cdaodatabase-class.md#deletequerydef), which deletes the querydef from the database's QueryDefs collection in DAO (if not a temporary querydef). +Closing the querydef releases the underlying DAO object but doesn't destroy the saved DAO querydef object or the C++ `CDaoQueryDef` object. This isn't the same as [CDaoDatabase::DeleteQueryDef](../../mfc/reference/cdaodatabase-class.md#deletequerydef), which deletes the querydef from the database's QueryDefs collection in DAO (if not a temporary querydef). ## CDaoQueryDef::Create @@ -214,16 +214,16 @@ virtual void Create( ### Parameters *lpszName*
-The unique name of the query saved in the database. For details about the string, see the topic "CreateQueryDef Method" in DAO Help. If you accept the default value, an empty string, a temporary querydef is created. Such a query is not saved in the QueryDefs collection. +The unique name of the query saved in the database. For details about the string, see the topic "CreateQueryDef Method" in DAO Help. If you accept the default value, an empty string, a temporary querydef is created. Such a query isn't saved in the QueryDefs collection. *lpszSQL*
The SQL string that defines the query. If you accept the default value of NULL, you must later call [SetSQL](#setsql) to set the string. Until then, the query is undefined. You can, however, use the undefined query to open a recordset; see Remarks for details. The SQL statement must be defined before you can append the querydef to the QueryDefs collection. ### Remarks -If you pass a name in *lpszName*, you can then call [Append](#append) to save the querydef in the database's QueryDefs collection. Otherwise, the object is a temporary querydef and is not saved. In either case, the querydef is in an open state, and you can either use it to create a [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) object or call the querydef's [Execute](#execute) member function. +If you pass a name in *lpszName*, you can then call [Append](#append) to save the querydef in the database's QueryDefs collection. Otherwise, the object is a temporary querydef and isn't saved. In either case, the querydef is in an open state, and you can either use it to create a [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) object or call the querydef's [Execute](#execute) member function. -If you do not supply a SQL statement in *lpszSQL*, you cannot run the query with `Execute` but you can use it to create a recordset. In that case, MFC uses the recordset's default SQL statement. +If you don't supply a SQL statement in *lpszSQL*, you cannot run the query with `Execute` but you can use it to create a recordset. In that case, MFC uses the recordset's default SQL statement. ## CDaoQueryDef::Execute @@ -261,16 +261,16 @@ Querydef objects used for execution in this manner can only represent one of the - SQL pass-through queries -`Execute` does not work for queries that return records, such as select queries. `Execute` is commonly used for bulk operation queries, such as **UPDATE**, **INSERT**, or **SELECT INTO**, or for data definition language (DDL) operations. +`Execute` doesn't work for queries that return records, such as select queries. `Execute` is commonly used for bulk operation queries, such as **UPDATE**, **INSERT**, or **SELECT INTO**, or for data definition language (DDL) operations. > [!TIP] > The preferred way to work with ODBC data sources is to attach tables to a Microsoft Jet (.MDB) database. For more information, see the topic "Accessing External Databases with DAO" in DAO Help. -Call the [GetRecordsAffected](#getrecordsaffected) member function of the querydef object to determine the number of records affected by the most recent `Execute` call. For example, `GetRecordsAffected` returns information about the number of records deleted, updated, or inserted when executing an action query. The count returned will not reflect changes in related tables when cascade updates or deletes are in effect. +Call the [GetRecordsAffected](#getrecordsaffected) member function of the querydef object to determine the number of records affected by the most recent `Execute` call. For example, `GetRecordsAffected` returns information about the number of records deleted, updated, or inserted when executing an action query. The count returned doesn't reflect changes in related tables when cascade updates or deletes are in effect. If you include both `dbInconsistent` and `dbConsistent` or if you include neither, the result is the default, `dbInconsistent`. -`Execute` does not return a recordset. Using `Execute` on a query that selects records causes MFC to throw an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). +`Execute` doesn't return a recordset. Using `Execute` on a query that selects records causes MFC to throw an exception of type [CDaoException](../../mfc/reference/cdaoexception-class.md). ## CDaoQueryDef::GetConnect @@ -282,11 +282,11 @@ CString GetConnect(); ### Return Value -A [CString](../../atl-mfc-shared/reference/cstringt-class.md) containing the connection string for the querydef. +A [`CString`](../../atl-mfc-shared/reference/cstringt-class.md) containing the connection string for the querydef. ### Remarks -This function is used only with ODBC data sources and certain ISAM drivers. It is not used with Microsoft Jet (.MDB) databases; in this case, `GetConnect` returns an empty string. For more information, see [SetConnect](#setconnect). +This function is used only with ODBC data sources and certain ISAM drivers. It's not used with Microsoft Jet (`.MDB`) databases; in this case, `GetConnect` returns an empty string. For more information, see [`SetConnect`](#setconnect). > [!TIP] > The preferred way to work with ODBC tables is to attach them to an .MDB database. For more information, see the topic "Accessing External Databases with DAO" in DAO Help. @@ -311,7 +311,7 @@ For related information, see the topic "DateCreated, LastUpdated Properties" in ## CDaoQueryDef::GetDateLastUpdated -Call this member function to get the date the querydef object was last updated — when any of its properties were changed, such as its name, its SQL string, or its connection string. +Call this member function to get the date the querydef object was last updated—when any of its properties were changed, such as its name, its SQL string, or its connection string. ``` COleDateTime GetDateLastUpdated(); @@ -319,7 +319,7 @@ COleDateTime GetDateLastUpdated(); ### Return Value -A [COleDateTime](../../atl-mfc-shared/reference/coledatetime-class.md) object containing the date and time the querydef was last updated. +A [`COleDateTime`](../../atl-mfc-shared/reference/coledatetime-class.md) object containing the date and time the querydef was last updated. ### Remarks @@ -339,7 +339,7 @@ The number of fields defined in the query. ### Remarks -`GetFieldCount` is useful for looping through all fields in the querydef. For that purpose, use `GetFieldCount` in conjunction with [GetFieldInfo](#getfieldinfo). +`GetFieldCount` is useful for looping through all fields in the querydef. For that purpose, use `GetFieldCount` with [`GetFieldInfo`](#getfieldinfo). ## CDaoQueryDef::GetFieldInfo @@ -375,7 +375,7 @@ Options that specify which information about the field to retrieve. The availabl - AFX_DAO_ALL_INFO Primary and secondary information plus: Default Value, Validation Text, Validation Rule *lpszName*
-A string containing the name of the desired field, for lookup by name. You can use a [CString](../../atl-mfc-shared/reference/cstringt-class.md). +A string containing the name of the desired field, for lookup by name. You can use a [`CString`](../../atl-mfc-shared/reference/cstringt-class.md). ### Remarks @@ -452,23 +452,23 @@ void GetParameterInfo( ### Parameters -*nIndex*
+*`nIndex`*
The zero-based index of the desired parameter in the querydef's Parameters collection, for lookup by index. -*paraminfo*
+*`paraminfo`*
A reference to a [CDaoParameterInfo](../../mfc/reference/cdaoparameterinfo-structure.md) object that returns the information requested. -*dwInfoOptions*
+*`dwInfoOptions`*
Options that specify which information about the parameter to retrieve. The available option is listed here along with what it causes the function to return: -- AFX_DAO_PRIMARY_INFO (Default) Name, Type +- `AFX_DAO_PRIMARY_INFO` (Default) Name, Type -*lpszName*
-A string containing the name of the desired parameter, for lookup by name. You can use a [CString](../../atl-mfc-shared/reference/cstringt-class.md). +*`lpszName`*
+A string containing the name of the desired parameter, for lookup by name. You can use a [`CString`](../../atl-mfc-shared/reference/cstringt-class.md). ### Remarks -For a description of the information returned in *paraminfo*, see the [CDaoParameterInfo](../../mfc/reference/cdaoparameterinfo-structure.md) structure. This structure has members that correspond to the descriptive information under *dwInfoOptions* above. +For a description of the information returned in *`paraminfo`*, see the [`CDaoParameterInfo`](../../mfc/reference/cdaoparameterinfo-structure.md) structure. This structure has members that correspond to the descriptive information under *dwInfoOptions* above. For related information, see the topic "PARAMETERS Declaration (SQL)" in DAO Help. @@ -513,9 +513,9 @@ The number of records affected. ### Remarks -The count returned will not reflect changes in related tables when cascade updates or deletes are in effect. +The count returned doesn't reflect changes in related tables when cascade updates or deletes are in effect. -For related information see the topic "RecordsAffected Property" in DAO Help. +For related information, see the topic "RecordsAffected Property" in DAO Help. ## CDaoQueryDef::GetReturnsRecords @@ -549,7 +549,7 @@ The SQL statement that defines the query on which the querydef is based. ### Remarks -You will then probably parse the string for keywords, table names, and so on. +You'll then probably parse the string for keywords, table names, and so on. For related information, see the topics "SQL Property", "Comparison of Microsoft Jet Database Engine SQL and ANSI SQL", and "Querying a Database with SQL in Code" in DAO Help. @@ -589,7 +589,7 @@ The query type is set by what you specify in the querydef's SQL string when you - `dbQSetOperation` Union -- `dbQSPTBulk` Used with `dbQSQLPassThrough` to specify a query that does not return records. +- `dbQSPTBulk` Used with `dbQSQLPassThrough` to specify a query that doesn't return records. > [!NOTE] > To create a SQL pass-through query, don't set the `dbSQLPassThrough` constant. This is set automatically by the Microsoft Jet database engine when you create a querydef object and set the connection string. @@ -618,7 +618,7 @@ Contains a pointer to the [CDaoDatabase](../../mfc/reference/cdaodatabase-class. ### Remarks -Use this pointer if you need to access the database directly — for example, to obtain pointers to other querydef or recordset objects in the database's collections. +Use this pointer if you need to access the database directly. For example, to obtain pointers to other querydef or recordset objects in the database's collections. ## CDaoQueryDef::m_pDAOQueryDef @@ -626,7 +626,7 @@ Contains a pointer to the OLE interface for the underlying DAO querydef object. ### Remarks -This pointer is provided for completeness and consistency with the other classes. However, because MFC rather fully encapsulates DAO querydefs, you are unlikely to need it. If you do use it, do so cautiously — in particular, do not change the value of the pointer unless you know what you are doing. +This pointer is provided for completeness and consistency with the other classes. However, because MFC rather fully encapsulates DAO querydefs, you are unlikely to need it. If you do use it, do so cautiously. In particular, don't change the value of the pointer unless you know what you're doing. ## CDaoQueryDef::Open @@ -639,11 +639,11 @@ virtual void Open(LPCTSTR lpszName = NULL); ### Parameters *lpszName*
-A string that contains the name of the saved querydef to open. You can use a [CString](../../atl-mfc-shared/reference/cstringt-class.md). +A string that contains the name of the saved querydef to open. You can use a [`CString`](../../atl-mfc-shared/reference/cstringt-class.md). ### Remarks -Once the querydef is open, you can call its [Execute](#execute) member function or use the querydef to create a [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) object. +Once the querydef is open, you can call its [`Execute`](#execute) member function or use the querydef to create a [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md) object. ## CDaoQueryDef::SetConnect @@ -660,7 +660,7 @@ A string that contains a connection string for the associated [CDaoDatabase](../ ### Remarks -The connection string is used to pass additional information to ODBC and certain ISAM drivers as needed. It is not used for Microsoft Jet (.MDB) databases. +The connection string is used to pass additional information to ODBC and certain ISAM drivers as needed. It's not used for Microsoft Jet (`.MDB`) databases. > [!TIP] > The preferred way to work with ODBC tables is to attach them to an .MDB database. @@ -671,7 +671,7 @@ For more information about the connection string's structure and examples of con ## CDaoQueryDef::SetName -Call this member function if you want to change the name of a querydef that is not temporary. +Call this member function if you want to change the name of a querydef that isn't temporary. ```cpp void SetName(LPCTSTR lpszName); diff --git a/docs/mfc/reference/cdaoquerydefinfo-structure.md b/docs/mfc/reference/cdaoquerydefinfo-structure.md index aa6c9ddcb0..5f0250c15e 100644 --- a/docs/mfc/reference/cdaoquerydefinfo-structure.md +++ b/docs/mfc/reference/cdaoquerydefinfo-structure.md @@ -37,30 +37,30 @@ Uniquely names the querydef object. For more information, see the topic "Name Pr *m_nType*
A value that indicates the operational type of a querydef object. The value can be one of the following: -- `dbQSelect` Select — the query selects records. +- `dbQSelect` Select: the query selects records. -- `dbQAction` Action — the query moves or changes data but does not return records. +- `dbQAction` Action: the query moves or changes data but doesn't return records. -- `dbQCrosstab` Crosstab — the query returns data in a spreadsheet-like format. +- `dbQCrosstab` Crosstab: the query returns data in a spreadsheet-like format. -- `dbQDelete` Delete — the query deletes a set of specified rows. +- `dbQDelete` Delete: the query deletes a set of specified rows. -- `dbQUpdate` Update — the query changes a set of records. +- `dbQUpdate` Update: the query changes a set of records. -- `dbQAppend` Append — the query adds new records to the end of a table or query. +- `dbQAppend` Append: the query adds new records to the end of a table or query. -- `dbQMakeTable` Make-table — the query creates a new table from a recordset. +- `dbQMakeTable` Make-table: the query creates a new table from a recordset. -- `dbQDDL` Data-definition — the query affects the structure of tables or their parts. +- `dbQDDL` Data-definition: the query affects the structure of tables or their parts. -- `dbQSQLPassThrough` Pass-through — the SQL statement is passed directly to the database backend, without intermediate processing. +- `dbQSQLPassThrough` Pass-through: the SQL statement is passed directly to the database backend, without intermediate processing. -- `dbQSetOperation` Union — the query creates a snapshot-type recordset object containing data from all specified records in two or more tables with any duplicate records removed. To include the duplicates, add the keyword **ALL** in the querydef's SQL statement. +- `dbQSetOperation` Union: the query creates a snapshot-type recordset object containing data from all specified records in two or more tables with any duplicate records removed. To include the duplicates, add the keyword **ALL** in the querydef's SQL statement. -- `dbQSPTBulk` Used with `dbQSQLPassThrough` to specify a query that does not return records. +- `dbQSPTBulk` Used with `dbQSQLPassThrough` to specify a query that doesn't return records. > [!NOTE] -> To create a SQL pass-through query, you do not set the `dbQSQLPassThrough` constant. This is set automatically by the Microsoft Jet database engine when you create a querydef object and set the Connect property. +> To create a SQL pass-through query, you do not set the `dbQSQLPassThrough` constant. This is set automatically by the Microsoft Jet database engine when you create a querydef object and set the `Connect` property. For more information, see the topic "Type Property" in DAO Help. @@ -71,7 +71,7 @@ The date and time the querydef was created. To directly retrieve the date the qu The date and time of the most recent change made to the querydef. To directly retrieve the date the table was last updated, call the [GetDateLastUpdated](../../mfc/reference/cdaoquerydef-class.md#getdatelastupdated) member function of the querydef. See Comments below for more information. And see the topic "DateCreated, LastUpdated Properties" in DAO Help. *m_bUpdatable*
-Indicates whether changes can be made to a querydef object. If this property is TRUE, the querydef is updatable; otherwise, it is not. Updatable means the querydef object's query definition can be changed. The Updatable property of a querydef object is set to TRUE if the query definition can be updated, even if the resulting recordset is not updatable. To retrieve this property directly, call the querydef's [CanUpdate](../../mfc/reference/cdaoquerydef-class.md#canupdate) member function. For more information, see the topic "Updatable Property" in DAO Help. +Indicates whether changes can be made to a querydef object. If this property is TRUE, the querydef is updatable; otherwise, it isn't. Updatable means the querydef object's query definition can be changed. The Updatable property of a querydef object is set to TRUE if the query definition can be updated, even if the resulting recordset isn't updatable. To retrieve this property directly, call the querydef's [CanUpdate](../../mfc/reference/cdaoquerydef-class.md#canupdate) member function. For more information, see the topic "Updatable Property" in DAO Help. *m_bReturnsRecords*
Indicates whether a SQL pass-through query to an external database returns records. If this property is TRUE, the query returns records. To directly retrieve this property, call [CDaoQueryDef::GetReturnsRecords](../../mfc/reference/cdaoquerydef-class.md#getreturnsrecords). Not all SQL pass-through queries to external databases return records. For example, a SQL **UPDATE** statement updates records without returning records, while a SQL **SELECT** statement does return records. For more information, see the topic "ReturnsRecords Property" in DAO Help. @@ -89,9 +89,9 @@ The number of seconds the Microsoft Jet database engine waits before a timeout e The querydef is an object of class [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md). The references to Primary, Secondary, and All above indicate how the information is returned by the [GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function in class `CDaoDatabase`. -Information retrieved by the [CDaoDatabase::GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function is stored in a `CDaoQueryDefInfo` structure. Call `GetQueryDefInfo` for the database object in whose QueryDefs collection the querydef object is stored. `CDaoQueryDefInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoQueryDefInfo` object. Class `CDaoDatabase` also supplies member functions for directly accessing all of the properties returned in a `CDaoQueryDefInfo` object, so you will probably seldom need to call `GetQueryDefInfo`. +Information retrieved by the [CDaoDatabase::GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function is stored in a `CDaoQueryDefInfo` structure. Call `GetQueryDefInfo` for the database object in whose QueryDefs collection the querydef object is stored. `CDaoQueryDefInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoQueryDefInfo` object. Class `CDaoDatabase` also supplies member functions for directly accessing all of the properties returned in a `CDaoQueryDefInfo` object, so you'll probably seldom need to call `GetQueryDefInfo`. -When you append a new field or parameter object to the Fields or Parameters collection of a querydef object, an exception is thrown if the underlying database does not support the data type specified for the new object. +When you append a new field or parameter object to the Fields or Parameters collection of a querydef object, an exception is thrown if the underlying database doesn't support the data type specified for the new object. The date and time settings are derived from the computer on which the querydef was created or last updated. In a multiuser environment, users should get these settings directly from the file server using the **net time** command to avoid discrepancies in the DateCreated and LastUpdated property settings. diff --git a/docs/mfc/reference/cdaorecordset-class.md b/docs/mfc/reference/cdaorecordset-class.md index bce0f44cab..5f340098c6 100644 --- a/docs/mfc/reference/cdaorecordset-class.md +++ b/docs/mfc/reference/cdaorecordset-class.md @@ -72,11 +72,11 @@ class CDaoRecordset : public CObject |[CDaoRecordset::GetRecordCount](#getrecordcount)|Returns the number of records accessed in a recordset object.| |[CDaoRecordset::GetSQL](#getsql)|Gets the SQL string used to select records for the recordset.| |[CDaoRecordset::GetType](#gettype)|Called to determine the type of a recordset: table-type, dynaset-type, or snapshot-type.| -|[CDaoRecordset::GetValidationRule](#getvalidationrule)|Returns a `CString` containing the value that validates data as it is entered into a field.| -|[CDaoRecordset::GetValidationText](#getvalidationtext)|Retrieves the text that is displayed when a validation rule is not satisfied.| -|[CDaoRecordset::IsBOF](#isbof)|Returns nonzero if the recordset has been positioned before the first record. There is no current record.| +|[CDaoRecordset::GetValidationRule](#getvalidationrule)|Returns a `CString` containing the value that validates data as it's entered into a field.| +|[CDaoRecordset::GetValidationText](#getvalidationtext)|Retrieves the text that is displayed when a validation rule isn't satisfied.| +|[CDaoRecordset::IsBOF](#isbof)|Returns nonzero if the recordset has been positioned before the first record. There's no current record.| |[CDaoRecordset::IsDeleted](#isdeleted)|Returns nonzero if the recordset is positioned on a deleted record.| -|[CDaoRecordset::IsEOF](#iseof)|Returns nonzero if the recordset has been positioned after the last record. There is no current record.| +|[CDaoRecordset::IsEOF](#iseof)|Returns nonzero if the recordset has been positioned after the last record. There's no current record.| |[CDaoRecordset::IsFieldDirty](#isfielddirty)|Returns nonzero if the specified field in the current record has been changed.| |[CDaoRecordset::IsFieldNull](#isfieldnull)|Returns nonzero if the specified field in the current record is Null (having no value).| |[CDaoRecordset::IsFieldNullable](#isfieldnullable)|Returns nonzero if the specified field in the current record can be set to Null (having no value).| @@ -110,7 +110,7 @@ class CDaoRecordset : public CObject |----------|-----------------| |[CDaoRecordset::m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields)|Contains a flag indicating whether fields are automatically marked as changed.| |[CDaoRecordset::m_nFields](#m_nfields)|Contains the number of field data members in the recordset class and the number of columns selected by the recordset from the data source.| -|[CDaoRecordset::m_nParams](#m_nparams)|Contains the number of parameter data members in the recordset class — the number of parameters passed with the recordset's query| +|[CDaoRecordset::m_nParams](#m_nparams)|Contains the number of parameter data members in the recordset class—the number of parameters passed with the recordset's query| |[CDaoRecordset::m_pDAORecordset](#m_pdaorecordset)|A pointer to the DAO interface underlying the recordset object.| |[CDaoRecordset::m_pDatabase](#m_pdatabase)|Source database for this result set. Contains a pointer to a [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object.| |[CDaoRecordset::m_strFilter](#m_strfilter)|Contains a string used to construct a SQL **WHERE** statement.| @@ -124,9 +124,9 @@ Known as "recordsets," `CDaoRecordset` objects are available in the following th - Dynaset-type recordsets are the result of a query that can have updateable records. These recordsets are a set of records that you can use to examine, add, change, or delete records from an underlying database table or tables. Dynaset-type recordsets can contain fields from one or more tables in a database. -- Snapshot-type recordsets are a static copy of a set of records that you can use to find data or generate reports. These recordsets can contain fields from one or more tables in a database but cannot be updated. +- Snapshot-type recordsets are a static copy of a set of records that you can use to find data or generate reports. These recordsets can contain fields from one or more tables in a database but can't be updated. -Each form of recordset represents a set of records fixed at the time the recordset is opened. When you scroll to a record in a table-type recordset or a dynaset-type recordset, it reflects changes made to the record after the recordset is opened, either by other users or by other recordsets in your application. (A snapshot-type recordset cannot be updated.) You can use `CDaoRecordset` directly or derive an application-specific recordset class from `CDaoRecordset`. You can then: +Each form of recordset represents a set of records fixed at the time the recordset is opened. When you scroll to a record in a table-type recordset or a dynaset-type recordset, it reflects changes made to the record after the recordset is opened, either by other users or by other recordsets in your application. (A snapshot-type recordset can't be updated.) You can use `CDaoRecordset` directly or derive an application-specific recordset class from `CDaoRecordset`. You can then: - Scroll through the records. @@ -149,7 +149,7 @@ Class `CDaoRecordset` supplies an interface similar to that of class `CRecordset You can either use `CDaoRecordset` directly or derive a class from `CDaoRecordset`. To use a recordset class in either case, open a database and construct a recordset object, passing the constructor a pointer to your `CDaoDatabase` object. You can also construct a `CDaoRecordset` object and let MFC create a temporary `CDaoDatabase` object for you. Then call the recordset's [Open](#open) member function, specifying whether the object is a table-type recordset, a dynaset-type recordset, or a snapshot-type recordset. Calling `Open` selects data from the database and retrieves the first record. -Use the object's member functions and data members to scroll through the records and operate on them. The operations available depend on whether the object is a table-type recordset, a dynaset-type recordset, or a snapshot-type recordset, and whether it is updateable or read-only — this depends on the capability of the database or Open Database Connectivity (ODBC) data source. To refresh records that may have been changed or added since the `Open` call, call the object's [Requery](#requery) member function. Call the object's `Close` member function and destroy the object when you finish with it. +Use the object's member functions and data members to scroll through the records and operate on them. The operations available depend on whether the object is a table-type recordset, a dynaset-type recordset, or a snapshot-type recordset, and whether it's updateable or read-only — this depends on the capability of the database or Open Database Connectivity (ODBC) data source. To refresh records that may have been changed or added since the `Open` call, call the object's [Requery](#requery) member function. Call the object's `Close` member function and destroy the object when you finish with it. `CDaoRecordset` uses DAO record field exchange (DFX) to support reading and updating of record fields through type-safe C++ members of your `CDaoRecordset` or `CDaoRecordset`-derived class. You can also implement dynamic binding of columns in a database without using the DFX mechanism using [GetFieldValue](#getfieldvalue) and [SetFieldValue](#setfieldvalue). @@ -175,7 +175,7 @@ virtual void AddNew(); ### Remarks -The record's fields are initially Null. (In database terminology, Null means "having no value" and is not the same as NULL in C++.) To complete the operation, you must call the [Update](#update) member function. `Update` saves your changes to the data source. +The record's fields are initially Null. (In database terminology, Null means "having no value" and isn't the same as NULL in C++.) To complete the operation, you must call the [Update](#update) member function. `Update` saves your changes to the data source. > [!CAUTION] > If you edit a record and then scroll to another record without calling `Update`, your changes are lost without warning. @@ -184,7 +184,7 @@ If you add a record to a dynaset-type recordset by calling [AddNew](#addnew), th The position of the new record depends on the type of recordset: -- In a dynaset-type recordset, where the new record is inserted is not guaranteed. This behavior changed with Microsoft Jet 3.0 for reasons of performance and concurrency. If your goal is to make the newly added record the current record, get the bookmark of the last modified record and move to that bookmark: +- In a dynaset-type recordset, where the new record is inserted isn't guaranteed. This behavior changed with Microsoft Jet 3.0 for reasons of performance and concurrency. If your goal is to make the newly added record the current record, get the bookmark of the last modified record and move to that bookmark: [!code-cpp[NVC_MFCDatabase#1](../../mfc/codesnippet/cpp/cdaorecordset-class_1.cpp)] @@ -192,13 +192,13 @@ The position of the new record depends on the type of recordset: The record that was current before you used `AddNew` remains current. If you want to make the new record current and the recordset supports bookmarks, call [SetBookmark](#setbookmark) to the bookmark identified by the LastModified property setting of the underlying DAO recordset object. Doing so is useful for determining the value for counter (auto-increment) fields in an added record. For more information, see [GetLastModifiedBookmark](#getlastmodifiedbookmark). -If the database supports transactions, you can make your `AddNew` call part of a transaction. For more information about transactions, see class [CDaoWorkspace](../../mfc/reference/cdaoworkspace-class.md). Note that you should call [CDaoWorkspace::BeginTrans](../../mfc/reference/cdaoworkspace-class.md#begintrans) before calling `AddNew`. +If the database supports transactions, you can make your `AddNew` call part of a transaction. For more information about transactions, see class [CDaoWorkspace](../../mfc/reference/cdaoworkspace-class.md). You should call [CDaoWorkspace::BeginTrans](../../mfc/reference/cdaoworkspace-class.md#begintrans) before calling `AddNew`. -It is illegal to call `AddNew` for a recordset whose [Open](#open) member function has not been called. A `CDaoException` is thrown if you call `AddNew` for a recordset that cannot be appended. You can determine whether the recordset is updateable by calling [CanAppend](#canappend). +It's illegal to call `AddNew` for a recordset whose [`Open`](#open) member function hasn't been called. A `CDaoException` is thrown if you call `AddNew` for a recordset that can't be appended. You can determine whether the recordset is updateable by calling [CanAppend](#canappend). -The framework marks changed field data members to ensure they will be written to the record on the data source by the DAO record field exchange (DFX) mechanism. Changing the value of a field generally sets the field dirty automatically, so you will seldom need to call [SetFieldDirty](#setfielddirty) yourself, but you might sometimes want to ensure that columns will be explicitly updated or inserted regardless of what value is in the field data member. The DFX mechanism also employs the use of **PSEUDO NULL**. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). +The framework marks changed field data members to ensure they'll be written to the record on the data source by the DAO record field exchange (DFX) mechanism. Changing the value of a field generally sets the field dirty automatically, so you'll seldom need to call [SetFieldDirty](#setfielddirty) yourself, but you might sometimes want to ensure that columns are explicitly updated or inserted regardless of what value is in the field data member. The DFX mechanism also employs the use of **PSEUDO NULL**. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). -If the double-buffering mechanism is not being used, then changing the value of the field does not automatically set the field as dirty. In this case, it will be necessary to explicitly set the field dirty. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. +If the double-buffering mechanism isn't being used, then changing the value of the field doesn't automatically set the field as dirty. In this case, it's necessary to explicitly set the field dirty. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. > [!NOTE] > If records are double-buffered (that is, automatic field checking is enabled), calling `CancelUpdate` will restore the member variables to the values they had before `AddNew` or `Edit` was called. @@ -215,7 +215,7 @@ BOOL CanAppend() const; ### Return Value -Nonzero if the recordset allows adding new records; otherwise 0. `CanAppend` will return 0 if you opened the recordset as read-only. +Nonzero if the recordset allows adding new records; otherwise 0. `CanAppend` returns 0 if you opened the recordset as read-only. ### Remarks @@ -235,7 +235,7 @@ Nonzero if the recordset supports bookmarks, otherwise 0. ### Remarks -If you are using recordsets based entirely on Microsoft Jet database engine tables, bookmarks can be used except on snapshot-type recordsets flagged as forward-only scrolling recordsets. Other database products (external ODBC data sources) may not support bookmarks. +If you're using recordsets based entirely on Microsoft Jet database engine tables, bookmarks can be used except on snapshot-type recordsets flagged as forward-only scrolling recordsets. Other database products (external ODBC data sources) may not support bookmarks. For related information, see the topic "Bookmarkable Property" in DAO Help. @@ -249,12 +249,12 @@ virtual void CancelUpdate(); ### Remarks -For example, if an application calls the `Edit` or `AddNew` member function and has not called [Update](#update), `CancelUpdate` cancels any changes made after `Edit` or `AddNew` was called. +For example, if an application calls the `Edit` or `AddNew` member function and hasn't called [`Update`](#update), `CancelUpdate` cancels any changes made after `Edit` or `AddNew` was called. > [!NOTE] > If records are double-buffered (that is, automatic field checking is enabled), calling `CancelUpdate` will restore the member variables to the values they had before `AddNew` or `Edit` was called. -If there is no `Edit` or `AddNew` operation pending, `CancelUpdate` causes MFC to throw an exception. Call the [GetEditMode](#geteditmode) member function to determine if there is a pending operation that can be canceled. +If there's no `Edit` or `AddNew` operation pending, `CancelUpdate` causes MFC to throw an exception. Call the [GetEditMode](#geteditmode) member function to determine if there's a pending operation that can be canceled. For related information, see the topic "CancelUpdate Method" in DAO Help. @@ -272,9 +272,9 @@ Nonzero if `Requery` can be called to run the recordset's query again, otherwise ### Remarks -Table-type recordsets do not support `Requery`. +Table-type recordsets don't support `Requery`. -If `Requery` is not supported, call [Close](#close) then [Open](#open) to refresh the data. You can call `Requery` to update a recordset object's underlying parameter query after the parameter values have been changed. +If `Requery` isn't supported, call [Close](#close) then [Open](#open) to refresh the data. You can call `Requery` to update a recordset object's underlying parameter query after the parameter values have been changed. For related information, see the topic "Restartable Property" in DAO Help. @@ -341,7 +341,7 @@ CDaoRecordset(CDaoDatabase* pDatabase = NULL); ### Parameters *pDatabase*
-Contains a pointer to a [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object or the value NULL. If not NULL and the `CDaoDatabase` object's `Open` member function has not been called to connect it to the data source, the recordset attempts to open it for you during its own [Open](#open) call. If you pass NULL, a `CDaoDatabase` object is constructed and connected for you using the data source information you specified if you derived your recordset class from `CDaoRecordset`. +Contains a pointer to a [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object or the value NULL. If not NULL and the `CDaoDatabase` object's `Open` member function hasn't been called to connect it to the data source, the recordset attempts to open it for you during its own [Open](#open) call. If you pass NULL, a `CDaoDatabase` object is constructed and connected for you using the data source information you specified if you derived your recordset class from `CDaoRecordset`. ### Remarks @@ -350,7 +350,7 @@ You can either use `CDaoRecordset` directly or derive an application-specific cl > [!NOTE] > If you derive a `CDaoRecordset` class, your derived class must supply its own constructor. In the constructor of your derived class, call the constructor `CDaoRecordset::CDaoRecordset`, passing the appropriate parameters along to it. -Pass NULL to your recordset constructor to have a `CDaoDatabase` object constructed and connected for you automatically. This is a useful shortcut that does not require you to construct and connect a `CDaoDatabase` object prior to constructing your recordset. If the `CDaoDatabase` object is not open, a [CDaoWorkspace](../../mfc/reference/cdaoworkspace-class.md) object will also be created for you that uses the default workspace. For more information, see [CDaoDatabase::CDaoDatabase](../../mfc/reference/cdaodatabase-class.md#cdaodatabase). +Pass NULL to your recordset constructor to have a `CDaoDatabase` object constructed and connected for you automatically. This is a useful shortcut that doesn't require you to construct and connect a `CDaoDatabase` object prior to constructing your recordset. If the `CDaoDatabase` object isn't open, a [CDaoWorkspace](../../mfc/reference/cdaoworkspace-class.md) object will also be created for you that uses the default workspace. For more information, see [CDaoDatabase::CDaoDatabase](../../mfc/reference/cdaodatabase-class.md#cdaodatabase). ## CDaoRecordset::Close @@ -362,7 +362,7 @@ virtual void Close(); ### Remarks -Because `Close` does not destroy the `CDaoRecordset` object, you can reuse the object by calling `Open` on the same data source or a different data source. +Because `Close` doesn't destroy the `CDaoRecordset` object, you can reuse the object by calling `Open` on the same data source or a different data source. All pending [AddNew](#addnew) or [Edit](#edit) statements are canceled, and all pending transactions are rolled back. If you want to preserve pending additions or edits, call [Update](#update) before you call `Close` for each recordset. @@ -382,14 +382,14 @@ virtual void Delete(); After a successful deletion, the recordset's field data members are set to a Null value, and you must explicitly call one of the recordset navigation member functions ( [Move](#move), [Seek](#seek), [SetBookmark](#setbookmark), and so on) in order to move off the deleted record. When you delete records from a recordset, there must be a current record in the recordset before you call `Delete`; otherwise, MFC throws an exception. -`Delete` removes the current record and makes it inaccessible. Although you cannot edit or use the deleted record, it remains current. Once you move to another record, however, you cannot make the deleted record current again. +`Delete` removes the current record and makes it inaccessible. Although you can't edit or use the deleted record, it remains current. Once you move to another record, however, you can't make the deleted record current again. > [!CAUTION] -> The recordset must be updatable and there must be a valid record current in the recordset when you call `Delete`. For example, if you delete a record but do not scroll to a new record before you call `Delete` again, `Delete` throws a [CDaoException](../../mfc/reference/cdaoexception-class.md). +> The recordset must be updatable and there must be a valid record current in the recordset when you call `Delete`. For example, if you delete a record but don't scroll to a new record before you call `Delete` again, `Delete` throws a [CDaoException](../../mfc/reference/cdaoexception-class.md). You can undelete a record if you use transactions and you call the [CDaoWorkspace::Rollback](../../mfc/reference/cdaoworkspace-class.md#rollback) member function. If the base table is the primary table in a cascade delete relationship, deleting the current record may also delete one or more records in a foreign table. For more information, see the definition "cascade delete" in DAO Help. -Unlike `AddNew` and `Edit`, a call to `Delete` is not followed by a call to `Update`. +Unlike `AddNew` and `Edit`, a call to `Delete` isn't followed by a call to `Update`. For related information, see the topics "AddNew Method", "Edit Method", "Delete Method", "Update Method", and "Updatable Property" in DAO Help. @@ -408,9 +408,9 @@ Contains a pointer to a `CDaoFieldExchange` object. The framework will already h ### Remarks -It also binds your parameter data members, if any, to parameter placeholders in the SQL statement string for the recordset's selection. The exchange of field data, called DAO record field exchange (DFX), works in both directions: from the recordset object's field data members to the fields of the record on the data source, and from the record on the data source to the recordset object. If you are binding columns dynamically, you are not required to implement `DoFieldExchange`. +It also binds your parameter data members, if any, to parameter placeholders in the SQL statement string for the recordset's selection. The exchange of field data, called DAO record field exchange (DFX), works in both directions: from the recordset object's field data members to the fields of the record on the data source, and from the record on the data source to the recordset object. If you're binding columns dynamically, you're not required to implement `DoFieldExchange`. -The only action you must normally take to implement `DoFieldExchange` for your derived recordset class is to create the class with ClassWizard and specify the names and data types of the field data members. You might also add code to what ClassWizard writes to specify parameter data members. If all fields are to be bound dynamically, this function will be inactive unless you specify parameter data members. +The only action you must normally take to implement `DoFieldExchange` for your derived recordset class is to create the class with ClassWizard and specify the names and data types of the field data members. You might also add code to what ClassWizard writes to specify parameter data members. If all fields are to be bound dynamically, this function is inactive unless you specify parameter data members. When you declare your derived recordset class with ClassWizard, the wizard writes an override of `DoFieldExchange` for you, which resembles the following example: @@ -431,20 +431,20 @@ Once you call the `Edit` member function, changes made to the current record's f > [!CAUTION] > If you edit a record and then perform any operation that moves to another record without first calling `Update`, your changes are lost without warning. In addition, if you close the recordset or the parent database, your edited record is discarded without warning. -In some cases, you may want to update a column by making it Null (containing no data). To do so, call `SetFieldNull` with a parameter of TRUE to mark the field Null; this also causes the column to be updated. If you want a field to be written to the data source even though its value has not changed, call `SetFieldDirty` with a parameter of TRUE. This works even if the field had the value Null. +In some cases, you may want to update a column by making it Null (containing no data). To do so, call `SetFieldNull` with a parameter of TRUE to mark the field Null; this also causes the column to be updated. If you want a field to be written to the data source even though its value hasn't changed, call `SetFieldDirty` with a parameter of TRUE. This works even if the field had the value Null. -The framework marks changed field data members to ensure they will be written to the record on the data source by the DAO record field exchange (DFX) mechanism. Changing the value of a field generally sets the field dirty automatically, so you will seldom need to call [SetFieldDirty](#setfielddirty) yourself, but you might sometimes want to ensure that columns will be explicitly updated or inserted regardless of what value is in the field data member. The DFX mechanism also employs the use of **PSEUDO NULL**. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). +The framework marks changed field data members to ensure they'll be written to the record on the data source by the DAO record field exchange (DFX) mechanism. Changing the value of a field generally sets the field dirty automatically, so you'll seldom need to call [SetFieldDirty](#setfielddirty) yourself, but you might sometimes want to ensure that columns are explicitly updated or inserted regardless of what value is in the field data member. The DFX mechanism also employs the use of **PSEUDO NULL**. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). -If the double-buffering mechanism is not being used, then changing the value of the field does not automatically set the field as dirty. In this case, it will be necessary to explicitly set the field dirty. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. +If the double-buffering mechanism isn't being used, then changing the value of the field doesn't automatically set the field as dirty. In this case, it's necessary to explicitly set the field dirty. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. -When the recordset object is pessimistically locked in a multiuser environment, the record remains locked from the time `Edit` is used until the updating is complete. If the recordset is optimistically locked, the record is locked and compared with the pre-edited record just before it is updated in the database. If the record has changed since you called `Edit`, the `Update` operation fails and MFC throws an exception. You can change the locking mode with `SetLockingMode`. +When the recordset object is pessimistically locked in a multiuser environment, the record remains locked from the time `Edit` is used until the updating is complete. If the recordset is optimistically locked, the record is locked and compared with the pre-edited record just before it's updated in the database. If the record has changed since you called `Edit`, the `Update` operation fails and MFC throws an exception. You can change the locking mode with `SetLockingMode`. > [!NOTE] > Optimistic locking is always used on external database formats, such as ODBC and installable ISAM. -The current record remains current after you call `Edit`. To call `Edit`, there must be a current record. If there is no current record or if the recordset does not refer to an open table-type or dynaset-type recordset object, an exception occurs. Calling `Edit` causes a `CDaoException` to be thrown under the following conditions: +The current record remains current after you call `Edit`. To call `Edit`, there must be a current record. If there's no current record or if the recordset doesn't refer to an open table-type or dynaset-type recordset object, an exception occurs. Calling `Edit` causes a `CDaoException` to be thrown under the following conditions: -- There is no current record. +- There's no current record. - The database or recordset is read-only. @@ -454,7 +454,7 @@ The current record remains current after you call `Edit`. To call `Edit`, there - Another user has locked the page containing your record. -If the data source supports transactions, you can make the `Edit` call part of a transaction. Note that you should call `CDaoWorkspace::BeginTrans` before calling `Edit` and after the recordset has been opened. Also note that calling `CDaoWorkspace::CommitTrans` is not a substitute for calling `Update` to complete the `Edit` operation. For more information about transactions, see class `CDaoWorkspace`. +If the data source supports transactions, you can make the `Edit` call part of a transaction. You should call `CDaoWorkspace::BeginTrans` before calling `Edit` and after the recordset has been opened. Calling `CDaoWorkspace::CommitTrans` isn't a substitute for calling `Update` to complete the `Edit` operation. For more information about transactions, see class `CDaoWorkspace`. For related information, see the topics "AddNew Method", "Edit Method", "Delete Method", "Update Method", and "Updatable Property" in DAO Help. @@ -478,13 +478,13 @@ A [COleVariant](../../mfc/reference/colevariant-class.md) specifying a bookmark. ### Remarks -Caching improves the performance of an application that retrieves, or fetches, data from a remote server. A cache is space in local memory that holds the data most recently fetched from the server on the assumption that the data will probably be requested again while the application is running. When data is requested, the Microsoft Jet database engine checks the cache for the data first rather than fetching it from the server, which takes more time. Using data caching on non-ODBC data sources has no effect as the data is not saved in the cache. +Caching improves the performance of an application that retrieves, or fetches, data from a remote server. A cache is space in local memory that holds the data most recently fetched from the server on the assumption that the data will probably be requested again while the application is running. When data is requested, the Microsoft Jet database engine checks the cache for the data first rather than fetching it from the server, which takes more time. Using data caching on non-ODBC data sources has no effect as the data isn't saved in the cache. Rather than waiting for the cache to be filled with records as they are fetched, you can explicitly fill the cache at any time by calling the `FillCache` member function. This is a faster way to fill the cache because `FillCache` fetches several records at once instead of one at a time. For example, while each screenful of records is being displayed, you can have your application call `FillCache` to fetch the next screenful of records. -Any ODBC database accessed with recordset objects can have a local cache. To create the cache, open a recordset object from the remote data source, and then call the `SetCacheSize` and `SetCacheStart` member functions of the recordset. If *lSize* and *lBookmark* create a range that is partly or wholly outside the range specified by `SetCacheSize` and `SetCacheStart`, the portion of the recordset outside this range is ignored and is not loaded into the cache. If `FillCache` requests more records than remain in the remote data source, only the remaining records are fetched, and no exception is thrown. +Any ODBC database accessed with recordset objects can have a local cache. To create the cache, open a recordset object from the remote data source, and then call the `SetCacheSize` and `SetCacheStart` member functions of the recordset. If *lSize* and *lBookmark* create a range that is partly or wholly outside the range specified by `SetCacheSize` and `SetCacheStart`, the portion of the recordset outside this range is ignored and isn't loaded into the cache. If `FillCache` requests more records than remain in the remote data source, only the remaining records are fetched, and no exception is thrown. -Records fetched from the cache do not reflect changes made concurrently to the source data by other users. +Records fetched from the cache don't reflect changes made concurrently to the source data by other users. `FillCache` fetches only records not already cached. To force an update of all the cached data, call the `SetCacheSize` member function with an *lSize* parameter equal to 0, call `SetCacheSize` again with the *lSize* parameter equal to the size of the cache you originally requested, and then call `FillCache`. @@ -529,7 +529,7 @@ You can find the first, next, previous, or last instance of the string. `Find` i To locate a record in a table-type recordset, call the [Seek](#seek) member function. > [!TIP] -> The smaller the set of records you have, the more effective `Find` will be. In general, and especially with ODBC data, it is better to create a new query that retrieves just the records you want. +> The smaller the set of records you have, the more effective `Find` is. In general, and especially with ODBC data, it's better to create a new query that retrieves just the records you want. For related information, see the topic "FindFirst, FindLast, FindNext, FindPrevious Methods" in DAO Help. @@ -556,7 +556,7 @@ The `FindFirst` member function begins its search from the beginning of the reco If you want to include all the records in your search (not just those that meet a specific condition) use one of the Move operations to move from record to record. To locate a record in a table-type recordset, call the `Seek` member function. -If a record matching the criteria is not located, the current record pointer is undetermined, and `FindFirst` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence, and so on. +If a record matching the criteria isn't located, the current record pointer is undetermined, and `FindFirst` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence, and so on. > [!CAUTION] > If you edit the current record, be sure to save the changes by calling the `Update` member function before you move to another record. If you move to another record without updating, your changes are lost without warning. @@ -571,17 +571,17 @@ The `Find` member functions search from the location and in the direction specif |`FindPrevious`|Current record|Beginning of recordset| > [!NOTE] -> When you call `FindLast`, the Microsoft Jet database engine fully populates your recordset before beginning the search, if this has not already been done. The first search may take longer than subsequent searches. +> When you call `FindLast`, the Microsoft Jet database engine fully populates your recordset before beginning the search, if this hasn't already been done. The first search may take longer than subsequent searches. -Using one of the Find operations is not the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. +Using one of the Find operations isn't the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. Keep the following in mind when using the Find operations: -- If `Find` returns nonzero, the current record is not defined. In this case, you must position the current record pointer back to a valid record. +- If `Find` returns nonzero, the current record isn't defined. In this case, you must position the current record pointer back to a valid record. -- You cannot use a Find operation with a forward-only scrolling snapshot-type recordset. +- You can't use a Find operation with a forward-only scrolling snapshot-type recordset. -- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you are not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. +- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you're not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. - When working with ODBC databases and large dynasets, you may discover that using the Find operations is slow, especially when working with large recordsets. You can improve performance by using SQL queries with customized **ORDERBY** or **WHERE** clauses, parameter queries, or `CDaoQuerydef` objects that retrieve specific indexed records. @@ -610,20 +610,20 @@ The `FindLast` member function begins its search at the end of the recordset and If you want to include all the records in your search (not just those that meet a specific condition) use one of the Move operations to move from record to record. To locate a record in a table-type recordset, call the `Seek` member function. -If a record matching the criteria is not located, the current record pointer is undetermined, and `FindLast` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence after the first occurrence, and so on. +If a record matching the criteria isn't located, the current record pointer is undetermined, and `FindLast` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence after the first occurrence, and so on. > [!CAUTION] > If you edit the current record, be sure you save the changes by calling the `Update` member function before you move to another record. If you move to another record without updating, your changes are lost without warning. -Using one of the Find operations is not the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. +Using one of the Find operations isn't the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. Keep the following in mind when using the Find operations: -- If `Find` returns nonzero, the current record is not defined. In this case, you must position the current record pointer back to a valid record. +- If `Find` returns nonzero, the current record isn't defined. In this case, you must position the current record pointer back to a valid record. -- You cannot use a Find operation with a forward-only scrolling snapshot-type recordset. +- You can't use a Find operation with a forward-only scrolling snapshot-type recordset. -- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you are not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. +- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you're not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. - When working with ODBC databases and large dynasets, you may discover that using the Find operations is slow, especially when working with large recordsets. You can improve performance by using SQL queries with customized **ORDERBY** or **WHERE** clauses, parameter queries, or `CDaoQuerydef` objects that retrieve specific indexed records. @@ -652,20 +652,20 @@ The `FindNext` member function begins its search at the current record and searc If you want to include all the records in your search (not just those that meet a specific condition) use one of the Move operations to move from record to record. To locate a record in a table-type recordset, call the `Seek` member function. -If a record matching the criteria is not located, the current record pointer is undetermined, and `FindNext` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence, and so on. +If a record matching the criteria isn't located, the current record pointer is undetermined, and `FindNext` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence, and so on. > [!CAUTION] > If you edit the current record, be sure you save the changes by calling the `Update` member function before you move to another record. If you move to another record without updating, your changes are lost without warning. -Using one of the Find operations is not the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. +Using one of the Find operations isn't the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. Keep the following in mind when using the Find operations: -- If `Find` returns nonzero, the current record is not defined. In this case, you must position the current record pointer back to a valid record. +- If `Find` returns nonzero, the current record isn't defined. In this case, you must position the current record pointer back to a valid record. -- You cannot use a Find operation with a forward-only scrolling snapshot-type recordset. +- You can't use a Find operation with a forward-only scrolling snapshot-type recordset. -- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you are not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. +- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you're not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. - When working with ODBC databases and large dynasets, you may discover that using the Find operations is slow, especially when working with large recordsets. You can improve performance by using SQL queries with customized **ORDERBY** or **WHERE** clauses, parameter queries, or `CDaoQuerydef` objects that retrieve specific indexed records. @@ -694,20 +694,20 @@ The `FindPrev` member function begins its search at the current record and searc If you want to include all the records in your search (not just those that meet a specific condition) use one of the Move operations to move from record to record. To locate a record in a table-type recordset, call the `Seek` member function. -If a record matching the criteria is not located, the current record pointer is undetermined, and `FindPrev` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence, and so on. +If a record matching the criteria isn't located, the current record pointer is undetermined, and `FindPrev` returns zero. If the recordset contains more than one record that satisfies the criteria, `FindFirst` locates the first occurrence, `FindNext` locates the next occurrence, and so on. > [!CAUTION] > If you edit the current record, be sure you save the changes by calling the `Update` member function before you move to another record. If you move to another record without updating, your changes are lost without warning. -Using one of the Find operations is not the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. +Using one of the Find operations isn't the same as calling `MoveFirst` or `MoveNext`, however, which simply makes the first or next record current without specifying a condition. You can follow a Find operation with a Move operation. Keep the following in mind when using the Find operations: -- If `Find` returns nonzero, the current record is not defined. In this case, you must position the current record pointer back to a valid record. +- If `Find` returns nonzero, the current record isn't defined. In this case, you must position the current record pointer back to a valid record. -- You cannot use a Find operation with a forward-only scrolling snapshot-type recordset. +- You can't use a Find operation with a forward-only scrolling snapshot-type recordset. -- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you are not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. +- You should use the U.S. date format (month-day-year) when you search for fields containing dates, even if you're not using the U.S. version of the Microsoft Jet database engine; otherwise, matching records may not be found. - When working with ODBC databases and large dynasets, you may discover that using the Find operations is slow, especially when working with large recordsets. You can improve performance by using SQL queries with customized **ORDERBY** or **WHERE** clauses, parameter queries, or `CDaoQuerydef` objects that retrieve specific indexed records. @@ -729,10 +729,10 @@ An integer from 0 to the number of records in the recordset. Corresponds to the The AbsolutePosition property value of the underlying DAO object is zero-based; a setting of 0 refers to the first record in the recordset. You can determine the number of populated records in the recordset by calling [GetRecordCount](#getrecordcount). Calling `GetRecordCount` may take some time because it must access all records to determine the count. -If there is no current record, as when there are no records in the recordset, - 1 is returned. If the current record is deleted, the AbsolutePosition property value is not defined, and MFC throws an exception if it is referenced. For dynaset-type recordsets, new records are added to the end of the sequence. +If there's no current record, as when there are no records in the recordset, - 1 is returned. If the current record is deleted, the AbsolutePosition property value isn't defined, and MFC throws an exception if it's referenced. For dynaset-type recordsets, new records are added to the end of the sequence. > [!NOTE] -> This property is not intended to be used as a surrogate record number. Bookmarks are still the recommended way of retaining and returning to a given position and are the only way to position the current record across all types of recordset objects. In particular, the position of a given record changes when record(s) preceding it are deleted. There is also no assurance that a given record will have the same absolute position if the recordset is re-created again because the order of individual records within a recordset is not guaranteed unless it is created with a SQL statement using an **ORDERBY** clause. +> This property isn't intended to be used as a surrogate record number. Bookmarks are still the recommended way of retaining and returning to a given position and are the only way to position the current record across all types of recordset objects. In particular, the position of a given record changes when record(s) preceding it are deleted. There's also no assurance that a given record will have the same absolute position if the recordset is re-created again because the order of individual records within a recordset isn't guaranteed unless it's created with a SQL statement using an **ORDERBY** clause. > [!NOTE] > This member function is valid only for dynaset-type and snapshot-type recordsets. @@ -755,7 +755,7 @@ Returns a value representing the bookmark on the current record. When a recordset object is created or opened, each of its records already has a unique bookmark if it supports them. Call `CanBookmark` to determine whether a recordset supports bookmarks. -You can save the bookmark for the current record by assigning the value of the bookmark to a `COleVariant` object. To quickly return to that record at any time after moving to a different record, call `SetBookmark` with a parameter corresponding to the value of that `COleVariant` object. +You can save the bookmark for the current record by assigning the value of the bookmark to a `COleVariant` object. To quickly return to that record after moving to a different record, call `SetBookmark` with a parameter corresponding to the value of that `COleVariant` object. > [!NOTE] > Calling [Requery](#requery) changes DAO bookmarks. @@ -776,7 +776,7 @@ A value that specifies the number of records in a dynaset-type recordset contain ### Remarks -Data caching improves the performance of an application that retrieves data from a remote server through dynaset-type recordset objects. A cache is a space in local memory that holds the data most recently retrieved from the server in the event that the data will be requested again while the application is running. When data is requested, the Microsoft Jet database engine checks the cache for the requested data first rather than retrieving it from the server, which takes more time. Data that does not come from an ODBC data source is not saved in the cache. +Data caching improves the performance of an application that retrieves data from a remote server through dynaset-type recordset objects. A cache is a space in local memory that holds the data most recently retrieved from the server in case the data is requested again while the application is running. When data is requested, the Microsoft Jet database engine checks the cache for the requested data first rather than retrieving it from the server, which takes more time. Data that doesn't come from an ODBC data source isn't saved in the cache. Any ODBC data source, such as an attached table, can have a local cache. @@ -799,7 +799,7 @@ A `COleVariant` that specifies the bookmark of the first record in the recordset The Microsoft Jet database engine requests records within the cache range from the cache, and it requests records outside the cache range from the server. > [!NOTE] -> Records retrieved from the cache do not reflect changes made concurrently to the source data by other users. +> Records retrieved from the cache don't reflect changes made concurrently to the source data by other users. For related information, see the topic "CacheSize, CacheStart Properties" in DAO Help. @@ -1018,7 +1018,7 @@ The two versions of `GetFieldValue` that return a value return a [COleVariant](. You can look up a field by name or by ordinal position. > [!NOTE] -> It is more efficient to call one of the versions of this member function that takes a `COleVariant` object reference as a parameter, rather than calling a version that returns a `COleVariant` object. The latter versions of this function are kept for backward compatibility. +> It's more efficient to call one of the versions of this member function that takes a `COleVariant` object reference as a parameter, rather than calling a version that returns a `COleVariant` object. The latter versions of this function are kept for backward compatibility. Use `GetFieldValue` and [SetFieldValue](#setfieldvalue) to dynamically bind fields at run time rather than statically binding columns using the [DoFieldExchange](#dofieldexchange) mechanism. @@ -1040,7 +1040,7 @@ The number of indexes in the table-type recordset. ### Remarks -`GetIndexCount` is useful for looping through all indexes in the recordset. For that purpose, use `GetIndexCount` in conjunction with [GetIndexInfo](#getindexinfo). If you call this member function on dynaset-type or snapshot-type recordsets, MFC throws an exception. +`GetIndexCount` is useful for looping through all indexes in the recordset. For that purpose, use `GetIndexCount` with [`GetIndexInfo`](#getindexinfo). If you call this member function on dynaset-type or snapshot-type recordsets, MFC throws an exception. For related information, see the topic "Attributes Property" in DAO Help. @@ -1102,9 +1102,9 @@ A `COleVariant` containing a bookmark that indicates the most recently added or ### Remarks -When a recordset object is created or opened, each of its records already has a unique bookmark if it supports them. Call [GetBookmark](#getbookmark) to determine if the recordset supports bookmarks. If the recordset does not support bookmarks, a `CDaoException` is thrown. +When a recordset object is created or opened, each of its records already has a unique bookmark if it supports them. Call [GetBookmark](#getbookmark) to determine if the recordset supports bookmarks. If the recordset doesn't support bookmarks, a `CDaoException` is thrown. -When you add a record, it appears at the end of the recordset, and is not the current record. To make the new record current, call `GetLastModifiedBookmark` and then call `SetBookmark` to return to the newly added record. +When you add a record, it appears at the end of the recordset, and isn't the current record. To make the new record current, call `GetLastModifiedBookmark` and then call `SetBookmark` to return to the newly added record. For related information, see the topic "LastModified Property" in DAO Help. @@ -1122,7 +1122,7 @@ Nonzero if the type of locking is pessimistic, otherwise 0 for optimistic record ### Remarks -When pessimistic locking is in effect, the data page containing the record you are editing is locked as soon as you call the [Edit](#edit) member function. The page is unlocked when you call the [Update](#update) or [Close](#close) member function or any of the Move or Find operations. +When pessimistic locking is in effect, the data page containing the record you're editing is locked as soon as you call the [Edit](#edit) member function. The page is unlocked when you call the [Update](#update) or [Close](#close) member function or any of the Move or Find operations. When optimistic locking is in effect, the data page containing the record is locked only while the record is being updated with the `Update` member function. @@ -1191,7 +1191,7 @@ A number between 0 and 100 that indicates the approximate location of the curren You can move to the last record by calling [MoveLast](#movelast) to complete the population of all recordsets, but this may take a significant amount of time. -You can call `GetPercentPosition` on all three types of recordset objects, including tables without indexes. However, you cannot call `GetPercentPosition` on forward-only scrolling snapshots, or on a recordset opened from a pass-through query against an external database. If there is no current record, or he current record has been deleted, a `CDaoException` is thrown. +You can call `GetPercentPosition` on all three types of recordset objects, including tables without indexes. However, you can't call `GetPercentPosition` on forward-only scrolling snapshots, or on a recordset opened from a pass-through query against an external database. If there's no current record, or the current record has been deleted, a `CDaoException` is thrown. For related information, see the topic "PercentPosition Property" in DAO Help. @@ -1209,13 +1209,13 @@ Returns the number of records accessed in a recordset object. ### Remarks -`GetRecordCount` does not indicate how many records are contained in a dynaset-type or snapshot-type recordset until all records have been accessed. This member function call may take a significant amount of time to complete. +`GetRecordCount` doesn't indicate how many records are contained in a dynaset-type or snapshot-type recordset until all records have been accessed. This member function call may take a significant amount of time to complete. Once the last record has been accessed, the return value indicates the total number of undeleted records in the recordset. To force the last record to be accessed, call the `MoveLast` or `FindLast` member function for the recordset. You can also use a SQL Count to determine the approximate number of records your query will return. -As your application deletes records in a dynaset-type recordset, the return value of `GetRecordCount` decreases. However, records deleted by other users are not reflected by `GetRecordCount` until the current record is positioned to a deleted record. If you execute a transaction that affects the record count and subsequently roll back the transaction, `GetRecordCount` will not reflect the actual number of remaining records. +As your application deletes records in a dynaset-type recordset, the return value of `GetRecordCount` decreases. However, records deleted by other users aren't reflected by `GetRecordCount` until the current record is positioned to a deleted record. If you execute a transaction that affects the record count and subsequently roll back the transaction, `GetRecordCount` won't reflect the actual number of remaining records. -The value of `GetRecordCount` from a snapshot-type recordset is not affected by changes in the underlying tables. +The value of `GetRecordCount` from a snapshot-type recordset isn't affected by changes in the underlying tables. The value of `GetRecordCount` from a table-type recordset reflects the approximate number of records in the table and is affected immediately as table records are added and deleted. @@ -1278,11 +1278,11 @@ CString GetValidationRule(); ### Return Value -A `CString` object containing a value that validates the data in a record as it is changed or added to a table. +A `CString` object containing a value that validates the data in a record as it's changed or added to a table. ### Remarks -This rule is text-based, and is applied each time the underlying table is changed. If the data is not legal, MFC throws an exception. The returned error message is the text of the ValidationText property of the underlying field object, if specified, or the text of the expression specified by the ValidationRule property of the underlying field object. You can call [GetValidationText](#getvalidationtext) to obtain the text of the error message. +This rule is text-based, and is applied each time the underlying table is changed. If the data isn't legal, MFC throws an exception. The returned error message is the text of the ValidationText property of the underlying field object, if specified, or the text of the expression specified by the ValidationRule property of the underlying field object. You can call [GetValidationText](#getvalidationtext) to obtain the text of the error message. For example, a field in a record that requires the day of the month might have a validation rule such as "DAY BETWEEN 1 AND 31." @@ -1298,7 +1298,7 @@ CString GetValidationText(); ### Return Value -A `CString` object containing the text of the message that is displayed if the value of a field does not satisfy the validation rule of the underlying field object. +A `CString` object containing the text of the message that is displayed if the value of a field doesn't satisfy the validation rule of the underlying field object. ### Remarks @@ -1330,7 +1330,7 @@ Effect of specific methods on `IsBOF` and `IsEOF` settings: - An `AddNew` call followed by an `Update` call that successfully inserts a new record will cause `IsBOF` to return 0, but only if `IsEOF` is already nonzero. The state of `IsEOF` will always remain unchanged. As defined by the Microsoft Jet database engine, the current record pointer of an empty recordset is at the end of a file, so any new record is inserted after the current record. -- Any `Delete` call, even if it removes the only remaining record from a recordset, will not change the value of `IsBOF` or `IsEOF`. +- Any `Delete` call, even if it removes the only remaining record from a recordset, won't change the value of `IsBOF` or `IsEOF`. This table shows which Move operations are allowed with different combinations of `IsBOF`/ `IsEOF`. @@ -1341,9 +1341,9 @@ This table shows which Move operations are allowed with different combinations o |Both nonzero|Exception|Exception|Exception|Exception| |Both 0|Allowed|Allowed|Allowed|Allowed| -Allowing a Move operation does not mean that the operation will successfully locate a record. It merely indicates that an attempt to perform the specified Move operation is allowed and will not generate an exception. The value of the `IsBOF` and `IsEOF` member functions may change as a result of the attempted move. +Allowing a Move operation doesn't mean that the operation will successfully locate a record. It merely indicates that an attempt to perform the specified Move operation is allowed and won't generate an exception. The value of the `IsBOF` and `IsEOF` member functions may change as a result of the attempted move. -The effect of Move operations that do not locate a record on the value of `IsBOF` and `IsEOF` settings is shown in the following table. +The effect of Move operations that don't locate a record on the value of `IsBOF` and `IsEOF` settings is shown in the following table. |Operations|IsBOF|IsEOF| |------|-----------|-----------| @@ -1371,9 +1371,9 @@ Nonzero if the recordset is positioned on a deleted record; otherwise 0. If you scroll to a record and `IsDeleted` returns TRUE (nonzero), then you must scroll to another record before you can perform any other recordset operations. > [!NOTE] -> You don't need to check the deleted status for records in a snapshot or table-type recordset. Because records cannot be deleted from a snapshot, there is no need to call `IsDeleted`. For table-type recordsets, deleted records are actually removed from the recordset. Once a record has been deleted, either by you, another user, or in another recordset, you cannot scroll back to that record. Therefore, there is no need to call `IsDeleted`. +> You don't need to check the deleted status for records in a snapshot or table-type recordset. Because records can't be deleted from a snapshot, there's no need to call `IsDeleted`. For table-type recordsets, deleted records are actually removed from the recordset. Once a record has been deleted, either by you, another user, or in another recordset, you can't scroll back to that record. Therefore, there's no need to call `IsDeleted`. -When you delete a record from a dynaset, it is removed from the recordset and you cannot scroll back to that record. However, if a record in a dynaset is deleted either by another user or in another recordset based on the same table, `IsDeleted` will return TRUE when you later scroll to that record. +When you delete a record from a dynaset, it's removed from the recordset and you can't scroll back to that record. However, if a record in a dynaset is deleted either by another user or in another recordset based on the same table, `IsDeleted` returns TRUE when you later scroll to that record. For related information, see the topics "Delete Method", "LastModified Property", and "EditMode Property" in DAO Help. @@ -1403,7 +1403,7 @@ Effect of specific methods on `IsBOF` and `IsEOF` settings: - An `AddNew` call followed by an `Update` call that successfully inserts a new record will cause `IsBOF` to return 0, but only if `IsEOF` is already nonzero. The state of `IsEOF` will always remain unchanged. As defined by the Microsoft Jet database engine, the current record pointer of an empty recordset is at the end of a file, so any new record is inserted after the current record. -- Any `Delete` call, even if it removes the only remaining record from a recordset, will not change the value of `IsBOF` or `IsEOF`. +- Any `Delete` call, even if it removes the only remaining record from a recordset, won't change the value of `IsBOF` or `IsEOF`. This table shows which Move operations are allowed with different combinations of `IsBOF`/ `IsEOF`. @@ -1414,9 +1414,9 @@ This table shows which Move operations are allowed with different combinations o |Both nonzero|Exception|Exception|Exception|Exception| |Both 0|Allowed|Allowed|Allowed|Allowed| -Allowing a Move operation does not mean that the operation will successfully locate a record. It merely indicates that an attempt to perform the specified Move operation is allowed and will not generate an exception. The value of the `IsBOF` and `IsEOF` member functions may change as a result of the attempted Move. +Allowing a Move operation doesn't mean that the operation will successfully locate a record. It merely indicates that an attempt to perform the specified Move operation is allowed and won't generate an exception. The value of the `IsBOF` and `IsEOF` member functions may change as a result of the attempted Move. -The effect of Move operations that do not locate a record on the value of `IsBOF` and `IsEOF` settings is shown in the following table. +The effect of Move operations that don't locate a record on the value of `IsBOF` and `IsEOF` settings is shown in the following table. |Operations|IsBOF|IsEOF| |------|-----------|-----------| @@ -1446,7 +1446,7 @@ Nonzero if the specified field data member is flagged as dirty; otherwise 0. ### Remarks -The data in all dirty field data members will be transferred to the record on the data source when the current record is updated by a call to the `Update` member function of `CDaoRecordset` (following a call to `Edit` or `AddNew`). With this knowledge, you can take further steps, such as unflagging the field data member to mark the column so it will not be written to the data source. +The data in all dirty field data members are transferred to the record on the data source when the current record is updated by a call to the `Update` member function of `CDaoRecordset` (following a call to `Edit` or `AddNew`). With this knowledge, you can take further steps, such as unflagging the field data member to mark the column so it won't be written to the data source. `IsFieldDirty` is implemented through `DoFieldExchange`. @@ -1469,7 +1469,7 @@ Nonzero if the specified field data member is flagged as Null; otherwise 0. ### Remarks -(In database terminology, Null means "having no value" and is not the same as NULL in C++.) If a field data member is flagged as Null, it is interpreted as a column of the current record for which there is no value. +(In database terminology, Null means "having no value" and isn't the same as NULL in C++.) If a field data member is flagged as Null, it's interpreted as a column of the current record for which there's no value. > [!NOTE] > In certain situations, using `IsFieldNull` can be inefficient, as the following code example illustrates: @@ -1477,11 +1477,11 @@ Nonzero if the specified field data member is flagged as Null; otherwise 0. [!code-cpp[NVC_MFCDatabase#5](../../mfc/codesnippet/cpp/cdaorecordset-class_5.cpp)] > [!NOTE] -> If you are using dynamic record binding, without deriving from `CDaoRecordset`, be sure to use VT_NULL as shown in the example. +> If you're using dynamic record binding, without deriving from `CDaoRecordset`, be sure to use VT_NULL as shown in the example. ## CDaoRecordset::IsFieldNullable -Call this member function to determine whether the specified field data member is "nullable" (can be set to a Null value; C++ NULL is not the same as Null, which, in database terminology, means "having no value"). +Call this member function to determine whether the specified field data member is "nullable" (can be set to a Null value; C++ NULL isn't the same as Null, which, in database terminology, means "having no value"). ```cpp BOOL IsFieldNullable(void* pv); @@ -1498,7 +1498,7 @@ Nonzero if the specified field data member can be made Null; otherwise 0. ### Remarks -A field that cannot be Null must have a value. If you attempt to set such a field to Null when adding or updating a record, the data source rejects the addition or update, and `Update` will throw an exception. The exception occurs when you call `Update`, not when you call `SetFieldNull`. +A field that can't be Null must have a value. If you attempt to set such a field to Null when adding or updating a record, the data source rejects the addition or update, and `Update` will throw an exception. The exception occurs when you call `Update`, not when you call `SetFieldNull`. ## CDaoRecordset::IsOpen @@ -1510,7 +1510,7 @@ BOOL IsOpen() const; ### Return Value -Nonzero if the recordset object's `Open` or `Requery` member function has previously been called and the recordset has not been closed; otherwise 0. +Nonzero if the recordset object's `Open` or `Requery` member function has previously been called and the recordset hasn't been closed; otherwise 0. ### Remarks @@ -1537,7 +1537,7 @@ The framework uses this number to manage interaction between the field data memb > [!NOTE] > This number must correspond to the number of output columns registered in `DoFieldExchange` after a call to `SetFieldType` with the parameter `CDaoFieldExchange::outputColumn`. -You can bind columns dynamically by way of `CDaoRecordset::GetFieldValue` and `CDaoRecordset::SetFieldValue`. If you do so, you do not need to increment the count in `m_nFields` to reflect the number of DFX function calls in your `DoFieldExchange` member function. +You can bind columns dynamically by way of `CDaoRecordset::GetFieldValue` and `CDaoRecordset::SetFieldValue`. If you do so, you don't need to increment the count in `m_nFields` to reflect the number of DFX function calls in your `DoFieldExchange` member function. ## CDaoRecordset::m_nParams @@ -1572,7 +1572,7 @@ Contains a pointer to the `CDaoDatabase` object through which the recordset is c This variable is set in two ways. Typically, you pass a pointer to an already open `CDaoDatabase` object when you construct the recordset object. If you pass NULL instead, `CDaoRecordset` creates a `CDaoDatabase` object for you and opens it. In either case, `CDaoRecordset` stores the pointer in this variable. -Normally you will not directly need to use the pointer stored in `m_pDatabase`. If you write your own extensions to `CDaoRecordset`, however, you might need to use the pointer. For example, you might need the pointer if you throw your own `CDaoException`(s). +Normally you'll not directly need to use the pointer stored in `m_pDatabase`. If you write your own extensions to `CDaoRecordset`, however, you might need to use the pointer. For example, you might need the pointer if you throw your own `CDaoException`(s). For related information, see the topic "Database Object" in DAO Help. @@ -1582,9 +1582,9 @@ Contains a string that is used to construct the **WHERE** clause of a SQL statem ### Remarks -It does not include the reserved word **WHERE** to filter the recordset. The use of this data member is not applicable to table-type recordsets. The use of `m_strFilter` has no effect when opening a recordset using a `CDaoQueryDef` pointer. +It doesn't include the reserved word **WHERE** to filter the recordset. The use of this data member isn't applicable to table-type recordsets. The use of `m_strFilter` has no effect when opening a recordset using a `CDaoQueryDef` pointer. -Use the U.S. date format (month-day-year) when you filter fields containing dates, even if you are not using the U.S. version of the Microsoft Jet database engine; otherwise, the data may not be filtered as you expect. +Use the U.S. date format (month-day-year) when you filter fields containing dates, even if you're not using the U.S. version of the Microsoft Jet database engine; otherwise, the data may not be filtered as you expect. For related information, see the topic "Filter Property" in DAO Help. @@ -1596,7 +1596,7 @@ Contains a string containing the **ORDERBY** clause of a SQL statement without t You can sort on dynaset- and snapshot-type recordset objects. -You cannot sort table-type recordset objects. To determine the sort order of a table-type recordset, call [SetCurrentIndex](#setcurrentindex). +You can't sort table-type recordset objects. To determine the sort order of a table-type recordset, call [SetCurrentIndex](#setcurrentindex). The use of *m_strSort* has no effect when opening a recordset using a `CDaoQueryDef` pointer. @@ -1628,7 +1628,7 @@ You can move forward or backward. `Move( 1 )` is equivalent to `MoveNext`, and ` > [!NOTE] > If you call any of the `Move` functions while the current record is being updated or added, the updates are lost without warning. -When you call `Move` on a forward-only scrolling snapshot, the *lRows* parameter must be a positive integer and bookmarks are not allowed, so you can move forward only. +When you call `Move` on a forward-only scrolling snapshot, the *lRows* parameter must be a positive integer and bookmarks aren't allowed, so you can move forward only. To make the first, last, next, or previous record in a recordset the current record, call the `MoveFirst`, `MoveLast`, `MoveNext`, or `MovePrev` member function. @@ -1644,7 +1644,7 @@ void MoveFirst(); ### Remarks -You do not have to call `MoveFirst` immediately after you open the recordset. At that time, the first record (if any) is automatically the current record. +You don't have to call `MoveFirst` immediately after you open the recordset. At that time, the first record (if any) is automatically the current record. > [!CAUTION] > Calling any of the `Move` functions throws an exception if the recordset has no records. In general, call both `IsBOF` and `IsEOF` before a Move operation to determine whether the recordset has any records. After you call `Open` or `Requery`, call either `IsBOF` or `IsEOF`. @@ -1654,11 +1654,11 @@ You do not have to call `MoveFirst` immediately after you open the recordset. At Use the `Move` functions to move from record to record without applying a condition. Use the Find operations to locate records in a dynaset-type or snapshot-type recordset object that satisfy a certain condition. To locate a record in a table-type recordset object, call `Seek`. -If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you do not set the current index, the order of returned records is undefined. +If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you don't set the current index, the order of returned records is undefined. If you call `MoveLast` on a recordset object based on a SQL query or querydef, the query is forced to completion and the recordset object is fully populated. -You cannot call the `MoveFirst` or `MovePrev` member function with a forward-only scrolling snapshot. +You can't call the `MoveFirst` or `MovePrev` member function with a forward-only scrolling snapshot. To move the position of the current record in a recordset object a specific number of records forward or backward, call `Move`. @@ -1682,7 +1682,7 @@ void MoveLast(); Use the `Move` functions to move from record to record without applying a condition. Use the Find operations to locate records in a dynaset-type or snapshot-type recordset object that satisfy a certain condition. To locate a record in a table-type recordset object, call `Seek`. -If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you do not set the current index, the order of returned records is undefined. +If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you don't set the current index, the order of returned records is undefined. If you call `MoveLast` on a recordset object based on a SQL query or querydef, the query is forced to completion and the recordset object is fully populated. @@ -1700,7 +1700,7 @@ void MoveNext(); ### Remarks -It is recommended that you call `IsBOF` before you attempt to move to the previous record. A call to `MovePrev` will throw a `CDaoException` if `IsBOF` returns nonzero, indicating either that you have already scrolled before the first record or that no records were selected by the recordset. +It's recommended that you call `IsBOF` before you attempt to move to the previous record. A call to `MovePrev` throws a `CDaoException` if `IsBOF` returns nonzero, indicating either that you have already scrolled before the first record or that no records were selected by the recordset. > [!CAUTION] > Calling any of the `Move` functions throws an exception if the recordset has no records. In general, call both `IsBOF` and `IsEOF` before a Move operation to determine whether the recordset has any records. After you call `Open` or `Requery`, call either `IsBOF` or `IsEOF`. @@ -1710,7 +1710,7 @@ It is recommended that you call `IsBOF` before you attempt to move to the previo Use the `Move` functions to move from record to record without applying a condition. Use the Find operations to locate records in a dynaset-type or snapshot-type recordset object that satisfy a certain condition. To locate a record in a table-type recordset object, call `Seek`. -If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you do not set the current index, the order of returned records is undefined. +If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you don't set the current index, the order of returned records is undefined. To move the position of the current record in a recordset object a specific number of records forward or backward, call `Move`. @@ -1726,7 +1726,7 @@ void MovePrev(); ### Remarks -It is recommended that you call `IsBOF` before you attempt to move to the previous record. A call to `MovePrev` will throw a `CDaoException` if `IsBOF` returns nonzero, indicating either that you have already scrolled before the first record or that no records were selected by the recordset. +It's recommended that you call `IsBOF` before you attempt to move to the previous record. A call to `MovePrev` throws a `CDaoException` if `IsBOF` returns nonzero, indicating either that you have already scrolled before the first record or that no records were selected by the recordset. > [!CAUTION] > Calling any of the `Move` functions throws an exception if the recordset has no records. In general, call both `IsBOF` and `IsEOF` before a Move operation to determine whether the recordset has any records. After you call `Open` or `Requery`, call either `IsBOF` or `IsEOF`. @@ -1736,9 +1736,9 @@ It is recommended that you call `IsBOF` before you attempt to move to the previo Use the `Move` functions to move from record to record without applying a condition. Use the Find operations to locate records in a dynaset-type or snapshot-type recordset object that satisfy a certain condition. To locate a record in a table-type recordset object, call `Seek`. -If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you do not set the current index, the order of returned records is undefined. +If the recordset refers to a table-type recordset, movement follows the table's current index. You can set the current index by using the Index property of the underlying DAO object. If you don't set the current index, the order of returned records is undefined. -You cannot call the `MoveFirst` or `MovePrev` member function with a forward-only scrolling snapshot. +You can't call the `MoveFirst` or `MovePrev` member function with a forward-only scrolling snapshot. To move the position of the current record in a recordset object a specific number of records forward or backward, call `Move`. @@ -1794,11 +1794,11 @@ One or more of the options listed below. The default value is 0. Possible values - `dbForwardOnly` The recordset is a forward-only scrolling snapshot. -- `dbSeeChanges` Generate an exception if another user is changing data you are editing. +- `dbSeeChanges` Generate an exception if another user is changing data you're editing. -- `dbDenyWrite` Other users cannot modify or add records. +- `dbDenyWrite` Other users can't modify or add records. -- `dbDenyRead` Other users cannot view records (table-type recordset only). +- `dbDenyRead` Other users can't view records (table-type recordset only). - `dbReadOnly` You can only view records; other users can modify them. @@ -1810,10 +1810,10 @@ One or more of the options listed below. The default value is 0. Possible values > The constants `dbConsistent` and `dbInconsistent` are mutually exclusive. You can use one or the other, but not both in a given instance of `Open`. *pTableDef*
-A pointer to a [CDaoTableDef](../../mfc/reference/cdaotabledef-class.md) object. This version is valid only for table-type recordsets. When using this option, the `CDaoDatabase` pointer used to construct the `CDaoRecordset` is not used; rather, the database in which the tabledef resides is used. +A pointer to a [CDaoTableDef](../../mfc/reference/cdaotabledef-class.md) object. This version is valid only for table-type recordsets. When using this option, the `CDaoDatabase` pointer used to construct the `CDaoRecordset` isn't used; rather, the database in which the tabledef resides is used. *pQueryDef*
-A pointer to a [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md) object. This version is valid only for dynaset-type and snapshot-type recordsets. When using this option, the `CDaoDatabase` pointer used to construct the `CDaoRecordset` is not used; rather, the database in which the querydef resides is used. +A pointer to a [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md) object. This version is valid only for dynaset-type and snapshot-type recordsets. When using this option, the `CDaoDatabase` pointer used to construct the `CDaoRecordset` isn't used; rather, the database in which the querydef resides is used. ### Remarks @@ -1821,21 +1821,21 @@ Before calling `Open`, you must construct the recordset object. There are severa - When you construct the recordset object, pass a pointer to a `CDaoDatabase` object that is already open. -- When you construct the recordset object, pass a pointer to a `CDaoDatabase` object that is not open. The recordset opens a `CDaoDatabase` object, but will not close it when the recordset object closes. +- When you construct the recordset object, pass a pointer to a `CDaoDatabase` object that isn't open. The recordset opens a `CDaoDatabase` object, but will not close it when the recordset object closes. - When you construct the recordset object, pass a NULL pointer. The recordset object calls `GetDefaultDBName` to get the name of the Microsoft Access .MDB file to open. The recordset then opens a `CDaoDatabase` object and keeps it open as long as the recordset is open. When you call `Close` on the recordset, the `CDaoDatabase` object is also closed. > [!NOTE] > When the recordset opens the `CDaoDatabase` object, it opens the data source with nonexclusive access. -For the version of `Open` that uses the *lpszSQL* parameter, once the recordset is open you can retrieve records in one of several ways. The first option is to have DFX functions in your `DoFieldExchange`. The second option is to use dynamic binding by calling the `GetFieldValue` member function. These options can be implemented separately or in combination. If they are combined, you will have to pass in the SQL statement yourself on the call to `Open`. +For the version of `Open` that uses the *lpszSQL* parameter, once the recordset is open you can retrieve records in one of several ways. The first option is to have DFX functions in your `DoFieldExchange`. The second option is to use dynamic binding by calling the `GetFieldValue` member function. These options can be implemented separately or in combination. If they are combined, you'll have to pass in the SQL statement yourself on the call to `Open`. -When you use the second version of `Open` where you pass in a `CDaoTableDef` object, the resulting columns will be available for you to bind via `DoFieldExchange` and the DFX mechanism, and/or bind dynamically via `GetFieldValue`. +When you use the second version of `Open` where you pass in a `CDaoTableDef` object, the resulting columns are available for you to bind via `DoFieldExchange` and the DFX mechanism, and/or bind dynamically via `GetFieldValue`. > [!NOTE] > You can only call `Open` using a `CDaoTableDef` object for table-type recordsets. -When you use the third version of `Open` where you pass in a `CDaoQueryDef` object, that query will be executed, and the resulting columns will be available for you to bind via `DoFieldExchange` and the DFX mechanism, and/or bind dynamically via `GetFieldValue`. +When you use the third version of `Open` where you pass in a `CDaoQueryDef` object, that query is executed, and the resulting columns are available for you to bind via `DoFieldExchange` and the DFX mechanism, and/or bind dynamically via `GetFieldValue`. > [!NOTE] > You can only call `Open` using a `CDaoQueryDef` object for dynaset-type and snapshot-type recordsets. @@ -1856,9 +1856,9 @@ The field data members of your recordset class are bound to the columns of the d If you want to set options for the recordset, such as a filter or sort, set `m_strSort` or `m_strFilter` after you construct the recordset object but before you call `Open`. If you want to refresh the records in the recordset after the recordset is already open, call `Requery`. -If you call `Open` on a dynaset-type or snapshot-type recordset, or if the data source refers to a SQL statement or a tabledef that represents an attached table, you cannot use `dbOpenTable` for the type argument; if you do, MFC throws an exception. To determine whether a tabledef object represents an attached table, create a [CDaoTableDef](../../mfc/reference/cdaotabledef-class.md) object and call its [GetConnect](../../mfc/reference/cdaotabledef-class.md#getconnect) member function. +If you call `Open` on a dynaset-type or snapshot-type recordset, or if the data source refers to a SQL statement or a tabledef that represents an attached table, you can't use `dbOpenTable` for the type argument; if you do, MFC throws an exception. To determine whether a tabledef object represents an attached table, create a [CDaoTableDef](../../mfc/reference/cdaotabledef-class.md) object and call its [GetConnect](../../mfc/reference/cdaotabledef-class.md#getconnect) member function. -Use the `dbSeeChanges` flag if you wish to trap changes made by another user or another program on your machine when you are editing or deleting the same record. For example, if two users start editing the same record, the first user to call the `Update` member function succeeds. When `Update` is called by the second user, a `CDaoException` is thrown. Similarly, if the second user tries to call `Delete` to delete the record, and it has already been changed by the first user, a `CDaoException` occurs. +Use the `dbSeeChanges` flag if you wish to trap changes made by another user or another program on your machine when you're editing or deleting the same record. For example, if two users start editing the same record, the first user to call the `Update` member function succeeds. When `Update` is called by the second user, a `CDaoException` is thrown. Similarly, if the second user tries to call `Delete` to delete the record, and it has already been changed by the first user, a `CDaoException` occurs. Typically, if the user gets this `CDaoException` while updating, your code should refresh the contents of the fields and retrieve the newly modified values. If the exception occurs in the process of deleting, your code could display the new record data to the user and a message indicating that the data has recently changed. At this point, your code can request a confirmation that the user still wants to delete the record. @@ -1881,15 +1881,15 @@ If any records are returned, the first record becomes the current record. In order for the recordset to reflect the additions and deletions that you or other users are making to the data source, you must rebuild the recordset by calling `Requery`. If the recordset is a dynaset, it automatically reflects updates that you or other users make to its existing records (but not additions). If the recordset is a snapshot, you must call `Requery` to reflect edits by other users as well as additions and deletions. -For either a dynaset or a snapshot, call `Requery` any time you want to rebuild the recordset using parameter values. Set the new filter or sort by setting [m_strFilter](#m_strfilter) and [m_strSort](#m_strsort) before calling `Requery`. Set new parameters by assigning new values to parameter data members before calling `Requery`. +For either a dynaset or a snapshot, call `Requery` when you want to rebuild the recordset using parameter values. Set the new filter or sort by setting [`m_strFilter`](#m_strfilter) and [`m_strSort`](#m_strsort) before calling `Requery`. Set new parameters by assigning new values to parameter data members before calling `Requery`. -If the attempt to rebuild the recordset fails, the recordset is closed. Before you call `Requery`, you can determine whether the recordset can be requeried by calling the [CanRestart](#canrestart) member function. `CanRestart` does not guarantee that `Requery` will succeed. +If the attempt to rebuild the recordset fails, the recordset is closed. Before you call `Requery`, you can determine whether the recordset can be requeried by calling the [`CanRestart`](#canrestart) member function. `CanRestart` doesn't guarantee that `Requery` will succeed. > [!CAUTION] > Call `Requery` only after you have called `Open`. > [!NOTE] -> Calling [Requery](#requery) changes DAO bookmarks. +> Calling [`Requery`](#requery) changes DAO bookmarks. You can't call `Requery` on a dynaset-type or snapshot-type recordset if calling `CanRestart` returns 0, nor can you use it on a table-type recordset. @@ -1935,7 +1935,7 @@ A pointer to an array of variants. The array size corresponds to the number of f An integer corresponding to the size of the array, which is the number of fields in the index. > [!NOTE] -> Do not specify wildcards in the keys. Wildcards will cause `Seek` to return no matching records. +> on't specify wildcards in the keys. Wildcards will cause `Seek` to return no matching records. ### Return Value @@ -1945,19 +1945,19 @@ Nonzero if matching records are found, otherwise 0. Use the second (array) version of `Seek` to handle indexes of four fields or more. -`Seek` enables high-performance index searching on table-type recordsets. You must set the current index by calling `SetCurrentIndex` before calling `Seek`. If the index identifies a nonunique key field or fields, `Seek` locates the first record that satisfies the criteria. If you do not set an index, an exception is thrown. +`Seek` enables high-performance index searching on table-type recordsets. You must set the current index by calling `SetCurrentIndex` before calling `Seek`. If the index identifies a nonunique key field or fields, `Seek` locates the first record that satisfies the criteria. If you don't set an index, an exception is thrown. -Note that if you are not creating a UNICODE recordset, the `COleVariant` objects must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. +If you're not creating a UNICODE recordset, the `COleVariant` objects must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. When you call `Seek`, you pass one or more key values and a comparison operator ("<", "\<=", "=", ">=", or ">"). `Seek` searches through the specified key fields and locates the first record that satisfies the criteria specified by *lpszComparison* and *pKey1*. Once found, `Seek` returns nonzero, and makes that record current. If `Seek` fails to locate a match, `Seek` returns zero, and the current record is undefined. When using DAO directly, you must explicitly check the NoMatch property. If `lpszComparison` is "=", ">=", or ">", `Seek` starts at the beginning of the index. If *lpszComparison* is "<" or "<=", `Seek` starts at the end of the index and searches backward unless there are duplicate index entries at the end. In this case, `Seek` starts at an arbitrary entry among the duplicate index entries at the end of the index. -There does not have to be a current record when you use `Seek`. +There doesn't have to be a current record when you use `Seek`. To locate a record in a dynaset-type or snapshot-type recordset that satisfies a specific condition, use the Find operations. To include all records, not just those that satisfy a specific condition, use the Move operations to move from record to record. -You cannot call `Seek` on an attached table of any type because attached tables must be opened as dynaset-type or snapshot-type recordsets. However, if you call `CDaoDatabase::Open` to directly open an installable ISAM database, you can call `Seek` on tables in that database, although the performance may be slow. +You can't call `Seek` on an attached table of any type because attached tables must be opened as dynaset-type or snapshot-type recordsets. However, if you call `CDaoDatabase::Open` to directly open an installable ISAM database, you can call `Seek` on tables in that database, although the performance may be slow. For related information, see the topic "Seek Method" in DAO Help. @@ -1983,10 +1983,10 @@ Calling `SetAbsolutePosition` enables you to position the current record pointer The AbsolutePosition property value of the underlying DAO object is zero-based; a setting of 0 refers to the first record in the recordset. Setting a value greater than the number of populated records causes MFC to throw an exception. You can determine the number of populated records in the recordset by calling the `GetRecordCount` member function. -If the current record is deleted, the AbsolutePosition property value is not defined, and MFC throws an exception if it is referenced. New records are added to the end of the sequence. +If the current record is deleted, the AbsolutePosition property value isn't defined, and MFC throws an exception if it's referenced. New records are added to the end of the sequence. > [!NOTE] -> This property is not intended to be used as a surrogate record number. Bookmarks are still the recommended way of retaining and returning to a given position and are the only way to position the current record across all types of recordset objects that support bookmarks. In particular, the position of a given record changes when record(s) preceding it are deleted. There is also no assurance that a given record will have the same absolute position if the recordset is re-created again because the order of individual records within a recordset is not guaranteed unless it is created with a SQL statement using an **ORDERBY** clause. +> This property isn't intended to be used as a surrogate record number. Bookmarks are still the recommended way of retaining and returning to a given position and are the only way to position the current record across all types of recordset objects that support bookmarks. In particular, the position of a given record changes when record(s) preceding it are deleted. There's also no assurance that a given record will have the same absolute position if the recordset is re-created again because the order of individual records within a recordset isn't guaranteed unless it's created with a SQL statement using an **ORDERBY** clause. For related information, see the topic "AbsolutePosition Property" in DAO Help. @@ -2010,7 +2010,7 @@ When a recordset object is created or opened, each of its records already has a > [!NOTE] > Calling [Requery](#requery) changes DAO bookmarks. -Note that if you are not creating a UNICODE recordset, the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. +If you're not creating a UNICODE recordset, the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. For related information, see the topics "Bookmark Property" and Bookmarkable Property" in DAO Help. @@ -2025,13 +2025,13 @@ void SetCacheSize(long lSize); ### Parameters *lSize*
-Specifies the number of records. A typical value is 100. A setting of 0 turns off caching. The setting must be between 5 and 1200 records. The cache may use a considerable amount of memory. +Specifies the number of records. A typical value is 100. A setting of 0 turns off caching. The setting must be between 5 and 1,200 records. The cache may use a considerable amount of memory. ### Remarks -A cache is a space in local memory that holds the data most recently retrieved from the server in the event that the data will be requested again while the application is running. Data caching improves the performance of an application that retrieves data from a remote server through dynaset-type recordset objects. When data is requested, the Microsoft Jet database engine checks the cache for the requested data first rather than retrieving it from the server, which takes more time. Data that does not come from an ODBC data source is not saved in the cache. +A cache is a space in local memory that holds the data most recently retrieved from the server in case the data is requested again while the application is running. Data caching improves the performance of an application that retrieves data from a remote server through dynaset-type recordset objects. When data is requested, the Microsoft Jet database engine checks the cache for the requested data first rather than retrieving it from the server, which takes more time. Data that doesn't come from an ODBC data source isn't saved in the cache. -Any ODBC data source, such as an attached table, can have a local cache. To create the cache, open a recordset object from the remote data source, call the `SetCacheSize` and `SetCacheStart` member functions, and then call the `FillCache` member function or step through the records by using one of the Move operations. The *lSize* parameter of the `SetCacheSize` member function can be based on the number of records your application can work with at one time. For example, if you are using a recordset as the source of the data to be displayed on screen, you could pass the `SetCacheSize` *lSize* parameter as 20 to display 20 records at one time. +Any ODBC data source, such as an attached table, can have a local cache. To create the cache, open a recordset object from the remote data source, call the `SetCacheSize` and `SetCacheStart` member functions, and then call the `FillCache` member function or step through the records by using one of the Move operations. The *lSize* parameter of the `SetCacheSize` member function can be based on the number of records your application can work with at one time. For example, if you're using a recordset as the source of the data to be displayed on screen, you could pass the `SetCacheSize` *lSize* parameter as 20 to display 20 records at one time. For related information, see the topic "CacheSize, CacheStart Properties" in DAO Help. @@ -2054,11 +2054,11 @@ You can use the bookmark value of any record for the *varBookmark* parameter of The Microsoft Jet database engine requests records within the cache range from the cache, and it requests records outside the cache range from the server. -Records retrieved from the cache do not reflect changes made concurrently to the source data by other users. +Records retrieved from the cache don't reflect changes made concurrently to the source data by other users. To force an update of all the cached data, pass the *lSize* parameter of `SetCacheSize` as 0, call `SetCacheSize` again with the size of the cache you originally requested, and then call the `FillCache` member function. -Note that if you are not creating a UNICODE recordset, the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. +If you're not creating a UNICODE recordset, the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. For related information, see the topic CacheSize, CacheStart Properties" in DAO Help. @@ -2077,7 +2077,7 @@ A pointer containing the name of the index to be set. ### Remarks -Records in base tables are not stored in any particular order. Setting an index changes the order of records returned from the database, but it does not affect the order in which the records are stored. The specified index must already be defined. If you try to use an index object that does not exist, or if the index is not set when you call [Seek](#seek), MFC throws an exception. +Records in base tables aren't stored in any particular order. Setting an index changes the order of records returned from the database, but it doesn't affect the order in which the records are stored. The specified index must already be defined. If you try to use an index object that doesn't exist, or if the index isn't set when you call [Seek](#seek), MFC throws an exception. You can create a new index for the table by calling [CDaoTableDef::CreateIndex](../../mfc/reference/cdaotabledef-class.md#createindex) and appending the new index to the Indexes collection of the underlying tabledef by calling [CDaoTableDef::Append](../../mfc/reference/cdaotabledef-class.md#append), and then reopening the recordset. @@ -2098,18 +2098,18 @@ void SetFieldDirty( ### Parameters *pv*
-Contains the address of a field data member in the recordset or NULL. If NULL, all field data members in the recordset are flagged. (C++ NULL is not the same as Null in database terminology, which means "having no value.") +Contains the address of a field data member in the recordset or NULL. If NULL, all field data members in the recordset are flagged. (C++ NULL isn't the same as Null in database terminology, which means "having no value.") *bDirty*
TRUE if the field data member is to be flagged as "dirty" (changed). Otherwise FALSE if the field data member is to be flagged as "clean" (unchanged). ### Remarks -Marking fields as unchanged ensures the field is not updated. +Marking fields as unchanged ensures the field isn't updated. -The framework marks changed field data members to ensure they will be written to the record on the data source by the DAO record field exchange (DFX) mechanism. Changing the value of a field generally sets the field dirty automatically, so you will seldom need to call `SetFieldDirty` yourself, but you might sometimes want to ensure that columns will be explicitly updated or inserted regardless of what value is in the field data member. The DFX mechanism also employs the use of PSEUDONULL. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). +The framework marks changed field data members to ensure they'll be written to the record on the data source by the DAO record field exchange (DFX) mechanism. Changing the value of a field generally sets the field dirty automatically, so you'll seldom need to call `SetFieldDirty` yourself, but you might sometimes want to ensure that columns are explicitly updated or inserted regardless of what value is in the field data member. The DFX mechanism also employs the use of PSEUDONULL. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). -If the double-buffering mechanism is not being used, then changing the value of the field does not automatically set the field as dirty. In this case, it will be necessary to explicitly set the field as dirty. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. +If the double-buffering mechanism isn't being used, then changing the value of the field doesn't automatically set the field as dirty. In this case, it's necessary to explicitly set the field as dirty. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. > [!NOTE] > Call this member function only after you have called [Edit](#edit) or [AddNew](#addnew). @@ -2118,13 +2118,13 @@ Using NULL for the first argument of the function will apply the function to all [!code-cpp[NVC_MFCDatabase#6](../../mfc/codesnippet/cpp/cdaorecordset-class_6.cpp)] -will set only `outputColumn` fields to NULL; **param** fields will be unaffected. +will set only `outputColumn` fields to NULL; **param** fields are unaffected. To work on a **param**, you must supply the actual address of the individual **param** you want to work on, such as: [!code-cpp[NVC_MFCDatabase#7](../../mfc/codesnippet/cpp/cdaorecordset-class_7.cpp)] -This means you cannot set all **param** fields to NULL, as you can with `outputColumn` fields. +This means you can't set all **param** fields to NULL, as you can with `outputColumn` fields. `SetFieldDirty` is implemented through `DoFieldExchange`. @@ -2141,7 +2141,7 @@ void SetFieldNull( ### Parameters *pv*
-Contains the address of a field data member in the recordset or NULL. If NULL, all field data members in the recordset are flagged. (C++ NULL is not the same as Null in database terminology, which means "having no value.") +Contains the address of a field data member in the recordset or NULL. If NULL, all field data members in the recordset are flagged. (C++ NULL isn't the same as Null in database terminology, which means "having no value.") *bNull*
Nonzero if the field data member is to be flagged as having no value (Null). Otherwise 0 if the field data member is to be flagged as non-Null. @@ -2150,11 +2150,11 @@ Nonzero if the field data member is to be flagged as having no value (Null). Oth `SetFieldNull` is used for fields bound in the `DoFieldExchange` mechanism. -When you add a new record to a recordset, all field data members are initially set to a Null value and flagged as "dirty" (changed). When you retrieve a record from a data source, its columns either already have values or are Null. If it is not appropriate to make a field Null, a [CDaoException](../../mfc/reference/cdaoexception-class.md) is thrown. +When you add a new record to a recordset, all field data members are initially set to a Null value and flagged as "dirty" (changed). When you retrieve a record from a data source, its columns either already have values or are Null. If it isn't appropriate to make a field Null, a [CDaoException](../../mfc/reference/cdaoexception-class.md) is thrown. -If you are using the double-buffering mechanism, for example, if you specifically wish to designate a field of the current record as not having a value, call `SetFieldNull` with *bNull* set to TRUE to flag it as Null. If a field was previously marked Null and you now want to give it a value, simply set its new value. You do not have to remove the Null flag with `SetFieldNull`. To determine whether the field is allowed to be Null, call [IsFieldNullable](#isfieldnullable). +If you're using the double-buffering mechanism, for example, if you specifically wish to designate a field of the current record as not having a value, call `SetFieldNull` with *bNull* set to TRUE to flag it as Null. If a field was previously marked Null and you now want to give it a value, set its new value. You don't have to remove the Null flag with `SetFieldNull`. To determine whether the field is allowed to be Null, call [IsFieldNullable](#isfieldnullable). -If you are not using the double-buffering mechanism, then changing the value of the field does not automatically set the field as dirty and non-Null. You must specifically set the fields dirty and non-Null. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. +If you're not using the double-buffering mechanism, then changing the value of the field doesn't automatically set the field as dirty and non-Null. You must specifically set the fields dirty and non-Null. The flag contained in [m_bCheckCacheForDirtyFields](#m_bcheckcachefordirtyfields) controls this automatic field checking. The DFX mechanism employs the use of PSEUDONULL. For more information, see [CDaoFieldExchange::m_nOperation](../../mfc/reference/cdaofieldexchange-class.md#m_noperation). @@ -2165,7 +2165,7 @@ Using NULL for the first argument of the function will apply the function only t [!code-cpp[NVC_MFCDatabase#8](../../mfc/codesnippet/cpp/cdaorecordset-class_8.cpp)] -will set only `outputColumn` fields to NULL; **param** fields will be unaffected. +will set only `outputColumn` fields to NULL; **param** fields are unaffected. ## CDaoRecordset::SetFieldValue @@ -2207,7 +2207,7 @@ A pointer to a string containing the value of the field's contents. Use `SetFieldValue` and [GetFieldValue](#getfieldvalue) to dynamically bind fields at run time rather than statically binding columns using the [DoFieldExchange](#dofieldexchange) mechanism. -Note that if you are not creating a UNICODE recordset, you must either use a form of `SetFieldValue` that does not contain a `COleVariant` parameter, or the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. +If you're not creating a UNICODE recordset, you must either use a form of `SetFieldValue` that doesn't contain a `COleVariant` parameter, or the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. For related information, see the topics "Field Object" and "Value Property" in DAO Help. @@ -2230,7 +2230,7 @@ The name of the field in the recordset, for lookup by name. ### Remarks -C++ NULL is not the same as Null, which, in database terminology, means "having no value." +C++ NULL isn't the same as Null, which, in database terminology, means "having no value." For related information, see the topics "Field Object" and "Value Property" in DAO Help. @@ -2249,7 +2249,7 @@ A flag that indicates the type of locking. ### Remarks -When pessimistic locking is in effect, the 2K page containing the record you are editing is locked as soon as you call the `Edit` member function. The page is unlocked when you call the `Update` or `Close` member function or any of the Move or Find operations. +When pessimistic locking is in effect, the 2K page containing the record you're editing is locked as soon as you call the `Edit` member function. The page is unlocked when you call the `Update` or `Close` member function or any of the Move or Find operations. When optimistic locking is in effect, the 2K page containing the record is locked only while the record is being updated with the `Update` member function. @@ -2288,7 +2288,7 @@ The name of the parameter whose value you want to set. The parameter must already have been established as part of the recordset's SQL string. You can access the parameter either by name or by its index position in the collection. -Specify the value to set as a `COleVariant` object. For information about setting the desired value and type in your `COleVariant` object, see class [COleVariant](../../mfc/reference/colevariant-class.md). Note that if you are not creating a UNICODE recordset, the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. +Specify the value to set as a `COleVariant` object. For information about setting the desired value and type in your `COleVariant` object, see class [COleVariant](../../mfc/reference/colevariant-class.md). If you're not creating a UNICODE recordset, the `COleVariant` object must be explicitly declared ANSI. This can be done by using the [COleVariant::COleVariant](../../mfc/reference/colevariant-class.md#colevariant)**(** *lpszSrc* **,** *vtSrc* **)** form of constructor with *vtSrc* set to `VT_BSTRT` (ANSI) or by using the `COleVariant` function [SetString](../../mfc/reference/colevariant-class.md#setstring)**(** *lpszSrc* **,** *vtSrc* **)** with *vtSrc* set to `VT_BSTRT`. ## CDaoRecordset::SetParamValueNull @@ -2309,7 +2309,7 @@ The name of the field in the recordset, for lookup by name. ### Remarks -C++ NULL is not the same as Null, which, in database terminology, means "having no value." +C++ NULL isn't the same as Null, which, in database terminology, means "having no value." ## CDaoRecordset::SetPercentPosition @@ -2331,7 +2331,7 @@ When working with a dynaset-type or snapshot-type recordset, first populate the Once you call `SetPercentPosition`, the record at the approximate position corresponding to that value becomes current. > [!NOTE] -> Calling `SetPercentPosition` to move the current record to a specific record in a recordset is not recommended. Call the [SetBookmark](#setbookmark) member function instead. +> Calling `SetPercentPosition` to move the current record to a specific record in a recordset isn't recommended. Call the [SetBookmark](#setbookmark) member function instead. For related information, see the topic "PercentPosition Property" in DAO Help. @@ -2354,7 +2354,7 @@ If the data source supports transactions, you can make the `Update` call (and it > [!CAUTION] > If you call `Update` without first calling either `AddNew` or `Edit`, `Update` throws a `CDaoException`. If you call `AddNew` or `Edit`, you must call `Update` before you call [MoveNext](#movenext) or close either the recordset or the data source connection. Otherwise, your changes are lost without notification. -When the recordset object is pessimistically locked in a multiuser environment, the record remains locked from the time `Edit` is used until the updating is complete. If the recordset is optimistically locked, the record is locked and compared with the pre-edited record just before it is updated in the database. If the record has changed since you called `Edit`, the `Update` operation fails and MFC throws an exception. You can change the locking mode with `SetLockingMode`. +When the recordset object is pessimistically locked in a multiuser environment, the record remains locked from the time `Edit` is used until the updating is complete. If the recordset is optimistically locked, the record is locked and compared with the pre-edited record just before it's updated in the database. If the record has changed since you called `Edit`, the `Update` operation fails and MFC throws an exception. You can change the locking mode with `SetLockingMode`. > [!NOTE] > Optimistic locking is always used on external database formats, such as ODBC and installable ISAM. From 2544f23d981adfc07cf99f354953bab18861bde0 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 14:12:32 -0700 Subject: [PATCH 0340/1239] acrolinx --- docs/mfc/reference/cdaodatabase-class.md | 2 +- docs/mfc/reference/cdaoexception-class.md | 2 +- .../reference/cdaoparameterinfo-structure.md | 2 +- docs/mfc/reference/cdaoquerydef-class.md | 32 ++--- .../reference/cdaoquerydefinfo-structure.md | 8 +- docs/mfc/reference/cdaorecordset-class.md | 2 +- .../cdaorelationfieldinfo-structure.md | 8 +- docs/mfc/reference/cdaoworkspace-class.md | 116 +++++++++--------- 8 files changed, 86 insertions(+), 86 deletions(-) diff --git a/docs/mfc/reference/cdaodatabase-class.md b/docs/mfc/reference/cdaodatabase-class.md index 579a4d3ed1..743cf094fa 100644 --- a/docs/mfc/reference/cdaodatabase-class.md +++ b/docs/mfc/reference/cdaodatabase-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoDatabase [MFC], CDaoDatabase", "CDaoDatabase [MFC], C Represents a connection to an Access database using Data Access Objects (DAO). > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoexception-class.md b/docs/mfc/reference/cdaoexception-class.md index adde02e05e..0743d7432a 100644 --- a/docs/mfc/reference/cdaoexception-class.md +++ b/docs/mfc/reference/cdaoexception-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoException [MFC], CDaoException", "CDaoException [MFC] Represents an exception condition arising from the MFC database classes based on data access objects (DAO). > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoparameterinfo-structure.md b/docs/mfc/reference/cdaoparameterinfo-structure.md index 34f4617838..2f63d014ed 100644 --- a/docs/mfc/reference/cdaoparameterinfo-structure.md +++ b/docs/mfc/reference/cdaoparameterinfo-structure.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoParameterInfo structure [MFC]", "DAO (Data Access Obj The `CDaoParameterInfo` structure contains information about a parameter object defined for data access objects (DAO). > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoquerydef-class.md b/docs/mfc/reference/cdaoquerydef-class.md index c41c5be7d6..e26f5df370 100644 --- a/docs/mfc/reference/cdaoquerydef-class.md +++ b/docs/mfc/reference/cdaoquerydef-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoQueryDef [MFC], CDaoQueryDef", "CDaoQueryDef [MFC], A Represents a query definition, or "querydef," usually one saved in a database. > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -105,7 +105,7 @@ You can use a querydef object for any type of query, including select, action, c To use a querydef object to create a `CDaoRecordset` object, you typically create or open a querydef as described above. Then construct a recordset object, passing a pointer to your querydef object when you call [`CDaoRecordset::Open`](../../mfc/reference/cdaorecordset-class.md#open). The querydef you pass must be in an open state. For more information, see class [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). -You cannot use a querydef to create a recordset (the most common use for a querydef) unless it's in an open state. Put the querydef into an open state by calling either `Open` or `Create`. +You can't use a querydef to create a recordset (the most common use for a querydef) unless it's in an open state. Put the querydef into an open state by calling either `Open` or `Create`. ## External Databases @@ -150,7 +150,7 @@ BOOL CanUpdate(); ### Return Value -Nonzero if you are permitted to modify the querydef; otherwise 0. +Nonzero if you're permitted to modify the querydef; otherwise 0. ### Remarks @@ -223,7 +223,7 @@ The SQL string that defines the query. If you accept the default value of NULL, If you pass a name in *lpszName*, you can then call [Append](#append) to save the querydef in the database's QueryDefs collection. Otherwise, the object is a temporary querydef and isn't saved. In either case, the querydef is in an open state, and you can either use it to create a [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) object or call the querydef's [Execute](#execute) member function. -If you don't supply a SQL statement in *lpszSQL*, you cannot run the query with `Execute` but you can use it to create a recordset. In that case, MFC uses the recordset's default SQL statement. +If you don't supply a SQL statement in *lpszSQL*, you can't run the query with `Execute` but you can use it to create a recordset. In that case, MFC uses the recordset's default SQL statement. ## CDaoQueryDef::Execute @@ -248,7 +248,7 @@ An integer that determines the characteristics of the query. For related informa - `dbFailOnError` Default value. Roll back updates if an error occurs and report the error to the user. -- `dbSeeChanges` Generate a run-time error if another user is changing data you are editing. +- `dbSeeChanges` Generate a run-time error if another user is changing data you're editing. > [!NOTE] > For an explanation of the terms "inconsistent" and "consistent," see the topic "Execute Method" in DAO Help. @@ -430,7 +430,7 @@ The number of parameters defined in the query. ### Remarks -`GetParameterCount` is useful for looping through all parameters in the querydef. For that purpose, use `GetParameterCount` in conjunction with [GetParameterInfo](#getparameterinfo). +`GetParameterCount` is useful for looping through all parameters in the querydef. For that purpose, use `GetParameterCount` with [`GetParameterInfo`](#getparameterinfo). For related information, see the topics "Parameter Object", "Parameters Collection", and "PARAMETERS Declaration (SQL)" in DAO Help. @@ -468,7 +468,7 @@ A string containing the name of the desired parameter, for lookup by name. You c ### Remarks -For a description of the information returned in *`paraminfo`*, see the [`CDaoParameterInfo`](../../mfc/reference/cdaoparameterinfo-structure.md) structure. This structure has members that correspond to the descriptive information under *dwInfoOptions* above. +For a description of the information returned in *`paraminfo`*, see the [`CDaoParameterInfo`](../../mfc/reference/cdaoparameterinfo-structure.md) structure. This structure has members that correspond to the descriptive information under *`dwInfoOptions`* above. For related information, see the topic "PARAMETERS Declaration (SQL)" in DAO Help. @@ -549,7 +549,7 @@ The SQL statement that defines the query on which the querydef is based. ### Remarks -You'll then probably parse the string for keywords, table names, and so on. +You can parse the string for keywords, table names, and so on. For related information, see the topics "SQL Property", "Comparison of Microsoft Jet Database Engine SQL and ANSI SQL", and "Querying a Database with SQL in Code" in DAO Help. @@ -610,7 +610,7 @@ Nonzero if the `CDaoQueryDef` object is currently open; otherwise 0. ### Remarks -A querydef must be in an open state before you use it to call [Execute](#execute) or to create a [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) object. To put a querydef into an open state call either [Create](#create) (for a new querydef) or [Open](#open) (for an existing querydef). +A querydef must be in an open state before you use it to call [`Execute`](#execute) or to create a [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md) object. To put a querydef into an open state, call either [`Create`](#create) (for a new querydef) or [`Open`](#open) (for an existing querydef). ## CDaoQueryDef::m_pDatabase @@ -626,7 +626,7 @@ Contains a pointer to the OLE interface for the underlying DAO querydef object. ### Remarks -This pointer is provided for completeness and consistency with the other classes. However, because MFC rather fully encapsulates DAO querydefs, you are unlikely to need it. If you do use it, do so cautiously. In particular, don't change the value of the pointer unless you know what you're doing. +This pointer is provided for completeness and consistency with the other classes. However, because MFC rather fully encapsulates DAO querydefs, you're unlikely to need it. If you do use it, do so cautiously. In particular, don't change the value of the pointer unless you know what you're doing. ## CDaoQueryDef::Open @@ -701,7 +701,7 @@ The number of seconds before a query times out. ### Remarks -This member function lets you override the default number of seconds before subsequent operations on the connected data source "time out." An operation might time out due to network access problems, excessive query processing time, and so on. Call `SetODBCTimeout` prior to executing a query with this querydef if you want to change the query timeout value. (As ODBC reuses connections, the timeout value is the same for all clients on the same connection.) +This member function lets you override the default number of seconds before subsequent operations on the connected data source "time out." An operation might time out due to network access problems, excessive query processing time, and so on. Call `SetODBCTimeout` before executing a query with this querydef if you want to change the query timeout value. (As ODBC reuses connections, the timeout value is the same for all clients on the same connection.) The default value for query timeouts is 60 seconds. @@ -772,9 +772,9 @@ A typical use of `SetSQL` is setting up a querydef object for use in a SQL pass- ## See also -[CObject Class](../../mfc/reference/cobject-class.md)
+[`CObject` Class](../../mfc/reference/cobject-class.md)
[Hierarchy Chart](../../mfc/hierarchy-chart.md)
-[CDaoRecordset Class](../../mfc/reference/cdaorecordset-class.md)
-[CDaoDatabase Class](../../mfc/reference/cdaodatabase-class.md)
-[CDaoTableDef Class](../../mfc/reference/cdaotabledef-class.md)
-[CDaoException Class](../../mfc/reference/cdaoexception-class.md) +[`CDaoRecordset` Class](../../mfc/reference/cdaorecordset-class.md)
+[`CDaoDatabase` Class](../../mfc/reference/cdaodatabase-class.md)
+[`CDaoTableDef` Class](../../mfc/reference/cdaotabledef-class.md)
+[`CDaoException` Class](../../mfc/reference/cdaoexception-class.md) diff --git a/docs/mfc/reference/cdaoquerydefinfo-structure.md b/docs/mfc/reference/cdaoquerydefinfo-structure.md index 5f0250c15e..0ba30d2a6c 100644 --- a/docs/mfc/reference/cdaoquerydefinfo-structure.md +++ b/docs/mfc/reference/cdaoquerydefinfo-structure.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["DAO (Data Access Objects), QueryDefs collection", "CDaoQu The `CDaoQueryDefInfo` structure contains information about a querydef object defined for data access objects (DAO). > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -35,7 +35,7 @@ struct CDaoQueryDefInfo Uniquely names the querydef object. For more information, see the topic "Name Property" in DAO Help. Call [CDaoQueryDef::GetName](../../mfc/reference/cdaoquerydef-class.md#getname) to retrieve this property directly. *m_nType*
-A value that indicates the operational type of a querydef object. The value can be one of the following: +A value that indicates the operational type of a querydef object. The value can be one of: - `dbQSelect` Select: the query selects records. @@ -87,9 +87,9 @@ The number of seconds the Microsoft Jet database engine waits before a timeout e ## Remarks -The querydef is an object of class [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md). The references to Primary, Secondary, and All above indicate how the information is returned by the [GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function in class `CDaoDatabase`. +The querydef is an object of class [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md). The references to Primary, Secondary, and All indicate how the information is returned by the [GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function in class `CDaoDatabase`. -Information retrieved by the [CDaoDatabase::GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function is stored in a `CDaoQueryDefInfo` structure. Call `GetQueryDefInfo` for the database object in whose QueryDefs collection the querydef object is stored. `CDaoQueryDefInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoQueryDefInfo` object. Class `CDaoDatabase` also supplies member functions for directly accessing all of the properties returned in a `CDaoQueryDefInfo` object, so you'll probably seldom need to call `GetQueryDefInfo`. +Information retrieved by the [CDaoDatabase::GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function is stored in a `CDaoQueryDefInfo` structure. Call `GetQueryDefInfo` for the database object in whose QueryDefs collection the querydef object is stored. `CDaoQueryDefInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoQueryDefInfo` object. Class `CDaoDatabase` also supplies member functions for directly accessing all of the properties returned in a `CDaoQueryDefInfo` object, so you'll seldom call `GetQueryDefInfo`. When you append a new field or parameter object to the Fields or Parameters collection of a querydef object, an exception is thrown if the underlying database doesn't support the data type specified for the new object. diff --git a/docs/mfc/reference/cdaorecordset-class.md b/docs/mfc/reference/cdaorecordset-class.md index 5f340098c6..4b6a2ded9c 100644 --- a/docs/mfc/reference/cdaorecordset-class.md +++ b/docs/mfc/reference/cdaorecordset-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoRecordset [MFC], CDaoRecordset", "CDaoRecordset [MFC] Represents a set of records selected from a data source. > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaorelationfieldinfo-structure.md b/docs/mfc/reference/cdaorelationfieldinfo-structure.md index e0119efea4..af98cdba7e 100644 --- a/docs/mfc/reference/cdaorelationfieldinfo-structure.md +++ b/docs/mfc/reference/cdaorelationfieldinfo-structure.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["DAO (Data Access Objects), Relations collection", "CDaoRe The `CDaoRelationFieldInfo` structure contains information about a field in a relation defined for data access objects (DAO). > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Objects (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax @@ -32,11 +32,11 @@ The name of the field in the foreign table of the relation. ## Remarks -A DAO relation object specifies the fields in a primary table and the fields in a foreign table that define the relation. The references to Primary in the structure definition above indicate how the information is returned in the `m_pFieldInfos` member of a [CDaoRelationInfo](../../mfc/reference/cdaorelationinfo-structure.md) object obtained by calling the [GetRelationInfo](../../mfc/reference/cdaodatabase-class.md#getrelationinfo) member function of class `CDaoDatabase`. +A DAO relation object specifies the fields in a primary table and the fields in a foreign table that define the relation. The references to Primary in the structure definition indicate how the information is returned in the `m_pFieldInfos` member of a [CDaoRelationInfo](../../mfc/reference/cdaorelationinfo-structure.md) object obtained by calling the [GetRelationInfo](../../mfc/reference/cdaodatabase-class.md#getrelationinfo) member function of class `CDaoDatabase`. -Relation objects and relation field objects are not represented by an MFC class. Instead, the DAO objects underlying MFC objects of class [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) contain a collection of relation objects, called the Relations collection. Each relation object, in turn, contains a collection of relation field objects. Each relation field object correlates a field in the primary table with a field in the foreign table. Taken together, the relation field objects define a group of fields in each table, which together define the relation. `CDaoDatabase` lets you access relation objects with a `CDaoRelationInfo` object by calling the `GetRelationInfo` member function. The `CDaoRelationInfo` object, then, has a data member, `m_pFieldInfos`, that points to an array of `CDaoRelationFieldInfo` objects. +Relation objects and relation field objects aren't represented by an MFC class. Instead, the DAO objects underlying MFC objects of class [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) contain a collection of relation objects, called the Relations collection. Each relation object, in turn, contains a collection of relation field objects. Each relation field object correlates a field in the primary table with a field in the foreign table. Taken together, the relation field objects define a group of fields in each table, which together define the relation. `CDaoDatabase` lets you access relation objects with a `CDaoRelationInfo` object by calling the `GetRelationInfo` member function. The `CDaoRelationInfo` object has a data member, `m_pFieldInfos`, that points to an array of `CDaoRelationFieldInfo` objects. -Call the [GetRelationInfo](../../mfc/reference/cdaodatabase-class.md#getrelationinfo) member function of the containing `CDaoDatabase` object in whose Relations collection is stored the relation object you are interested in. Then access the `m_pFieldInfos` member of the [CDaoRelationInfo](../../mfc/reference/cdaorelationinfo-structure.md) object. `CDaoRelationFieldInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoRelationFieldInfo` object. +Call the [GetRelationInfo](../../mfc/reference/cdaodatabase-class.md#getrelationinfo) member function of the containing `CDaoDatabase` object in whose Relations collection is stored the relation object you're interested in. Then access the `m_pFieldInfos` member of the [CDaoRelationInfo](../../mfc/reference/cdaorelationinfo-structure.md) object. `CDaoRelationFieldInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoRelationFieldInfo` object. ## Requirements diff --git a/docs/mfc/reference/cdaoworkspace-class.md b/docs/mfc/reference/cdaoworkspace-class.md index 346128c174..777678f429 100644 --- a/docs/mfc/reference/cdaoworkspace-class.md +++ b/docs/mfc/reference/cdaoworkspace-class.md @@ -10,11 +10,11 @@ helpviewer_keywords: ["CDaoWorkspace [MFC], CDaoWorkspace", "CDaoWorkspace [MFC] Manages a named, password-protected database session from login to logoff, by a single user. > [!NOTE] -> DAO is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Objects (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. ## Syntax -``` +```cpp class CDaoWorkspace : public CObject ``` @@ -50,7 +50,7 @@ class CDaoWorkspace : public CObject |[CDaoWorkspace::IsOpen](#isopen)|Returns nonzero if the workspace is open.| |[CDaoWorkspace::Open](#open)|Explicitly opens a workspace object associated with DAO's default workspace.| |[CDaoWorkspace::RepairDatabase](#repairdatabase)|Attempts to repair a damaged database.| -|[CDaoWorkspace::Rollback](#rollback)|Ends the current transaction and does not save the changes.| +|[CDaoWorkspace::Rollback](#rollback)|Ends the current transaction and doesn't save the changes.| |[CDaoWorkspace::SetDefaultPassword](#setdefaultpassword)|Sets the password that the database engine uses when a workspace object is created without a specific password.| |[CDaoWorkspace::SetDefaultUser](#setdefaultuser)|Sets the user name that the database engine uses when a workspace object is created without a specific user name.| |[CDaoWorkspace::SetIniPath](#setinipath)|Sets the location of the Microsoft Jet database engine's initialization settings in the Windows registry.| @@ -65,18 +65,18 @@ class CDaoWorkspace : public CObject ## Remarks -In most cases, you will not need multiple workspaces, and you will not need to create explicit workspace objects; when you open database and recordset objects, they use DAO's default workspace. However, if needed, you can run multiple sessions at a time by creating additional workspace objects. Each workspace object can contain multiple open database objects in its own Databases collection. In MFC, a workspace is primarily a transaction manager, specifying a set of open databases all in the same "transaction space." +In most cases, you won't need multiple workspaces, and you won't need to create explicit workspace objects; when you open database and recordset objects, they use DAO's default workspace. However, if needed, you can run multiple sessions at a time by creating more workspace objects. Each workspace object can contain multiple open database objects in its own Databases collection. In MFC, a workspace is primarily a transaction manager, specifying a set of open databases all in the same "transaction space." > [!NOTE] > The DAO database classes are distinct from the MFC database classes based on Open Database Connectivity (ODBC). All DAO database class names have a "CDao" prefix. In general, the MFC classes based on DAO are more capable than the MFC classes based on ODBC. The DAO-based classes access data through the Microsoft Jet database engine, including ODBC drivers. They also support Data Definition Language (DDL) operations, such as creating databases and adding tables and fields via the classes, without having to call DAO directly. ## Capabilities -Class `CDaoWorkspace` provides the following: +Class `CDaoWorkspace` provides: - Explicit access, if needed, to a default workspace, created by initializing the database engine. Usually you use DAO's default workspace implicitly by creating database and recordset objects. -- A transaction space in which transactions apply to all databases open in the workspace. You can create additional workspaces to manage separate transaction spaces. +- A transaction space in which transactions apply to all databases open in the workspace. You can create more workspaces to manage separate transaction spaces. - An interface to many properties of the underlying Microsoft Jet database engine (see the static member functions). Opening or creating a workspace, or calling a static member function before open or create, initializes the database engine. @@ -84,7 +84,7 @@ Class `CDaoWorkspace` provides the following: ## Security -MFC does not implement the Users and Groups collections in DAO, which are used for security control. If you need those aspects of DAO, you must program them yourself via direct calls to DAO interfaces. For information, see [Technical Note 54](../../mfc/tn054-calling-dao-directly-while-using-mfc-dao-classes.md). +MFC doesn't implement the Users and Groups collections in DAO, which are used for security control. If you need those aspects of DAO, you must program them yourself via direct calls to DAO interfaces. For information, see [Technical Note 54](../../mfc/tn054-calling-dao-directly-while-using-mfc-dao-classes.md). ## Usage @@ -92,17 +92,17 @@ You can use class `CDaoWorkspace` to: - Explicitly open the default workspace. - Usually your use of the default workspace is implicit — when you open new [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) or [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) objects. But you might need to access it explicitly — for example, to access database engine properties or the Workspaces collection. See "Implicit Use of the Default Workspace" below. + Usually your use of the default workspace is implicit when you open new [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) or [CDaoRecordset](../../mfc/reference/cdaorecordset-class.md) objects. But you might need to access it explicitly. For example, to access database engine properties or the Workspaces collection. See "Implicit Use of the Default Workspace" below. - Create new workspaces. Call [Append](#append) if you want to add them to the Workspaces collection. - Open an existing workspace in the Workspaces collection. -Creating a new workspace that does not already exist in the Workspaces collection is described under the [Create](#create) member function. Workspace objects do not persist in any way between datababase engine sessions. If your application links MFC statically, ending the application uninitializes the database engine. If your application links with MFC dynamically, the database engine is uninitialized when the MFC DLL is unloaded. +Creating a new workspace that doesn't already exist in the Workspaces collection is described under the [Create](#create) member function. Workspace objects don't persist in any way between database engine sessions. If your application links MFC statically, ending the application uninitializes the database engine. If your application links with MFC dynamically, the database engine is uninitialized when the MFC DLL is unloaded. Explicitly opening the default workspace, or opening an existing workspace in the Workspaces collection, is described under the [Open](#open) member function. -End a workspace session by closing the workspace with the [Close](#close) member function. `Close` closes any databases you have not closed previously, rolling back any uncommitted transactions. +End a workspace session by closing the workspace with the [Close](#close) member function. `Close` closes any databases you haven't closed and rolls back any uncommitted transactions. ## Transactions @@ -112,7 +112,7 @@ DAO manages transactions at the workspace level; hence, transactions on a worksp MFC uses DAO's default workspace implicitly under the following circumstances: -- If you create a new `CDaoDatabase` object but do not do so through an existing `CDaoWorkspace` object, MFC creates a temporary workspace object for you, which corresponds to DAO's default workspace. If you do so for multiple databases, all of the database objects are associated with the default workspace. You can access a database's workspace through a `CDaoDatabase` data member. +- If you create a new `CDaoDatabase` object but don't do so through an existing `CDaoWorkspace` object, MFC creates a temporary workspace object for you, which corresponds to DAO's default workspace. If you do so for multiple databases, all of the database objects are associated with the default workspace. You can access a database's workspace through a `CDaoDatabase` data member. - Similarly, if you create a `CDaoRecordset` object without supplying a pointer to a `CDaoDatabase` object, MFC creates a temporary database object and, by extension, a temporary workspace object. You can access a recordset's database, and indirectly its workspace, through a `CDaoRecordset` data member. @@ -124,7 +124,7 @@ For information about calling DAO directly and about DAO security, see [Technica ## Inheritance Hierarchy -[CObject](../../mfc/reference/cobject-class.md) +[`CObject`](../../mfc/reference/cobject-class.md) `CDaoWorkspace` @@ -142,7 +142,7 @@ virtual void Append(); ### Remarks -`Append` appends a newly created workspace object to the database engine's Workspaces collection. Workspaces do not persist between database engine sessions; they are stored only in memory, not on disk. You do not have to append a workspace; if you do not, you can still use it. +`Append` appends a newly created workspace object to the database engine's Workspaces collection. Workspaces don't persist between database engine sessions; they're stored only in memory, not on disk. You don't have to append a workspace; if you don't, you can still use it. An appended workspace remains in the Workspaces collection, in an active, open state, until you call its [Close](#close) member function. @@ -203,13 +203,13 @@ Closing an open workspace object releases the underlying DAO object and, if the > [!CAUTION] > Closing a workspace object closes any open databases in the workspace. This results in any recordsets open in the databases being closed as well, and any pending edits or updates are rolled back. For related information, see the [CDaoDatabase::Close](../../mfc/reference/cdaodatabase-class.md#close), [CDaoRecordset::Close](../../mfc/reference/cdaorecordset-class.md#close), [CDaoTableDef::Close](../../mfc/reference/cdaotabledef-class.md#close), and [CDaoQueryDef::Close](../../mfc/reference/cdaoquerydef-class.md#close) member functions. -Workspace objects are not permanent; they only exist while references to them exist. This means that when the database engine session ends, the workspace and its Databases collection do not persist. You must re-create them for the next session by opening your workspace and database(s) again. +Workspace objects aren't permanent; they only exist while references to them exist. This means that when the database engine session ends, the workspace, and its Databases collection don't persist. You must re-create them for the next session by opening your workspace and database(s) again. For related information, see the topic "Close Method" in DAO Help. ## CDaoWorkspace::CommitTrans -Call this member function to commit a transaction — save a group of edits and updates to one or more databases in the workspace. +Call this member function to commit a transaction which saves a group of edits and updates to one or more databases in the workspace. ```cpp void CommitTrans(); @@ -220,12 +220,12 @@ void CommitTrans(); A transaction consists of a series of changes to the database's data or its structure, beginning with a call to [BeginTrans](#begintrans). When you complete the transaction, either commit it or roll it back (cancel the changes) with [Rollback](#rollback). By default, without transactions, updates to records are committed immediately. Calling `BeginTrans` causes commitment of updates to be delayed until you call `CommitTrans`. > [!CAUTION] -> Within one workspace, transactions are always global to the workspace and are not limited to only one database or recordset. If you perform operations on more than one database or recordset within a workspace transaction, `CommitTrans` commits all pending updates, and `Rollback` restores all operations on those databases and recordsets. +> Within one workspace, transactions are always global to the workspace and aren't limited to only one database or recordset. If you perform operations on more than one database or recordset within a workspace transaction, `CommitTrans` commits all pending updates, and `Rollback` restores all operations on those databases and recordsets. When you close a database or workspace with pending transactions, the transactions are all rolled back. > [!NOTE] -> This is not a two-phase commit mechanism. If one update fails to commit, others still will commit. +> This isn't a two-phase commit mechanism. If one update fails to commit, others still will commit. ## CDaoWorkspace::CompactDatabase @@ -252,13 +252,13 @@ static void PASCAL CompactDatabase( The name of an existing, closed database. It can be a full path and filename, such as "C:\\\MYDB.MDB". If the filename has an extension, you must specify it. If your network supports the uniform naming convention (UNC), you can also specify a network path, such as "\\\\\\\MYSERVER\\\MYSHARE\\\MYDIR\\\MYDB.MDB". (Double backslashes are required in the path strings because "\\" is the C++ escape character.) *lpszDestName*
-The full path of the compacted database that you are creating. You can also specify a network path as with *lpszSrcName*. You cannot use the *lpszDestName* argument to specify the same database file as *lpszSrcName*. +The full path of the compacted database that you are creating. You can also specify a network path as with *lpszSrcName*. You can't use the *lpszDestName* argument to specify the same database file as *lpszSrcName*. *lpszPassword*
-A password, used when you want to compact a password-protected database. Note that if you use the version of `CompactDatabase` that takes a password, you must supply all parameters. Also, because this is a connect parameter, it requires special formatting, as follows: ;PWD= *lpszPassword*. For example: ;PWD="Happy". (The leading semicolon is required.) +A password, used when you want to compact a password-protected database. If you use the version of `CompactDatabase` that takes a password, you must supply all parameters. Also, because this is a connect parameter, it requires special formatting, as follows: ;PWD= *lpszPassword*. For example: ;PWD="Happy". (The leading semicolon is required.) *lpszLocale*
-A string expression used to specify collating order for creating *lpszDestName*. If you omit this argument by accepting the default value of `dbLangGeneral` (see below), the locale of the new database is the same as that of the old database. Possible values are: +A string expression used to specify collating order for creating *lpszDestName*. If you omit this argument by accepting the default value of `dbLangGeneral` (see below), the locale of the new database is the same as the old database. Possible values are: - `dbLangGeneral` English, German, French, Portuguese, Italian, and Modern Spanish @@ -291,7 +291,7 @@ A string expression used to specify collating order for creating *lpszDestName*. - `dbLangTurkish` Turkish *nOptions*
-Indicates one or more options for the target database, *lpszDestName*. If you omit this argument by accepting the default value, the *lpszDestName* will have the same encryption and the same version as *lpszSrcName*. You can combine the `dbEncrypt` or `dbDecrypt` option with one of the version options using the bitwise-OR operator. Possible values, which specify a database format, not a database engine version, are: +Indicates one or more options for the target database, *lpszDestName*. If you omit this argument by accepting the default value, the *lpszDestName* has the same encryption and the same version as *lpszSrcName*. You can combine the `dbEncrypt` or `dbDecrypt` option with one of the version options using the bitwise-OR operator. Possible values, which specify a database format, not a database engine version, are: - `dbEncrypt` Encrypt the database while compacting. @@ -305,17 +305,17 @@ Indicates one or more options for the target database, *lpszDestName*. If you om - `dbVersion30` Create a database that uses the Microsoft Jet database engine version 3.0 while compacting. -You can use `dbEncrypt` or `dbDecrypt` in the options argument to specify whether to encrypt or to decrypt the database as it is compacted. If you omit an encryption constant or if you include both `dbDecrypt` and `dbEncrypt`, *lpszDestName* will have the same encryption as *lpszSrcName*. You can use one of the version constants in the options argument to specify the version of the data format for the compacted database. This constant affects only the version of the data format of *lpszDestName*. You can specify only one version constant. If you omit a version constant, *lpszDestName* will have the same version as *lpszSrcName*. You can compact *lpszDestName* only to a version that is the same or later than that of *lpszSrcName*. +You can use `dbEncrypt` or `dbDecrypt` in the options argument to specify whether to encrypt or to decrypt the database as it is compacted. If you omit an encryption constant or if you include both `dbDecrypt` and `dbEncrypt`, *`lpszDestName`* has the same encryption as *`lpszSrcName`*. You can use one of the version constants in the options argument to specify the version of the data format for the compacted database. This constant affects only the version of the data format of *`lpszDestName`*. You can specify only one version constant. If you omit a version constant, *`lpszDestName`* will have the same version as *`lpszSrcName`*. You can compact *`lpszDestName`* only to a version that is the same or later than *`lpszSrcName`*. > [!CAUTION] -> If a database is not encrypted, it is possible, even if you implement user/password security, to directly read the binary disk file that constitutes the database. +> If a database isn't encrypted, it is possible, even if you implement user/password security, to directly read the binary disk file that constitutes the database. ### Remarks As you change data in a database, the database file can become fragmented and use more disk space than necessary. Periodically, you should compact your database to defragment the database file. The compacted database is usually smaller. You can also choose to change the collating order, the encryption, or the version of the data format while you copy and compact the database. > [!CAUTION] -> The `CompactDatabase` member function will not correctly convert a complete Microsoft Access database from one version to another. Only the data format is converted. Microsoft Access-defined objects, such as forms and reports, are not converted. However, the data is correctly converted. +> The `CompactDatabase` member function won't correctly convert a complete Microsoft Access database from one version to another. Only the data format is converted. Microsoft Access-defined objects, such as forms and reports, aren't converted. However, the data is correctly converted. > [!TIP] > You can also use `CompactDatabase` to copy a database file. @@ -354,11 +354,11 @@ The overall creation process is: 1. Optionally call [Append](#append) if you want to add the workspace to the database engine's Workspaces collection. You can work with the workspace without appending it. -After the `Create` call, the workspace object is in an open state, ready for use. You do not call `Open` after `Create`. You do not call `Create` if the workspace already exists in the Workspaces collection. `Create` initializes the database engine if it has not already been initialized for your application. +After the `Create` call, the workspace object is in an open state, ready for use. You don't call `Open` after `Create`. You don't call `Create` if the workspace already exists in the Workspaces collection. `Create` initializes the database engine if it hasn't already been initialized for your application. ## CDaoWorkspace::GetDatabaseCount -Call this member function to retrieve the number of DAO database objects in the workspace's Databases collection — the number of open databases in the workspace. +Call this member function to retrieve the number of DAO database objects in the workspace's Databases collection. Which is the number of open databases in the workspace. ``` short GetDatabaseCount(); @@ -424,7 +424,7 @@ static CString PASCAL GetIniPath(); ### Return Value -A [CString](../../atl-mfc-shared/reference/cstringt-class.md) containing the registry location. +A [`CString`](../../atl-mfc-shared/reference/cstringt-class.md) containing the registry location. ### Remarks @@ -446,9 +446,9 @@ Nonzero if ODBC transactions are isolated; otherwise 0. ### Remarks -In some situations, you might need to have multiple simultaneous transactions pending on the same ODBC database. To do this, you need to open a separate workspace for each transaction. Keep in mind that although each workspace can have its own ODBC connection to the database, this slows system performance. Because transaction isolation is not normally required, ODBC connections from multiple workspace objects opened by the same user are shared by default. +In some situations, you might need to have multiple simultaneous transactions pending on the same ODBC database. To do this, you need to open a separate workspace for each transaction. Keep in mind that although each workspace can have its own ODBC connection to the database, this slows system performance. Because transaction isolation isn't normally required, ODBC connections from multiple workspace objects opened by the same user are shared by default. -Some ODBC servers, such as Microsoft SQL Server, do not allow simultaneous transactions on a single connection. If you need to have more than one transaction at a time pending against such a database, set the IsolateODBCTrans property to TRUE on each workspace as soon as you open it. This forces a separate ODBC connection for each workspace. +Some ODBC servers, such as Microsoft SQL Server, don't allow simultaneous transactions on a single connection. If you need to have more than one transaction at a time pending against such a database, set the IsolateODBCTrans property to TRUE on each workspace as soon as you open it. This forces a separate ODBC connection for each workspace. For related information, see the topic "IsolateODBCTrans Property" in DAO Help. @@ -468,7 +468,7 @@ The number of seconds before an error occurs when you attempt to log in to an OD This value represents the number of seconds before an error occurs when you attempt to log in to an ODBC database. The default LoginTimeout setting is 20 seconds. When LoginTimeout is set to 0, no timeout occurs and the communication with the data source might stop responding. -When you are attempting to log in to an ODBC database, such as Microsoft SQL Server, the connection may fail as a result of network errors or because the server is not running. Rather than waiting for the default 20 seconds to connect, you can specify how long the database engine waits before it produces an error. Logging in to the server happens implicitly as part of a number of different events, such as running a query on an external server database. +When you are attempting to log in to an ODBC database, such as Microsoft SQL Server, the connection may fail as a result of network errors or because the server isn't running. Rather than waiting for the default 20 seconds to connect, you can specify how long the database engine waits before it produces an error. Logging in to the server happens implicitly as part of different events, such as running a query on an external server database. For related information, see the topic "LoginTimeout Property" in DAO Help. @@ -482,7 +482,7 @@ CString GetName(); ### Return Value -A [CString](../../atl-mfc-shared/reference/cstringt-class.md) containing the user-defined name of the DAO workspace object. +A [`CString`](../../atl-mfc-shared/reference/cstringt-class.md) containing the user-defined name of the DAO workspace object. ### Remarks @@ -500,7 +500,7 @@ CString GetUserName(); ### Return Value -A [CString](../../atl-mfc-shared/reference/cstringt-class.md) that represents the owner of the workspace object. +A [`CString`](../../atl-mfc-shared/reference/cstringt-class.md) that represents the owner of the workspace object. ### Remarks @@ -518,7 +518,7 @@ static CString PASCAL GetVersion(); ### Return Value -A [CString](../../atl-mfc-shared/reference/cstringt-class.md) that indicates the version of the database engine associated with the object. +A [`CString`](../../atl-mfc-shared/reference/cstringt-class.md) that indicates the version of the database engine associated with the object. ### Remarks @@ -540,7 +540,7 @@ The number of open workspaces in the Workspaces collection. ### Remarks -This count does not include any open workspaces not appended to the collection. `GetWorkspaceCount` is useful if you need to loop through all defined workspaces in the Workspaces collection. To obtain information about a given workspace in the collection, see [GetWorkspaceInfo](#getworkspaceinfo). Typical usage is to call `GetWorkspaceCount` for the number of open workspaces, then use that number as a loop index for repeated calls to `GetWorkspaceInfo`. +This count doesn't include any open workspaces not appended to the collection. `GetWorkspaceCount` is useful if you need to loop through all defined workspaces in the Workspaces collection. To obtain information about a given workspace in the collection, see [GetWorkspaceInfo](#getworkspaceinfo). Typical usage is to call `GetWorkspaceCount` for the number of open workspaces, then use that number as a loop index for repeated calls to `GetWorkspaceInfo`. ## CDaoWorkspace::GetWorkspaceInfo @@ -597,20 +597,20 @@ An action to take during the idle processing. Currently the only valid action is ### Remarks -This is often true in multiuser, multitasking environments in which there is not enough background processing time to keep all records in a recordset current. +This is often true in multiuser, multitasking environments in which there isn't enough background processing time to keep all records in a recordset current. > [!NOTE] -> Calling `Idle` is not necessary with databases created with version 3.0 of the Microsoft Jet database engine. Use `Idle` only for databases created with earlier versions. +> Calling `Idle` isn't necessary with databases created with version 3.0 of the Microsoft Jet database engine. Use `Idle` only for databases created with earlier versions. Usually, read locks are removed and data in local dynaset-type recordset objects is updated only when no other actions (including mouse movements) are occurring. If you periodically call `Idle`, you provide the database engine with time to catch up on background processing tasks by releasing unneeded read locks. Specifying the `dbFreeLocks` constant as an argument delays processing until all read locks are released. -This member function is not needed in single-user environments unless multiple instances of an application are running. The `Idle` member function may increase performance in a multiuser environment because it forces the database engine to flush data to disk, releasing locks on memory. You can also release read locks by making operations part of a transaction. +This member function isn't needed in single-user environments unless multiple instances of an application are running. The `Idle` member function may increase performance in a multiuser environment because it forces the database engine to flush data to disk, releasing locks on memory. You can also release read locks by making operations part of a transaction. For related information, see the topic "Idle Method" in DAO Help. ## CDaoWorkspace::IsOpen -Call this member function to determine whether the `CDaoWorkspace` object is open — that is, whether the MFC object has been initialized by a call to [Open](#open) or a call to [Create](#create). +Call this member function to determine whether the `CDaoWorkspace` object is open. Which means either the MFC object has been initialized by a call to [Open](#open) or a call to [Create](#create). ``` BOOL IsOpen() const; @@ -649,15 +649,15 @@ The name of the DAO workspace object to open — a string with up to 14 characte ### Remarks -After constructing a `CDaoWorkspace` object, call this member function to do one of the following: +After constructing a `CDaoWorkspace` object, call this member function to do one of: - Explicitly open the default workspace. Pass NULL for *lpszName*. - Open an existing `CDaoWorkspace` object, a member of the Workspaces collection, by name. Pass a valid name for an existing workspace object. -`Open` puts the workspace object into an open state and also initializes the database engine if it has not already been initialized for your application. +`Open` puts the workspace object into an open state and also initializes the database engine if it hasn't already been initialized for your application. -Although many `CDaoWorkspace` member functions can only be called after the workspace has been opened, the following member functions, which operate on the database engine, are available after construction of the C++ object but before a call to `Open`: +Although many `CDaoWorkspace` member functions can only be called after the workspace is opened, the following member functions, which operate on the database engine, are available after construction of the C++ object but before a call to `Open`: :::row::: :::column span=""::: @@ -694,9 +694,9 @@ The path and filename for an existing Microsoft Jet engine database file. If you ### Remarks -You must close the database specified by *lpszName* before you repair it. In a multiuser environment, other users cannot have *lpszName* open while you are repairing it. If *lpszName* is not closed or is not available for exclusive use, an error occurs. +You must close the database specified by *lpszName* before you repair it. In a multiuser environment, other users can't have *lpszName* open while you are repairing it. If *lpszName* isn't closed or isn't available for exclusive use, an error occurs. -This member function attempts to repair a database that was marked as possibly corrupt by an incomplete write operation. This can occur if an application using the Microsoft Jet database engine is closed unexpectedly because of a power outage or computer hardware problem. If you complete the operation and call the [Close](../../mfc/reference/cdaodatabase-class.md#close) member function or you quit the application in a usual way, the database will not be marked as possibly corrupt. +This member function attempts to repair a database that was marked as possibly corrupt by an incomplete write operation. This can occur if an application using the Microsoft Jet database engine is closed unexpectedly because of a power outage or computer hardware problem. If you complete the operation and call the [Close](../../mfc/reference/cdaodatabase-class.md#close) member function or you quit the application in a usual way, the database won't be marked as possibly corrupt. > [!NOTE] > After repairing a database, it is also a good idea to compact it using the [CompactDatabase](#compactdatabase) member function to defragment the file and to recover disk space. @@ -714,7 +714,7 @@ void Rollback(); ### Remarks > [!CAUTION] -> Within one workspace object, transactions are always global to the workspace and are not limited to only one database or recordset. If you perform operations on more than one database or recordset within a workspace transaction, `Rollback` restores all operations on all of those databases and recordsets. +> Within one workspace object, transactions are always global to the workspace and aren't limited to only one database or recordset. If you perform operations on more than one database or recordset within a workspace transaction, `Rollback` restores all operations on all of those databases and recordsets. If you close a workspace object without saving or rolling back any pending transactions, the transactions are automatically rolled back. If you call [CommitTrans](#committrans) or `Rollback` without first calling [BeginTrans](#begintrans), an error occurs. @@ -736,11 +736,11 @@ The default password. A password can be up to 14 characters long and can contain ### Remarks -The default password that you set applies to new workspaces you create after the call. When you create subsequent workspaces, you do not need to specify a password in the [Create](#create) call. +The default password that you set applies to new workspaces you create after the call. When you create subsequent workspaces, you don't need to specify a password in the [Create](#create) call. To use this member function: -1. Construct a `CDaoWorkspace` object but do not call `Create`. +1. Construct a `CDaoWorkspace` object but don't call `Create`. 1. Call `SetDefaultPassword` and, if you like, [SetDefaultUser](#setdefaultuser). @@ -765,11 +765,11 @@ The default user name. A user name can be 1 - 20 characters long and include alp ### Remarks -The default user name that you set applies to new workspaces you create after the call. When you create subsequent workspaces, you do not need to specify a user name in the [Create](#create) call. +The default user name that you set applies to new workspaces you create after the call. When you create subsequent workspaces, you don't need to specify a user name in the [Create](#create) call. To use this member function: -1. Construct a `CDaoWorkspace` object but do not call `Create`. +1. Construct a `CDaoWorkspace` object but don't call `Create`. 1. Call `SetDefaultUser` and, if you like, [SetDefaultPassword](#setdefaultpassword). @@ -799,7 +799,7 @@ Call `SetIniPath` only if you need to specify special settings. For more informa > [!NOTE] > Call `SetIniPath` during application installation, not when the application runs. `SetIniPath` must be called before you open any workspaces, databases, or recordsets; otherwise, MFC throws an exception. -You can use this mechanism to configure the database engine with user-provided registry settings. The scope of this attribute is limited to your application and cannot be changed without restarting your application. +You can use this mechanism to configure the database engine with user-provided registry settings. The scope of this attribute is limited to your application and can't be changed without restarting your application. ## CDaoWorkspace::SetIsolateODBCTrans @@ -816,9 +816,9 @@ Pass TRUE if you want to begin isolating ODBC transactions. Pass FALSE if you wa ### Remarks -In some situations, you might need to have multiple simultaneous transactions pending on the same ODBC database. To do this, you need to open a separate workspace for each transaction. Although each workspace can have its own ODBC connection to the database, this slows system performance. Because transaction isolation is not normally required, ODBC connections from multiple workspace objects opened by the same user are shared by default. +In some situations, you might need to have multiple simultaneous transactions pending on the same ODBC database. To do this, you need to open a separate workspace for each transaction. Although each workspace can have its own ODBC connection to the database, this slows system performance. Because transaction isolation isn't normally required, ODBC connections from multiple workspace objects opened by the same user are shared by default. -Some ODBC servers, such as Microsoft SQL Server, do not allow simultaneous transactions on a single connection. If you need to have more than one transaction at a time pending against such a database, set the IsolateODBCTrans property to TRUE on each workspace as soon as you open it. This forces a separate ODBC connection for each workspace. +Some ODBC servers, such as Microsoft SQL Server, don't allow simultaneous transactions on a single connection. If you need to have more than one transaction at a time pending against such a database, set the IsolateODBCTrans property to TRUE on each workspace as soon as you open it. This forces a separate ODBC connection for each workspace. ## CDaoWorkspace::SetLoginTimeout @@ -837,16 +837,16 @@ The number of seconds before an error occurs when you attempt to log in to an OD This value represents the number of seconds before an error occurs when you attempt to log in to an ODBC database. The default LoginTimeout setting is 20 seconds. When LoginTimeout is set to 0, no timeout occurs and the communication with the data source might stop responding. -When you are attempting to log in to an ODBC database, such as Microsoft SQL Server, the connection may fail as a result of network errors or because the server is not running. Rather than waiting for the default 20 seconds to connect, you can specify how long the database engine waits before it produces an error. Logging on to the server happens implicitly as part of a number of different events, such as running a query on an external server database. The timeout value is determined by the current setting of the LoginTimeout property. +When you are attempting to log in to an ODBC database, such as Microsoft SQL Server, the connection may fail as a result of network errors or because the server isn't running. Rather than waiting for the default 20 seconds to connect, you can specify how long the database engine waits before it produces an error. Logging on to the server happens implicitly as part of a number of different events, such as running a query on an external server database. The timeout value is determined by the current setting of the LoginTimeout property. For related information, see the topic "LoginTimeout Property" in DAO Help. ## See also -[CObject Class](../../mfc/reference/cobject-class.md)
+[`CObject` Class](../../mfc/reference/cobject-class.md)
[Hierarchy Chart](../../mfc/hierarchy-chart.md)
-[CDaoDatabase Class](../../mfc/reference/cdaodatabase-class.md)
-[CDaoRecordset Class](../../mfc/reference/cdaorecordset-class.md)
-[CDaoTableDef Class](../../mfc/reference/cdaotabledef-class.md)
-[CDaoQueryDef Class](../../mfc/reference/cdaoquerydef-class.md)
-[CDaoException Class](../../mfc/reference/cdaoexception-class.md) +[`CDaoDatabase` Class](../../mfc/reference/cdaodatabase-class.md)
+[`CDaoRecordset` Class](../../mfc/reference/cdaorecordset-class.md)
+[`CDaoTableDef` Class](../../mfc/reference/cdaotabledef-class.md)
+[`CDaoQueryDef` Class](../../mfc/reference/cdaoquerydef-class.md)
+[`CDaoException` Class](../../mfc/reference/cdaoexception-class.md) From 13f3eb28edcad26c869f851cb92504a21d8a299d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 14:28:26 -0700 Subject: [PATCH 0341/1239] acrolinx --- docs/mfc/reference/cdaoquerydefinfo-structure.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/mfc/reference/cdaoquerydefinfo-structure.md b/docs/mfc/reference/cdaoquerydefinfo-structure.md index 0ba30d2a6c..bb1a8d30e2 100644 --- a/docs/mfc/reference/cdaoquerydefinfo-structure.md +++ b/docs/mfc/reference/cdaoquerydefinfo-structure.md @@ -65,10 +65,10 @@ A value that indicates the operational type of a querydef object. The value can For more information, see the topic "Type Property" in DAO Help. *m_dateCreated*
-The date and time the querydef was created. To directly retrieve the date the querydef was created, call the [GetDateCreated](../../mfc/reference/cdaotabledef-class.md#getdatecreated) member function of the `CDaoTableDef` object associated with the table. See Comments below for more information. Also see the topic "DateCreated, LastUpdated Properties" in DAO Help. +The date and time the querydef was created. To directly retrieve the date the querydef was created, call the [GetDateCreated](../../mfc/reference/cdaotabledef-class.md#getdatecreated) member function of the `CDaoTableDef` object associated with the table. For more information, see [Remarks](#remarks). Also see the topic "DateCreated, LastUpdated Properties" in DAO Help. *m_dateLastUpdated*
-The date and time of the most recent change made to the querydef. To directly retrieve the date the table was last updated, call the [GetDateLastUpdated](../../mfc/reference/cdaoquerydef-class.md#getdatelastupdated) member function of the querydef. See Comments below for more information. And see the topic "DateCreated, LastUpdated Properties" in DAO Help. +The date and time of the most recent change made to the querydef. To directly retrieve the date the table was last updated, call the [GetDateLastUpdated](../../mfc/reference/cdaoquerydef-class.md#getdatelastupdated) member function of the querydef. For more information, see [Remarks](#remarks). Also see the topic "DateCreated, LastUpdated Properties" in DAO Help. *m_bUpdatable*
Indicates whether changes can be made to a querydef object. If this property is TRUE, the querydef is updatable; otherwise, it isn't. Updatable means the querydef object's query definition can be changed. The Updatable property of a querydef object is set to TRUE if the query definition can be updated, even if the resulting recordset isn't updatable. To retrieve this property directly, call the querydef's [CanUpdate](../../mfc/reference/cdaoquerydef-class.md#canupdate) member function. For more information, see the topic "Updatable Property" in DAO Help. @@ -83,13 +83,13 @@ The SQL statement that defines the query executed by a querydef object. The SQL Provides information about the source of a database used in a pass-through query. This information takes the form of a connect string. For more information about connect strings, and for information about retrieving the value of this property directly, see the [CDaoDatabase::GetConnect](../../mfc/reference/cdaodatabase-class.md#getconnect) member function. *m_nODBCTimeout*
-The number of seconds the Microsoft Jet database engine waits before a timeout error occurs when a query is run on an ODBC database. When you're using an ODBC database, such as Microsoft SQL Server, there may be delays because of network traffic or heavy use of the ODBC server. Rather than waiting indefinitely, you can specify how long the Microsoft Jet engine waits before it produces an error. The default timeout value is 60 seconds. You can retrieve the value of this property directly by calling the querydef's [GetODBCTimeout](../../mfc/reference/cdaoquerydef-class.md#getodbctimeout) member function. For more information, see the topic "ODBCTimeout Property" in DAO Help. +The number of seconds the Microsoft Jet database engine waits before a timeout error occurs when a query is run on an Open Database Connectivity (ODBC) database. When you're using an ODBC database, such as Microsoft SQL Server, there may be delays because of network traffic or heavy use of the ODBC server. Rather than waiting indefinitely, you can specify how long the Microsoft Jet engine waits before it produces an error. The default timeout value is 60 seconds. You can retrieve the value of this property directly by calling the querydef's [GetODBCTimeout](../../mfc/reference/cdaoquerydef-class.md#getodbctimeout) member function. For more information, see the topic "ODBCTimeout Property" in DAO Help. ## Remarks The querydef is an object of class [CDaoQueryDef](../../mfc/reference/cdaoquerydef-class.md). The references to Primary, Secondary, and All indicate how the information is returned by the [GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function in class `CDaoDatabase`. -Information retrieved by the [CDaoDatabase::GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function is stored in a `CDaoQueryDefInfo` structure. Call `GetQueryDefInfo` for the database object in whose QueryDefs collection the querydef object is stored. `CDaoQueryDefInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoQueryDefInfo` object. Class `CDaoDatabase` also supplies member functions for directly accessing all of the properties returned in a `CDaoQueryDefInfo` object, so you'll seldom call `GetQueryDefInfo`. +Information retrieved by the [CDaoDatabase::GetQueryDefInfo](../../mfc/reference/cdaodatabase-class.md#getquerydefinfo) member function is stored in a `CDaoQueryDefInfo` structure. Call `GetQueryDefInfo` for the database object in whose QueryDefs collection the querydef object is stored. `CDaoQueryDefInfo` also defines a `Dump` member function in debug builds. You can use `Dump` to dump the contents of a `CDaoQueryDefInfo` object. Class `CDaoDatabase` also supplies member functions for directly accessing all of the properties returned in a `CDaoQueryDefInfo` object, so you seldom call `GetQueryDefInfo`. When you append a new field or parameter object to the Fields or Parameters collection of a querydef object, an exception is thrown if the underlying database doesn't support the data type specified for the new object. From 695ea8800c68f05fe72afe8b40d3c06ca8565383 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 14:33:45 -0700 Subject: [PATCH 0342/1239] acrolinx --- docs/mfc/reference/cdaoquerydef-class.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/mfc/reference/cdaoquerydef-class.md b/docs/mfc/reference/cdaoquerydef-class.md index e26f5df370..1f8483e5db 100644 --- a/docs/mfc/reference/cdaoquerydef-class.md +++ b/docs/mfc/reference/cdaoquerydef-class.md @@ -41,7 +41,7 @@ class CDaoQueryDef : public CObject |[CDaoQueryDef::GetFieldCount](#getfieldcount)|Returns the number of fields defined by the querydef.| |[CDaoQueryDef::GetFieldInfo](#getfieldinfo)|Returns information about a specified field defined in the query.| |[CDaoQueryDef::GetName](#getname)|Returns the name of the querydef.| -|[CDaoQueryDef::GetODBCTimeout](#getodbctimeout)|Returns the timeout value used by ODBC (for an ODBC query) when the querydef is executed. This determines how long to allow for the query's action to complete.| +|[CDaoQueryDef::GetODBCTimeout](#getodbctimeout)|Returns the timeout value used by ODBC (for an ODBC query) when the querydef is executed which determines how long to allow for the query's action to complete.| |[CDaoQueryDef::GetParameterCount](#getparametercount)|Returns the number of parameters defined for the query.| |[CDaoQueryDef::GetParameterInfo](#getparameterinfo)|Returns information about a specified parameter to the query.| |[CDaoQueryDef::GetParamValue](#getparamvalue)|Returns the value of a specified parameter to the query.| @@ -70,7 +70,7 @@ class CDaoQueryDef : public CObject A querydef is a data access object that contains the SQL statement that describes a query, and its properties, such as "Date Created" and "ODBC Timeout." You can also create temporary querydef objects without saving them, but it's convenient—and much more efficient—to save commonly reused queries in a database. A [CDaoDatabase](../../mfc/reference/cdaodatabase-class.md) object maintains a collection, called the QueryDefs collection, that contains its saved querydefs. > [!NOTE] -> The DAO database classes are distinct from the MFC database classes based on Open Database Connectivity (ODBC). All DAO database class names have the "CDao" prefix. You can still access ODBC data sources with the DAO classes. In general, the MFC classes based on DAO are more capable than the MFC classes based on ODBC; the DAO-based classes can access data, including through ODBC drivers, via their own database engine. The DAO-based classes also support Data Definition Language (DDL) operations, such as adding tables via the classes, without having to call DAO directly. +> The DAO database classes are distinct from the Microsoft Foundation Class (MFC) database classes based on Open Database Connectivity (ODBC). All DAO database class names have the "CDao" prefix. You can still access ODBC data sources with the DAO classes. In general, the MFC classes based on DAO are more capable than the MFC classes based on ODBC; the DAO-based classes can access data, including through ODBC drivers, via their own database engine. The DAO-based classes also support Data Definition Language (DDL) operations, such as adding tables via the classes, without having to call DAO directly. ## Usage @@ -99,11 +99,11 @@ You can use a querydef object for any of the following purposes: - To call the object's `Execute` member function to directly execute an action query or a SQL pass-through query -You can use a querydef object for any type of query, including select, action, crosstab, delete, update, append, make-table, data definition, SQL pass-through, union, and bulk queries. The content of the SQL statement that you supply determines the query's type. For information about query types, see the `Execute` and [`GetType`](#gettype) member functions. Recordsets are commonly used for row-returning queries, usually those using the **SELECT ... FROM** keywords. `Execute` is most commonly used for bulk operations. For more information, see [`Execute`](#execute) and [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). +You can use a querydef object for any type of query, including select, action, crosstab, delete, update, append, make-table, data definition, SQL pass-through, union, and bulk queries. The content of the SQL statement that you supply determines the query's type. For information about query types, see the `Execute` and [`GetType`](#gettype) member functions. Recordsets are commonly used for row-returning queries, usually queries using the **SELECT ... FROM** keywords. `Execute` is most commonly used for bulk operations. For more information, see [`Execute`](#execute) and [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). ## Querydefs and Recordsets -To use a querydef object to create a `CDaoRecordset` object, you typically create or open a querydef as described above. Then construct a recordset object, passing a pointer to your querydef object when you call [`CDaoRecordset::Open`](../../mfc/reference/cdaorecordset-class.md#open). The querydef you pass must be in an open state. For more information, see class [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). +To use a querydef object to create a `CDaoRecordset` object, you typically create or open a querydef as described previously. Then construct a recordset object, passing a pointer to your querydef object when you call [`CDaoRecordset::Open`](../../mfc/reference/cdaorecordset-class.md#open). The querydef you pass must be in an open state. For more information, see class [`CDaoRecordset`](../../mfc/reference/cdaorecordset-class.md). You can't use a querydef to create a recordset (the most common use for a querydef) unless it's in an open state. Put the querydef into an open state by calling either `Open` or `Create`. @@ -150,7 +150,7 @@ BOOL CanUpdate(); ### Return Value -Nonzero if you're permitted to modify the querydef; otherwise 0. +Nonzero if you can modify the querydef; otherwise 0. ### Remarks @@ -160,7 +160,7 @@ You can modify the querydef if: - You have update permissions for the database. - This depends on whether you've implemented security features. MFC doesn't provide support for security; you must implement it yourself by calling DAO directly or by using Microsoft Access. See the topic "Permissions Property" in DAO Help. + This depends on whether you implemented security features. MFC doesn't provide support for security; you must implement it yourself by calling DAO directly or by using Microsoft Access. See the topic "Permissions Property" in DAO Help. ## CDaoQueryDef::CDaoQueryDef @@ -501,7 +501,7 @@ For related information, see the topic "PARAMETERS Declaration (SQL)" in DAO Hel ## CDaoQueryDef::GetRecordsAffected -Call this member function to determine how many records were affected by the last call of [Execute](#execute). +Call this member function to determine how many records are affected by the last call of [Execute](#execute). ``` long GetRecordsAffected(); @@ -732,7 +732,7 @@ The ordinal position of the parameter in the querydef's Parameters collection. Y ### Remarks -The parameter must already have been established as part of the querydef's SQL string. You can access the parameter either by name or by its ordinal position in the collection. +The parameter must already be established as part of the querydef's SQL string. You can access the parameter either by name or by its ordinal position in the collection. Specify the value to set as a `COleVariant` object. For information about setting the desired value and type in your `COleVariant` object, see class [COleVariant](../../mfc/reference/colevariant-class.md). From b774711409b5f9e19d9bfff4b668e5f3bc05321d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 9 Aug 2024 14:41:03 -0700 Subject: [PATCH 0343/1239] wording update --- docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md | 2 +- docs/mfc/reference/cdaodatabase-class.md | 2 +- docs/mfc/reference/cdaoexception-class.md | 2 +- docs/mfc/reference/cdaoparameterinfo-structure.md | 2 +- docs/mfc/reference/cdaoquerydef-class.md | 2 +- docs/mfc/reference/cdaoquerydefinfo-structure.md | 2 +- docs/mfc/reference/cdaorecordset-class.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md index 0a6b7fe1d6..c0853757bb 100644 --- a/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md +++ b/docs/cpp/equality-operators-equal-equal-and-exclpt-equal.md @@ -15,7 +15,7 @@ helpviewer_keywords: ["!= operator", "equality operator", "not equal to operator ## Remarks The equal-to operator (**`==`**) returns **`true`** if both operands have the same value; otherwise **`false`**.\ -The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**.\ +The not-equal-to operator (**`!=`**) returns **`true`** if the operands don't have the same value; otherwise **`false`**. In C and C++, **`not_eq`** can be used as alternative to **`!=`**. For more information, see [`not-eq`](../c-runtime-library/reference/not-eq.md). diff --git a/docs/mfc/reference/cdaodatabase-class.md b/docs/mfc/reference/cdaodatabase-class.md index 743cf094fa..a59cea4963 100644 --- a/docs/mfc/reference/cdaodatabase-class.md +++ b/docs/mfc/reference/cdaodatabase-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoDatabase [MFC], CDaoDatabase", "CDaoDatabase [MFC], C Represents a connection to an Access database using Data Access Objects (DAO). > [!NOTE] -> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and is obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoexception-class.md b/docs/mfc/reference/cdaoexception-class.md index 0743d7432a..7092121b13 100644 --- a/docs/mfc/reference/cdaoexception-class.md +++ b/docs/mfc/reference/cdaoexception-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoException [MFC], CDaoException", "CDaoException [MFC] Represents an exception condition arising from the MFC database classes based on data access objects (DAO). > [!NOTE] -> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and is obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoparameterinfo-structure.md b/docs/mfc/reference/cdaoparameterinfo-structure.md index 2f63d014ed..d2d54d4df7 100644 --- a/docs/mfc/reference/cdaoparameterinfo-structure.md +++ b/docs/mfc/reference/cdaoparameterinfo-structure.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoParameterInfo structure [MFC]", "DAO (Data Access Obj The `CDaoParameterInfo` structure contains information about a parameter object defined for data access objects (DAO). > [!NOTE] -> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and is obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoquerydef-class.md b/docs/mfc/reference/cdaoquerydef-class.md index 1f8483e5db..a8f573e692 100644 --- a/docs/mfc/reference/cdaoquerydef-class.md +++ b/docs/mfc/reference/cdaoquerydef-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoQueryDef [MFC], CDaoQueryDef", "CDaoQueryDef [MFC], A Represents a query definition, or "querydef," usually one saved in a database. > [!NOTE] -> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and is obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaoquerydefinfo-structure.md b/docs/mfc/reference/cdaoquerydefinfo-structure.md index bb1a8d30e2..78fed0c2d2 100644 --- a/docs/mfc/reference/cdaoquerydefinfo-structure.md +++ b/docs/mfc/reference/cdaoquerydefinfo-structure.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["DAO (Data Access Objects), QueryDefs collection", "CDaoQu The `CDaoQueryDefInfo` structure contains information about a querydef object defined for data access objects (DAO). > [!NOTE] -> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and is obsolete. ## Syntax diff --git a/docs/mfc/reference/cdaorecordset-class.md b/docs/mfc/reference/cdaorecordset-class.md index 4b6a2ded9c..9614d6e514 100644 --- a/docs/mfc/reference/cdaorecordset-class.md +++ b/docs/mfc/reference/cdaorecordset-class.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["CDaoRecordset [MFC], CDaoRecordset", "CDaoRecordset [MFC] Represents a set of records selected from a data source. > [!NOTE] -> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and it's considered obsolete. +> Data Access Object (DAO) is supported through Office 2013. DAO 3.6 is the final version, and is obsolete. ## Syntax From 61423b19348de04e3ba3df0c3c3f7e56b2fc0474 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 12 Aug 2024 13:47:16 -0700 Subject: [PATCH 0344/1239] update topic I noticed was a little out-of-date --- .../how-to-create-a-cpp-project-from-existing-code.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/build/how-to-create-a-cpp-project-from-existing-code.md b/docs/build/how-to-create-a-cpp-project-from-existing-code.md index 338beeacb2..44a098482b 100644 --- a/docs/build/how-to-create-a-cpp-project-from-existing-code.md +++ b/docs/build/how-to-create-a-cpp-project-from-existing-code.md @@ -1,10 +1,9 @@ --- description: "Learn more about: How to: Create a C++ Project from Existing Code" title: "How to: Create a C++ Project from Existing Code" -ms.date: "05/06/2019" +ms.date: 08/12/2024 helpviewer_keywords: ["C++, creating projects from existing code", "Create New Project From Existing Code Files Wizard, project settings"] f1_keywords: ["vc.appwiz.importwiz.location", "vc.appwiz.importwiz.appsettings", "vc.appwiz.importwiz.debugsettings", "vc.appwiz.importwiz.releasesettings"] -ms.assetid: e328a938-395c-48ea-9e35-dd433de12b31 --- # How to: Create a C++ Project from Existing Code @@ -14,7 +13,12 @@ Porting existing code files into a C++ project enables the use of native MSBuild ### To create a C++ project from existing code +The following instruction assume that you have loaded Visual Studio and are past the start page. If you are at the Visual Studio start page, choose **Continue without code** to open the IDE. + 1. On the **File** menu, select **New** > **Project From Existing Code**. +1. The **Create New Project from Existing Code Files** wizard opens. Choose what type of project to create from the dropdown: Visual C++, Visual Basic, or C#. Choose **Next** to continue. + + ![Create New Project from Existing Code dialog, showing the Start page.](media/start.png) 1. Specify your project location, the directory for your source files, and the kinds of files the wizard imports into the new project. Choose **Next** to continue. From 00eeefb9ef5df3fcd59379bbc6e6b1cb406e1fb2 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 12 Aug 2024 14:03:42 -0700 Subject: [PATCH 0345/1239] update screenshot --- ...o-create-a-cpp-project-from-existing-code.md | 12 +++++++----- .../media/create-from-existing-code-wizard.png | Bin 0 -> 61271 bytes ...hat-s-new-for-visual-cpp-in-visual-studio.md | 1 - 3 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 docs/build/media/create-from-existing-code-wizard.png diff --git a/docs/build/how-to-create-a-cpp-project-from-existing-code.md b/docs/build/how-to-create-a-cpp-project-from-existing-code.md index 44a098482b..97ac668b56 100644 --- a/docs/build/how-to-create-a-cpp-project-from-existing-code.md +++ b/docs/build/how-to-create-a-cpp-project-from-existing-code.md @@ -13,13 +13,14 @@ Porting existing code files into a C++ project enables the use of native MSBuild ### To create a C++ project from existing code -The following instruction assume that you have loaded Visual Studio and are past the start page. If you are at the Visual Studio start page, choose **Continue without code** to open the IDE. +The following instructions assume that you have loaded Visual Studio and are past the start page. If you are at the Visual Studio start page, choose **Continue without code** to open the IDE. 1. On the **File** menu, select **New** > **Project From Existing Code**. -1. The **Create New Project from Existing Code Files** wizard opens. Choose what type of project to create from the dropdown: Visual C++, Visual Basic, or C#. Choose **Next** to continue. - - ![Create New Project from Existing Code dialog, showing the Start page.](media/start.png) +1. The **Create New Project from Existing Code Files** wizard opens. Choose what type of project to create from the dropdown: **Visual C++**, **Visual Basic**, or **C#**. Then choose **Next** to continue. + ::image type="complex" source="./media/create-from-existing-code-wizard.png" alt-text="Create New Project from Existing Code dialog."::: + The project type dropdown shows the optoins Visual C++ (which is selected), Visual Basic, and C#. + :::image-end::: 1. Specify your project location, the directory for your source files, and the kinds of files the wizard imports into the new project. Choose **Next** to continue. | Setting | Description | @@ -62,7 +63,8 @@ The following instruction assume that you have loaded Visual Studio and are past > [!NOTE] > The **Build**, **Rebuild**, **Clean** command line, and **Output (for debugging)** settings are only enabled if the **Use external build system** option is selected on the **Specify Project Settings** page. -1. Specify the Release configuration settings to use, these settings are the same as the Debug configuration settings. Choose **Finish** to generate the new project. +1. Specify the Release configuration settings to use, these settings are the same as the Debug configuration settings. +1. Choose **Finish** to generate the new project. > [!NOTE] > Here you can check **Same as Debug configuration** to specify that the wizard will generate Release configuration project settings identical to Debug configuration project settings. This option is checked by default. All other options on this page are inactive unless you uncheck this box. diff --git a/docs/build/media/create-from-existing-code-wizard.png b/docs/build/media/create-from-existing-code-wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..881cbe8a367cdf1af4abfa0890d96690dfbff8bf GIT binary patch literal 61271 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 literal 0 HcmV?d00001 diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 139bdf8496..6ef0903436 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -22,7 +22,6 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a | For more information about | See | |---|---| -| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.11](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-11/) | | Standard Library (STL) merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.11](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711) | | New features in the Visual Studio 17.11 IDE |[Visual Studio 2022 version 17.11 Release Notes](/visualstudio/releases/2022/release-notes) | | C++ language conformance improvements in Visual Studio 2022 17.11 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.11](cpp-conformance-improvements.md#improvements_1711) | From 7f242b00fa413e7d1bcc524327170f9c6d41829a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 12 Aug 2024 14:09:40 -0700 Subject: [PATCH 0346/1239] fix graphic --- .../build/how-to-create-a-cpp-project-from-existing-code.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/how-to-create-a-cpp-project-from-existing-code.md b/docs/build/how-to-create-a-cpp-project-from-existing-code.md index 97ac668b56..a046c8b55b 100644 --- a/docs/build/how-to-create-a-cpp-project-from-existing-code.md +++ b/docs/build/how-to-create-a-cpp-project-from-existing-code.md @@ -7,18 +7,18 @@ f1_keywords: ["vc.appwiz.importwiz.location", "vc.appwiz.importwiz.appsettings", --- # How to: Create a C++ Project from Existing Code -In Visual Studio, you can port existing code files into a C++ project using the **Create New Project From Existing Code Files** wizard. This wizard creates a project solution that uses the MSBuild system to manage source files and build configuration. It works best with relatively simple projects that do not have complex folder hierarchies. The wizard isn't available in older Express editions of Visual Studio. +In Visual Studio, you can port existing code files into a C++ project using the **Create New Project From Existing Code Files** wizard. This wizard creates a project solution that uses the MSBuild system to manage source files and build configuration. It works best with relatively simple projects that don't have complex folder hierarchies. The wizard isn't available in older Express editions of Visual Studio. Porting existing code files into a C++ project enables the use of native MSBuild project management features built into the IDE. If you prefer to use your existing build system, such as nmake makefiles, CMake, or alternatives, you can use the Open Folder or CMake options instead. For more information, see [Open Folder projects for C++](open-folder-projects-cpp.md) or [CMake projects in Visual Studio](cmake-projects-in-visual-studio.md). Both options let you use IDE features such as [IntelliSense](/visualstudio/ide/using-intellisense) and [Project Properties](working-with-project-properties.md). ### To create a C++ project from existing code -The following instructions assume that you have loaded Visual Studio and are past the start page. If you are at the Visual Studio start page, choose **Continue without code** to open the IDE. +The following instructions assume that Visual Studio is running and is past the start page. If you are on the Visual Studio start page, choose **Continue without code** to open the IDE. 1. On the **File** menu, select **New** > **Project From Existing Code**. 1. The **Create New Project from Existing Code Files** wizard opens. Choose what type of project to create from the dropdown: **Visual C++**, **Visual Basic**, or **C#**. Then choose **Next** to continue. - ::image type="complex" source="./media/create-from-existing-code-wizard.png" alt-text="Create New Project from Existing Code dialog."::: + :::image type="complex" source="./media/create-from-existing-code-wizard.png" alt-text="Create New Project from Existing Code dialog."::: The project type dropdown shows the optoins Visual C++ (which is selected), Visual Basic, and C#. :::image-end::: 1. Specify your project location, the directory for your source files, and the kinds of files the wizard imports into the new project. Choose **Next** to continue. From f110d76522952e22b3bb30ae550f30db1dcfbb56 Mon Sep 17 00:00:00 2001 From: Dennis Rea <61802807+denrea@users.noreply.github.com> Date: Mon, 12 Aug 2024 14:42:40 -0700 Subject: [PATCH 0347/1239] Acrolinx fix, alt-text compliance --- docs/build/how-to-create-a-cpp-project-from-existing-code.md | 4 ++-- docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/how-to-create-a-cpp-project-from-existing-code.md b/docs/build/how-to-create-a-cpp-project-from-existing-code.md index a046c8b55b..7d4b11a4b2 100644 --- a/docs/build/how-to-create-a-cpp-project-from-existing-code.md +++ b/docs/build/how-to-create-a-cpp-project-from-existing-code.md @@ -18,8 +18,8 @@ The following instructions assume that Visual Studio is running and is past the 1. On the **File** menu, select **New** > **Project From Existing Code**. 1. The **Create New Project from Existing Code Files** wizard opens. Choose what type of project to create from the dropdown: **Visual C++**, **Visual Basic**, or **C#**. Then choose **Next** to continue. - :::image type="complex" source="./media/create-from-existing-code-wizard.png" alt-text="Create New Project from Existing Code dialog."::: - The project type dropdown shows the optoins Visual C++ (which is selected), Visual Basic, and C#. + :::image type="complex" source="./media/create-from-existing-code-wizard.png" alt-text="Screenshot showing the Create New Project from Existing Code dialog."::: + The project type dropdown shows the options Visual C++ (which is selected), Visual Basic, and C#. :::image-end::: 1. Specify your project location, the directory for your source files, and the kinds of files the wizard imports into the new project. Choose **Next** to continue. diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 6ef0903436..9eda579b5f 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -50,7 +50,7 @@ A partial list of new features: The Quick Info window is shown above a function. The Tell me more link is highlighted. :::image-end::: - GitHub Copilot can generate naming suggestions for your identifiers (variables, methods, or classes) based on how your identifier is used and the style of your code. - :::image type="complex" source="./media/copilot-rename.png" alt-text="A screenshot of the GitHub Copilot Rename dialog"::: + :::image type="complex" source="./media/copilot-rename.png" alt-text="A screenshot of the GitHub Copilot Rename dialog."::: The Rename dialog has a New name field with a dropdown list that shows these choices: text_color, font_color, display_color, console_color, and menu_text_color. :::image-end::: You need an active [GitHub Copilot subscription](https://visualstudio.microsoft.com/github-copilot/). Right-click the variable you wish to rename, and choose **Rename** (`Ctrl+R`, `Ctrl+R`). Select the GitHub Copilot sparkle icon to generate naming suggestions. From 01859b5b6a6a410c8024cde5ce3b320269ed128c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 12 Aug 2024 14:56:44 -0700 Subject: [PATCH 0348/1239] add link that'll be live tomorrow --- docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md index 9eda579b5f..a6a3413f86 100644 --- a/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md +++ b/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md @@ -1,7 +1,7 @@ --- title: "What's new for C++ in Visual Studio" description: "The new features and fixes in the Microsoft C/C++ compiler and tools in Visual Studio." -ms.date: 08/08/2024 +ms.date: 08/12/2024 ms.service: "visual-cpp" ms.subservice: "ide" ms.custom: intro-whats-new @@ -22,6 +22,7 @@ Visual Studio 2022 brings many updates and fixes to the Microsoft C++ compiler a | For more information about | See | |---|---| +| What's new for C++ developers | [What's New for C++ Developers in Visual Studio 2022 17.11](https://devblogs.microsoft.com/cppblog/whats-new-for-c-developers-in-visual-studio-2022-17-11/) | | Standard Library (STL) merged C++26 and C++23 features, C++20 defect reports, LWG issue resolutions, performance improvements, enhanced behavior, and fixed bugs | [STL Changelog 17.11](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711) | | New features in the Visual Studio 17.11 IDE |[Visual Studio 2022 version 17.11 Release Notes](/visualstudio/releases/2022/release-notes) | | C++ language conformance improvements in Visual Studio 2022 17.11 | [C++ Conformance improvements, behavior changes, and bug fixes in Visual Studio 2022 17.11](cpp-conformance-improvements.md#improvements_1711) | From 84b4dc210a169644a43ed4f4f689b221c12cb9bf Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 15 Aug 2024 16:44:25 -0700 Subject: [PATCH 0349/1239] draft --- docs/linux/connectionmanager-reference.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 3fff906968..2c4183ab34 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["ConnectionManager program"] ::: moniker range="<=msvc-150" -ConnectionManager.exe is available in Visual Studio 2019 version 16.5 and later. +`ConnectionManager.exe` is available in Visual Studio 2019 version 16.5 and later. ::: moniker-end @@ -17,9 +17,9 @@ ConnectionManager.exe is available in Visual Studio 2019 version 16.5 and later. ConnectionManager.exe is a command-line utility to manage remote development connections outside of Visual Studio. It's useful for tasks such as provisioning a new development machine. Or, use it to set up Visual Studio for continuous integration. You can use it in a Developer Command Prompt window. For more information about the Developer Command Prompt, see [Use the Microsoft C++ toolset from the command line](../build/building-on-the-command-line.md). -ConnectionManager.exe is available in Visual Studio 2019 version 16.5 and later. It's part of the **Linux development with C++** workload in the Visual Studio Installer. It's also installed automatically when you choose the **Connection Manager** component in the installer. It's installed in *%VCIDEInstallDir%\\Linux\\bin\\ConnectionManagerExe\\ConnectionManager.exe*. +`ConnectionManager.exe` is available in Visual Studio 2019 version 16.5 and later. It's part of the **Linux development with C++** workload in the Visual Studio Installer. It's also installed automatically when you choose the **Connection Manager** component in the installer. It's installed in `%VCIDEInstallDir%\Linux\bin\ConnectionManagerExe\ConnectionManager.exe`. -The functionality of ConnectionManager.exe is also available in Visual Studio. To manage remote development connections in the IDE, on the menu bar, choose **Tools** > **Options** to open the Options dialog. In the Options dialog, select **Cross Platform** > **Connection Manager**. +The functionality of `ConnectionManager.exe` is also available in Visual Studio. To manage remote development connections in the IDE, on the menu bar, choose **Tools** > **Options** to open the Options dialog. In the Options dialog, select **Cross Platform** > **Connection Manager**. ## Syntax @@ -31,6 +31,8 @@ The functionality of ConnectionManager.exe is also available in Visual Studio. T Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You'll be prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. + Username/password is an insecure pattern. Consider using a private key to authenticate which is generally more secure. Versions of Visual Studio before 17.10 support EC, RSA, and DSA keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key will not be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. + - **`clean`** Deletes header cache for connections that no longer exist. @@ -57,7 +59,7 @@ The functionality of ConnectionManager.exe is also available in Visual Studio. T - **`remove-all`** Removes all stored connections. - + - **`update`** \[*default* \| *all* \| *connection_id* \| *user\@host* \[**`--port`** *port*]] \[**`--previous`**] [**`--fingerprint`**] Added in Visual Studio 16.10. Updates the host key fingerprint of the specified connection(s). From 49fc539707658395bb1a6290db04e23c30572b72 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 15 Aug 2024 16:52:36 -0700 Subject: [PATCH 0350/1239] acrolinx --- docs/linux/connect-to-your-remote-linux-computer.md | 2 +- docs/linux/connectionmanager-reference.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/linux/connect-to-your-remote-linux-computer.md b/docs/linux/connect-to-your-remote-linux-computer.md index 4d9b28f1c6..886de81b9a 100644 --- a/docs/linux/connect-to-your-remote-linux-computer.md +++ b/docs/linux/connect-to-your-remote-linux-computer.md @@ -90,7 +90,7 @@ If `ssh` isn't already set up and running on your Linux system, follow these ste You can use either a password or a key file and passphrase for authentication. For many development scenarios, password authentication is sufficient, but key files are more secure. If you already have a key pair, it's possible to reuse it. - Versions of Visual Studio before 17.10 support EC, RSA, and DSA keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command: + Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command: `ssh-keygen -m pem -t ecdsa -f ` > [!NOTE] diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 2c4183ab34..d64c25c2c8 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -29,9 +29,9 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. - **`add`** *user\@host* \[**`--port`** *port*] \[**`--password`** *password*] \[**`--privatekey`** *privatekey_file*] - Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You'll be prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. + Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. - Username/password is an insecure pattern. Consider using a private key to authenticate which is generally more secure. Versions of Visual Studio before 17.10 support EC, RSA, and DSA keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key will not be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. + Username/password is an insecure pattern. Consider using a private key to authenticate which is generally more secure. Versions of Visual Studio before 17.10 support EC, RSA, and DSA keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key won't be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. - **`clean`** @@ -50,7 +50,7 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. Defines or modifies a property on a connection.\ If *value* is empty, then the property *key* is deleted.\ If authentication fails, no changes will be made.\ - If no connection is specified (what is meant by *default*, above), the user's default remote connection is used. + If no connection is specified (what is meant by *default*), the user's default remote connection is used. - **`remove`** \[*connection_id* \| *user\@host* \[**`--port`** *port*]] From ed1ed3c86afcc6484d36dfc946275031b404574b Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 15 Aug 2024 17:00:30 -0700 Subject: [PATCH 0351/1239] define acronyms --- docs/linux/connectionmanager-reference.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index d64c25c2c8..164e4c7473 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -31,7 +31,11 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. - Username/password is an insecure pattern. Consider using a private key to authenticate which is generally more secure. Versions of Visual Studio before 17.10 support EC, RSA, and DSA keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key won't be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. + Username/password is an insecure pattern. Consider using a private key to authenticate, which is generally more secure. + + Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. + + To create a key pair compatible with the connection manager, use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key won't be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. - **`clean`** From 0b4cf27da92bb5673dcdc7c555309766e09a8b33 Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Fri, 16 Aug 2024 14:23:04 -0600 Subject: [PATCH 0352/1239] Improve code examples in writing-an-exception-filter.md (#5081) * Update writing-an-exception-filter.md * Another correction --- docs/cpp/writing-an-exception-filter.md | 46 ++++++++++++++----------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/docs/cpp/writing-an-exception-filter.md b/docs/cpp/writing-an-exception-filter.md index cf3e4b3781..dfa69fb7df 100644 --- a/docs/cpp/writing-an-exception-filter.md +++ b/docs/cpp/writing-an-exception-filter.md @@ -16,25 +16,29 @@ For example, the following code uses a function call in the *filter* expression: ```cpp // exceptions_Writing_an_Exception_Filter.cpp #include +int Eval_Exception(int); int main() { - int Eval_Exception( int ); - - __try {} - - __except ( Eval_Exception( GetExceptionCode( ))) { - ; - } - + __try { + ; + } + __except (Eval_Exception(GetExceptionCode())) { + ; + } +} +void HandleOverflow() { + // Gracefully recover } -void ResetVars( int ) {} -int Eval_Exception ( int n_except ) { - if ( n_except != STATUS_INTEGER_OVERFLOW && - n_except != STATUS_FLOAT_OVERFLOW ) // Pass on most exceptions - return EXCEPTION_CONTINUE_SEARCH; - - // Execute some code to clean up problem - ResetVars( 0 ); // initializes data to 0 - return EXCEPTION_CONTINUE_EXECUTION; +int Eval_Exception(int n_except) { + if ( + n_except != STATUS_INTEGER_OVERFLOW && + n_except != STATUS_FLOAT_OVERFLOW + ) { + // Pass on most exceptions + return EXCEPTION_CONTINUE_SEARCH; + } + // Execute some code to clean up problem + HandleOverflow(); + return EXCEPTION_CONTINUE_EXECUTION; } ``` @@ -42,7 +46,7 @@ It's a good idea to use a function call in the *filter* expression whenever *fil Note the use of [`GetExceptionCode`](/windows/win32/Debug/getexceptioncode) to determine the exception. This function must be called inside the filter expression of the **`__except`** statement. `Eval_Exception` can't call `GetExceptionCode`, but it must have the exception code passed to it. -This handler passes control to another handler unless the exception is an integer or floating-point overflow. If it is, the handler calls a function (`ResetVars` is only an example, not an API function) to reset some global variables. The **`__except`** statement block, which in this example is empty, can never be executed because `Eval_Exception` never returns `EXCEPTION_EXECUTE_HANDLER` (1). +This handler passes control to another handler unless the exception is an integer or floating-point overflow. If it is, the handler calls a function (`HandleOverflow` is only an example, not an API function) to appropriately try to recover from the exception. The **`__except`** statement block, which in this example is empty, can never be executed because `Eval_Exception` never returns `EXCEPTION_EXECUTE_HANDLER` (1). Using a function call is a good general-purpose technique for dealing with complex filter expressions. Two other C language features that are useful are: @@ -53,13 +57,13 @@ Using a function call is a good general-purpose technique for dealing with compl The conditional operator is frequently useful here. It can be used to check for a specific return code and then return one of two different values. For example, the filter in the following code recognizes the exception only if the exception is `STATUS_INTEGER_OVERFLOW`: ```cpp -__except( GetExceptionCode() == STATUS_INTEGER_OVERFLOW ? 1 : 0 ) { +__except (GetExceptionCode() == STATUS_INTEGER_OVERFLOW ? 1 : 0) ``` The purpose of the conditional operator in this case is mainly to provide clarity, because the following code produces the same results: ```cpp -__except( GetExceptionCode() == STATUS_INTEGER_OVERFLOW ) { +__except (GetExceptionCode() == STATUS_INTEGER_OVERFLOW) ``` The conditional operator is more useful in situations where you might want the filter to evaluate to -1, `EXCEPTION_CONTINUE_EXECUTION`. @@ -67,7 +71,7 @@ The conditional operator is more useful in situations where you might want the f The comma operator lets you execute multiple expressions in sequence. It then returns the value of the last expression. For example, the following code stores the exception code in a variable and then tests it: ```cpp -__except( nCode = GetExceptionCode(), nCode == STATUS_INTEGER_OVERFLOW ) +__except (nCode = GetExceptionCode(), nCode == STATUS_INTEGER_OVERFLOW) ``` ## See also From eda9963719787ea8f997eb721521ce3bb372b51b Mon Sep 17 00:00:00 2001 From: William Cushing <4700447+WilliamCushing@users.noreply.github.com> Date: Fri, 16 Aug 2024 13:23:26 -0700 Subject: [PATCH 0353/1239] Fix the description of the _MBC_ILLEGAL return value, especially so in the case `type == _MBC_LEAD`. (#5082) --- docs/c-runtime-library/reference/mbbtype-mbbtype-l.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/c-runtime-library/reference/mbbtype-mbbtype-l.md b/docs/c-runtime-library/reference/mbbtype-mbbtype-l.md index abff8af776..d3e9461cbe 100644 --- a/docs/c-runtime-library/reference/mbbtype-mbbtype-l.md +++ b/docs/c-runtime-library/reference/mbbtype-mbbtype-l.md @@ -50,9 +50,9 @@ The locale to use. |---|---|---|---| | Any value except 1 | Valid single byte or lead byte | `_MBC_SINGLE` (0) | Single byte (0x20 - 0x7E, 0xA1 - 0xDF) | | Any value except 1 | Valid single byte or lead byte | `_MBC_LEAD` (1) | Lead byte of multibyte character (0x81 - 0x9F, 0xE0 - 0xFC) | -| Any value except 1 | Valid single-byte or lead byte | `_MBC_ILLEGAL`

(-1) | Invalid character (any value except 0x20 - 0x7E, 0xA1 - 0xDF, 0x81 - 0x9F, 0xE0 - 0xFC | +| Any value except 1 | Valid single-byte or lead byte | `_MBC_ILLEGAL` (-1) | Invalid character: not single or lead (0x00 - 0x1F, 0x7F, 0x80, 0xA0, 0xFD, 0xFE, 0xFF) | | 1 | Valid trail byte | `_MBC_TRAIL` (2) | Trailing byte of multibyte character (0x40 - 0x7E, 0x80 - 0xFC) | -| 1 | Valid trail byte | `_MBC_ILLEGAL`

(-1) | Invalid character (any value except 0x20 - 0x7E, 0xA1 - 0xDF, 0x81 - 0x9F, 0xE0 - 0xFC | +| 1 | Valid trail byte | `_MBC_ILLEGAL` (-1) | Invalid character: not trailing (0x00 - 0x3F, 0x7F, 0xFD, 0xFE, 0xFF) | ## Remarks From d1ee6f945feb0583b57276660c90fd1214918803 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 16 Aug 2024 13:35:15 -0700 Subject: [PATCH 0354/1239] wording --- docs/linux/connectionmanager-reference.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 164e4c7473..7a9586c796 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -31,9 +31,7 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. - Username/password is an insecure pattern. Consider using a private key to authenticate, which is generally more secure. - - Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. + You can use use username/password to authenticate, but you can also use a private key which is generally more secure. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager, use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key won't be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. From aa572a508a5617c9f5e956ad4e38a1350262cd02 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 16 Aug 2024 13:49:27 -0700 Subject: [PATCH 0355/1239] wording --- docs/linux/connectionmanager-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 7a9586c796..68373b0478 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -52,7 +52,7 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. Defines or modifies a property on a connection.\ If *value* is empty, then the property *key* is deleted.\ If authentication fails, no changes will be made.\ - If no connection is specified (what is meant by *default*), the user's default remote connection is used. + If no connection is specified, the user's default remote connection is used. - **`remove`** \[*connection_id* \| *user\@host* \[**`--port`** *port*]] From d7975d4cf5460e87014f35f0c0bf0977702c895c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 16 Aug 2024 14:01:57 -0700 Subject: [PATCH 0356/1239] wording --- docs/linux/connect-to-your-remote-linux-computer.md | 8 ++++---- docs/linux/connectionmanager-reference.md | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/linux/connect-to-your-remote-linux-computer.md b/docs/linux/connect-to-your-remote-linux-computer.md index 886de81b9a..ef8ddd81f5 100644 --- a/docs/linux/connect-to-your-remote-linux-computer.md +++ b/docs/linux/connect-to-your-remote-linux-computer.md @@ -85,14 +85,14 @@ If `ssh` isn't already set up and running on your Linux system, follow these ste | **Password** | Password for the entered user name | | **Private key file** | Private key file created for ssh connection | | **Passphrase** | Passphrase used with private key selected above | - + You can't click the **Connect** button until all the required fields are completed and the port is set to an integer between 1 and 65535. - - You can use either a password or a key file and passphrase for authentication. For many development scenarios, password authentication is sufficient, but key files are more secure. If you already have a key pair, it's possible to reuse it. + + You can use either a password or a key file and passphrase for authentication. Key files are more secure. If you already have a key pair, it's possible to reuse it. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command: `ssh-keygen -m pem -t ecdsa -f ` - + > [!NOTE] > If using `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key will not be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 68373b0478..0d4db5ba6e 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -31,7 +31,7 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. - You can use use username/password to authenticate, but you can also use a private key which is generally more secure. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. + You can use either a password or a key file and passphrase for authentication. Key files are more secure. If you already have a key pair, it's possible to reuse it. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager, use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key won't be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. @@ -139,7 +139,7 @@ ConnectionManager.exe remove 1975957870 | `port` | The port used for the connection.
Change the port for the specified connection: `ConnectionManager.exe modify -21212121 --property port=22`| | `shell` | The preferred shell to use on the remote system. Supported shells are `sh, csh, bash, tcsh, ksh, zsh, dash`
To set the preferred shell to be zsh for the remote machine on the specified connection: `ConnectionManager.exe modify -21212121 --property shell=zsh`
If the shell found on the Linux system isn't supported, then **`sh`** is used for all commands. | | `systemID` | The remote system type, such as `"OSX"`, `"Ubuntu"`. | -| `timeout` | The connection timeout in milliseconds. Change the timeout for the specified connection with: `ConnectionManager.exe modify -21212121 --property timeout=100` +| `timeout` | The connection timeout in milliseconds. Change the timeout for the specified connection with: `ConnectionManager.exe modify -21212121 --property timeout=100` | | `username` | The name of the user logged into the remote computer.
To add a connection for a user named `"user"` on localhost: `ConnectionManager.exe add user@127.0.0.1`| ## See also From d8c6240cb1dea839319893b00ba2d992bb88a9fe Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 16 Aug 2024 15:20:27 -0700 Subject: [PATCH 0357/1239] wording --- docs/linux/connect-to-your-remote-linux-computer.md | 2 +- docs/linux/connectionmanager-reference.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/linux/connect-to-your-remote-linux-computer.md b/docs/linux/connect-to-your-remote-linux-computer.md index ef8ddd81f5..e5deff448b 100644 --- a/docs/linux/connect-to-your-remote-linux-computer.md +++ b/docs/linux/connect-to-your-remote-linux-computer.md @@ -88,7 +88,7 @@ If `ssh` isn't already set up and running on your Linux system, follow these ste You can't click the **Connect** button until all the required fields are completed and the port is set to an integer between 1 and 65535. - You can use either a password or a key file and passphrase for authentication. Key files are more secure. If you already have a key pair, it's possible to reuse it. + You can use either a password or a key file and passphrase for authentication. Key files are more secure than username/password. If you already have a key pair, it's possible to reuse it. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command: `ssh-keygen -m pem -t ecdsa -f ` diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 0d4db5ba6e..771148426c 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -29,9 +29,11 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. - **`add`** *user\@host* \[**`--port`** *port*] \[**`--password`** *password*] \[**`--privatekey`** *privatekey_file*] - Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a password for a private key. + Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a passphrase for a private key file. - You can use either a password or a key file and passphrase for authentication. Key files are more secure. If you already have a key pair, it's possible to reuse it. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. + You can use either a password or a key file and passphrase for authentication. Key files are more secure than username/password. If you already have a key pair, it's possible to reuse it. + + Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager, use the command `ssh-keygen -m pem -t ecdsa -f `. If you use `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key won't be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. From 749269c8b9fbc642c86da8e18ce88679fef66caf Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 16 Aug 2024 15:23:07 -0700 Subject: [PATCH 0358/1239] wording --- docs/linux/connectionmanager-reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/linux/connectionmanager-reference.md b/docs/linux/connectionmanager-reference.md index 771148426c..14b4e8c152 100644 --- a/docs/linux/connectionmanager-reference.md +++ b/docs/linux/connectionmanager-reference.md @@ -29,9 +29,9 @@ The functionality of `ConnectionManager.exe` is also available in Visual Studio. - **`add`** *user\@host* \[**`--port`** *port*] \[**`--password`** *password*] \[**`--privatekey`** *privatekey_file*] - Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) Use both **-`-password`** and **`--privatekey`** to specify a passphrase for a private key file. + Authenticates and adds a new connection. By default, it uses port 22 and password authentication. (You are prompted to enter a password.) - You can use either a password or a key file and passphrase for authentication. Key files are more secure than username/password. If you already have a key pair, it's possible to reuse it. + You can use either a password or a key file and passphrase for authentication. Key files are more secure than username/password. If you already have a key pair, it's possible to reuse it. Use both **-`-password`** and **`--privatekey`** to specify a passphrase for a private key file. Versions of Visual Studio before 17.10 support Elliptic Curve (EC), Rivert-Shamir-Adleman (RSA), and Digital signature algorithm (DSA) keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. From 0dd92b59ccf2cbfea46f1e7cd27a3b5fe3f19aa3 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Mon, 19 Aug 2024 16:22:54 -0700 Subject: [PATCH 0359/1239] change to new manager (#5649) --- docs/docfx.json | 2 +- docs/get-started/index.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docfx.json b/docs/docfx.json index 3ee5ea465c..52f700e084 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -40,7 +40,7 @@ "breadcrumb_path": "~/_breadcrumb/toc.yml",  "uhfHeaderId": "MSDocsHeader-CPP", "ROBOTS": "INDEX,FOLLOW", - "manager": "markl", + "manager": "coxford", "ms.date": "11/16/2016", "ms.topic": "conceptual", "audience": "developer", diff --git a/docs/get-started/index.yml b/docs/get-started/index.yml index 64aba23128..d338b6c128 100644 --- a/docs/get-started/index.yml +++ b/docs/get-started/index.yml @@ -11,7 +11,7 @@ metadata: ms.date: 12/06/2021 author: tylermsft ms.author: twhitney - manager: markl + manager: coxford ms.service: visual-cpp dev_langs: - C++ From abf185a0cc449d22537a26ab5d420ebee402c6c9 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 15:45:20 -0700 Subject: [PATCH 0360/1239] Learn Editor: Update c26831.md --- docs/code-quality/c26831.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/code-quality/c26831.md b/docs/code-quality/c26831.md index 0fe737b017..fba6057d2f 100644 --- a/docs/code-quality/c26831.md +++ b/docs/code-quality/c26831.md @@ -58,4 +58,6 @@ void foo(int i, int j) ## See also [`C26832`](c26832.md)\ -[`C26833`](c26833.md) \ No newline at end of file +[`C26833`](c26833.md)\ +[`C26838`](c26838.md)\ +[`C26839`](c26839.md) \ No newline at end of file From 2fb9dc65f832d74f554862d002aa5cb695b96189 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 15:48:17 -0700 Subject: [PATCH 0361/1239] Learn Editor: Update c26838.md --- docs/code-quality/c26838.md | 15 +++++++++++++++ docs/code-quality/toc.yml | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 docs/code-quality/c26838.md diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md new file mode 100644 index 0000000000..46fe9f69ef --- /dev/null +++ b/docs/code-quality/c26838.md @@ -0,0 +1,15 @@ +--- +# Required metadata +# For more information, see https://review.learn.microsoft.com/en-us/help/platform/learn-editor-add-metadata?branch=main +# For valid values of ms.service, ms.prod, and ms.topic, see https://review.learn.microsoft.com/en-us/help/platform/metadata-taxonomies?branch=main + +title: # Add a title for the browser tab +description: # Add a meaningful description for search results +author: Rastaban # GitHub alias +ms.author: philc # Microsoft alias +ms.service: # Add the ms.service or ms.prod value +# ms.prod: # To use ms.prod, uncomment it and delete ms.service +ms.topic: # Add the ms.topic value +ms.date: 08/22/2024 +--- +Warning `C26839` \ No newline at end of file diff --git a/docs/code-quality/toc.yml b/docs/code-quality/toc.yml index 049d6ad622..86553eebfc 100644 --- a/docs/code-quality/toc.yml +++ b/docs/code-quality/toc.yml @@ -633,6 +633,8 @@ items: href: ../code-quality/c26830.md - name: Warning C26831 href: ../code-quality/c26831.md + - name: " Warning C26839" + href: c26838.md - name: Warning C26832 href: ../code-quality/c26832.md - name: Warning C26833 From 1344e6dadd9f1a612ee61909306c33b9077b86c5 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 15:55:43 -0700 Subject: [PATCH 0362/1239] Learn Editor: Update c26838.md --- docs/code-quality/c26838.md | 57 ++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md index 46fe9f69ef..0e88b4e5e1 100644 --- a/docs/code-quality/c26838.md +++ b/docs/code-quality/c26838.md @@ -12,4 +12,59 @@ ms.service: # Add the ms.service or ms.prod value ms.topic: # Add the ms.topic value ms.date: 08/22/2024 --- -Warning `C26839` \ No newline at end of file +# Warning `C26839` + +> Allocation size is the result of a signed to unsigned narrowing conversion that could result in overflow if the signed value is negative + +## Remarks + +This warning reports that the size specified for an allocation may be the result of the conversion of a possibly negative signed value to an unsigned value. For example: + +```cpp +void* CustomAlloc(size_t); + +int* CreateIntArray(int numberOfElements) +{ + int* p = (int*)CustomAlloc(numberOfElements * sizeof(int)); // Warning: C26838 + // ... + return p; +} +``` + +In the expression `numberOfElements * sizeof(int)`, `numberOfElements` is signed and `sizeof(int)` is unsigned. On 64 bit machines `numberOfElements` will be promoted to an unsigned value when multiplied +by `sizeof(int)`. When `numberOfElements` is negative, the resulting value may overflow or have unexpected results when passed to `CustomAlloc`. + +This check applies to common allocation functions like `new`, `malloc`, and `VirtualAlloc`. The check also applies to custom allocator functions that have `alloc` (case insensitive) in the function name. + +This check sometimes fails to recognize that certain checks can prevent overflows because the check is conservative. + +This warning is available in Visual Studio 2022 version 17.12 and later versions. + +## Example + +To fix the previous code example in which `numberOfElements * sizeof(int)` might overflow due to a negative signed value, introduce a check to make sure it won't. For example: + +```cpp +void* CustomAlloc(size_t); + +int* CreateIntArray(int numberOfElements) +{ + if (numberOfElements < 0) + return nullptr; + + int* p = (int*)CustomAlloc(numberOfElements * sizeof(int)); + // ... + return p; +} +``` + +In the previous example, checking for a negative value addresses the C26832 warning. Depending on the size of the types involved, this check may result in a different warning such as [`C26831`](c26831.md). +For example, on a 32 bit system, both `int` and `size_t` are 32 bits, so the result of the multiplication can still overflow without negative values. + +## See also + +[`C26831`](c26831.md)\ +[`C26832`](c26832.md)\ +[`C26833`](c26833.md)\ +[`C26833`](c26839.md) + From 40c7f4ad72717621bf9fd90b5a1716b762304905 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 15:55:48 -0700 Subject: [PATCH 0363/1239] update Metadata --- docs/code-quality/c26838.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md index 0e88b4e5e1..ccb107559d 100644 --- a/docs/code-quality/c26838.md +++ b/docs/code-quality/c26838.md @@ -3,13 +3,12 @@ # For more information, see https://review.learn.microsoft.com/en-us/help/platform/learn-editor-add-metadata?branch=main # For valid values of ms.service, ms.prod, and ms.topic, see https://review.learn.microsoft.com/en-us/help/platform/metadata-taxonomies?branch=main -title: # Add a title for the browser tab -description: # Add a meaningful description for search results +title: Warning C26838 +description: '"Describes the Microsoft C/C++ code analysis warning C26838, its causes, and how to address it."' author: Rastaban # GitHub alias ms.author: philc # Microsoft alias -ms.service: # Add the ms.service or ms.prod value -# ms.prod: # To use ms.prod, uncomment it and delete ms.service -ms.topic: # Add the ms.topic value +ms.service: visual-cpp +ms.topic: reference ms.date: 08/22/2024 --- # Warning `C26839` From 6dd60c0ad00e94f97737dbe376bb8cdba7bd186c Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 16:13:02 -0700 Subject: [PATCH 0364/1239] change article metadata --- docs/code-quality/c26838.md | 69 ------------------------------------- 1 file changed, 69 deletions(-) delete mode 100644 docs/code-quality/c26838.md diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md deleted file mode 100644 index ccb107559d..0000000000 --- a/docs/code-quality/c26838.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -# Required metadata -# For more information, see https://review.learn.microsoft.com/en-us/help/platform/learn-editor-add-metadata?branch=main -# For valid values of ms.service, ms.prod, and ms.topic, see https://review.learn.microsoft.com/en-us/help/platform/metadata-taxonomies?branch=main - -title: Warning C26838 -description: '"Describes the Microsoft C/C++ code analysis warning C26838, its causes, and how to address it."' -author: Rastaban # GitHub alias -ms.author: philc # Microsoft alias -ms.service: visual-cpp -ms.topic: reference -ms.date: 08/22/2024 ---- -# Warning `C26839` - -> Allocation size is the result of a signed to unsigned narrowing conversion that could result in overflow if the signed value is negative - -## Remarks - -This warning reports that the size specified for an allocation may be the result of the conversion of a possibly negative signed value to an unsigned value. For example: - -```cpp -void* CustomAlloc(size_t); - -int* CreateIntArray(int numberOfElements) -{ - int* p = (int*)CustomAlloc(numberOfElements * sizeof(int)); // Warning: C26838 - // ... - return p; -} -``` - -In the expression `numberOfElements * sizeof(int)`, `numberOfElements` is signed and `sizeof(int)` is unsigned. On 64 bit machines `numberOfElements` will be promoted to an unsigned value when multiplied -by `sizeof(int)`. When `numberOfElements` is negative, the resulting value may overflow or have unexpected results when passed to `CustomAlloc`. - -This check applies to common allocation functions like `new`, `malloc`, and `VirtualAlloc`. The check also applies to custom allocator functions that have `alloc` (case insensitive) in the function name. - -This check sometimes fails to recognize that certain checks can prevent overflows because the check is conservative. - -This warning is available in Visual Studio 2022 version 17.12 and later versions. - -## Example - -To fix the previous code example in which `numberOfElements * sizeof(int)` might overflow due to a negative signed value, introduce a check to make sure it won't. For example: - -```cpp -void* CustomAlloc(size_t); - -int* CreateIntArray(int numberOfElements) -{ - if (numberOfElements < 0) - return nullptr; - - int* p = (int*)CustomAlloc(numberOfElements * sizeof(int)); - // ... - return p; -} -``` - -In the previous example, checking for a negative value addresses the C26832 warning. Depending on the size of the types involved, this check may result in a different warning such as [`C26831`](c26831.md). -For example, on a 32 bit system, both `int` and `size_t` are 32 bits, so the result of the multiplication can still overflow without negative values. - -## See also - -[`C26831`](c26831.md)\ -[`C26832`](c26832.md)\ -[`C26833`](c26833.md)\ -[`C26833`](c26839.md) - From 9849a3c78892c1c9bde592eb7f2d4512139d3a2d Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 16:13:06 -0700 Subject: [PATCH 0365/1239] Learn Editor: Update c26838.md --- docs/code-quality/c26838.md | 70 +++++++++++++++++++++++++++++++++++++ docs/code-quality/toc.yml | 2 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 docs/code-quality/c26838.md diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md new file mode 100644 index 0000000000..0e88b4e5e1 --- /dev/null +++ b/docs/code-quality/c26838.md @@ -0,0 +1,70 @@ +--- +# Required metadata +# For more information, see https://review.learn.microsoft.com/en-us/help/platform/learn-editor-add-metadata?branch=main +# For valid values of ms.service, ms.prod, and ms.topic, see https://review.learn.microsoft.com/en-us/help/platform/metadata-taxonomies?branch=main + +title: # Add a title for the browser tab +description: # Add a meaningful description for search results +author: Rastaban # GitHub alias +ms.author: philc # Microsoft alias +ms.service: # Add the ms.service or ms.prod value +# ms.prod: # To use ms.prod, uncomment it and delete ms.service +ms.topic: # Add the ms.topic value +ms.date: 08/22/2024 +--- +# Warning `C26839` + +> Allocation size is the result of a signed to unsigned narrowing conversion that could result in overflow if the signed value is negative + +## Remarks + +This warning reports that the size specified for an allocation may be the result of the conversion of a possibly negative signed value to an unsigned value. For example: + +```cpp +void* CustomAlloc(size_t); + +int* CreateIntArray(int numberOfElements) +{ + int* p = (int*)CustomAlloc(numberOfElements * sizeof(int)); // Warning: C26838 + // ... + return p; +} +``` + +In the expression `numberOfElements * sizeof(int)`, `numberOfElements` is signed and `sizeof(int)` is unsigned. On 64 bit machines `numberOfElements` will be promoted to an unsigned value when multiplied +by `sizeof(int)`. When `numberOfElements` is negative, the resulting value may overflow or have unexpected results when passed to `CustomAlloc`. + +This check applies to common allocation functions like `new`, `malloc`, and `VirtualAlloc`. The check also applies to custom allocator functions that have `alloc` (case insensitive) in the function name. + +This check sometimes fails to recognize that certain checks can prevent overflows because the check is conservative. + +This warning is available in Visual Studio 2022 version 17.12 and later versions. + +## Example + +To fix the previous code example in which `numberOfElements * sizeof(int)` might overflow due to a negative signed value, introduce a check to make sure it won't. For example: + +```cpp +void* CustomAlloc(size_t); + +int* CreateIntArray(int numberOfElements) +{ + if (numberOfElements < 0) + return nullptr; + + int* p = (int*)CustomAlloc(numberOfElements * sizeof(int)); + // ... + return p; +} +``` + +In the previous example, checking for a negative value addresses the C26832 warning. Depending on the size of the types involved, this check may result in a different warning such as [`C26831`](c26831.md). +For example, on a 32 bit system, both `int` and `size_t` are 32 bits, so the result of the multiplication can still overflow without negative values. + +## See also + +[`C26831`](c26831.md)\ +[`C26832`](c26832.md)\ +[`C26833`](c26833.md)\ +[`C26833`](c26839.md) + diff --git a/docs/code-quality/toc.yml b/docs/code-quality/toc.yml index 86553eebfc..9e4a1a77df 100644 --- a/docs/code-quality/toc.yml +++ b/docs/code-quality/toc.yml @@ -633,7 +633,7 @@ items: href: ../code-quality/c26830.md - name: Warning C26831 href: ../code-quality/c26831.md - - name: " Warning C26839" + - name: " Warning C26838" href: c26838.md - name: Warning C26832 href: ../code-quality/c26832.md From 6a945bce2a9f8b1d7034beacc284cec832e38733 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 16:13:20 -0700 Subject: [PATCH 0366/1239] Learn Editor: Update c26838.md --- docs/code-quality/c26838.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md index 0e88b4e5e1..9aefdd4582 100644 --- a/docs/code-quality/c26838.md +++ b/docs/code-quality/c26838.md @@ -12,7 +12,7 @@ ms.service: # Add the ms.service or ms.prod value ms.topic: # Add the ms.topic value ms.date: 08/22/2024 --- -# Warning `C26839` +# Warning `C26838` > Allocation size is the result of a signed to unsigned narrowing conversion that could result in overflow if the signed value is negative From 869becf570b7dd892087773dab3736eaa5cf308b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 16:15:03 -0700 Subject: [PATCH 0367/1239] Learn Editor: Update c26839.md --- docs/code-quality/c26839.md | 15 +++++++++++++++ docs/code-quality/toc.yml | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 docs/code-quality/c26839.md diff --git a/docs/code-quality/c26839.md b/docs/code-quality/c26839.md new file mode 100644 index 0000000000..26a818076a --- /dev/null +++ b/docs/code-quality/c26839.md @@ -0,0 +1,15 @@ +--- +# Required metadata +# For more information, see https://review.learn.microsoft.com/en-us/help/platform/learn-editor-add-metadata?branch=main +# For valid values of ms.service, ms.prod, and ms.topic, see https://review.learn.microsoft.com/en-us/help/platform/metadata-taxonomies?branch=main + +title: # Add a title for the browser tab +description: # Add a meaningful description for search results +author: Rastaban # GitHub alias +ms.author: philc # Microsoft alias +ms.service: # Add the ms.service or ms.prod value +# ms.prod: # To use ms.prod, uncomment it and delete ms.service +ms.topic: # Add the ms.topic value +ms.date: 08/22/2024 +--- +Warning C26839 \ No newline at end of file diff --git a/docs/code-quality/toc.yml b/docs/code-quality/toc.yml index 9e4a1a77df..1dbbec9e89 100644 --- a/docs/code-quality/toc.yml +++ b/docs/code-quality/toc.yml @@ -635,6 +635,8 @@ items: href: ../code-quality/c26831.md - name: " Warning C26838" href: c26838.md + - name: Warning C26839 + href: c26839.md - name: Warning C26832 href: ../code-quality/c26832.md - name: Warning C26833 From 7e071c1e905ec9a21d322acf80fcaabbaf6b9969 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 16:18:42 -0700 Subject: [PATCH 0368/1239] Learn Editor: Update c26839.md --- docs/code-quality/c26839.md | 48 ++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/docs/code-quality/c26839.md b/docs/code-quality/c26839.md index 26a818076a..27e990aa38 100644 --- a/docs/code-quality/c26839.md +++ b/docs/code-quality/c26839.md @@ -12,4 +12,50 @@ ms.service: # Add the ms.service or ms.prod value ms.topic: # Add the ms.topic value ms.date: 08/22/2024 --- -Warning C26839 \ No newline at end of file +# Warning C26839 + + +> Array new allocation size is the result of a signed to unsigned narrowing conversion that could result in overflow if the signed value is negative + +## Remarks + +This warning reports that the size specified for a array new allocation may be the result of the conversion of a possibly negative signed value to an unsigned value. For example: + +```cpp +int* CreateIntArray(int size) +{ + int* intArray = new int[size]; + return intArray; +} +``` + +In the expression `new int[size]`, `size` is signed. The compiler will convert the signed value to an unsigned value when calculating how many bytes need to be allocated for the array. +When `size` is negative, the result of that calculation may overflow or have unexpected results. + +This check is the same as [`C26838`](c26838.md), but applies only to array new `new T[]`. + +This check sometimes fails to recognize that certain checks can prevent overflows because the check is conservative. + +This warning is available in Visual Studio 2022 version 17.12 and later versions. + +## Example + +To fix the previous code example in which the size calculation might overflow due to a negative signed value, introduce a check to make sure it won't. For example: + +```cpp +int* CreateIntArray(int size) +{ + if (size < 0) + return nullptr; + + int* intArray = new int[size]; + return intArray; +} +``` + +## See also + +[`C26831`](c26831.md)\ +[`C26832`](c26832.md)\ +[`C26838`](c26833.md)\ +[`C26838`](c26838.md) \ No newline at end of file From f3e1548876e414779e07ec7c30f084fab7d532e9 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 22 Aug 2024 16:18:46 -0700 Subject: [PATCH 0369/1239] update Metadata --- docs/code-quality/c26839.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/code-quality/c26839.md b/docs/code-quality/c26839.md index 27e990aa38..6795841048 100644 --- a/docs/code-quality/c26839.md +++ b/docs/code-quality/c26839.md @@ -3,13 +3,12 @@ # For more information, see https://review.learn.microsoft.com/en-us/help/platform/learn-editor-add-metadata?branch=main # For valid values of ms.service, ms.prod, and ms.topic, see https://review.learn.microsoft.com/en-us/help/platform/metadata-taxonomies?branch=main -title: # Add a title for the browser tab -description: # Add a meaningful description for search results +title: Warning C26839 +description: '"Describes the Microsoft C/C++ code analysis warning C26839, its causes, and how to address it."' author: Rastaban # GitHub alias ms.author: philc # Microsoft alias -ms.service: # Add the ms.service or ms.prod value -# ms.prod: # To use ms.prod, uncomment it and delete ms.service -ms.topic: # Add the ms.topic value +ms.service: visual-cpp +ms.topic: reference ms.date: 08/22/2024 --- # Warning C26839 From c487723ad07b907173d6577eec1fb8c7ed089a22 Mon Sep 17 00:00:00 2001 From: hwisungi Date: Thu, 22 Aug 2024 17:10:33 -0700 Subject: [PATCH 0370/1239] Update annotating-locking-behavior.md to make it clearer which of the two locks for _Post_same_lock_ is source vs destination. --- docs/code-quality/annotating-locking-behavior.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/code-quality/annotating-locking-behavior.md b/docs/code-quality/annotating-locking-behavior.md index ddf60a045a..900afadadb 100644 --- a/docs/code-quality/annotating-locking-behavior.md +++ b/docs/code-quality/annotating-locking-behavior.md @@ -67,7 +67,7 @@ The following table lists the locking annotations. |`_Has_lock_kind_(kind)`|Annotates any object to refine the type information of a resource object. Sometimes a common type is used for different kinds of resources and the overloaded type isn't sufficient to distinguish the semantic requirements among various resources. Here's a list of pre-defined `kind` parameters:

`_Lock_kind_mutex_`
Lock kind ID for mutexes.

`_Lock_kind_event_`
Lock kind ID for events.

`_Lock_kind_semaphore_`
Lock kind ID for semaphores.

`_Lock_kind_spin_lock_`
Lock kind ID for spin locks.

`_Lock_kind_critical_section_`
Lock kind ID for critical sections.| |`_Has_lock_level_(name)`|Annotates a lock object and gives it the lock level of `name`.| |`_Lock_level_order_(name1, name2)`|A statement that gives the lock ordering between `name1` and `name2`. Locks that have level `name1` must be acquired before locks that have level `name2`.| -|`_Post_same_lock_(expr1, expr2)`|Annotates a function and indicates that in post state the two locks, `expr1` and `expr2`, are treated as if they're the same lock object.| +|`_Post_same_lock_(dst, src)`|Annotates a function and indicates that in post state the two locks, `dst` and `src`, are treated as if they're the same lock object, by applying lock properties from `src` to `dst`.| |`_Releases_exclusive_lock_(expr)`|Annotates a function and indicates that in post state the function decrements by one the exclusive lock count of the lock object that's named by `expr`.| |`_Releases_lock_(expr)`|Annotates a function and indicates that in post state the function decrements by one the lock count of the lock object that's named by `expr`.| |`_Releases_nonreentrant_lock_(expr)`|The lock that's named by `expr` is released. An error is reported if the lock isn't currently held.| From 6d373783dbc33e79d8b0b4637883a190175726f3 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Thu, 22 Aug 2024 20:36:17 -0700 Subject: [PATCH 0371/1239] acrolinx fixes --- docs/code-quality/annotating-locking-behavior.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/code-quality/annotating-locking-behavior.md b/docs/code-quality/annotating-locking-behavior.md index 900afadadb..a362074bad 100644 --- a/docs/code-quality/annotating-locking-behavior.md +++ b/docs/code-quality/annotating-locking-behavior.md @@ -33,9 +33,9 @@ ms.assetid: 07769c25-9b97-4ab7-b175-d1c450308d7a To avoid concurrency bugs in your multithreaded program, always follow an appropriate locking discipline and use SAL annotations. -Concurrency bugs are notoriously hard to reproduce, diagnose, and debug because they're non-deterministic. Reasoning about thread interleaving is difficult at best, and becomes impractical when you're designing a body of code that has more than a few threads. Therefore, it's good practice to follow a locking discipline in your multithreaded programs. For example, obeying a lock order while acquiring multiple locks helps avoid deadlocks, and acquiring the proper guarding lock before accessing a shared resource helps prevent race conditions. +Concurrency bugs are notoriously hard to reproduce, diagnose, and debug because they're nondeterministic. Reasoning about thread interleaving is difficult at best, and becomes impractical when you're designing a body of code that has more than a few threads. Therefore, it's good practice to follow a locking discipline in your multithreaded programs. For example, obeying a lock order while acquiring multiple locks helps avoid deadlocks, and acquiring the proper guarding lock before accessing a shared resource helps prevent race conditions. -Unfortunately, seemingly simple locking rules can be surprisingly hard to follow in practice. A fundamental limitation in today's programming languages and compilers is that they do not directly support the specification and analysis of concurrency requirements. Programmers have to rely on informal code comments to express their intentions about how they use locks. +Unfortunately, seemingly simple locking rules can be surprisingly hard to follow in practice. A fundamental limitation in today's programming languages and compilers is that they don't directly support the specification and analysis of concurrency requirements. Programmers have to rely on informal code comments to express their intentions about how they use locks. Concurrency SAL annotations are designed to help you specify locking side effects, locking responsibility, data guardianship, lock order hierarchy, and other expected locking behavior. By making implicit rules explicit, SAL concurrency annotations provide a consistent way for you to document how your code uses locking rules. Concurrency annotations also enhance the ability of code analysis tools to find race conditions, deadlocks, mismatched synchronization operations, and other subtle concurrency errors. @@ -64,7 +64,7 @@ The following table lists the locking annotations. |`_Acquires_nonreentrant_lock_(expr)`|The lock that's named by `expr` is acquired. An error is reported if the lock is already held.| |`_Acquires_shared_lock_(expr)`|Annotates a function and indicates that in post state the function increments by one the shared lock count of the lock object that's named by `expr`.| |`_Create_lock_level_(name)`|A statement that declares the symbol `name` to be a lock level so that it may be used in the annotations `_Has_Lock_level_` and `_Lock_level_order_`.| -|`_Has_lock_kind_(kind)`|Annotates any object to refine the type information of a resource object. Sometimes a common type is used for different kinds of resources and the overloaded type isn't sufficient to distinguish the semantic requirements among various resources. Here's a list of pre-defined `kind` parameters:

`_Lock_kind_mutex_`
Lock kind ID for mutexes.

`_Lock_kind_event_`
Lock kind ID for events.

`_Lock_kind_semaphore_`
Lock kind ID for semaphores.

`_Lock_kind_spin_lock_`
Lock kind ID for spin locks.

`_Lock_kind_critical_section_`
Lock kind ID for critical sections.| +|`_Has_lock_kind_(kind)`|Annotates any object to refine the type information of a resource object. Sometimes a common type is used for different kinds of resources and the overloaded type isn't sufficient to distinguish the semantic requirements among various resources. Here's a list of predefined `kind` parameters:

`_Lock_kind_mutex_`
Lock kind ID for mutexes.

`_Lock_kind_event_`
Lock kind ID for events.

`_Lock_kind_semaphore_`
Lock kind ID for semaphores.

`_Lock_kind_spin_lock_`
Lock kind ID for spin locks.

`_Lock_kind_critical_section_`
Lock kind ID for critical sections.| |`_Has_lock_level_(name)`|Annotates a lock object and gives it the lock level of `name`.| |`_Lock_level_order_(name1, name2)`|A statement that gives the lock ordering between `name1` and `name2`. Locks that have level `name1` must be acquired before locks that have level `name2`.| |`_Post_same_lock_(dst, src)`|Annotates a function and indicates that in post state the two locks, `dst` and `src`, are treated as if they're the same lock object, by applying lock properties from `src` to `dst`.| @@ -97,17 +97,17 @@ The following table lists the annotations for shared data access. |----------------|-----------------| |`_Guarded_by_(expr)`|Annotates a variable and indicates that whenever the variable is accessed, the lock count of the lock object that's named by `expr` is at least one.| |`_Interlocked_`|Annotates a variable and is equivalent to `_Guarded_by_(_Global_interlock_)`.| -|`_Interlocked_operand_`|The annotated function parameter is the target operand of one of the various Interlocked functions. Those operands must have specific additional properties.| +|`_Interlocked_operand_`|The annotated function parameter is the target operand of one of the various Interlocked functions. Those operands must have other specific properties.| |`_Write_guarded_by_(expr)`|Annotates a variable and indicates that whenever the variable is modified, the lock count of the lock object that's named by `expr` is at least one.| ## Smart Lock and RAII Annotations -Smart locks typically wrap native locks and manage their lifetime. The following table lists annotations that can be used with smart locks and RAII coding patterns with support for `move` semantics. +Smart locks typically wrap native locks and manage their lifetime. The following table lists annotations that can be used with smart locks and Resource Acquisition Is Initialization (RAII) coding patterns with support for `move` semantics. |Annotation|Description| |----------------|-----------------| -|`_Analysis_assume_smart_lock_acquired_(lock)`|Tells the analyzer to assume that a smart lock has been acquired. This annotation expects a reference lock type as its parameter.| -|`_Analysis_assume_smart_lock_released_(lock)`|Tells the analyzer to assume that a smart lock has been released. This annotation expects a reference lock type as its parameter.| +|`_Analysis_assume_smart_lock_acquired_(lock)`|Tells the analyzer to assume that a smart lock was acquired. This annotation expects a reference lock type as its parameter.| +|`_Analysis_assume_smart_lock_released_(lock)`|Tells the analyzer to assume that a smart lock was released. This annotation expects a reference lock type as its parameter.| |`_Moves_lock_(target, source)`|Describes a `move constructor` operation, which transfers lock state from the `source` object to the `target`. The `target` is considered a newly constructed object, so any state it had before is lost and replaced by the `source` state. The `source` is also reset to a clean state with no lock counts or aliasing target, but aliases pointing to it remain unchanged.| |`_Replaces_lock_(target, source)`|Describes `move assignment operator` semantics where the target lock is released before transferring the state from the source. You can regard it as a combination of `_Moves_lock_(target, source)` preceded by a `_Releases_lock_(target)`.| |`_Swaps_locks_(left, right)`|Describes the standard `swap` behavior, which assumes that objects `left` and `right` exchange their state. The state exchanged includes lock count and aliasing target, if present. Aliases that point to the `left` and `right` objects remain unchanged.| From 25e30bb78973f4025cd10316345b260a5383257b Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Fri, 23 Aug 2024 15:32:10 +0800 Subject: [PATCH 0372/1239] Remove superfluous backticks --- docs/code-quality/build-reliable-secure-programs.md | 4 ++-- docs/code-quality/c6335.md | 5 ++--- docs/cpp/this-pointer.md | 2 +- docs/mfc/reference/cframewndex-class.md | 4 ++-- docs/overview/cpp-conformance-improvements-2019.md | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/code-quality/build-reliable-secure-programs.md b/docs/code-quality/build-reliable-secure-programs.md index 0e9bee041e..13341b3094 100644 --- a/docs/code-quality/build-reliable-secure-programs.md +++ b/docs/code-quality/build-reliable-secure-programs.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Building reliable and secure C++ programs by applying NISTIR 8397 guidelines." title: Build reliable and secure C++ programs +description: "Learn more about: Building reliable and secure C++ programs by applying NISTIR 8397 guidelines." ms.date: 09/28/2023 ms.topic: "conceptual" --- @@ -281,7 +281,7 @@ Compiler settings should opt into sensitive information discovery prevention. In At the software level, confidential data might be transmitted to attackers if unexpectedly leaked. Failure to zero-initialize buffers and other buffer misuse might leak private confidential data to attackers that call trusted API. This class of problem best handled by enabling extra static analysis and using secure resource containers as described previously. -- [`/Qspectre` - Mitigate speculative execution side-channel attacks](https://aka.ms/SpectreMitigations) - Inserts barrier instructions that help prevent the disclosure of sensitive data produced by speculative execution. These mitigations should be enabled for code that stores sensitive data in memory and operates across a trust boundary. Microsoft always recommends measuring performance impact against appropriate benchmarks when enabling Spectre-mitigations due to the possibility of introducing runtime checks in performance-critical blocks or loops. These code paths can disable mitigations via the [`spectre(nomitigation)`](../cpp/spectre.md) `declspec` modifier. Projects that enable `/Qspectre`` should also link to libraries that are also compiled with these mitigations, including the Microsoft runtime libraries. +- [`/Qspectre` - Mitigate speculative execution side-channel attacks](https://aka.ms/SpectreMitigations) - Inserts barrier instructions that help prevent the disclosure of sensitive data produced by speculative execution. These mitigations should be enabled for code that stores sensitive data in memory and operates across a trust boundary. Microsoft always recommends measuring performance impact against appropriate benchmarks when enabling Spectre-mitigations due to the possibility of introducing runtime checks in performance-critical blocks or loops. These code paths can disable mitigations via the [`spectre(nomitigation)`](../cpp/spectre.md) `declspec` modifier. Projects that enable `/Qspectre` should also link to libraries that are also compiled with these mitigations, including the Microsoft runtime libraries. ## 2.6 Black box test cases diff --git a/docs/code-quality/c6335.md b/docs/code-quality/c6335.md index 738a51f131..a5f62fe5fe 100644 --- a/docs/code-quality/c6335.md +++ b/docs/code-quality/c6335.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: Warning C6335" title: Warning C6335 +description: "Learn more about: Warning C6335" ms.date: 11/04/2016 f1_keywords: ["C6335", "LEAKING_PROCESS_HANDLE", "__WARNING_LEAKING_PROCESS_HANDLE"] helpviewer_keywords: ["C6335"] -ms.assetid: f81c0859-3d82-4182-8bf1-6c3b76c7486f --- # Warning C6335 @@ -54,7 +53,7 @@ void f( ) } ``` -To correct this warning, call `CloseHandle (pi.``hThread)` to close thread handle as shown in the following code: +To correct this warning, call `CloseHandle( pi.hThread )` to close thread handle as shown in the following code: ```cpp #include diff --git a/docs/cpp/this-pointer.md b/docs/cpp/this-pointer.md index 1c1ea8223a..1b560dd372 100644 --- a/docs/cpp/this-pointer.md +++ b/docs/cpp/this-pointer.md @@ -147,7 +147,7 @@ The **`this`** pointer can't be reassigned. The **`const`** or **`volatile`** qu | `void Func() volatile` | `volatile myClass *` | | `void Func() const volatile` | `const volatile myClass *` | -The following table explains more about `const` and `volatile``. +The following table explains more about `const` and `volatile`. ### Semantics of `this` modifiers diff --git a/docs/mfc/reference/cframewndex-class.md b/docs/mfc/reference/cframewndex-class.md index e54a96c15b..6c54057b89 100644 --- a/docs/mfc/reference/cframewndex-class.md +++ b/docs/mfc/reference/cframewndex-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: CFrameWndEx Class" title: "CFrameWndEx Class" +description: "Learn more about: CFrameWndEx Class" ms.date: "11/04/2016" f1_keywords: ["CFrameWndEx", "AFXFRAMEWNDEX/CFrameWndEx", "AFXFRAMEWNDEX/CFrameWndEx::ActiveItemRecalcLayout", "AFXFRAMEWNDEX/CFrameWndEx::AddPane", "AFXFRAMEWNDEX/CFrameWndEx::AdjustDockingLayout", "AFXFRAMEWNDEX/CFrameWndEx::DelayUpdateFrameMenu", "AFXFRAMEWNDEX/CFrameWndEx::DockPane", "AFXFRAMEWNDEX/CFrameWndEx::DockPaneLeftOf", "AFXFRAMEWNDEX/CFrameWndEx::EnableAutoHidePanes", "AFXFRAMEWNDEX/CFrameWndEx::EnableDocking", "AFXFRAMEWNDEX/CFrameWndEx::EnableFullScreenMainMenu", "AFXFRAMEWNDEX/CFrameWndEx::EnableFullScreenMode", "AFXFRAMEWNDEX/CFrameWndEx::EnableLoadDockState", "AFXFRAMEWNDEX/CFrameWndEx::EnablePaneMenu", "AFXFRAMEWNDEX/CFrameWndEx::GetActivePopup", "AFXFRAMEWNDEX/CFrameWndEx::GetDefaultResId", "AFXFRAMEWNDEX/CFrameWndEx::GetDockingManager", "AFXFRAMEWNDEX/CFrameWndEx::GetMenuBar", "AFXFRAMEWNDEX/CFrameWndEx::GetPane", "AFXFRAMEWNDEX/CFrameWndEx::GetRibbonBar", "AFXFRAMEWNDEX/CFrameWndEx::GetTearOffBars", "AFXFRAMEWNDEX/CFrameWndEx::GetToolbarButtonToolTipText", "AFXFRAMEWNDEX/CFrameWndEx::InsertPane", "AFXFRAMEWNDEX/CFrameWndEx::IsFullScreen", "AFXFRAMEWNDEX/CFrameWndEx::IsMenuBarAvailable", "AFXFRAMEWNDEX/CFrameWndEx::IsPointNearDockSite", "AFXFRAMEWNDEX/CFrameWndEx::IsPrintPreview", "AFXFRAMEWNDEX/CFrameWndEx::LoadFrame", "AFXFRAMEWNDEX/CFrameWndEx::NegotiateBorderSpace", "AFXFRAMEWNDEX/CFrameWndEx::OnActivate", "AFXFRAMEWNDEX/CFrameWndEx::OnActivateApp", "AFXFRAMEWNDEX/CFrameWndEx::OnChangeVisualManager", "AFXFRAMEWNDEX/CFrameWndEx::OnClose", "AFXFRAMEWNDEX/CFrameWndEx::OnCloseDockingPane", "AFXFRAMEWNDEX/CFrameWndEx::OnCloseMiniFrame", "AFXFRAMEWNDEX/CFrameWndEx::OnClosePopupMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnCmdMsg", "AFXFRAMEWNDEX/CFrameWndEx::OnContextHelp", "AFXFRAMEWNDEX/CFrameWndEx::OnCreate", "AFXFRAMEWNDEX/CFrameWndEx::OnDestroy", "AFXFRAMEWNDEX/CFrameWndEx::OnDrawMenuImage", "AFXFRAMEWNDEX/CFrameWndEx::OnDrawMenuLogo", "AFXFRAMEWNDEX/CFrameWndEx::OnDWMCompositionChanged", "AFXFRAMEWNDEX/CFrameWndEx::OnExitSizeMove", "AFXFRAMEWNDEX/CFrameWndEx::OnGetMinMaxInfo", "AFXFRAMEWNDEX/CFrameWndEx::OnIdleUpdateCmdUI", "AFXFRAMEWNDEX/CFrameWndEx::OnLButtonDown", "AFXFRAMEWNDEX/CFrameWndEx::OnLButtonUp", "AFXFRAMEWNDEX/CFrameWndEx::OnMenuButtonToolHitTest", "AFXFRAMEWNDEX/CFrameWndEx::OnMenuChar", "AFXFRAMEWNDEX/CFrameWndEx::OnMouseMove", "AFXFRAMEWNDEX/CFrameWndEx::OnMoveMiniFrame", "AFXFRAMEWNDEX/CFrameWndEx::OnNcActivate", "AFXFRAMEWNDEX/CFrameWndEx::OnNcCalcSize", "AFXFRAMEWNDEX/CFrameWndEx::OnNcHitTest", "AFXFRAMEWNDEX/CFrameWndEx::OnNcMouseMove", "AFXFRAMEWNDEX/CFrameWndEx::OnNcPaint", "AFXFRAMEWNDEX/CFrameWndEx::OnPaneCheck", "AFXFRAMEWNDEX/CFrameWndEx::OnPostPreviewFrame", "AFXFRAMEWNDEX/CFrameWndEx::OnPowerBroadcast", "AFXFRAMEWNDEX/CFrameWndEx::OnSetMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnSetPreviewMode", "AFXFRAMEWNDEX/CFrameWndEx::OnSetText", "AFXFRAMEWNDEX/CFrameWndEx::OnShowCustomizePane", "AFXFRAMEWNDEX/CFrameWndEx::OnShowPanes", "AFXFRAMEWNDEX/CFrameWndEx::OnShowPopupMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnSize", "AFXFRAMEWNDEX/CFrameWndEx::OnSizing", "AFXFRAMEWNDEX/CFrameWndEx::OnSysColorChange", "AFXFRAMEWNDEX/CFrameWndEx::OnTearOffMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnToolbarContextMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnToolbarCreateNew", "AFXFRAMEWNDEX/CFrameWndEx::OnToolbarDelete", "AFXFRAMEWNDEX/CFrameWndEx::OnUpdateFrameMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnUpdateFrameTitle", "AFXFRAMEWNDEX/CFrameWndEx::OnUpdatePaneMenu", "AFXFRAMEWNDEX/CFrameWndEx::OnWindowPosChanged", "AFXFRAMEWNDEX/CFrameWndEx::PaneFromPoint", "AFXFRAMEWNDEX/CFrameWndEx::PreTranslateMessage", "AFXFRAMEWNDEX/CFrameWndEx::RecalcLayout", "AFXFRAMEWNDEX/CFrameWndEx::RemovePaneFromDockManager", "AFXFRAMEWNDEX/CFrameWndEx::SetDockState", "AFXFRAMEWNDEX/CFrameWndEx::SetPrintPreviewFrame", "AFXFRAMEWNDEX/CFrameWndEx::SetupToolbarMenu", "AFXFRAMEWNDEX/CFrameWndEx::ShowFullScreen", "AFXFRAMEWNDEX/CFrameWndEx::ShowPane", "AFXFRAMEWNDEX/CFrameWndEx::UpdateCaption", "AFXFRAMEWNDEX/CFrameWndEx::WinHelp"] helpviewer_keywords: ["CFrameWndEx [MFC], ActiveItemRecalcLayout", "CFrameWndEx [MFC], AddPane", "CFrameWndEx [MFC], AdjustDockingLayout", "CFrameWndEx [MFC], DelayUpdateFrameMenu", "CFrameWndEx [MFC], DockPane", "CFrameWndEx [MFC], DockPaneLeftOf", "CFrameWndEx [MFC], EnableAutoHidePanes", "CFrameWndEx [MFC], EnableDocking", "CFrameWndEx [MFC], EnableFullScreenMainMenu", "CFrameWndEx [MFC], EnableFullScreenMode", "CFrameWndEx [MFC], EnableLoadDockState", "CFrameWndEx [MFC], EnablePaneMenu", "CFrameWndEx [MFC], GetActivePopup", "CFrameWndEx [MFC], GetDefaultResId", "CFrameWndEx [MFC], GetDockingManager", "CFrameWndEx [MFC], GetMenuBar", "CFrameWndEx [MFC], GetPane", "CFrameWndEx [MFC], GetRibbonBar", "CFrameWndEx [MFC], GetTearOffBars", "CFrameWndEx [MFC], GetToolbarButtonToolTipText", "CFrameWndEx [MFC], InsertPane", "CFrameWndEx [MFC], IsFullScreen", "CFrameWndEx [MFC], IsMenuBarAvailable", "CFrameWndEx [MFC], IsPointNearDockSite", "CFrameWndEx [MFC], IsPrintPreview", "CFrameWndEx [MFC], LoadFrame", "CFrameWndEx [MFC], NegotiateBorderSpace", "CFrameWndEx [MFC], OnActivate", "CFrameWndEx [MFC], OnActivateApp", "CFrameWndEx [MFC], OnChangeVisualManager", "CFrameWndEx [MFC], OnClose", "CFrameWndEx [MFC], OnCloseDockingPane", "CFrameWndEx [MFC], OnCloseMiniFrame", "CFrameWndEx [MFC], OnClosePopupMenu", "CFrameWndEx [MFC], OnCmdMsg", "CFrameWndEx [MFC], OnContextHelp", "CFrameWndEx [MFC], OnCreate", "CFrameWndEx [MFC], OnDestroy", "CFrameWndEx [MFC], OnDrawMenuImage", "CFrameWndEx [MFC], OnDrawMenuLogo", "CFrameWndEx [MFC], OnDWMCompositionChanged", "CFrameWndEx [MFC], OnExitSizeMove", "CFrameWndEx [MFC], OnGetMinMaxInfo", "CFrameWndEx [MFC], OnIdleUpdateCmdUI", "CFrameWndEx [MFC], OnLButtonDown", "CFrameWndEx [MFC], OnLButtonUp", "CFrameWndEx [MFC], OnMenuButtonToolHitTest", "CFrameWndEx [MFC], OnMenuChar", "CFrameWndEx [MFC], OnMouseMove", "CFrameWndEx [MFC], OnMoveMiniFrame", "CFrameWndEx [MFC], OnNcActivate", "CFrameWndEx [MFC], OnNcCalcSize", "CFrameWndEx [MFC], OnNcHitTest", "CFrameWndEx [MFC], OnNcMouseMove", "CFrameWndEx [MFC], OnNcPaint", "CFrameWndEx [MFC], OnPaneCheck", "CFrameWndEx [MFC], OnPostPreviewFrame", "CFrameWndEx [MFC], OnPowerBroadcast", "CFrameWndEx [MFC], OnSetMenu", "CFrameWndEx [MFC], OnSetPreviewMode", "CFrameWndEx [MFC], OnSetText", "CFrameWndEx [MFC], OnShowCustomizePane", "CFrameWndEx [MFC], OnShowPanes", "CFrameWndEx [MFC], OnShowPopupMenu", "CFrameWndEx [MFC], OnSize", "CFrameWndEx [MFC], OnSizing", "CFrameWndEx [MFC], OnSysColorChange", "CFrameWndEx [MFC], OnTearOffMenu", "CFrameWndEx [MFC], OnToolbarContextMenu", "CFrameWndEx [MFC], OnToolbarCreateNew", "CFrameWndEx [MFC], OnToolbarDelete", "CFrameWndEx [MFC], OnUpdateFrameMenu", "CFrameWndEx [MFC], OnUpdateFrameTitle", "CFrameWndEx [MFC], OnUpdatePaneMenu", "CFrameWndEx [MFC], OnWindowPosChanged", "CFrameWndEx [MFC], PaneFromPoint", "CFrameWndEx [MFC], PreTranslateMessage", "CFrameWndEx [MFC], RecalcLayout", "CFrameWndEx [MFC], RemovePaneFromDockManager", "CFrameWndEx [MFC], SetDockState", "CFrameWndEx [MFC], SetPrintPreviewFrame", "CFrameWndEx [MFC], SetupToolbarMenu", "CFrameWndEx [MFC], ShowFullScreen", "CFrameWndEx [MFC], ShowPane", "CFrameWndEx [MFC], UpdateCaption", "CFrameWndEx [MFC], WinHelp"] @@ -107,7 +107,7 @@ class CFrameWndEx : public CFrameWnd |[`CFrameWndEx::ShowFullScreen`](#showfullscreen)|Switches the main frame between the full screen and the regular modes.| |[`CFrameWndEx::ShowPane`](#showpane)|Shows or hides the specified pane.| |[`CFrameWndEx::UpdateCaption`](#updatecaption)|Called by the framework to update the window frame caption.| -|[`CFrameWndEx::WinHelp``](#winhelp)|Invokes either the `WinHelp` application or context related help.| +|[`CFrameWndEx::WinHelp`](#winhelp)|Invokes either the `WinHelp` application or context related help.| ## Example diff --git a/docs/overview/cpp-conformance-improvements-2019.md b/docs/overview/cpp-conformance-improvements-2019.md index c7da028474..533c1dbe18 100644 --- a/docs/overview/cpp-conformance-improvements-2019.md +++ b/docs/overview/cpp-conformance-improvements-2019.md @@ -445,7 +445,7 @@ The unordered container `reserve` function now actually reserves for N elements, - Added the overloads for container merge and extract member functions that accept rvalue containers. For more information, see [P0083 "Splicing Maps And Sets"](https://wg21.link/p0083r3) -### `std::basic_istream::read` processing of `\r\n`` =>`\n` +### `std::basic_istream::read` processing of `\r\n` => `\n` `std::basic_istream::read` was fixed to not write into parts of the supplied buffer temporarily as part of `\r\n` to `\n` processing. This change gives up some of the performance advantage that was gained in Visual Studio 2017 15.8 for reads larger than 4K in size. However, efficiency improvements from avoiding three virtual calls per character are still present. From cf14bbcf24ff9ea71908a64a93c69c737ec7a42b Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:09:11 +0800 Subject: [PATCH 0373/1239] Fix malformed anchor in headers --- docs/build/arm64ec-windows-abi-conventions.md | 4 ++-- docs/build/reference/contents-of-a-makefile.md | 10 +++++----- .../build/reference/creating-a-makefile-project.md | 4 ++-- docs/build/reference/defining-an-nmake-macro.md | 10 +++++----- docs/build/reference/inference-rules.md | 14 +++++++------- docs/build/reference/inline-files-in-a-makefile.md | 10 +++++----- docs/build/reference/makefile-preprocessing.md | 10 +++++----- docs/build/reference/special-nmake-macros.md | 10 +++++----- docs/build/reference/using-an-nmake-macro.md | 14 +++++++------- docs/cpp/if-else-statement-cpp.md | 2 +- docs/cpp/main-function-command-line-args.md | 2 +- docs/mfc/reference/cmfcbutton-class.md | 13 ++++++------- docs/mfc/reference/extension-dll-macros.md | 8 ++++---- ...concurrency-direct3d-namespace-functions-amp.md | 5 ++--- ...concurrency-precise-math-namespace-functions.md | 5 ++--- docs/parallel/amp/reference/norm-3-class.md | 5 ++--- docs/parallel/amp/reference/tile-barrier-class.md | 7 +++---- .../concrt/reference/reader-writer-lock-class.md | 7 +++---- .../scoped-allocator-adaptor-class.md | 11 +++++------ 19 files changed, 72 insertions(+), 79 deletions(-) diff --git a/docs/build/arm64ec-windows-abi-conventions.md b/docs/build/arm64ec-windows-abi-conventions.md index b512a0e41c..39f6d7434e 100644 --- a/docs/build/arm64ec-windows-abi-conventions.md +++ b/docs/build/arm64ec-windows-abi-conventions.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Overview of ARM64EC ABI conventions" title: "Overview of ARM64EC ABI conventions" +description: "Learn more about: Overview of ARM64EC ABI conventions" ms.date: "06/03/2022" --- # Overview of ARM64EC ABI conventions @@ -73,7 +73,7 @@ Special helper routines like `__chkstk_arm64ec` use custom calling conventions a 2 The ARM64EC carry flag `C` is the inverse of the x64 carry flag `CF` for subtraction operations. There's no special handling, because the flag is volatile and is therefore trashed when transitioning between (ARM64EC and x64) functions. -## Register mapping for vector registers +## Register mapping for vector registers | ARM64EC register | x64 register | ARM64EC calling convention | ARM64 calling convention | x64 calling convention | |--|--|--|--|--| diff --git a/docs/build/reference/contents-of-a-makefile.md b/docs/build/reference/contents-of-a-makefile.md index 7a5ba46077..8883cd8cc7 100644 --- a/docs/build/reference/contents-of-a-makefile.md +++ b/docs/build/reference/contents-of-a-makefile.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: NMAKE makefile contents and features" title: "NMAKE makefile contents and features" +description: "Learn more about: NMAKE makefile contents and features" ms.date: 09/30/2021 helpviewer_keywords: ["makefiles", "makefiles, contents", "NMAKE program, special characters", "makefiles, special characters", "special characters, in NMAKE macros", "macros, special characters", "NMAKE program, long filenames", "makefiles, comments", "NMAKE program, wildcards", "wildcards, expanding"] --- @@ -24,11 +24,11 @@ For a sample, see [Sample makefile](sample-makefile.md). NMAKE supports other features, such as wildcards, long filenames, comments, and escapes for special characters. -## Wildcards and NMAKE +## Wildcards and NMAKE NMAKE expands filename wildcards (**`*`** and **`?`**) in dependency lines. A wildcard specified in a command is passed to the command; NMAKE doesn't expand it. -## Long filenames in a makefile +## Long filenames in a makefile Enclose long filenames in double quotation marks, as follows: @@ -36,7 +36,7 @@ Enclose long filenames in double quotation marks, as follows: all : "VeryLongFileName.exe" ``` -## Comments in a makefile +## Comments in a makefile Precede a comment with a number sign (**`#`**). NMAKE ignores text from the number sign to the next newline character. @@ -66,7 +66,7 @@ To specify a literal number sign, precede it with a caret (**`^`**), as follows: DEF = ^#define #Macro for a C preprocessing directive ``` -## Special characters in a makefile +## Special characters in a makefile To use an NMAKE special character as a literal character, place a caret (**`^`**) in front of it as an escape. NMAKE ignores carets that precede other characters. The special characters are: diff --git a/docs/build/reference/creating-a-makefile-project.md b/docs/build/reference/creating-a-makefile-project.md index 0f66d0307f..1f88156dfd 100644 --- a/docs/build/reference/creating-a-makefile-project.md +++ b/docs/build/reference/creating-a-makefile-project.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Create a makefile project" title: "Create a C++ makefile project in Visual Studio" +description: "Learn more about: Create a makefile project" ms.date: 09/30/2021 f1_keywords: ["vc.appwiz.makefile.project"] helpviewer_keywords: ["Makefile projects [C++]"] @@ -16,7 +16,7 @@ If you have an existing makefile project, you have these choices if you want to - **Visual Studio 2017 and later**: Use the **Open Folder** feature to edit and build a makefile project as-is without any involvement of the MSBuild system. For more information, see [Open Folder projects for C++](../open-folder-projects-cpp.md). - **Visual Studio 2019 and later**: Create a UNIX makefile project for Linux. -## To create a makefile project with the makefile project template +## To create a makefile project with the makefile project template In Visual Studio 2017 and later, the Makefile project template is available when the C++ Desktop Development workload is installed. diff --git a/docs/build/reference/defining-an-nmake-macro.md b/docs/build/reference/defining-an-nmake-macro.md index 3cfdc2a17c..dd09538893 100644 --- a/docs/build/reference/defining-an-nmake-macro.md +++ b/docs/build/reference/defining-an-nmake-macro.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Defining an NMAKE Macro" title: "Define an NMAKE Macro" +description: "Learn more about: Defining an NMAKE Macro" ms.date: 09/30/2021 helpviewer_keywords: ["macros, NMAKE", "defining NMAKE macros", "NMAKE macros, defining", "defining macros", "NMAKE program, defining macros", "NMAKE program, undefined macros", "Null macros in NMAKE", "macros, null and undefined", "undefined macros and NMAKE", "NMAKE program, null macros", "special characters, in NMAKE macros"] --- @@ -16,7 +16,7 @@ The *macro_name* is a case-sensitive combination of letters, digits, and undersc The *string* can be any sequence of zero or more characters. A *null* string contains zero characters or only spaces or tabs. The *string* can contain a macro invocation. -## Special characters in macros +## Special characters in macros A number sign (**`#`**) after a definition specifies a comment. To specify a literal number sign in a macro, use a caret (**`^`**) to escape it, as in **`^#`**. @@ -31,11 +31,11 @@ CMDS = cls^ dir ``` -## Null and undefined macros +## Null and undefined macros Both null and undefined macros expand to null strings, but a macro defined as a null string is considered defined in preprocessing expressions. To define a macro as a null string, specify no characters except spaces or tabs after the equal sign (**`=`**) in a command line or command file, and enclose the null string or definition in double quotation marks (**`" "`**). To undefine a macro, use **`!UNDEF`**. For more information, see [Makefile preprocessing directives](makefile-preprocessing.md#makefile-preprocessing-directives). -## Where to define macros +## Where to define macros Define macros in a command line, command file, makefile, or the *`Tools.ini`* file. @@ -43,7 +43,7 @@ In a makefile or the *`Tools.ini`* file, each macro definition must appear on a In a command line or command file, spaces and tabs delimit arguments and can't surround the equal sign. If *string* has embedded spaces or tabs, enclose either the string itself or the entire macro in double quotation marks (**`" "`**). -## Precedence in macro definitions +## Precedence in macro definitions If a macro has multiple definitions, NMAKE uses the highest-precedence definition. The following list shows the order of precedence, from highest to lowest: diff --git a/docs/build/reference/inference-rules.md b/docs/build/reference/inference-rules.md index e30b337647..ebb37cb557 100644 --- a/docs/build/reference/inference-rules.md +++ b/docs/build/reference/inference-rules.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: NMAKE inference rules" title: "Inference rules" +description: "Learn more about: NMAKE inference rules" ms.date: 09/30/2021 helpviewer_keywords: ["inference rules in NMAKE", "rules, inference", "NMAKE program, inference rules", "search paths in NMAKE inference rules", "defining inference rules", "batch-mode inference rules in NMAKE", "rules, predefined", "NMAKE program, predefined rules", "predefined rules in NMAKE", "rules, inferred", "inferred dependents in NMAKE", "inferred rules in NMAKE", "dependents, inferred", "precedence, inference rule"] --- @@ -10,7 +10,7 @@ Inference rules in NMAKE supply commands to update targets and to infer dependen If an out-of-date dependency has no commands, and if [`.SUFFIXES`](dot-directives.md) contains the dependent's extension, NMAKE uses a rule whose extensions match the target and an existing file in the current or specified directory. If more than one rule matches existing files, the **`.SUFFIXES`** list determines which to use; list priority descends from left to right. If a dependent file doesn't exist and isn't listed as a target in another description block, an inference rule can create the missing dependent from another file that has the same base name. If a description block's target has no dependents or commands, an inference rule can update the target. Inference rules can build a command-line target even if no description block exists. NMAKE may invoke a rule for an inferred dependent even if an explicit dependent is specified. -## Defining a rule +## Defining a rule The *from_ext* represents the extension of a dependent file, and *to_ext* represents the extension of a target file. @@ -21,7 +21,7 @@ The *from_ext* represents the extension of a dependent file, and *to_ext* repres Extensions aren't case-sensitive. Macros can be invoked to represent *from_ext* and *to_ext*; the macros are expanded during preprocessing. The period (**`.`**) that precedes *from_ext* must appear at the beginning of the line. The colon (**`:`**) is preceded by zero or more spaces or tabs. It can be followed only by spaces or tabs, a semicolon (**`;`**) to specify a command, a number sign (**`#`**) to specify a comment, or a newline character. No other spaces are allowed. Commands are specified as in description blocks. -## Search paths in rules +## Search paths in rules ```makefile {from_path}.from_ext{to_path}.to_ext: @@ -61,7 +61,7 @@ An inference rule applies to a dependency only if paths specified in the depende $(CC) $(CFLAGS) $< ``` -## Batch-mode rules +## Batch-mode rules ```makefile {from_path}.from_ext{to_path}.to_ext:: @@ -135,7 +135,7 @@ foo4.cpp Generating Code... ``` -## Predefined rules +## Predefined rules Predefined inference rules use NMAKE-supplied command and options macros. @@ -155,7 +155,7 @@ Predefined inference rules use NMAKE-supplied command and options macros. | `.cxx.obj` | `$(CXX) $(CXXFLAGS) /c $<` | `cl /c $<` | yes | all | | `.rc.res` | `$(RC) $(RFLAGS) /r $<` | `rc /r $<` | no | all | -## Inferred dependents and rules +## Inferred dependents and rules NMAKE assumes an inferred dependent for a target if an applicable inference rule exists. A rule applies if: @@ -169,7 +169,7 @@ NMAKE assumes an inferred dependent for a target if an applicable inference rule Inferred dependents can cause unexpected side effects. If the target's description block contains commands, NMAKE executes those commands instead of the commands in the rule. -## Precedence in inference rules +## Precedence in inference rules If an inference rule is defined more than once, NMAKE uses the highest-precedence definition. The following list shows the order of precedence from highest to lowest: diff --git a/docs/build/reference/inline-files-in-a-makefile.md b/docs/build/reference/inline-files-in-a-makefile.md index 7731da1cd6..b18211ffdc 100644 --- a/docs/build/reference/inline-files-in-a-makefile.md +++ b/docs/build/reference/inline-files-in-a-makefile.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Inline files in a makefile" title: "Inline files in a makefile" +description: "Learn more about: Inline files in a makefile" ms.date: 09/30/2021 helpviewer_keywords: ["inline files [C++], in makefiles", "inline files [C++]", "NMAKE program, inline files", "makefiles, inline files", "files [C++], inline", "inline files, multiple NMAKE", "multiple inline files", "inline files, reusing NMAKE", "reusing inline files", "inline files, creating text", "inline files [C++], specifying NMAKE"] --- @@ -8,7 +8,7 @@ helpviewer_keywords: ["inline files [C++], in makefiles", "inline files [C++]", An inline file contains text you specify in the makefile. Its name can be used in commands as input (for example, a LINK command file), or it can pass commands to the operating system. The file is created on disk when a command that creates the file is run. -## Specify an inline file +## Specify an inline file Specify two angle brackets (**`<<`**) in the command where *filename* is to appear. The angle brackets can't be a macro expansion. The *filename* is optional: @@ -18,7 +18,7 @@ Specify two angle brackets (**`<<`**) in the command where *filename* is to appe When the command is run, the angle brackets are replaced by *filename*, if specified, or by a unique NMAKE-generated name. If specified, *filename* must follow angle brackets without a space or tab. A path is permitted. No extension is required or assumed. If *filename* is specified, the file is created in the current or specified directory, overwriting any existing file by that name. Otherwise, it's created in the `TMP` directory (or the current directory, if the `TMP` environment variable isn't defined). If a previous *filename* is reused, NMAKE replaces the previous file. -## Create inline file text +## Create inline file text Inline files are temporary or permanent. @@ -34,11 +34,11 @@ Specify your *inline_text* on the first line after the command. Mark the end wit A temporary file exists for the duration of the session and can be reused by other commands. Specify **`KEEP`** after the closing angle brackets to retain the file after the NMAKE session; an unnamed file is preserved on disk with the generated filename. Specify **`NOKEEP`** or nothing for a temporary file. **`KEEP`** and **`NOKEEP`** are not case sensitive. -## Reuse inline files +## Reuse inline files To reuse an inline file, specify `< Multiple inline files +## Multiple inline files A command can create more than one inline file: diff --git a/docs/build/reference/makefile-preprocessing.md b/docs/build/reference/makefile-preprocessing.md index fd50b23a67..7092de7a26 100644 --- a/docs/build/reference/makefile-preprocessing.md +++ b/docs/build/reference/makefile-preprocessing.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Makefile Preprocessing" title: "Makefile preprocessing" +description: "Learn more about: Makefile Preprocessing" ms.date: 09/30/2021 f1_keywords: ["!UNDEF", "!INCLUDE", "!IFNDEF", "!MESSAGE"] helpviewer_keywords: ["preprocessing makefiles", "makefiles, preprocessing", "!CMDSWITCHES directive", "!ELSE directive", "!ELSEIF directive", "!ELSEIFDEF directive", "!ELSEIFNDEF directive", "!ENDIF directive", "!ERROR directive", "!IF directive", "!IFDEF directive", "!IFNDEF directive", "!INCLUDE directive", "!MESSAGE directive", "!UNDEF directive", "directives, makefile preprocessing", "preprocessing directives, makefiles", "NMAKE program, expressions", "NMAKE program, preprocessor directives", "makefiles, preprocessing directives", "expressions [C++], makefile preprocessing", "operators [C++], makefile preprocessing", "EXIST operator", "preprocessing NMAKE makefile operators", "NMAKE program, operators", "DEFINED operator", "makefiles, preprocessing operators"] @@ -9,7 +9,7 @@ helpviewer_keywords: ["preprocessing makefiles", "makefiles, preprocessing", "!C You can control the NMAKE session by using preprocessing directives and expressions. Preprocessing instructions can be placed in the makefile or in *`Tools.ini`*. Using directives, you can conditionally process your makefile, display error messages, include other makefiles, undefine a macro, and turn certain options on or off. -## Makefile Preprocessing Directives +## Makefile Preprocessing Directives Preprocessing directives aren't case-sensitive. The initial exclamation point (**`!`**) must appear at the beginning of the line. Zero or more spaces or tabs can appear after the exclamation point, for indentation. @@ -67,13 +67,13 @@ Preprocessing directives aren't case-sensitive. The initial exclamation point (* Undefines *macro_name*. -## Expressions in makefile preprocessing +## Expressions in makefile preprocessing The **`!IF`** or **`!ELSE IF`** *constant_expression* consists of integer constants (in decimal or C-language notation), string constants, or commands. Use parentheses to group expressions. Expressions use C-style signed long integer arithmetic; numbers are in 32-bit two's-complement form in the range -2147483648 to 2147483647. Expressions can use operators that act on constant values, exit codes from commands, strings, macros, and file-system paths. -## Makefile preprocessing operators +## Makefile preprocessing operators Makefile preprocessing expressions can use operators that act on constant values, exit codes from commands, strings, macros, and file-system paths. To evaluate the expression, the preprocessor first expands macros, and then executes commands, and then does the operations. It evaluates operations in order of explicit grouping in parentheses, and then in order of operator precedence. The result is a constant value. @@ -125,7 +125,7 @@ Expressions can use the following operators. The operators of equal precedence a > [!NOTE] > The bitwise XOR operator (**`^`**) is the same as the escape character, and must be escaped (as **`^^`**) when it's used in an expression. -## Executing a program in preprocessing +## Executing a program in preprocessing To use a command's exit code during preprocessing, specify the command, with any arguments, within brackets (**`[ ]`**). Any macros are expanded before the command is executed. NMAKE replaces the command specification with the command's exit code, which can be used in an expression to control preprocessing. diff --git a/docs/build/reference/special-nmake-macros.md b/docs/build/reference/special-nmake-macros.md index 1ed4fd8b92..93dcf23449 100644 --- a/docs/build/reference/special-nmake-macros.md +++ b/docs/build/reference/special-nmake-macros.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Special NMAKE macros" title: "Special NMAKE macros" +description: "Learn more about: Special NMAKE macros" ms.date: 09/30/2021 helpviewer_keywords: ["special NMAKE macros", "macros, NMAKE", "NMAKE macros, special", "NMAKE program, environment variable macros", "environment variables, macros in NMAKE", "macros, environment-variable", "options macros", "command macros in NMAKE", "macros, options macros", "macros, command macros", "NMAKE program, recursion macros", "recursion macros", "macros, recursion", "filename macros in NMAKE", "NMAKE program, filename macros"] no-loc: [AS, AFLAGS, CC, CFLAGS, CPP, CPPFLAGS, CXX, CXXFLAGS, RC, RFLAGS, ias, ml, ml64, cl, rc] @@ -9,7 +9,7 @@ no-loc: [AS, AFLAGS, CC, CFLAGS, CPP, CPPFLAGS, CXX, CXXFLAGS, RC, RFLAGS, ias, NMAKE provides several special macros to represent various filenames and commands. One use for some of these macros is in the predefined inference rules. Like all macros, the macros provided by NMAKE are case sensitive. -## Filename Macros +## Filename Macros Filename macros are predefined as filenames specified in the dependency (not full filename specifications on disk). These macros don't need to be enclosed in parentheses when invoked; specify only a **`$`** as shown. @@ -31,7 +31,7 @@ To specify part of a predefined filename macro, append a macro modifier and encl | **`F`** | Base name plus extension | | **`R`** | Drive plus directory plus base name | -## Recursion macros +## Recursion macros Use recursion macros to call NMAKE recursively. Recursive sessions inherit command-line and environment-variable macros and *`Tools.ini`* information. They don't inherit makefile-defined inference rules or `.SUFFIXES` and `.PRECIOUS` specifications. There are three ways to pass macros to a recursive NMAKE session: @@ -45,7 +45,7 @@ Use recursion macros to call NMAKE recursively. Recursive sessions inherit comma | **`MAKEDIR`** | Current directory when NMAKE was invoked. | | **`MAKEFLAGS`** | Options currently in effect. Use as `/$(MAKEFLAGS)`. The **`/F`** option isn't included. | -## Command macros and options macros +## Command macros and options macros Command macros are predefined for Microsoft products. Options macros represent options to these products and are undefined by default. Both are used in predefined inference rules and can be used in description blocks or user-defined inference rules. Command macros can be redefined to represent part or all of a command line, including options. Options macros generate a null string if left undefined. @@ -57,7 +57,7 @@ Command macros are predefined for Microsoft products. Options macros represent o | C++ Compiler | **`CXX`** | `cl` | **`CXXFLAGS`** | | Resource Compiler | **`RC`** | `rc` | **`RFLAGS`** | -## Environment-variable macros +## Environment-variable macros NMAKE inherits macro definitions for environment variables that exist before the start of the session. If a variable was set in the operating-system environment, it is available as an NMAKE macro. The inherited names are converted to uppercase. Inheritance occurs before preprocessing. Use the /E option to cause macros inherited from environment variables to override any macros with the same name in the makefile. diff --git a/docs/build/reference/using-an-nmake-macro.md b/docs/build/reference/using-an-nmake-macro.md index 6186d04089..f4b418744b 100644 --- a/docs/build/reference/using-an-nmake-macro.md +++ b/docs/build/reference/using-an-nmake-macro.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Using an NMAKE macro" title: "Use an NMAKE macro" +description: "Learn more about: Using an NMAKE macro" ms.date: 09/30/2021 helpviewer_keywords: ["macros, NMAKE", "NMAKE macros, using", "NMAKE program, macro substitution", "substitution macros in NMAKE", "NMAKE functions", "functions, NMAKE"] --- @@ -14,7 +14,7 @@ $(macro_name) No spaces are allowed. The parentheses are optional if *macro_name* is a single character. The definition string replaces `$(macro_name)`; an undefined macro is replaced by a null string. -## Macro substitution +## Macro substitution When *macro_name* is invoked, each occurrence of *string1* in its definition string is replaced by *string2*. @@ -28,11 +28,11 @@ No spaces or tabs precede the colon (**`:`**); any spaces or tabs after the colo ::: moniker range=">=msvc-170" -## Macro functions +## Macro functions NMAKE provides a set of functions that can be used to modify strings, lists of items and file paths. These functions are available in NMAKE starting in Visual Studio 2022. -### Function syntax +### Function syntax Functions use the following syntax: @@ -57,7 +57,7 @@ INPUT=a, b $(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b" ``` -### List syntax +### List syntax Some functions support a whitespace-separated list of items. Extra whitespace is ignored at the beginning of the list, the end of the list, or between each item. Lists produced by a function use a single space between each item as a separator, and don't have leading or trailing whitespace. @@ -67,7 +67,7 @@ For example, the simplest list function is `strip`, which takes a single list ar $(strip a b c d ) # Evaluates to "a b c d" ``` -### Pattern syntax +### Pattern syntax Some functions support using a *pattern*. A pattern is a string that contains a single wildcard that can match any number of characters. The first `%` in a pattern is the wildcard, and any later `%` characters are treated as literals. A `%` anywhere before the actual wildcard can be escaped by using `\` (that is, `\%` is treated as a literal `%`). Any `\` that would escape the wildcard can be escaped with another `\` (so `\\%` is treated as a literal `\` followed by the wildcard). To be considered a match, all of the input characters must be matched by the pattern; partial matches aren't supported. @@ -86,7 +86,7 @@ $(filter a%c\\%d,abc\\%d) # Evaluates to "abc\\%d" - any `\` after the wildcard $(filter \\a%f,\\abcdef) # Evaluates to "\\abcdef" - any `\\` that isn't directly before the wildcard isn't treated as an escape ``` -### Functions by category +### Functions by category | Function | Purpose | Supported | |--|--|--| diff --git a/docs/cpp/if-else-statement-cpp.md b/docs/cpp/if-else-statement-cpp.md index c8252c9f23..21563cb749 100644 --- a/docs/cpp/if-else-statement-cpp.md +++ b/docs/cpp/if-else-statement-cpp.md @@ -164,7 +164,7 @@ setting shared_flag to false Error! Token must not be a keyword ``` -## if constexpr statements +## if constexpr statements Starting in C++17, you can use an **`if constexpr`** statement in function templates to make compile-time branching decisions without having to resort to multiple function overloads. **Microsoft-specific**: This form is available starting in Visual Studio 2017 version 15.3, and requires at least the [`/std:c++17`](../build/reference/std-specify-language-standard-version.md) compiler option. diff --git a/docs/cpp/main-function-command-line-args.md b/docs/cpp/main-function-command-line-args.md index 9e632f6251..ac291e1374 100644 --- a/docs/cpp/main-function-command-line-args.md +++ b/docs/cpp/main-function-command-line-args.md @@ -169,7 +169,7 @@ Command-line arguments are handled by an internal routine in the runtime startup For more information on runtime startup linker options, see [Link options](../c-runtime-library/link-options.md). -## Customize C++ command-line processing +## Customize C++ command-line processing If your program doesn't take command-line arguments, you can suppress the command-line processing routine to save a small amount of space. To suppress its use, include the *`noarg.obj`* file (for both `main` and `wmain`) in your **`/link`** compiler options or your **`LINK`** command line. diff --git a/docs/mfc/reference/cmfcbutton-class.md b/docs/mfc/reference/cmfcbutton-class.md index 5cf031c6e9..5e3103d317 100644 --- a/docs/mfc/reference/cmfcbutton-class.md +++ b/docs/mfc/reference/cmfcbutton-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: CMFCButton Class" title: "CMFCButton Class" +description: "Learn more about: CMFCButton Class" ms.date: "08/28/2018" f1_keywords: ["CMFCButton", "AFXBUTTON/CMFCButton", "AFXBUTTON/CMFCButton::CleanUp", "AFXBUTTON/CMFCButton::EnableFullTextTooltip", "AFXBUTTON/CMFCButton::EnableMenuFont", "AFXBUTTON/CMFCButton::EnableWindowsTheming", "AFXBUTTON/CMFCButton::GetToolTipCtrl", "AFXBUTTON/CMFCButton::IsAutoCheck", "AFXBUTTON/CMFCButton::IsAutorepeatCommandMode", "AFXBUTTON/CMFCButton::IsCheckBox", "AFXBUTTON/CMFCButton::IsChecked", "AFXBUTTON/CMFCButton::IsHighlighted", "AFXBUTTON/CMFCButton::IsPressed", "AFXBUTTON/CMFCButton::IsPushed", "AFXBUTTON/CMFCButton::IsRadioButton", "AFXBUTTON/CMFCButton::IsWindowsThemingEnabled", "AFXBUTTON/CMFCButton::SetAutorepeatMode", "AFXBUTTON/CMFCButton::SetCheckedImage", "AFXBUTTON/CMFCButton::SetFaceColor", "AFXBUTTON/CMFCButton::SetImage", "AFXBUTTON/CMFCButton::SetMouseCursor", "AFXBUTTON/CMFCButton::SetMouseCursorHand", "AFXBUTTON/CMFCButton::SetStdImage", "AFXBUTTON/CMFCButton::SetTextColor", "AFXBUTTON/CMFCButton::SetTextHotColor", "AFXBUTTON/CMFCButton::SetTooltip", "AFXBUTTON/CMFCButton::SizeToContent", "AFXBUTTON/CMFCButton::OnDraw", "AFXBUTTON/CMFCButton::OnDrawBorder", "AFXBUTTON/CMFCButton::OnDrawFocusRect", "AFXBUTTON/CMFCButton::OnDrawText", "AFXBUTTON/CMFCButton::OnFillBackground", "AFXBUTTON/CMFCButton::SelectFont", "AFXBUTTON/CMFCButton::m_bDrawFocus", "AFXBUTTON/CMFCButton::m_bHighlightChecked", "AFXBUTTON/CMFCButton::m_bRightImage", "AFXBUTTON/CMFCButton::m_bTransparent", "AFXBUTTON/CMFCButton::m_nAlignStyle", "AFXBUTTON/CMFCButton::m_nFlatStyle"] helpviewer_keywords: ["CMFCButton [MFC], CleanUp", "CMFCButton [MFC], EnableFullTextTooltip", "CMFCButton [MFC], EnableMenuFont", "CMFCButton [MFC], EnableWindowsTheming", "CMFCButton [MFC], GetToolTipCtrl", "CMFCButton [MFC], IsAutoCheck", "CMFCButton [MFC], IsAutorepeatCommandMode", "CMFCButton [MFC], IsCheckBox", "CMFCButton [MFC], IsChecked", "CMFCButton [MFC], IsHighlighted", "CMFCButton [MFC], IsPressed", "CMFCButton [MFC], IsPushed", "CMFCButton [MFC], IsRadioButton", "CMFCButton [MFC], IsWindowsThemingEnabled", "CMFCButton [MFC], SetAutorepeatMode", "CMFCButton [MFC], SetCheckedImage", "CMFCButton [MFC], SetFaceColor", "CMFCButton [MFC], SetImage", "CMFCButton [MFC], SetMouseCursor", "CMFCButton [MFC], SetMouseCursorHand", "CMFCButton [MFC], SetStdImage", "CMFCButton [MFC], SetTextColor", "CMFCButton [MFC], SetTextHotColor", "CMFCButton [MFC], SetTooltip", "CMFCButton [MFC], SizeToContent", "CMFCButton [MFC], OnDraw", "CMFCButton [MFC], OnDrawBorder", "CMFCButton [MFC], OnDrawFocusRect", "CMFCButton [MFC], OnDrawText", "CMFCButton [MFC], OnFillBackground", "CMFCButton [MFC], SelectFont", "CMFCButton [MFC], m_bDrawFocus", "CMFCButton [MFC], m_bHighlightChecked", "CMFCButton [MFC], m_bRightImage", "CMFCButton [MFC], m_bTransparent", "CMFCButton [MFC], m_nAlignStyle", "CMFCButton [MFC], m_nFlatStyle"] -ms.assetid: 4b32f57c-7a53-4734-afb9-d47e3359f62e --- # `CMFCButton` Class @@ -328,7 +327,7 @@ static BOOL IsWindowsThemingEnabled(); `TRUE` if the style of the button border corresponds to the current Windows theme; otherwise, `FALSE`. -## `CMFCButton::m_bDontUseWinXPTheme` +## `CMFCButton::m_bDontUseWinXPTheme` Specifies whether to use Windows XP themes when drawing the button. @@ -919,8 +918,8 @@ By default, this method calculates a new size that includes a horizontal margin ## See also -[Hierarchy Chart](../../mfc/hierarchy-chart.md)
-[Classes](../../mfc/reference/mfc-classes.md)
-[`CMFCLinkCtrl` Class](../../mfc/reference/cmfclinkctrl-class.md)
-[`CMFCColorButton` Class](../../mfc/reference/cmfccolorbutton-class.md)
+[Hierarchy Chart](../../mfc/hierarchy-chart.md)\ +[Classes](../../mfc/reference/mfc-classes.md)\ +[`CMFCLinkCtrl` Class](../../mfc/reference/cmfclinkctrl-class.md)\ +[`CMFCColorButton` Class](../../mfc/reference/cmfccolorbutton-class.md)\ [`CMFCMenuButton` Class](../../mfc/reference/cmfcmenubutton-class.md) diff --git a/docs/mfc/reference/extension-dll-macros.md b/docs/mfc/reference/extension-dll-macros.md index f7dc3c4d10..a3682634f7 100644 --- a/docs/mfc/reference/extension-dll-macros.md +++ b/docs/mfc/reference/extension-dll-macros.md @@ -79,7 +79,7 @@ For more information on module states and MFC, see [Managing the state data of M **Header:** \ -## `AfxOleInitModule` +## `AfxOleInitModule` For OLE support from a regular MFC DLL that is dynamically linked to MFC, call this function in your regular MFC DLL's `CWinApp::InitInstance` function to initialize the MFC OLE DLL. @@ -329,6 +329,6 @@ MFC extension DLLs need to call [`AfxInitExtensionModule`](#afxinitextensionmodu ## See also -[Macros and globals](mfc-macros-and-globals.md)
-[`AfxMessageBox`](cstring-formatting-and-message-box-display.md#afxmessagebox)
-[Managing the state data of MFC modules](../managing-the-state-data-of-mfc-modules.md)
+[Macros and globals](mfc-macros-and-globals.md)\ +[`AfxMessageBox`](cstring-formatting-and-message-box-display.md#afxmessagebox)\ +[Managing the state data of MFC modules](../managing-the-state-data-of-mfc-modules.md) diff --git a/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md b/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md index c93112ffca..d928cc4c0d 100644 --- a/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md +++ b/docs/parallel/amp/reference/concurrency-direct3d-namespace-functions-amp.md @@ -1,9 +1,8 @@ --- -description: "Learn more about: Concurrency::direct3d namespace functions (AMP)" title: "Concurrency::direct3d namespace functions (AMP)" +description: "Learn more about: Concurrency::direct3d namespace functions (AMP)" ms.date: "08/31/2018" f1_keywords: ["amp/Concurrency::direct3d::abs", "amp/Concurrency::direct3d::countbits", "amp/Concurrency::direct3d::create_accelerator_view", "amp/Concurrency::direct3d::d3d_access_lock", "amp/Concurrency::direct3d::d3d_access_unlock", "amp/Concurrency::direct3d::firstbithigh", "amp/Concurrency::direct3d::get_buffer", "amp/Concurrency::direct3d::get_device", "amp/Concurrency::direct3d::imax", "amp/Concurrency::direct3d::is_timeout_disabled", "amp/Concurrency::direct3d::mad", "amp/Concurrency::direct3d::noise", "amp/Concurrency::direct3d::radians", "amp/Concurrency::direct3d::reversebits", "amp/Concurrency::direct3d::saturate", "amp/Concurrency::direct3d::smoothstep", "amp/Concurrency::direct3d::step", "amp/Concurrency::direct3d::umin"] -ms.assetid: 28943b62-52c9-42dc-baf1-ca7b095c1a19 --- # Concurrency::direct3d namespace functions (AMP) @@ -262,7 +261,7 @@ An array on a Direct3D accelerator_view for which the underlying Direct3D buffer The IUnknown interface pointer corresponding to the Direct3D buffer underlying the array. -## get_device +## get_device Get the D3D device interface underlying a accelerator_view. diff --git a/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md b/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md index cfbff07214..a7908a8b41 100644 --- a/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md +++ b/docs/parallel/amp/reference/concurrency-precise-math-namespace-functions.md @@ -1,9 +1,8 @@ --- -description: "Learn more about: Concurrency::precise_math namespace functions" title: "Concurrency::precise_math namespace functions" +description: "Learn more about: Concurrency::precise_math namespace functions" ms.date: "11/04/2016" f1_keywords: ["amp_math/Concurrency::precise_math::acos", "amp_math/Concurrency::precise_math::acosh", "amp_math/Concurrency::precise_math::acoshf", "amp_math/Concurrency::precise_math::asinf", "amp_math/Concurrency::precise_math::asinh", "amp_math/Concurrency::precise_math::atan", "amp_math/Concurrency::precise_math::atan2", "amp_math/Concurrency::precise_math::atanf", "amp_math/Concurrency::precise_math::atanh", "amp_math/Concurrency::precise_math::cbrt", "amp_math/Concurrency::precise_math::cbrtf", "amp_math/Concurrency::precise_math::ceilf", "amp_math/Concurrency::precise_math::copysign", "amp_math/Concurrency::precise_math::cos", "amp_math/Concurrency::precise_math::cosf", "amp_math/Concurrency::precise_math::coshf", "amp_math/Concurrency::precise_math::cospi", "amp_math/Concurrency::precise_math::erf", "amp_math/Concurrency::precise_math::erfc", "amp_math/Concurrency::precise_math::erfcinv", "amp_math/Concurrency::precise_math::erfcinvf", "amp_math/Concurrency::precise_math::erfinv", "amp_math/Concurrency::precise_math::erfinvf", "amp_math/Concurrency::precise_math::exp10", "amp_math/Concurrency::precise_math::exp10f", "amp_math/Concurrency::precise_math::exp2f", "amp_math/Concurrency::precise_math::expf", "amp_math/Concurrency::precise_math::expm1f", "amp_math/Concurrency::precise_math::fabs", "amp_math/Concurrency::precise_math::floor", "amp_math/Concurrency::precise_math::fdim", "amp_math/Concurrency::precise_math::floorf", "amp_math/Concurrency::precise_math::fmaf", "amp_math/Concurrency::precise_math::fmaxf", "amp_math/Concurrency::precise_math::fmin", "amp_math/Concurrency::precise_math::fmod", "amp_math/Concurrency::precise_math::fmodf", "amp_math/Concurrency::precise_math::frexp", "amp_math/Concurrency::precise_math::frexpf", "amp_math/Concurrency::precise_math::hypotf", "amp_math/Concurrency::precise_math::ilogb", "amp_math/Concurrency::precise_math::isfinite", "amp_math/Concurrency::precise_math::isinf", "amp_math/Concurrency::precise_math::isnormal", "amp_math/Concurrency::precise_math::ldexp", "amp_math/Concurrency::precise_math::lgamma", "amp_math/Concurrency::precise_math::lgammaf", "amp_math/Concurrency::precise_math::log10", "amp_math/Concurrency::precise_math::log10f", "amp_math/Concurrency::precise_math::log1pf", "amp_math/Concurrency::precise_math::log2", "amp_math/Concurrency::precise_math::logb", "amp_math/Concurrency::precise_math::logbf", "amp_math/Concurrency::precise_math::modf", "amp_math/Concurrency::precise_math::modff", "amp_math/Concurrency::precise_math::nanf", "amp_math/Concurrency::precise_math::nearbyint", "amp_math/Concurrency::precise_math::nextafter", "amp_math/Concurrency::precise_math::nextafterf", "amp_math/Concurrency::precise_math::phif", "amp_math/Concurrency::precise_math::pow", "amp_math/Concurrency::precise_math::probit", "amp_math/Concurrency::precise_math::probitf", "amp_math/Concurrency::precise_math::rcbrtf", "amp_math/Concurrency::precise_math::remainder", "amp_math/Concurrency::precise_math::remquo", "amp_math/Concurrency::precise_math::remquof", "amp_math/Concurrency::precise_math::roundf", "amp_math/Concurrency::precise_math::rsqrt", "amp_math/Concurrency::precise_math::scalb", "amp_math/Concurrency::precise_math::scalbf", "amp_math/Concurrency::precise_math::scalbnf", "amp_math/Concurrency::precise_math::signbit", "amp_math/Concurrency::precise_math::sin", "amp_math/Concurrency::precise_math::sincos", "amp_math/Concurrency::precise_math::sinf", "amp_math/Concurrency::precise_math::sinh", "amp_math/Concurrency::precise_math::sinpi", "amp_math/Concurrency::precise_math::sinpif", "amp_math/Concurrency::precise_math::sqrtf", "amp_math/Concurrency::precise_math::tan", "amp_math/Concurrency::precise_math::tanh", "amp_math/Concurrency::precise_math::tanhf", "amp_math/Concurrency::precise_math::tanpif", "amp_math/Concurrency::precise_math::tgamma", "amp_math/Concurrency::precise_math::trunc", "amp_math/Concurrency::precise_math::truncf"] -ms.assetid: fae53ab4-d1c5-45bb-a6a0-a74258e9aea3 --- # Concurrency::precise_math namespace functions @@ -1049,7 +1048,7 @@ Floating-point value Returns the floor of the argument -## fma +## fma Computes the product of the first and second specified arguments, then adds the third specified argument to the result; the entire computation is performed as a single operation. diff --git a/docs/parallel/amp/reference/norm-3-class.md b/docs/parallel/amp/reference/norm-3-class.md index 96533633a3..a0e3841d4d 100644 --- a/docs/parallel/amp/reference/norm-3-class.md +++ b/docs/parallel/amp/reference/norm-3-class.md @@ -1,9 +1,8 @@ --- -description: "Learn more about: norm_3 Class" title: "norm_3 Class" +description: "Learn more about: norm_3 Class" ms.date: "11/04/2016" f1_keywords: ["amp_short_vectors/Concurrency::graphics::norm_3::get_z", "amp_short_vectors/Concurrency::graphics::norm_3::operator=", "amp_short_vectors/Concurrency::graphics::norm_3::r", "amp_short_vectors/Concurrency::graphics::norm_3::set_zyx", "amp_short_vectors/Concurrency::graphics::norm_3::xyz", "amp_short_vectors/Concurrency::graphics::norm_3::operator/=", "amp_short_vectors/Concurrency::graphics::norm_3::yz", "amp_short_vectors/Concurrency::graphics::norm_3::get_xyz", "amp_short_vectors/Concurrency::graphics::norm_3::br", "amp_short_vectors/Concurrency::graphics::norm_3::xy", "amp_short_vectors/Concurrency::graphics::norm_3::get_yzx", "amp_short_vectors/Concurrency::graphics::norm_3::set_xyz", "amp_short_vectors/Concurrency::graphics::norm_3::gr", "amp_short_vectors/Concurrency::graphics::norm_3::g", "amp_short_vectors/Concurrency::graphics::norm_3::set_yxz", "amp_short_vectors/Concurrency::graphics::norm_3::get_zyx", "amp_short_vectors/Concurrency::graphics::norm_3::get_y", "amp_short_vectors/Concurrency::graphics::norm_3::zx", "amp_short_vectors/Concurrency::graphics::norm_3::yzx", "amp_short_vectors/Concurrency::graphics::norm_3::gb", "amp_short_vectors/Concurrency::graphics::norm_3::xzy", "amp_short_vectors/Concurrency::graphics::norm_3::xz", "amp_short_vectors/Concurrency::graphics::norm_3::rb", "amp_short_vectors/Concurrency::graphics::norm_3::rgb", "amp_short_vectors/Concurrency::graphics::norm_3::b", "amp_short_vectors/Concurrency::graphics::norm_3::z", "amp_short_vectors/Concurrency::graphics::norm_3::operator*=", "amp_short_vectors/Concurrency::graphics::norm_3::operator+=", "amp_short_vectors/Concurrency::graphics::norm_3::get_zy", "amp_short_vectors/Concurrency::graphics::norm_3::get_xz", "amp_short_vectors/Concurrency::graphics::norm_3::gbr", "amp_short_vectors/Concurrency::graphics::norm_3::get_yz", "amp_short_vectors/Concurrency::graphics::norm_3::get_zx", "amp_short_vectors/Concurrency::graphics::norm_3::get_xzy", "amp_short_vectors/Concurrency::graphics::norm_3::set_xz", "amp_short_vectors/Concurrency::graphics::norm_3::set_xzy", "amp_short_vectors/Concurrency::graphics::norm_3::set_zy", "amp_short_vectors/Concurrency::graphics::norm_3::get_xy", "amp_short_vectors/Concurrency::graphics::norm_3::y", "amp_short_vectors/Concurrency::graphics::norm_3::yx", "amp_short_vectors/Concurrency::graphics::norm_3::rbg", "amp_short_vectors/Concurrency::graphics::norm_3::zxy", "amp_short_vectors/Concurrency::graphics::norm_3", "amp_short_vectors/Concurrency::graphics::norm_3::set_yz", "amp_short_vectors/Concurrency::graphics::norm_3::brg", "amp_short_vectors/Concurrency::graphics::norm_3::operator--", "amp_short_vectors/Concurrency::graphics::norm_3::yxz", "amp_short_vectors/Concurrency::graphics::norm_3::x", "amp_short_vectors/Concurrency::graphics::norm_3::set_x", "amp_short_vectors/Concurrency::graphics::norm_3::get_x", "amp_short_vectors/Concurrency::graphics::norm_3::get_yxz", "amp_short_vectors/Concurrency::graphics::norm_3::grb", "amp_short_vectors/Concurrency::graphics::norm_3::get_yx", "amp_short_vectors/Concurrency::graphics::norm_3::zy", "amp_short_vectors/Concurrency::graphics::norm_3::rg", "amp_short_vectors/Concurrency::graphics::norm_3::set_yzx", "amp_short_vectors/Concurrency::graphics::norm_3::operator-=", "amp_short_vectors/Concurrency::graphics::norm_3::bg", "amp_short_vectors/Concurrency::graphics::norm_3::operator++", "amp_short_vectors/Concurrency::graphics::norm_3::set_y", "amp_short_vectors/Concurrency::graphics::norm_3::zyx", "amp_short_vectors/Concurrency::graphics::norm_3::set_z", "amp_short_vectors/Concurrency::graphics::norm_3::operator-", "amp_short_vectors/Concurrency::graphics::norm_3::get_zxy", "amp_short_vectors/Concurrency::graphics::norm_3::set_xy", "amp_short_vectors/Concurrency::graphics::norm_3::set_zxy", "amp_short_vectors/Concurrency::graphics::norm_3::set_yx", "amp_short_vectors/Concurrency::graphics::norm_3::set_zx", "amp_short_vectors/Concurrency::graphics::norm_3::bgr"] -ms.assetid: 17081060-14ce-477e-a71a-9801b0f1d9e4 --- # norm_3 Class @@ -200,7 +199,7 @@ The value for initialization. *_Other*
The object used to initialize. -## size Constant +## size Constant ### Syntax diff --git a/docs/parallel/amp/reference/tile-barrier-class.md b/docs/parallel/amp/reference/tile-barrier-class.md index a24d46e89a..d9c181b68b 100644 --- a/docs/parallel/amp/reference/tile-barrier-class.md +++ b/docs/parallel/amp/reference/tile-barrier-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: tile_barrier Class" title: "tile_barrier Class" +description: "Learn more about: tile_barrier Class" ms.date: "03/27/2019" f1_keywords: ["tile_barrier", "AMP/tile_barrier", "AMP/Concurrency::tile_barrier::tile_barrier::tile_barrier", "AMP/Concurrency::tile_barrier::tile_barrier::wait", "AMP/Concurrency::tile_barrier::tile_barrier::wait_with_all_memory_fence", "AMP/Concurrency::tile_barrier::tile_barrier::wait_with_global_memory_fence", "AMP/Concurrency::tile_barrier::tile_barrier::wait_with_tile_static_memory_fence"] helpviewer_keywords: ["tile_barrier class"] -ms.assetid: b4ccdccb-0032-4e11-b7bd-dc9d43445dee --- # tile_barrier Class @@ -79,7 +78,7 @@ Blocks execution of all threads in a tile until all threads in a tile have reach void wait_with_all_memory_fence() const restrict(amp); ``` -## wait_with_global_memory_fence +## wait_with_global_memory_fence Blocks execution of all threads in a tile until all threads in a tile have reached this call. This ensures that all global memory accesses are visible to other threads in the thread tile, and have been executed in program order. @@ -89,7 +88,7 @@ Blocks execution of all threads in a tile until all threads in a tile have reach void wait_with_global_memory_fence() const restrict(amp); ``` -## wait_with_tile_static_memory_fence +## wait_with_tile_static_memory_fence Blocks execution of all threads in a tile until all threads in a tile have reached this call. This ensures that `tile_static` memory accesses are visible to other threads in the thread tile, and have been executed in program order. diff --git a/docs/parallel/concrt/reference/reader-writer-lock-class.md b/docs/parallel/concrt/reference/reader-writer-lock-class.md index 12fe2bdb4b..ef5263b57d 100644 --- a/docs/parallel/concrt/reference/reader-writer-lock-class.md +++ b/docs/parallel/concrt/reference/reader-writer-lock-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: reader_writer_lock Class" title: "reader_writer_lock Class" +description: "Learn more about: reader_writer_lock Class" ms.date: "11/04/2016" f1_keywords: ["reader_writer_lock", "CONCRT/concurrency::reader_writer_lock", "CONCRT/concurrency::reader_writer_lock::scoped_lock", "CONCRT/concurrency::reader_writer_lock::scoped_lock_read", "CONCRT/concurrency::reader_writer_lock::reader_writer_lock", "CONCRT/concurrency::reader_writer_lock::lock", "CONCRT/concurrency::reader_writer_lock::lock_read", "CONCRT/concurrency::reader_writer_lock::try_lock", "CONCRT/concurrency::reader_writer_lock::try_lock_read", "CONCRT/concurrency::reader_writer_lock::unlock"] helpviewer_keywords: ["reader_writer_lock class"] -ms.assetid: 91a59cd2-ca05-4b74-8398-d826d9f86736 --- # reader_writer_lock Class @@ -158,7 +157,7 @@ explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock); *_Reader_writer_lock*
The `reader_writer_lock` object to acquire as a reader. -## reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor +## reader_writer_lock::scoped_lock_read::~scoped_lock_read Destructor Destroys a `scoped_lock_read` object and releases the lock supplied in its constructor. @@ -206,5 +205,5 @@ If there are writers waiting on the lock, the release of the lock will always go ## See also -[concurrency Namespace](concurrency-namespace.md)
+[concurrency Namespace](concurrency-namespace.md)\ [critical_section Class](critical-section-class.md) diff --git a/docs/standard-library/scoped-allocator-adaptor-class.md b/docs/standard-library/scoped-allocator-adaptor-class.md index 4694600e24..c937950a65 100644 --- a/docs/standard-library/scoped-allocator-adaptor-class.md +++ b/docs/standard-library/scoped-allocator-adaptor-class.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: scoped_allocator_adaptor Class" title: "scoped_allocator_adaptor Class" +description: "Learn more about: scoped_allocator_adaptor Class" ms.date: 06/20/2022 f1_keywords: ["scoped_allocator/std::scoped_allocator_adaptor", "scoped_allocator/std::scoped_allocator_adaptor::rebind Struct", "scoped_allocator/std::scoped_allocator_adaptor::allocate", "scoped_allocator/std::scoped_allocator_adaptor::construct", "scoped_allocator/std::scoped_allocator_adaptor::deallocate", "scoped_allocator/std::scoped_allocator_adaptor::destroy", "scoped_allocator/std::scoped_allocator_adaptor::inner_allocator", "scoped_allocator/std::scoped_allocator_adaptor::max_size", "scoped_allocator/std::scoped_allocator_adaptor::outer_allocator", "scoped_allocator/std::scoped_allocator_adaptor::select_on_container_copy_construction"] helpviewer_keywords: ["std::scoped_allocator_adaptor", "std::scoped_allocator_adaptor::allocate", "std::scoped_allocator_adaptor::construct", "std::scoped_allocator_adaptor::deallocate", "std::scoped_allocator_adaptor::destroy", "std::scoped_allocator_adaptor::inner_allocator", "std::scoped_allocator_adaptor::max_size", "std::scoped_allocator_adaptor::outer_allocator", "std::scoped_allocator_adaptor::select_on_container_copy_construction"] -ms.assetid: 0d9b06a1-9a4a-4669-9470-8805cae48e89 ms.custom: devdivchpfy22 --- @@ -240,14 +239,14 @@ size_type max_size(); `Outer_traits::max_size(outer_allocator())` -## scoped_allocator_adaptor::operator= +## scoped_allocator_adaptor::operator= ```cpp scoped_allocator_adaptor& operator=(const scoped_allocator_adaptor&) = default; scoped_allocator_adaptor& operator=(scoped_allocator_adaptor&&) = default; ``` -## scoped_allocator_adaptor::operator== +## scoped_allocator_adaptor::operator== ```cpp template @@ -255,7 +254,7 @@ bool operator==(const scoped_allocator_adaptor& a, const scoped_allocator_adaptor& b) noexcept; ``` -## scoped_allocator_adaptor::operator!= +## scoped_allocator_adaptor::operator!= ```cpp template @@ -263,7 +262,7 @@ bool operator!=(const scoped_allocator_adaptor& a, const scoped_allocator_adaptor& b) noexcept; ``` -## scoped_allocator_adaptor::outer_allocator +## scoped_allocator_adaptor::outer_allocator Retrieves a reference to the stored object of type `outer_allocator_type`. From ec32162f459d60c947f74434bebbb6deba352209 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:14:23 +0800 Subject: [PATCH 0374/1239] Include another fix --- docs/cppcx/platform-intptr-value-class.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/cppcx/platform-intptr-value-class.md b/docs/cppcx/platform-intptr-value-class.md index de08c207cf..b08b50209b 100644 --- a/docs/cppcx/platform-intptr-value-class.md +++ b/docs/cppcx/platform-intptr-value-class.md @@ -1,11 +1,10 @@ --- -description: "Learn more about: Platform::IntPtr value class" title: "Platform::IntPtr value class" +description: "Learn more about: Platform::IntPtr value class" ms.date: "12/30/2016" ms.topic: "reference" f1_keywords: ["VCCORLIB/PlatformIntPtr::IntPtr", "VCCORLIB/PlatformIntPtr::op_explicit Operator", "VCCORLIB/PlatformIntPtr::ToInt32"] helpviewer_keywords: ["Platform::IntPtr Struct"] -ms.assetid: 6c0326e8-edfd-4e53-a963-240b845dcde8 --- # Platform::IntPtr value class @@ -37,7 +36,7 @@ IntPtr has the following members: **Metadata:** platform.winmd -## IntPtr::IntPtr Constructor +## IntPtr::IntPtr Constructor Initializes a new instance of an IntPtr with the specified value. @@ -52,7 +51,7 @@ IntPtr( __int64 handle-or-pointer ); IntPtr( void* value ); IntPtr( int 32-b *value*
A 64-bit handle or pointer, or a pointer to a 64-bit value, or a 32-bit value that can be converted to a 64-bit value. -## IntPtr::op_explicit Operator +## IntPtr::op_explicit Operator Converts the specified parameter to an IntPtr or a pointer to an IntPtr value. @@ -77,7 +76,7 @@ An IntPtr. The first and second operators return an IntPtr. The third operator returns a pointer to the value represented by the current IntPtr. -## IntPtr::ToInt32 Method +## IntPtr::ToInt32 Method Converts the current IntPtr value to a 32-bit integer. From 36f308e917809c76d4010ecb7e24cf494dbde6f8 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Fri, 23 Aug 2024 11:51:29 -0700 Subject: [PATCH 0375/1239] Update std-specify-language-standard-version.md * _All_ c++20 Standard Library features have been available with `/std:c++20` since 17.2 and in 16.11 per https://devblogs.microsoft.com/cppblog/msvcs-stl-completes-stdc20/ , leaving 17.0 as a special case. * `/std:c++20` has always implied `/permissive-`, which fact we should mention here. * `/std:c++latest` has also implied `/permissive-` since we added `/std:c++20` but not in earlier releases. --- .../reference/std-specify-language-standard-version.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index e6044538be..6564cb0192 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -50,10 +50,12 @@ The **`/std:c++17`** option enables C++17 standard-specific features and behavio Depending on the MSVC compiler version or update level, C++17 features may not be fully implemented or fully conforming when you specify the **`/std:c++17`** option. For an overview of C++ language conformance in Visual C++ by release version, see [Microsoft C/C++ language conformance](../../overview/visual-cpp-language-conformance.md). **`/std:c++20`**\ -The **`/std:c++20`** option enables C++20 standard-specific features and behavior. Available starting in Visual Studio 2019 version 16.11, it enables the full set of C++20 features implemented by the MSVC compiler, except for `std::format`, the C++20 `` formatting extensions, and the range factories and range adaptors from ``. These features are still only available under **`/std:c++latest`**. +The **`/std:c++20`** option enables C++20 standard-specific features and behavior. Available starting in Visual Studio 2019 version 16.11, it enables the full set of C++20 features implemented by the MSVC compiler. Note that Visual Studio 2022 version 17.0 does not support `std::format`, the C++20 `` formatting extensions, and the range factories and range adaptors from `` under **`/std:c++20`** due to late-breaking changes in those features immediately after publication of the Standard. These features are available in Visual Studio 2022 version 17.0 under **`/std:c++latest`** in an in-progress form, but we recommend updating to a later version of Visual Studio 2022 in which they are stable (as in Visual Studio 2019 version 16.11) to avoid breaking changes. The **`/std:c++20`** option disables compiler and standard library support for features that are new or changed after C++20. It specifically disables post-C++20 changes in the C++ Standard and versions of the Working Draft. It doesn't disable retroactive defect updates of the C++ Standard. +The **`/std:c++20`** option enables the standard conformance mode provided by [**`/permissive-`**](./permissive-standards-conformance.md) unless explicitly overriden with **`/permissive`**. + **`/std:c++latest`**\ The **`/std:c++latest`** option enables all currently implemented compiler and standard library features proposed for the next draft standard, as well as some in-progress and experimental features. This option is available starting in Visual Studio 2015 Update 3. @@ -61,6 +63,8 @@ Depending on the MSVC compiler version or update level, C++17, C++20, or propose In versions of Visual Studio 2019 before version 16.11, **`/std:c++latest`** is required to enable all the compiler and standard library features of C++20. +Since Visual Studio 2019 version 16.11, the **`/std:c++latest`** option has enabled the standard conformance mode provided by [**`/permissive-`**](./permissive-standards-conformance.md) unless explicitly overriden with **`/permissive`**. + For a list of supported language and library features, see [What's New for C++ in Visual Studio](../../overview/what-s-new-for-visual-cpp-in-visual-studio.md). The **`/std:c++latest`** option doesn't enable features guarded by the **`/experimental`** switch, but may be required to enable them. From e0119df112a3594b54716cf25ca0d865613f0893 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Fri, 23 Aug 2024 12:21:17 -0700 Subject: [PATCH 0376/1239] c++latest has actually implied permissive- since 16.8 --- docs/build/reference/std-specify-language-standard-version.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index 6564cb0192..331502d45b 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -63,7 +63,7 @@ Depending on the MSVC compiler version or update level, C++17, C++20, or propose In versions of Visual Studio 2019 before version 16.11, **`/std:c++latest`** is required to enable all the compiler and standard library features of C++20. -Since Visual Studio 2019 version 16.11, the **`/std:c++latest`** option has enabled the standard conformance mode provided by [**`/permissive-`**](./permissive-standards-conformance.md) unless explicitly overriden with **`/permissive`**. +Since Visual Studio 2019 version 16.8, the **`/std:c++latest`** option has enabled the standard conformance mode provided by [**`/permissive-`**](./permissive-standards-conformance.md) unless explicitly overriden with **`/permissive`**. For a list of supported language and library features, see [What's New for C++ in Visual Studio](../../overview/what-s-new-for-visual-cpp-in-visual-studio.md). From 57a789341250b1d57075054d8256eb1821241061 Mon Sep 17 00:00:00 2001 From: Casey Carter Date: Fri, 23 Aug 2024 12:57:19 -0700 Subject: [PATCH 0377/1239] 17.0 is out of support ... so just remove my confusing mention of feature support under c++latest. --- docs/build/reference/std-specify-language-standard-version.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index 331502d45b..d2fa1a11cd 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -50,7 +50,7 @@ The **`/std:c++17`** option enables C++17 standard-specific features and behavio Depending on the MSVC compiler version or update level, C++17 features may not be fully implemented or fully conforming when you specify the **`/std:c++17`** option. For an overview of C++ language conformance in Visual C++ by release version, see [Microsoft C/C++ language conformance](../../overview/visual-cpp-language-conformance.md). **`/std:c++20`**\ -The **`/std:c++20`** option enables C++20 standard-specific features and behavior. Available starting in Visual Studio 2019 version 16.11, it enables the full set of C++20 features implemented by the MSVC compiler. Note that Visual Studio 2022 version 17.0 does not support `std::format`, the C++20 `` formatting extensions, and the range factories and range adaptors from `` under **`/std:c++20`** due to late-breaking changes in those features immediately after publication of the Standard. These features are available in Visual Studio 2022 version 17.0 under **`/std:c++latest`** in an in-progress form, but we recommend updating to a later version of Visual Studio 2022 in which they are stable (as in Visual Studio 2019 version 16.11) to avoid breaking changes. +The **`/std:c++20`** option enables C++20 standard-specific features and behavior. Available starting in Visual Studio 2019 version 16.11, it enables the full set of C++20 features implemented by the MSVC compiler. Note that Visual Studio 2022 version 17.0 does not support `std::format`, the C++20 `` formatting extensions, and the range factories and range adaptors from `` under **`/std:c++20`** due to late-breaking changes in those features immediately after publication of the Standard. The **`/std:c++20`** option disables compiler and standard library support for features that are new or changed after C++20. It specifically disables post-C++20 changes in the C++ Standard and versions of the Working Draft. It doesn't disable retroactive defect updates of the C++ Standard. From 51560e684146f517e3c8cde5af63a1e499cb782f Mon Sep 17 00:00:00 2001 From: Matt Bolitho Date: Mon, 2 Sep 2024 22:00:03 +0100 Subject: [PATCH 0378/1239] Adds missing ml64 /quiet flag --- docs/assembler/masm/ml-and-ml64-command-line-reference.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/assembler/masm/ml-and-ml64-command-line-reference.md b/docs/assembler/masm/ml-and-ml64-command-line-reference.md index b68003e48e..bab01853c0 100644 --- a/docs/assembler/masm/ml-and-ml64-command-line-reference.md +++ b/docs/assembler/masm/ml-and-ml64-command-line-reference.md @@ -3,7 +3,7 @@ title: "ML and ML64 command-line reference" description: "Reference guide to the Microsoft MASM ML and ML64 assembler command-line options." ms.date: 7/3/2023 f1_keywords: ["ML"] -helpviewer_keywords: ["/W* MASM compiler option", "/c MASM compiler option", "/EP MASM compiler option", "/Fe MASM compiler option", "/Zp MASM compiler option", "/AT MASM compiler option", "/Zm MASM compiler option", "/Sf MASM compiler option", "/Sp MASM compiler option", "/w MASM compiler option", "/Fl MASM compiler option", "/coff MASM compiler option", "/St MASM compiler option", "/Cx MASM compiler option", "/Sl MASM compiler option", "/Cu MASM compiler option", "MASM (Microsoft Macro Assembler), ML command-line reference", "/FPi MASM compiler option", "/Zf MASM compiler option", "ML environment variable", "/Fr MASM compiler option", "/help MASM compiler option", "/Sa MASM compiler option", "/Zd MASM compiler option", "/I MASM compiler option", "/? MASM compiler option", "/Bl MASM compiler option", "/Fm MASM compiler option", "/Fo MASM compiler option", "command-line reference [ML]", "/Sn MASM compiler option", "/Gd MASM compiler option", "/D* MASM compiler option", "environment variables, ML", "/Gc MASM compiler option", "/F* MASM compiler option", "/Sc MASM compiler option", "/H MASM compiler option", "/Zs MASM compiler option", "/omf MASM compiler option", "/Sg MASM compiler option", "/Cp MASM compiler option", "/Zi MASM compiler option", "/nologo MASM compiler option", "/Sx MASM compiler option", "/WX MASM compiler option", "/Ss MASM compiler option", "command line, reference [ML]", "/Ta MASM compiler option"] +helpviewer_keywords: ["/W* MASM compiler option", "/c MASM compiler option", "/EP MASM compiler option", "/Fe MASM compiler option", "/Zp MASM compiler option", "/AT MASM compiler option", "/Zm MASM compiler option", "/Sf MASM compiler option", "/Sp MASM compiler option", "/w MASM compiler option", "/Fl MASM compiler option", "/coff MASM compiler option", "/St MASM compiler option", "/Cx MASM compiler option", "/Sl MASM compiler option", "/Cu MASM compiler option", "MASM (Microsoft Macro Assembler), ML command-line reference", "/FPi MASM compiler option", "/Zf MASM compiler option", "ML environment variable", "/Fr MASM compiler option", "/help MASM compiler option", "/Sa MASM compiler option", "/Zd MASM compiler option", "/I MASM compiler option", "/? MASM compiler option", "/Bl MASM compiler option", "/Fm MASM compiler option", "/Fo MASM compiler option", "command-line reference [ML]", "/Sn MASM compiler option", "/Gd MASM compiler option", "/D* MASM compiler option", "environment variables, ML", "/Gc MASM compiler option", "/F* MASM compiler option", "/Sc MASM compiler option", "/H MASM compiler option", "/Zs MASM compiler option", "/omf MASM compiler option", "/quiet MASM compiler option", "/Sg MASM compiler option", "/Cp MASM compiler option", "/Zi MASM compiler option", "/nologo MASM compiler option", "/Sx MASM compiler option", "/WX MASM compiler option", "/Ss MASM compiler option", "command line, reference [ML]", "/Ta MASM compiler option"] --- # ML and ML64 command-line reference @@ -50,6 +50,7 @@ The options listed in the following table: | **`/I`** *`pathname`* | Sets path for include file. A maximum of 10 **`/I`** options is allowed. | | **`/nologo`** | Suppresses messages for successful assembly. | | **`/omf`** | Generates object module file format (OMF) type of object module. **`/omf`** implies **`/c`**. ML.exe doesn't support linking OMF objects.
Not available in ml64.exe. | +| **`/quiet`** | Suppresses 'Assembling' message. | | **`/Sa`** | Turns on listing of all available information. | | **`/safeseh`** | Marks the object file: either it contains no exception handlers, or it contains exception handlers that are all declared with [`.SAFESEH`](dot-safeseh.md).
Not available in ml64.exe. | | **`/Sf`** | Adds the first-pass listing to the listing file. | From 21a60b1df5cbcade524f6d1db9ae6685c5156271 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 6 Sep 2024 10:42:14 -0700 Subject: [PATCH 0379/1239] change version info --- docs/sanitizers/asan.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/sanitizers/asan.md b/docs/sanitizers/asan.md index ee0ead587b..cf64b80ba2 100644 --- a/docs/sanitizers/asan.md +++ b/docs/sanitizers/asan.md @@ -1,7 +1,7 @@ --- title: "AddressSanitizer" description: "Top-level description of the AddressSanitizer feature for Microsoft C/C++." -ms.date: 06/13/2023 +ms.date: 09/06/2024 f1_keywords: ["AddressSanitizer"] helpviewer_keywords: ["ASan", "AddressSanitizer", "Address Sanitizer", "compiling for AddressSanitizer"] --- @@ -77,10 +77,10 @@ Microsoft recommends you use AddressSanitizer in these three standard workflows: - [Azure OneFuzz](https://www.microsoft.com/security/blog/2020/09/15/microsoft-onefuzz-framework-open-source-developer-tool-fix-bugs/) - Local Machine -This article covers the information you require to enable the three workflows listed previously. The information is specific to the **platform-dependent** Windows 10 implementation of AddressSanitizer. This documentation supplements the excellent documentation from [Google, Apple, and GCC](#external-docs) already published. +This article covers the information you require to enable the three workflows listed previously. The information is specific to the **platform-dependent** Windows 10 (or later) implementation of AddressSanitizer. This documentation supplements the excellent documentation from [Google, Apple, and GCC](#external-docs) already published. > [!NOTE] -> Current support is limited to x86 and x64 on Windows 10. [Send us feedback](https://aka.ms/vsfeedback/browsecpp) on what you'd like to see in future releases. Your feedback helps us prioritize other sanitizers for the future, such as **`/fsanitize=thread`**, **`/fsanitize=leak`**, **`/fsanitize=memory`**, **`/fsanitize=undefined`**, or **`/fsanitize=hwaddress`**. You can [report bugs here](https://aka.ms/feedback/report?space=62) if you run into issues. +> Current support is limited to x86 and x64 on Windows 10 and later. [Send us feedback](https://aka.ms/vsfeedback/browsecpp) on what you'd like to see in future releases. Your feedback helps us prioritize other sanitizers for the future, such as **`/fsanitize=thread`**, **`/fsanitize=leak`**, **`/fsanitize=memory`**, **`/fsanitize=undefined`**, or **`/fsanitize=hwaddress`**. You can [report bugs here](https://aka.ms/feedback/report?space=62) if you run into issues. ## Use AddressSanitizer from a developer command prompt @@ -286,7 +286,7 @@ Extensive documentation already exists for these language and platform-dependent - [Apple](https://developer.apple.com/documentation/xcode/diagnosing_memory_thread_and_crash_issues_early) - [GCC](https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html) -This seminal paper on the [AddressSanitizer](https://www.usenix.org/system/files/conference/atc12/atc12-final39.pdf) describes the implementation. +This seminal paper on the [AddressSanitizer (external)](https://www.usenix.org/system/files/conference/atc12/atc12-final39.pdf) describes the implementation. ## See also From c0d3a5512aa351c8025160408842d71039200f1d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 6 Sep 2024 10:45:03 -0700 Subject: [PATCH 0380/1239] consistency --- docs/sanitizers/asan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sanitizers/asan.md b/docs/sanitizers/asan.md index cf64b80ba2..bd4c951e78 100644 --- a/docs/sanitizers/asan.md +++ b/docs/sanitizers/asan.md @@ -77,7 +77,7 @@ Microsoft recommends you use AddressSanitizer in these three standard workflows: - [Azure OneFuzz](https://www.microsoft.com/security/blog/2020/09/15/microsoft-onefuzz-framework-open-source-developer-tool-fix-bugs/) - Local Machine -This article covers the information you require to enable the three workflows listed previously. The information is specific to the **platform-dependent** Windows 10 (or later) implementation of AddressSanitizer. This documentation supplements the excellent documentation from [Google, Apple, and GCC](#external-docs) already published. +This article covers the information you require to enable the three workflows listed previously. The information is specific to the **platform-dependent** Windows 10 (and later) implementation of AddressSanitizer. This documentation supplements the excellent documentation from [Google, Apple, and GCC](#external-docs) already published. > [!NOTE] > Current support is limited to x86 and x64 on Windows 10 and later. [Send us feedback](https://aka.ms/vsfeedback/browsecpp) on what you'd like to see in future releases. Your feedback helps us prioritize other sanitizers for the future, such as **`/fsanitize=thread`**, **`/fsanitize=leak`**, **`/fsanitize=memory`**, **`/fsanitize=undefined`**, or **`/fsanitize=hwaddress`**. You can [report bugs here](https://aka.ms/feedback/report?space=62) if you run into issues. From e5166189847824699ccfb0a76f137fd808da2a0d Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 6 Sep 2024 10:46:24 -0700 Subject: [PATCH 0381/1239] small edit --- docs/sanitizers/asan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sanitizers/asan.md b/docs/sanitizers/asan.md index bd4c951e78..3de64921d4 100644 --- a/docs/sanitizers/asan.md +++ b/docs/sanitizers/asan.md @@ -80,7 +80,7 @@ Microsoft recommends you use AddressSanitizer in these three standard workflows: This article covers the information you require to enable the three workflows listed previously. The information is specific to the **platform-dependent** Windows 10 (and later) implementation of AddressSanitizer. This documentation supplements the excellent documentation from [Google, Apple, and GCC](#external-docs) already published. > [!NOTE] -> Current support is limited to x86 and x64 on Windows 10 and later. [Send us feedback](https://aka.ms/vsfeedback/browsecpp) on what you'd like to see in future releases. Your feedback helps us prioritize other sanitizers for the future, such as **`/fsanitize=thread`**, **`/fsanitize=leak`**, **`/fsanitize=memory`**, **`/fsanitize=undefined`**, or **`/fsanitize=hwaddress`**. You can [report bugs here](https://aka.ms/feedback/report?space=62) if you run into issues. +> Support is limited to x86 and x64 on Windows 10 and later. [Send us feedback](https://aka.ms/vsfeedback/browsecpp) on what you'd like to see in future releases. Your feedback helps us prioritize other sanitizers for the future, such as **`/fsanitize=thread`**, **`/fsanitize=leak`**, **`/fsanitize=memory`**, **`/fsanitize=undefined`**, or **`/fsanitize=hwaddress`**. You can [report bugs here](https://aka.ms/feedback/report?space=62) if you run into issues. ## Use AddressSanitizer from a developer command prompt From 477b181478ec26bae9be8d14d954413b9e568024 Mon Sep 17 00:00:00 2001 From: Peter Constable Date: Fri, 6 Sep 2024 22:39:37 -0700 Subject: [PATCH 0382/1239] Update tutorial-console-cpp.md In the _Fix the "divide by zero" error_ section, the image showed a different string set to the console than what was in the code that was shown. This change makes the code match the image. --- docs/get-started/tutorial-console-cpp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/get-started/tutorial-console-cpp.md b/docs/get-started/tutorial-console-cpp.md index d0322a9d41..d1fcb9204f 100644 --- a/docs/get-started/tutorial-console-cpp.md +++ b/docs/get-started/tutorial-console-cpp.md @@ -360,7 +360,7 @@ Let's handle division by zero more gracefully so that it's easier for the user t cin >> x >> oper >> y; if (oper == '/' && y == 0) { - cout << "Attempted to divide by zero!" << endl; + cout << "Math error: Attempted to divide by zero!" << endl; continue; } else From 84e1655f6d34b725959c8dbe15ee14f1d7e9c53e Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Sun, 8 Sep 2024 17:59:57 +0800 Subject: [PATCH 0383/1239] Add missing space before links --- docs/c-runtime-library/reference/calloc-dbg.md | 5 ++--- docs/cppcx/collections-c-cx.md | 9 ++++----- docs/cppcx/platform-object-class.md | 9 ++++----- docs/mfc/mfc-activex-controls-using-fonts.md | 9 ++++----- docs/mfc/tn014-custom-controls.md | 7 +++---- 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/docs/c-runtime-library/reference/calloc-dbg.md b/docs/c-runtime-library/reference/calloc-dbg.md index 0c3df65724..bde434d3d8 100644 --- a/docs/c-runtime-library/reference/calloc-dbg.md +++ b/docs/c-runtime-library/reference/calloc-dbg.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _calloc_dbg" title: "_calloc_dbg" +description: "Learn more about: _calloc_dbg" ms.date: "11/04/2016" api_name: ["_calloc_dbg"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_calloc_dbg", "calloc_dbg"] helpviewer_keywords: ["_calloc_dbg function", "calloc_dbg function"] -ms.assetid: 7f62c42b-eb9f-4de5-87d0-df57036c87de --- # `_calloc_dbg` @@ -37,7 +36,7 @@ Requested size of each memory block (bytes). *`blockType`*\ Requested type of memory block: `_CLIENT_BLOCK` or `_NORMAL_BLOCK`. -For information about the allocation block types and how they're used, see[Types of blocks on the debug heap](../crt-debug-heap-details.md#types-of-blocks-on-the-debug-heap). +For information about the allocation block types and how they're used, see [Types of blocks on the debug heap](../crt-debug-heap-details.md#types-of-blocks-on-the-debug-heap). *`filename`*\ Pointer to name of the source file that requested allocation operation or `NULL`. diff --git a/docs/cppcx/collections-c-cx.md b/docs/cppcx/collections-c-cx.md index cd7de0aa56..9785f9056e 100644 --- a/docs/cppcx/collections-c-cx.md +++ b/docs/cppcx/collections-c-cx.md @@ -1,8 +1,7 @@ --- -description: "Learn more about: Collections (C++/CX)" title: "Collections (C++/CX)" +description: "Learn more about: Collections (C++/CX)" ms.date: "11/19/2018" -ms.assetid: 914da30b-aac5-4cd7-9da3-a5ac08cdd72c --- # Collections (C++/CX) @@ -16,7 +15,7 @@ The Windows Runtime defines the interfaces for collections and related types, an - The [Platform::Collections::Map class](../cppcx/platform-collections-map-class.md) resembles the [std::map class](../standard-library/map-class.md). -- [Platform::Collections::VectorView class](../cppcx/platform-collections-vectorview-class.md) and[Platform::Collections::MapView class](../cppcx/platform-collections-mapview-class.md) are read-only versions of `Vector` and `Map`. +- [Platform::Collections::VectorView class](../cppcx/platform-collections-vectorview-class.md) and [Platform::Collections::MapView class](../cppcx/platform-collections-mapview-class.md) are read-only versions of `Vector` and `Map`. - Iterators are defined in the [Platform::Collections Namespace](../cppcx/platform-collections-namespace.md). These iterators satisfy the requirements for STL iterators and enable the use of [std::find](../standard-library/algorithm-functions.md#find), [std::count_if](../standard-library/algorithm-functions.md#count_if), and other STL algorithms on any [Windows::Foundation::Collections](/uwp/api/windows.foundation.collections) interface type or [Platform::Collections](../cppcx/platform-collections-namespace.md) concrete type. For example, this means that you can iterate a collection in a Windows Runtime component that's created in C# and apply an STL algorithm to it. @@ -140,6 +139,6 @@ The [Windows::Foundation::Collections::VectorChangedEventHandler](/uwp/api/windo ## See also -[Type System](../cppcx/type-system-c-cx.md)
-[C++/CX Language Reference](../cppcx/visual-c-language-reference-c-cx.md)
+[Type System](../cppcx/type-system-c-cx.md)\ +[C++/CX Language Reference](../cppcx/visual-c-language-reference-c-cx.md)\ [Namespaces Reference](../cppcx/namespaces-reference-c-cx.md) diff --git a/docs/cppcx/platform-object-class.md b/docs/cppcx/platform-object-class.md index eb270ad593..3964399163 100644 --- a/docs/cppcx/platform-object-class.md +++ b/docs/cppcx/platform-object-class.md @@ -1,11 +1,10 @@ --- -description: "Learn more about: Platform::Object Class" title: "Platform::Object Class" +description: "Learn more about: Platform::Object Class" ms.date: "12/30/2016" ms.topic: "reference" f1_keywords: ["VCCORLIB/Platform::Object::Object", "VCCORLIB/Platform::Object::Equals", "VCCORLIB/Platform::Object::GetHashCode", "VCCORLIB/Platform::Object::ReferenceEquals", "VCCORLIB/Platform::ToString", "VCCORLIB/Platform::GetType"] helpviewer_keywords: ["Object class"] -ms.assetid: 709e84a8-0bff-471b-bc14-63e424080b5a --- # Platform::Object Class @@ -104,7 +103,7 @@ A [Platform::Type](../cppcx/platform-type-class.md) object that describes the ru The static [Type::GetTypeCode](../cppcx/platform-type-class.md#gettypecode) can be used to get a [Platform::TypeCode Enumeration](../cppcx/platform-typecode-enumeration.md) value that represents the current type. This is mostly useful for built-in types. The type code for any ref class besides [Platform::String](../cppcx/platform-string-class.md) is Object (1). -The [Windows::UI::Xaml::Interop::TypeName](/uwp/api/windows.ui.xaml.interop.typename) class is used in the Windows APIs as a language-independent way of passing type information between Windows components and apps. The T[Platform::Type Class](../cppcx/platform-type-class.md) has operators for converting between `Type` and `TypeName`. +The [Windows::UI::Xaml::Interop::TypeName](/uwp/api/windows.ui.xaml.interop.typename) class is used in the Windows APIs as a language-independent way of passing type information between Windows components and apps. The [Platform::Type Class](../cppcx/platform-type-class.md) has operators for converting between `Type` and `TypeName`. Use the [typeid](../extensions/typeid-cpp-component-extensions.md) operator to return a `Platform::Type` object for a class name, for example when navigating between XAML pages: @@ -173,6 +172,6 @@ public: ## See also -[Platform Namespace](platform-namespace-c-cx.md)
-[Platform::Type Class](platform-type-class.md)
+[Platform Namespace](platform-namespace-c-cx.md)\ +[Platform::Type Class](platform-type-class.md)\ [Type System](type-system-c-cx.md) diff --git a/docs/mfc/mfc-activex-controls-using-fonts.md b/docs/mfc/mfc-activex-controls-using-fonts.md index d1db67fe5c..dc16f5d452 100644 --- a/docs/mfc/mfc-activex-controls-using-fonts.md +++ b/docs/mfc/mfc-activex-controls-using-fonts.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: MFC ActiveX Controls: Using Fonts" title: "MFC ActiveX Controls: Using Fonts" +description: "Learn more about: MFC ActiveX Controls: Using Fonts" ms.date: "11/19/2018" f1_keywords: ["OnFontChanged", "HeadingFont", "InternalFont"] helpviewer_keywords: ["notifications [MFC], MFC ActiveX controls fonts", "OnDraw method, MFC ActiveX controls", "InternalFont method [MFC]", "SetFont method [MFC]", "OnFontChanged method [MFC]", "IPropertyNotifySink class [MFC]", "MFC ActiveX controls [MFC], fonts", "Stock Font property [MFC]", "HeadingFont property [MFC]", "GetFont method [MFC]", "SelectStockFont method [MFC]", "fonts [MFC], ActiveX controls"] -ms.assetid: 7c51d602-3f5a-481d-84d1-a5d8a3a71761 --- # MFC ActiveX Controls: Using Fonts @@ -112,7 +111,7 @@ To implement a custom Font property, you use the Add Property Wizard to add the 1. Click **Finish**. -The Add Property Wizard creates the code to add the `HeadingFont` custom property to the `CSampleCtrl` class and the SAMPLE.IDL file. Because `HeadingFont` is a Get/Set property type, the Add Property Wizard modifies the `CSampleCtrl` class's dispatch map to include a DISP_PROPERTY_EX_ID[DISP_PROPERTY_EX](reference/dispatch-maps.md#disp_property_ex) macro entry: +The Add Property Wizard creates the code to add the `HeadingFont` custom property to the `CSampleCtrl` class and the SAMPLE.IDL file. Because `HeadingFont` is a Get/Set property type, the Add Property Wizard modifies the `CSampleCtrl` class's dispatch map to include a DISP_PROPERTY_EX_ID [DISP_PROPERTY_EX](reference/dispatch-maps.md#disp_property_ex) macro entry: [!code-cpp[NVC_MFC_AxFont#5](codesnippet/cpp/mfc-activex-controls-using-fonts_5.cpp)] @@ -215,6 +214,6 @@ After these changes have been made to your project, rebuild the project and use ## See also -[MFC ActiveX Controls](mfc-activex-controls.md)
-[MFC ActiveX Controls: Using Pictures in an ActiveX Control](mfc-activex-controls-using-pictures-in-an-activex-control.md)
+[MFC ActiveX Controls](mfc-activex-controls.md)\ +[MFC ActiveX Controls: Using Pictures in an ActiveX Control](mfc-activex-controls-using-pictures-in-an-activex-control.md)\ [MFC ActiveX Controls: Using Stock Property Pages](mfc-activex-controls-using-stock-property-pages.md) diff --git a/docs/mfc/tn014-custom-controls.md b/docs/mfc/tn014-custom-controls.md index 6cfdbcff96..debff5eb3d 100644 --- a/docs/mfc/tn014-custom-controls.md +++ b/docs/mfc/tn014-custom-controls.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: TN014: Custom Controls" title: "TN014: Custom Controls" +description: "Learn more about: TN014: Custom Controls" ms.date: "06/28/2018" f1_keywords: ["vc.controls"] helpviewer_keywords: ["TN014", "custom controls [MFC]"] -ms.assetid: 1917a498-f643-457c-b570-9a0af7dbf7bb --- # TN014: Custom Controls @@ -118,7 +117,7 @@ There are three common ways these are related: - `CWnd` is attached to an existing `HWND` and you can modify the behavior in a derived class. This is called dynamic subclassing because we are changing the behavior, and therefore the class, of a Windows object at run time. -You can achieve dynamic subclassing by using the methods [CWnd::SubclassWindow](../mfc/reference/cwnd-class.md#subclasswindow) and[CWnd::SubclassDlgItem](../mfc/reference/cwnd-class.md#subclassdlgitem). +You can achieve dynamic subclassing by using the methods [CWnd::SubclassWindow](../mfc/reference/cwnd-class.md#subclasswindow) and [CWnd::SubclassDlgItem](../mfc/reference/cwnd-class.md#subclassdlgitem). Both routines attach a `CWnd` object to an existing `HWND`. `SubclassWindow` takes the `HWND` directly. `SubclassDlgItem` is a helper function that takes a control ID and the parent window. `SubclassDlgItem` is designed for attaching C++ objects to dialog controls created from a dialog template. @@ -126,5 +125,5 @@ See the [CTRLTEST](../overview/visual-cpp-samples.md) example for several exampl ## See also -[Technical Notes by Number](../mfc/technical-notes-by-number.md)
+[Technical Notes by Number](../mfc/technical-notes-by-number.md)\ [Technical Notes by Category](../mfc/technical-notes-by-category.md) From 5ad66e6579dd51a248f3834ed3d6839afd841439 Mon Sep 17 00:00:00 2001 From: mcgov Date: Mon, 9 Sep 2024 11:46:06 -0700 Subject: [PATCH 0384/1239] asan-shadow-bytes.md: Update link descriptions for additional resources to be more specific. Update link descriptions for additional resources to be more specific about their content. --- docs/sanitizers/asan-shadow-bytes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sanitizers/asan-shadow-bytes.md b/docs/sanitizers/asan-shadow-bytes.md index 6d53b91270..9b6b747e24 100644 --- a/docs/sanitizers/asan-shadow-bytes.md +++ b/docs/sanitizers/asan-shadow-bytes.md @@ -7,7 +7,7 @@ helpviewer_keywords: ["Shadow bytes", "AddressSanitizer shadow bytes","Address S # AddressSanitizer shadow bytes -We briefly summarize the concept of shadow bytes and how they can be used by the runtime implementation of [`/fsanitize=address`](../build/reference/fsanitize.md). For further details, we refer you to the [seminal paper](https://www.usenix.org/system/files/conference/atc12/atc12-final39.pdf) and the [AddressSanitizer algorithm](https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm). +We briefly summarize the concept of shadow bytes and how they can be used by the runtime implementation of [`/fsanitize=address`](../build/reference/fsanitize.md). For further details, we refer you to the initial research [AddressSanitizer - Serebryany, et al](https://www.usenix.org/system/files/conference/atc12/atc12-final39.pdf) and the [current AddressSanitizer algorithm documentation](https://github.com/google/sanitizers/wiki/AddressSanitizerAlgorithm). ## Core concept From 78680a54e8cc40dd72e829012c98f0ecfcc58aa3 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 9 Sep 2024 16:16:08 -0700 Subject: [PATCH 0385/1239] mitigate SFI info --- docs/build/media/attach-to-process.png | Bin 37546 -> 35990 bytes .../media/cppmdd-options-ios-new.png | Bin 45277 -> 44314 bytes .../linux/media/connection-manager-vs2019.png | Bin 25228 -> 29259 bytes .../media/linux-remote-debug-machine.png | Bin 41158 -> 48284 bytes .../media/remote-build-machine-vs2019.png | Bin 20634 -> 24261 bytes docs/linux/media/settings_general.png | Bin 118516 -> 117832 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/build/media/attach-to-process.png b/docs/build/media/attach-to-process.png index ab965b854731785983ce0696c9353b62bb1c55c4..bf162d82c00e9c8651347c6a0f5782abf823df77 100644 GIT binary patch literal 35990 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

x1XhdbDRJ*lHq74fJv1WE3S+azQ% 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 Date: Mon, 1 Apr 2024 17:46:35 -0700 Subject: [PATCH 0012/1239] fix links --- docs/sanitizers/asan-runtime.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/sanitizers/asan-runtime.md b/docs/sanitizers/asan-runtime.md index c6d5b8f7f0..b6cf5535c5 100644 --- a/docs/sanitizers/asan-runtime.md +++ b/docs/sanitizers/asan-runtime.md @@ -22,26 +22,26 @@ The list of runtime libraries for linking to the AddressSanitizer runtime as of The following diagram shows how the runtime library is linked given the `/MT`, `/MTd`, `/MD`, and `/MDd` compiler options: -:::image type="complex" source="runtime-configurations.png" alt-text="Diagram of how the runtime libraries are linked for various compiler options." -The image shows three scenarios for linking the runtime library. The first is /MT or /MTd. My_exe.exe and my_dll.dll are both shown with their own copies of the statically linked VCRuntime, Universal CRT, and STL runtimes. The scenarios show /MD in which both my_exe.exe and my_dll.dll share vcruntime140.dll, ucrtbase.dll, and msvcp140.dll. The last scenario shows /MDd in which both my_exe.exe and my_dll.dll share the debug versions of the runtimes: vcruntime140d.dll, ucrtbased.dll, and msvcp140d.dll +:::image type="complex" source="media/runtime-configurations.png" alt-text="Diagram of how the runtime libraries are linked for various compiler options." +The image shows three scenarios for linking the runtime library. The first is /MT or /MTd. My_exe.exe and my_dll.dll are both shown with their own copies of the statically linked VCRuntime, Universal CRT, and C++ runtimes. The scenarios show /MD in which both my_exe.exe and my_dll.dll share vcruntime140.dll, ucrtbase.dll, and msvcp140.dll. The last scenario shows /MDd in which both my_exe.exe and my_dll.dll share the debug versions of the runtimes: vcruntime140d.dll, ucrtbased.dll, and msvcp140d.dll :::image-end::: When compiling with `cl /fsanitize=address`, the compiler generates instructions to manage and check the [shadow bytes](./asan-shadow-bytes.md). Your program uses this instrumentation to check memory accesses on the stack, in the heap, or in the global scope. The compiler also produces metadata describing stack and global variables. This metadata enables the runtime to generate precise error diagnostics: function names, lines, and columns in your source code. Combined, the compiler checks and runtime libraries can precisely diagnose many types of [memory safety bugs](./asan-error-examples.md) if they're encountered at run-time. The following diagram shows how the ASan library is linked given various compiler options: -:::image type="complex" source="asan-one-dll.png" alt-text="Diagram of how the ASan runtime dll is linked." -The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). In all cases, my_exe.exe links and it's associates my_dll.dll link to a single instance of clang-rt.asan-dynamix-x86_64.dll. +:::image type="complex" source="media/asan-one-dll.png" alt-text="Diagram of how the ASan runtime dll is linked." +The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). In all cases, my_exe.exe links and its associates my_dll.dll link to a single instance of clang-rt.asan-dynamix-x86_64.dll. :::image-end::: ### Previous versions -Prior to Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. Also, dynamically linked projects (**`/MD`** or **`/MDd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). +Before Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. Also, dynamically linked projects (**`/MD`** or **`/MDd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). -The following diagram shows how the ASan library was linked prior to VS 2022 17.7 preview 3 for various compiler options: +The following diagram shows how the ASan library was linked before Visual Studio 2022 17.7 preview 3, for various compiler options: -:::image type="complex" source="asan-library-linking-previous-versions" alt-text="Diagram of how the ASan runtime dll was linked prior to VS 2022 preview 3." -The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll, links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. +:::image type="complex" source="media/asan-library-linking-previous-versions" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 preview 3." +The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. :::image-end::: | CRT option | DLL or EXE | DEBUG? | AddressSanitizer runtime binaries libraries | Address runtime binary (.dll) From e79c4d03a50f2a097c630c7937f1eff1f109c9d3 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Mon, 1 Apr 2024 18:00:36 -0700 Subject: [PATCH 0013/1239] fix link --- docs/sanitizers/asan-runtime.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/sanitizers/asan-runtime.md b/docs/sanitizers/asan-runtime.md index b6cf5535c5..16cb3a0384 100644 --- a/docs/sanitizers/asan-runtime.md +++ b/docs/sanitizers/asan-runtime.md @@ -20,7 +20,7 @@ The list of runtime libraries for linking to the AddressSanitizer runtime as of | `/MT` or `/MTd` | *`clang_rt.asan_dynamic-{arch}`*, *`clang_rt.asan_static_runtime_thunk-{arch}`* | *`clang_rt.asan_dynamic-{arch}`* | `/MD` or `/MDd` | *`clang_rt.asan_dynamic-{arch}`*, *`clang_rt.asan_dynamic_runtime_thunk-{arch}`* | *`clang_rt.asan_dynamic-{arch}`* -The following diagram shows how the runtime library is linked given the `/MT`, `/MTd`, `/MD`, and `/MDd` compiler options: +The following diagram shows how the runtime libraries are linked for the `/MT`, `/MTd`, `/MD`, and `/MDd` compiler options: :::image type="complex" source="media/runtime-configurations.png" alt-text="Diagram of how the runtime libraries are linked for various compiler options." The image shows three scenarios for linking the runtime library. The first is /MT or /MTd. My_exe.exe and my_dll.dll are both shown with their own copies of the statically linked VCRuntime, Universal CRT, and C++ runtimes. The scenarios show /MD in which both my_exe.exe and my_dll.dll share vcruntime140.dll, ucrtbase.dll, and msvcp140.dll. The last scenario shows /MDd in which both my_exe.exe and my_dll.dll share the debug versions of the runtimes: vcruntime140d.dll, ucrtbased.dll, and msvcp140d.dll @@ -28,7 +28,7 @@ The image shows three scenarios for linking the runtime library. The first is /M When compiling with `cl /fsanitize=address`, the compiler generates instructions to manage and check the [shadow bytes](./asan-shadow-bytes.md). Your program uses this instrumentation to check memory accesses on the stack, in the heap, or in the global scope. The compiler also produces metadata describing stack and global variables. This metadata enables the runtime to generate precise error diagnostics: function names, lines, and columns in your source code. Combined, the compiler checks and runtime libraries can precisely diagnose many types of [memory safety bugs](./asan-error-examples.md) if they're encountered at run-time. -The following diagram shows how the ASan library is linked given various compiler options: +The following diagram shows how the ASan library is linked for various compiler options: :::image type="complex" source="media/asan-one-dll.png" alt-text="Diagram of how the ASan runtime dll is linked." The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). In all cases, my_exe.exe links and its associates my_dll.dll link to a single instance of clang-rt.asan-dynamix-x86_64.dll. @@ -40,7 +40,7 @@ Before Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) The following diagram shows how the ASan library was linked before Visual Studio 2022 17.7 preview 3, for various compiler options: -:::image type="complex" source="media/asan-library-linking-previous-versions" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 preview 3." +:::image type="complex" source="media/asan-library-linking-previous-versions.png" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 preview 3." The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. :::image-end::: From c457cc64726c944ef33f2057a5d6de166ef3a1d7 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 2 Apr 2024 10:35:30 -0700 Subject: [PATCH 0014/1239] reorder --- docs/sanitizers/asan-runtime.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/sanitizers/asan-runtime.md b/docs/sanitizers/asan-runtime.md index 16cb3a0384..0b97b9825b 100644 --- a/docs/sanitizers/asan-runtime.md +++ b/docs/sanitizers/asan-runtime.md @@ -9,7 +9,9 @@ helpviewer_keywords: ["AddressSanitizer runtime", "Address Sanitizer runtime", " The AddressSanitizer runtime library intercepts common memory allocation functions and operations to enable inspection of memory accesses. There are several different runtime libraries that support the various types of executables the compiler may generate. The compiler and linker automatically link the appropriate runtime libraries, as long as you pass the [`/fsanitize=address`](../build/reference/fsanitize.md) option at compile time. You can override the default behavior by using the **`/NODEFAULTLIB`** option at link time. For more information, see the section on [linking](./asan-building.md#linker) in the [AddressSanitizer language, build, and debugging reference](./asan-building.md). -The list of runtime libraries for linking to the AddressSanitizer runtime as of Visual Studio 17.7 Preview 3, follows. For more information about the `/MT` (statically link the runtime) and `/MD` (dynamically link the redist at runtime) options, see [/MD, /MT, /LD (Use Run-Time Library)](../build/reference/md-mt-ld-use-run-time-library.md). +When compiling with `cl /fsanitize=address`, the compiler generates instructions to manage and check [shadow bytes](./asan-shadow-bytes.md). Your program uses this instrumentation to check memory accesses on the stack, in the heap, or in the global scope. The compiler also produces metadata describing stack and global variables. This metadata enables the runtime to generate precise error diagnostics: function names, lines, and columns in your source code. Combined, the compiler checks and runtime libraries can precisely diagnose many types of [memory safety bugs](./asan-error-examples.md) if they're encountered at run-time. + +The list of runtime libraries for linking to the AddressSanitizer runtime, as of Visual Studio 17.7 Preview 3, follows. For more information about the `/MT` (statically link the runtime) and `/MD` (dynamically link the redist at runtime) options, see [/MD, /MT, /LD (Use Run-Time Library)](../build/reference/md-mt-ld-use-run-time-library.md). > [!NOTE] > In the following table, *`{arch}`* is either *`i386`* or *`x86_64`*. @@ -20,14 +22,12 @@ The list of runtime libraries for linking to the AddressSanitizer runtime as of | `/MT` or `/MTd` | *`clang_rt.asan_dynamic-{arch}`*, *`clang_rt.asan_static_runtime_thunk-{arch}`* | *`clang_rt.asan_dynamic-{arch}`* | `/MD` or `/MDd` | *`clang_rt.asan_dynamic-{arch}`*, *`clang_rt.asan_dynamic_runtime_thunk-{arch}`* | *`clang_rt.asan_dynamic-{arch}`* -The following diagram shows how the runtime libraries are linked for the `/MT`, `/MTd`, `/MD`, and `/MDd` compiler options: +The following diagram shows how the language runtime libraries are linked for the `/MT`, `/MTd`, `/MD`, and `/MDd` compiler options: :::image type="complex" source="media/runtime-configurations.png" alt-text="Diagram of how the runtime libraries are linked for various compiler options." The image shows three scenarios for linking the runtime library. The first is /MT or /MTd. My_exe.exe and my_dll.dll are both shown with their own copies of the statically linked VCRuntime, Universal CRT, and C++ runtimes. The scenarios show /MD in which both my_exe.exe and my_dll.dll share vcruntime140.dll, ucrtbase.dll, and msvcp140.dll. The last scenario shows /MDd in which both my_exe.exe and my_dll.dll share the debug versions of the runtimes: vcruntime140d.dll, ucrtbased.dll, and msvcp140d.dll :::image-end::: -When compiling with `cl /fsanitize=address`, the compiler generates instructions to manage and check the [shadow bytes](./asan-shadow-bytes.md). Your program uses this instrumentation to check memory accesses on the stack, in the heap, or in the global scope. The compiler also produces metadata describing stack and global variables. This metadata enables the runtime to generate precise error diagnostics: function names, lines, and columns in your source code. Combined, the compiler checks and runtime libraries can precisely diagnose many types of [memory safety bugs](./asan-error-examples.md) if they're encountered at run-time. - The following diagram shows how the ASan library is linked for various compiler options: :::image type="complex" source="media/asan-one-dll.png" alt-text="Diagram of how the ASan runtime dll is linked." @@ -38,11 +38,7 @@ The image shows four scenarios for linking the ASan runtime library. The scenari Before Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. Also, dynamically linked projects (**`/MD`** or **`/MDd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). -The following diagram shows how the ASan library was linked before Visual Studio 2022 17.7 preview 3, for various compiler options: - -:::image type="complex" source="media/asan-library-linking-previous-versions.png" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 preview 3." -The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. -:::image-end::: +The following table describes the previous behavior of the AddressSanitizer runtime library linking, before Visual Studio 17.7 Preview 3: | CRT option | DLL or EXE | DEBUG? | AddressSanitizer runtime binaries libraries | Address runtime binary (.dll) |--|--|--|--|--| @@ -53,6 +49,12 @@ The image shows four scenarios for linking the ASan runtime library. The scenari | `/MT` | DLL | Yes | *`clang_rt.asan_dbg_dll_thunk-{arch}`* | None | `/MD` | Either | Yes | *`clang_rt.asan_dbg_dynamic-{arch}`*, *`clang_rt.asan_dbg_dynamic_runtime_thunk-{arch}`* | *`clang_rt.asan_dbg_dynamic-{arch}`* +The following diagram shows how the ASan library was linked for various compiler options before Visual Studio 2022 17.7 preview 3: + +:::image type="complex" source="media/asan-library-linking-previous-versions.png" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 preview 3." +The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. +:::image-end::: + ## Function interception The AddressSanitizer achieves function interception through many hotpatching techniques. These techniques are [best documented within the source code itself](https://github.com/llvm/llvm-project/blob/1a2eaebc09c6a200f93b8beb37130c8b8aab3934/compiler-rt/lib/interception/interception_win.cpp#L11). From 8d9c3be3e662f64dece338f087a3818b595ec91b Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 2 Apr 2024 10:53:47 -0700 Subject: [PATCH 0015/1239] fix table heading --- docs/sanitizers/asan-runtime.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/sanitizers/asan-runtime.md b/docs/sanitizers/asan-runtime.md index 0b97b9825b..00b08550fd 100644 --- a/docs/sanitizers/asan-runtime.md +++ b/docs/sanitizers/asan-runtime.md @@ -36,11 +36,13 @@ The image shows four scenarios for linking the ASan runtime library. The scenari ### Previous versions -Before Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. Also, dynamically linked projects (**`/MD`** or **`/MDd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). +Before Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. + +Dynamically linked projects (**`/MD`** or **`/MDd`**) used different libraries and DLLs depending on whether the project was configured for debug or release. For more information about these changes and their motivations, see [MSVC Address Sanitizer – One DLL for all Runtime Configurations](https://devblogs.microsoft.com/cppblog/msvc-address-sanitizer-one-dll-for-all-runtime-configurations/). The following table describes the previous behavior of the AddressSanitizer runtime library linking, before Visual Studio 17.7 Preview 3: -| CRT option | DLL or EXE | DEBUG? | AddressSanitizer runtime binaries libraries | Address runtime binary (.dll) +| CRT option | DLL or EXE | DEBUG? | ASan library (`.lib`) | ASan runtime binary (`.dll`) | |--|--|--|--|--| | `/MT` | EXE | No | *`clang_rt.asan-{arch}`*, *`clang_rt.asan_cxx-{arch}`* | None | `/MT` | DLL | No | *`clang_rt.asan_dll_thunk-{arch}`* | None From 0242c08fe2b9cfd632852aa64cabb1f460f7f84c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 2 Apr 2024 15:09:12 -0700 Subject: [PATCH 0016/1239] incorp feedback --- docs/sanitizers/asan-runtime.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/sanitizers/asan-runtime.md b/docs/sanitizers/asan-runtime.md index 00b08550fd..88d62f6be7 100644 --- a/docs/sanitizers/asan-runtime.md +++ b/docs/sanitizers/asan-runtime.md @@ -34,6 +34,8 @@ The following diagram shows how the ASan library is linked for various compiler The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). In all cases, my_exe.exe links and its associates my_dll.dll link to a single instance of clang-rt.asan-dynamix-x86_64.dll. :::image-end::: +Even when statically linking, the ASan runtime DLL must be present at runtime--unlike other C Runtime components. + ### Previous versions Before Visual Studio 17.7 Preview 3, statically linked (**`/MT`** or **`/MTd`**) builds didn't use a DLL dependency. Instead, the AddressSanitizer runtime was statically linked into the user's EXE. DLL projects would then load exports from the user's EXE to access ASan functionality. @@ -51,9 +53,9 @@ The following table describes the previous behavior of the AddressSanitizer runt | `/MT` | DLL | Yes | *`clang_rt.asan_dbg_dll_thunk-{arch}`* | None | `/MD` | Either | Yes | *`clang_rt.asan_dbg_dynamic-{arch}`*, *`clang_rt.asan_dbg_dynamic_runtime_thunk-{arch}`* | *`clang_rt.asan_dbg_dynamic-{arch}`* -The following diagram shows how the ASan library was linked for various compiler options before Visual Studio 2022 17.7 preview 3: +The following diagram shows how the ASan library was linked for various compiler options before Visual Studio 2022 17.7 Preview 3: -:::image type="complex" source="media/asan-library-linking-previous-versions.png" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 preview 3." +:::image type="complex" source="media/asan-library-linking-previous-versions.png" alt-text="Diagram of how the ASan runtime dll was linked prior to Visual Studio 2022 Preview 3." The image shows four scenarios for linking the ASan runtime library. The scenarios are for /MT (statically link the runtime), /MTd (statically link the debug runtime), /MD (dynamically link the redist at runtime), /MDd (dynamically link the debug redist at runtime). For /MT, my_exe.exe has a statically linked copy of the ASan runtime. my_dll.dll links to the ASan runtime in my_exe.exe. For /MTd, the diagram is the same except it uses the debug statically linked ASan runtime. For /MD, both my_exe.exe and my_dll.dll link to the dynamically linked ASan runtime named clang_rt.asan_dynamic-x86_64.dll. For /MDd, the diagram is the same except my_exe.exe and my_dll.dll link to the debug ASan runtime named clang_rt.asan_dbg_dynamic-x86_64.dll. :::image-end::: @@ -119,7 +121,7 @@ For more information, see the [Differences with Clang 12.0](asan.md#differences) > The option `windows_hook_rtl_allocators`, previously an opt-in feature while AddressSanitizer was experimental, is now enabled by default. In versions before Visual Studio 2022 version 17.4.6, the default option value is `false`. In Visual Studio 2022 version 17.4.6 and later versions, the option `windows_hook_rtl_allocators` defaults to `true`. - `iat_overwrite` - String, set to `"error"` by default. Other possible values are `"protect"` and `"ignore"`. Some modules may overwrite the [`import address table`](/windows/win32/debug/pe-format#import-address-table) of other modules to customize implementations of certain functions. For example, drivers commonly provide custom implementations for specific hardware. The `iat_overwrite` option manages the AddressSanitizer runtime's protection against overwrites for specific [`memoryapi.h`](/windows/win32/api/memoryapi/) functions. The runtime currently tracks the [`VirtualAlloc`](/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc), [`VirtualProtect`](/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect), and [`VirtualQuery`](/windows/win32/api/memoryapi/nf-memoryapi-virtualquery) functions for protection. This option is available in Visual Studio 2022 version 17.5 preview 1 and later versions. The following `iat_overwrite` values control how the runtime reacts when protected functions are overwritten: + String, set to `"error"` by default. Other possible values are `"protect"` and `"ignore"`. Some modules may overwrite the [`import address table`](/windows/win32/debug/pe-format#import-address-table) of other modules to customize implementations of certain functions. For example, drivers commonly provide custom implementations for specific hardware. The `iat_overwrite` option manages the AddressSanitizer runtime's protection against overwrites for specific [`memoryapi.h`](/windows/win32/api/memoryapi/) functions. The runtime currently tracks the [`VirtualAlloc`](/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc), [`VirtualProtect`](/windows/win32/api/memoryapi/nf-memoryapi-virtualprotect), and [`VirtualQuery`](/windows/win32/api/memoryapi/nf-memoryapi-virtualquery) functions for protection. This option is available in Visual Studio 2022 version 17.5 Preview 1 and later versions. The following `iat_overwrite` values control how the runtime reacts when protected functions are overwritten: - If set to `"error"` (the default), the runtime reports an error whenever an overwrite is detected. - If set to `"protect"`, the runtime attempts to avoid using the overwritten definition and proceeds. Effectively, the original `memoryapi` definition of the function is used from inside the runtime to avoid infinite recursion. Other modules in the process still use the overwritten definition. From 5d7e5c480703c2adb79f96ed222d830e8a8e18ff Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 12:05:41 -0700 Subject: [PATCH 0017/1239] Update compiler-warning-level-4-c4255.md --- .../compiler-warnings/compiler-warning-level-4-c4255.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md index ff98dea558..20cb586062 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4255" -title: "Compiler Warning (level 4) C4255" +description: "Learn more about: Compiler Warning (level 4, off) C4255" +title: "Compiler Warning (level 4, off) C4255" ms.date: "11/04/2016" f1_keywords: ["C4255"] helpviewer_keywords: ["C4255"] -ms.assetid: 2087b635-4b4c-4182-8a01-c26770d2bb88 --- -# Compiler Warning (level 4) C4255 +# Compiler Warning (level 4, off) C4255 'function' : no function prototype given: converting '()' to '(void)' From 8a259e32f6e9712f940683c6494a1975702f809e Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 12:08:11 -0700 Subject: [PATCH 0018/1239] Update compiler-warning-level-4-c4263.md --- .../compiler-warnings/compiler-warning-level-4-c4263.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md index 7fa9923092..c5e054ab5a 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4263" -title: "Compiler Warning (level 4) C4263" +description: "Learn more about: Compiler Warning (level 4, off) C4263" +title: "Compiler Warning (level 4, off) C4263" ms.date: "11/04/2016" f1_keywords: ["C4263"] helpviewer_keywords: ["C4263"] -ms.assetid: daabb05d-ab56-460f-ab6c-c74d222ef649 --- -# Compiler Warning (level 4) C4263 +# Compiler Warning (level 4, off) C4263 'function' : member function does not override any base class virtual member function From 7bdf99e5b27de1ffa0a27b7412ebbbd581961983 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 12:10:38 -0700 Subject: [PATCH 0019/1239] Update compiler-warning-level-1-c4264.md --- .../compiler-warnings/compiler-warning-level-1-c4264.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md index 23996076bb..2fb40257fc 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4264" -title: "Compiler Warning (level 1) C4264" +description: "Learn more about: Compiler Warning (level 4, off) C4264" +title: "Compiler Warning (level 4, off) C4264" ms.date: "11/04/2016" f1_keywords: ["C4264"] helpviewer_keywords: ["C4264"] -ms.assetid: 315a13c1-ca54-4a90-9d2b-dd996463af5d --- -# Compiler Warning (level 1) C4264 +# Compiler Warning (level 4, off) C4264 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden From db83768e354e02703e3c4b854db53ae4e2757419 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 12:13:03 -0700 Subject: [PATCH 0020/1239] Update compiler-warning-level-3-c4265.md --- .../compiler-warnings/compiler-warning-level-3-c4265.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md index fdee3d43de..bc4f57b8c8 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4265" -title: "Compiler Warning (level 3) C4265" +description: "Learn more about: Compiler Warning (level 3, off) C4265" +title: "Compiler Warning (level 3, off) C4265" ms.date: "11/04/2016" f1_keywords: ["C4265"] helpviewer_keywords: ["C4265"] -ms.assetid: 20547159-6f30-4cc4-83aa-927884c8bb4c --- -# Compiler Warning (level 3) C4265 +# Compiler Warning (level 3, off) C4265 'class' : class has virtual functions, but destructor is not virtual From 2eaf436da3f7ccacaf8fa47240017920015dafe8 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 12:15:52 -0700 Subject: [PATCH 0021/1239] Update compiler-warning-level-4-c4266.md --- .../compiler-warnings/compiler-warning-level-4-c4266.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md index fccff4b84f..0a52144340 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4266" -title: "Compiler Warning (level 4) C4266" +description: "Learn more about: Compiler Warning (level 4, off) C4266" +title: "Compiler Warning (level 4, off) C4266" ms.date: "11/04/2016" f1_keywords: ["C4266"] helpviewer_keywords: ["C4266"] -ms.assetid: 90ec5f5b-3451-4c16-bb1b-c30a626bdaa0 --- -# Compiler Warning (level 4) C4266 +# Compiler Warning (level 4, off) C4266 'function' : no override available for virtual member function from base 'type'; function is hidden From 1a9b465a778110e19566f4147ba7ac4763b062ec Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 12:26:48 -0700 Subject: [PATCH 0022/1239] Update compiler-warning-level-3-c4278.md --- .../compiler-warnings/compiler-warning-level-3-c4278.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md index bed4655598..d719f6910f 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4278" -title: "Compiler Warning (level 3) C4278" +description: "Learn more about: Compiler Warning (level 3 and level 4) C4278" +title: "Compiler Warning (level 3 and level 4) C4278" ms.date: "08/27/2018" f1_keywords: ["C4278"] helpviewer_keywords: ["C4278"] -ms.assetid: 4b6053fb-df62-4c04-b6c8-c011759557b8 --- -# Compiler Warning (level 3) C4278 +# Compiler Warning (level 3 and level 4) C4278 > '*identifier*': identifier in type library '*tlb*' is already a macro; use the 'rename' qualifier From 3bb020102bd4e2562d290a74eb1ff55ec682bca5 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 13:10:36 -0700 Subject: [PATCH 0023/1239] Update compiler-warning-level-3-c4287.md --- .../compiler-warnings/compiler-warning-level-3-c4287.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md index 4834efa3a1..fafd64de0c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4287" -title: "Compiler Warning (level 3) C4287" +description: "Learn more about: Compiler Warning (level 3, off) C4287" +title: "Compiler Warning (level 3, off) C4287" ms.date: "11/04/2016" f1_keywords: ["C4287"] helpviewer_keywords: ["C4287"] -ms.assetid: 1bf3bff8-6402-4d06-95ba-431678a790a7 --- -# Compiler Warning (level 3) C4287 +# Compiler Warning (level 3, off) C4287 -'operator' : unsigned/negative constant mismatch +> 'operator' : unsigned/negative constant mismatch An unsigned variable was used in an operation with a negative number. From b99503cdf0e6a634a384d820d23132ecfe8f17b6 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 13:13:23 -0700 Subject: [PATCH 0024/1239] Update compiler-warning-level-4-c4289.md --- .../compiler-warning-level-4-c4289.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md index 3f29ff0cfa..2dfe160b38 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4289" -title: "Compiler Warning (level 4) C4289" +description: "Learn more about: Compiler Warning (level 4, off) C4289" +title: "Compiler Warning (level 4, off) C4289" ms.date: "11/04/2016" f1_keywords: ["C4289"] helpviewer_keywords: ["C4289"] -ms.assetid: 0dbd2863-4cde-4e16-894b-104a2d5fa724 --- -# Compiler Warning (level 4) C4289 +# Compiler Warning (level 4, off) C4289 -nonstandard extension used : 'var' : loop control variable declared in the for-loop is used outside the for-loop scope +> nonstandard extension used : 'var' : loop control variable declared in the `for`-loop is used outside the `for`-loop scope -When compiling with [/Ze](../../build/reference/za-ze-disable-language-extensions.md) and **/Zc:forScope-**, a variable declared in a [for](../../cpp/for-statement-cpp.md) loop was used after the **`for`**-loop scope. +When compiling with [/Ze](../../build/reference/za-ze-disable-language-extensions.md) and **/Zc:forScope-**, a variable declared in a [`for`](../../cpp/for-statement-cpp.md) loop was used after the **`for`**-loop scope. See [/Zc:forScope](../../build/reference/zc-forscope-force-conformance-in-for-loop-scope.md) for information about how to specify standard behavior in **`for`** loops with **/Ze**. From f76bb3ff5768d244d749865f9f2ff96b48e6e76d Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 13:35:45 -0700 Subject: [PATCH 0025/1239] Update compiler-warning-level-4-c4296.md --- .../compiler-warnings/compiler-warning-level-4-c4296.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md index eb4f2ed99e..a66912ba76 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4296" -title: "Compiler Warning (level 4) C4296" +description: "Learn more about: Compiler Warning (level 4, off) C4296" +title: "Compiler Warning (level 4, off) C4296" ms.date: "11/04/2016" f1_keywords: ["C4296"] helpviewer_keywords: ["C4296"] -ms.assetid: 9d99aafe-f6bd-4ee0-b8d0-98ce5712274d --- -# Compiler Warning (level 4) C4296 +# Compiler Warning (level 4, off) C4296 -'operator' : expression is always false +> 'operator' : expression is always false An unsigned variable was used in a comparison operation with zero. From 1c39976096b6c60a703eeb9227f24abea1e81058 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Wed, 3 Apr 2024 15:21:37 -0700 Subject: [PATCH 0026/1239] Update toc.yml --- docs/error-messages/toc.yml | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/error-messages/toc.yml b/docs/error-messages/toc.yml index 3d8d366752..d43a125259 100644 --- a/docs/error-messages/toc.yml +++ b/docs/error-messages/toc.yml @@ -3534,19 +3534,19 @@ items: href: compiler-warnings/compiler-warning-level-1-c4251.md - name: Compiler warning (level 4) C4254 href: compiler-warnings/compiler-warning-level-4-c4254.md - - name: Compiler warning (level 4) C4255 + - name: Compiler warning (level 4, off) C4255 href: compiler-warnings/compiler-warning-level-4-c4255.md - name: Compiler warning (level 4) C4256 href: compiler-warnings/compiler-warning-level-4-c4256.md - name: Compiler warning (level 1) C4258 href: compiler-warnings/compiler-warning-level-1-c4258.md - - name: Compiler warning (level 4) C4263 + - name: Compiler warning (level 4, off) C4263 href: compiler-warnings/compiler-warning-level-4-c4263.md - - name: Compiler warning (level 1) C4264 + - name: Compiler warning (level 4, off) C4264 href: compiler-warnings/compiler-warning-level-1-c4264.md - - name: Compiler warning (level 3) C4265 + - name: Compiler warning (level 3, off) C4265 href: compiler-warnings/compiler-warning-level-3-c4265.md - - name: Compiler warning (level 4) C4266 + - name: Compiler warning (level 4, off) C4266 href: compiler-warnings/compiler-warning-level-4-c4266.md - name: Compiler warning (level 3) C4267 href: compiler-warnings/compiler-warning-level-3-c4267.md @@ -3564,7 +3564,7 @@ items: href: compiler-warnings/compiler-warning-level-2-c4275.md - name: Compiler warning (level 1) C4276 href: compiler-warnings/compiler-warning-level-1-c4276.md - - name: Compiler warning (level 3) C4278 + - name: Compiler warning (level 3 and level 4) C4278 href: compiler-warnings/compiler-warning-level-3-c4278.md - name: Compiler warning (level 3) C4280 href: compiler-warnings/compiler-warning-level-3-c4280.md @@ -3578,11 +3578,11 @@ items: href: compiler-warnings/compiler-warning-level-2-c4285.md - name: Compiler warning (level 1) C4286 href: compiler-warnings/compiler-warning-level-1-c4286.md - - name: Compiler warning (level 3) C4287 + - name: Compiler warning (level 3, off) C4287 href: compiler-warnings/compiler-warning-level-3-c4287.md - name: Compiler warning (level 1) C4288 href: compiler-warnings/compiler-warning-level-1-c4288.md - - name: Compiler warning (level 4) C4289 + - name: Compiler warning (level 4, off) C4289 href: compiler-warnings/compiler-warning-level-4-c4289.md - name: Compiler warning (level 3) C4290 href: compiler-warnings/compiler-warning-level-3-c4290.md @@ -3592,7 +3592,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4293.md - name: Compiler warning (level 4) C4295 href: compiler-warnings/compiler-warning-level-4-c4295.md - - name: Compiler warning (level 4) C4296 + - name: Compiler warning (level 4, off) C4296 href: compiler-warnings/compiler-warning-level-4-c4296.md - name: Compiler warning (level 1) C4297 href: compiler-warnings/compiler-warning-level-1-c4297.md @@ -3632,17 +3632,17 @@ items: href: compiler-warnings/compiler-warning-level-1-c4333.md - name: Compiler warning (level 3) C4334 href: compiler-warnings/compiler-warning-level-3-c4334.md - - name: Compiler warning C4335 + - name: Compiler warning (level 1) C4335 href: compiler-warnings/compiler-warning-c4335.md - name: Compiler warning (level 4) C4336 href: compiler-warnings/compiler-warning-level-4-c4336.md - name: Compiler warning (level 4) C4337 href: compiler-warnings/compiler-warning-level-4-c4337.md - - name: Compiler warning (level 4) C4339 + - name: Compiler warning (level 4, off) C4339 href: compiler-warnings/compiler-warning-level-4-c4339.md - name: Compiler warning (level 1) C4340 href: compiler-warnings/compiler-warning-level-1-c4340.md - - name: Compiler warning (level 1) C4342 + - name: Compiler warning (level 1, no longer emitted) C4342 href: compiler-warnings/compiler-warning-level-1-c4342.md - name: Compiler warning (level 4) C4343 href: compiler-warnings/compiler-warning-level-4-c4343.md @@ -3652,7 +3652,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4346.md - name: Compiler warning (level 1) C4348 href: compiler-warnings/compiler-warning-level-1-c4348.md - - name: Compiler warning (level 1) C4350 + - name: Compiler warning (level 1, no longer emitted) C4350 href: compiler-warnings/compiler-warning-level-1-c4350.md - name: Compiler warning (level 1) C4353 href: compiler-warnings/compiler-warning-level-1-c4353.md @@ -3664,21 +3664,21 @@ items: href: compiler-warnings/compiler-warning-level-3-c4357.md - name: Compiler warning (level 1) C4358 href: compiler-warnings/compiler-warning-level-1-c4358.md - - name: Compiler warning (level 3) C4359 + - name: Compiler warning (level 1 and level 3) C4359 href: compiler-warnings/compiler-warning-level-3-c4359.md - name: Compiler warning (level 1) C4364 href: compiler-warnings/compiler-warning-level-1-c4364.md - - name: Compiler warning (level 4) C4365 + - name: Compiler warning (level 4, off) C4365 href: compiler-warnings/compiler-warning-level-4-c4365.md - name: Compiler warning (level 4) C4366 href: compiler-warnings/compiler-warning-level-4-c4366.md - - name: Compiler warning C4368 + - name: Compiler warning (level 1, Error) C4368 href: compiler-warnings/compiler-warning-c4368.md - name: Compiler warning (level 1) C4369 href: compiler-warnings/compiler-warning-level-1-c4369.md - - name: Compiler warning (level 3) C4371 + - name: Compiler warning (level 3, off) C4371 href: compiler-warnings/c4371.md - - name: Compiler warning (level 3) C4373 + - name: Compiler warning (level 4) C4373 href: compiler-warnings/compiler-warning-level-3-c4373.md - name: Compiler warning (level 1) C4374 href: compiler-warnings/compiler-warning-level-1-c4374.md @@ -3700,7 +3700,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4383.md - name: Compiler warning (level 1) C4384 href: compiler-warnings/compiler-warning-level-1-c4384.md - - name: Compiler warning (level 4) C4388 + - name: Compiler warning (level 4, off) C4388 href: compiler-warnings/c4388.md - name: Compiler warning (level 4) C4389 href: compiler-warnings/compiler-warning-level-4-c4389.md @@ -3708,11 +3708,11 @@ items: href: compiler-warnings/compiler-warning-level-3-c4390.md - name: Compiler warning (level 1) C4391 href: compiler-warnings/compiler-warning-level-1-c4391.md - - name: Compiler warning (level 1) C4392 + - name: Compiler warning (level 1, Error) C4392 href: compiler-warnings/compiler-warning-level-1-c4392.md - name: Compiler warning (level 1) C4393 href: compiler-warnings/compiler-warning-level-1-c4393.md - - name: Compiler warning C4394 + - name: Compiler warning (level 1, Error) C4394 href: compiler-warnings/compiler-warning-c4394.md - name: Compiler warning (level 1) C4395 href: compiler-warnings/compiler-warning-level-1-c4395.md @@ -3722,7 +3722,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4397.md - name: Compiler warning (level 3) C4398 href: compiler-warnings/compiler-warning-level-3-c4398.md - - name: Compiler warning (level 1) C4399 + - name: Compiler warning (level 1, Error) C4399 href: compiler-warnings/compiler-warning-level-1-c4399.md - name: Compiler warnings C4400 Through C4599 expanded: false From 581adc30a40a3fd935e3d12a5c0572b7495fb0cb Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:16:38 -0700 Subject: [PATCH 0027/1239] Update compiler-warning-c4335.md --- .../compiler-warnings/compiler-warning-c4335.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4335.md b/docs/error-messages/compiler-warnings/compiler-warning-c4335.md index 3ec3cdd5d3..d874b32a75 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4335.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4335.md @@ -1,18 +1,17 @@ --- -description: "Learn more about: Compiler Warning C4335" -title: "Compiler Warning C4335" +description: "Learn more about: Compiler Warning (level 1) C4335" +title: "Compiler Warning(level 1) C4335" ms.date: "11/04/2016" f1_keywords: ["C4335"] helpviewer_keywords: ["C4335"] -ms.assetid: e66467ad-a10b-4438-8c7c-e8e8d11d39bb --- -# Compiler Warning C4335 +# Compiler Warning (level 1) C4335 -Mac file format detected: please convert the source file to either DOS or UNIX format +> Mac file format detected: please convert the source file to either DOS or UNIX format -The line termination character of the first line of a source file is Macintosh style ('\r') as opposed to UNIX ('\n') or DOS ('\r\n'). +The line termination character of the first line of a source file is the old Macintosh style ('\r') as opposed to UNIX ('\n') or DOS ('\r\n'). -This warning is always issued as an error. See [warning](../../preprocessor/warning.md) pragma for information about how to disable this warning. Also, this warning is only issued once per compiland. Therefore, if there are multiple `#include` directives that specify files in Macintosh format, C4335 will only be issued once. +This warning is only issued once per translation unit. Therefore, if there are multiple `#include` directives that specify files in Macintosh format, C4335 will only be issued once. One way to generate files in Macintosh format is by using the **Advanced Save Options** (on the **File** menu) in Visual Studio. From 76ba27cc9158a1f769b8937dcfad0751b8cec762 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:20:56 -0700 Subject: [PATCH 0028/1239] Update compiler-warning-level-4-c4339.md --- .../compiler-warnings/compiler-warning-level-4-c4339.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md index 4b868b05e1..200d348917 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4339" -title: "Compiler Warning (level 4) C4339" +description: "Learn more about: Compiler Warning (level 4, off) C4339" +title: "Compiler Warning (level 4, off) C4339" ms.date: "11/04/2016" f1_keywords: ["C4339"] helpviewer_keywords: ["C4339"] -ms.assetid: 5b83353d-7777-4afb-8476-3c368349028c --- -# Compiler Warning (level 4) C4339 +# Compiler Warning (level 4, off) C4339 -'type' : use of undefined type detected in WinRT or CLR meta-data - use of this type may lead to a runtime exception +> 'type' : use of undefined type detected in WinRT or CLR meta-data - use of this type may lead to a runtime exception A type was not defined in code that was compiled for Windows Runtime or the common language runtime. Define the type to avoid a possible runtime exception. From 17d73d545b4ddf47cc5847ffe93eecfeadb67a2b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:26:19 -0700 Subject: [PATCH 0029/1239] Update compiler-warning-level-3-c4359.md --- .../compiler-warnings/compiler-warning-level-3-c4359.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md index f4f62e9759..d7fff11b5f 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4359" -title: "Compiler Warning (level 3) C4359" +description: "Learn more about: Compiler Warning (level 1 and level 3) C4359" +title: "Compiler Warning (level 1 and level 3) C4359" ms.date: "11/04/2016" f1_keywords: ["C4359"] helpviewer_keywords: ["C4359"] -ms.assetid: d8fe993c-ef82-45a0-a43d-c29f9d1bacdb --- -# Compiler Warning (level 3) C4359 +# Compiler Warning (level 1 and level 3) C4359 -'type': actual alignment (8) is greater than the value specified in __declspec(align()) +> 'type': actual alignment (8) is greater than the value specified in __declspec(align()) The alignment specified for a type is less than the alignment of the type of one of its data members. For more information, see [align](../../cpp/align-cpp.md). From 0f5baa375a334c11430ede664716a0f14b607776 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:31:54 -0700 Subject: [PATCH 0030/1239] Update compiler-warning-level-4-c4365.md --- .../compiler-warning-level-4-c4365.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md index 931b249b13..81ddfa0ed0 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4365" -title: "Compiler Warning (level 4) C4365" +description: "Learn more about: Compiler Warning (level 4, off) C4365" +title: "Compiler Warning (level 4, off) C4365" ms.date: "11/04/2016" f1_keywords: ["C4365"] helpviewer_keywords: ["C4365"] -ms.assetid: af4b4191-bdfd-4dbb-8229-3ba4405df257 --- -# Compiler Warning (level 4) C4365 +# Compiler Warning (level 4, off) C4365 -'action' : conversion from 'type_1' to 'type_2', signed/unsigned mismatch +> 'action' : conversion from 'type_1' to 'type_2', signed/unsigned mismatch -For example, you tried to convert an unsigned value to a signed value. +For example, you tried to convert an unsigned value to a signed value. This can cause unexpected results if the source value at runtime in not in the range of the destination type. Such as a negative value being convrted into a signed value. C4365 is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). From ccc1bc1f54da81faba357bbb8874241d7a00c07b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:33:55 -0700 Subject: [PATCH 0031/1239] Update compiler-warning-c4368.md --- .../compiler-warnings/compiler-warning-c4368.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4368.md b/docs/error-messages/compiler-warnings/compiler-warning-c4368.md index 7808f627b5..8bced21967 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4368.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4368.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning C4368" -title: "Compiler Warning C4368" +description: "Learn more about: Compiler Warning (level 1, Error) C4368" +title: "Compiler Warning (level 1, Error) C4368" ms.date: "11/04/2016" f1_keywords: ["C4368"] helpviewer_keywords: ["C4368"] -ms.assetid: cb85bcee-fd3d-4aa5-b626-2324f07a4f1b --- -# Compiler Warning C4368 +# Compiler Warning (level 1, Error) C4368 -cannot define 'member' as a member of managed 'type': mixed types are not supported +> cannot define 'member' as a member of managed 'type': mixed types are not supported You cannot embed a native data member in a CLR type. From 7c66b4d3d22452d57c1fc994745fc67fd6f122f7 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:36:42 -0700 Subject: [PATCH 0032/1239] Update c4371.md --- docs/error-messages/compiler-warnings/c4371.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/c4371.md b/docs/error-messages/compiler-warnings/c4371.md index 0e51dcf410..ca333f4019 100644 --- a/docs/error-messages/compiler-warnings/c4371.md +++ b/docs/error-messages/compiler-warnings/c4371.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4371" -title: "Compiler Warning (level 3) C4371" +description: "Learn more about: Compiler Warning (level 3, off) C4371" +title: "Compiler Warning (level 3, off) C4371" ms.date: "01/31/2018" f1_keywords: ["C4371"] helpviewer_keywords: ["C4371"] From 6f82bf9577da8dc6ab932658fed17da787fccf0a Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:37:46 -0700 Subject: [PATCH 0033/1239] Update compiler-warning-level-3-c4373.md --- .../compiler-warnings/compiler-warning-level-3-c4373.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md index ee956ccc2e..0236f09fad 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md @@ -1,12 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4373" -title: "Compiler Warning (level 3) C4373" +description: "Learn more about: Compiler Warning (level 4) C4373" +title: "Compiler Warning (level 4) C4373" ms.date: "11/04/2016" f1_keywords: ["C4373"] helpviewer_keywords: ["C4373"] -ms.assetid: 670c0ba3-b7d6-4aed-b207-1cb84da3bcde --- -# Compiler Warning (level 3) C4373 +# Compiler Warning (level 4) C4373 > '*function*': virtual function overrides '*base_function*', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers From 95bfab505fc982747b91d0b7f764a313d644cf18 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:39:21 -0700 Subject: [PATCH 0034/1239] Update c4388.md --- docs/error-messages/compiler-warnings/c4388.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/c4388.md b/docs/error-messages/compiler-warnings/c4388.md index 1f8cc6b7f9..5b2c4cbdb0 100644 --- a/docs/error-messages/compiler-warnings/c4388.md +++ b/docs/error-messages/compiler-warnings/c4388.md @@ -1,11 +1,11 @@ --- -title: "Compiler Warning (level 4) C4388" -description: "Microsoft C/C++ compiler warning C4388, its causes and resolution." +title: "Compiler Warning (level 4, off) C4388" +description: "Microsoft C/C++ compiler warning (level 4, off) C4388, its causes and resolution." ms.date: 10/16/2020 f1_keywords: ["C4388"] helpviewer_keywords: ["C4388"] --- -# Compiler Warning (level 4) C4388 +# Compiler Warning (level 4, off) C4388 > '*token*' : signed/unsigned mismatch From 4c7838896cebf13033df905fd1ffa053a9a5bb74 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:43:09 -0700 Subject: [PATCH 0035/1239] Update compiler-warning-level-1-c4392.md --- .../compiler-warning-level-1-c4392.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md index 3e6c6317c5..dff623773d 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md @@ -1,18 +1,17 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4392" -title: "Compiler Warning (level 1) C4392" +description: "Learn more about: Compiler Warning (level 1, Error) C4392" +title: "Compiler Warning (level 1, Error) C4392" ms.date: "11/04/2016" f1_keywords: ["C4392"] helpviewer_keywords: ["C4392"] -ms.assetid: 817806ad-06a6-4b9e-8355-e25687c782dc --- -# Compiler Warning (level 1) C4392 +# Compiler Warning (level 1, Error) C4392 'signature' : incorrect number of arguments for intrinsic function, expected 'number' arguments -A function declaration for a compiler intrinsic had the wrong number of arguments. The resulting image may not run correctly. +A function declaration for a compiler intrinsic had the wrong number of arguments. The resulting image may not run correctly. To fix this warning, either correct the declaration or delete the declaration and simply #include the appropriate header file. -To fix this warning, either correct the declaration or delete the declaration and simply #include the appropriate header file. +This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable or change the warning level. The following sample generates C4392: From 0fee429ade817741f55b3aba8ac72e9307fddf6a Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:46:32 -0700 Subject: [PATCH 0036/1239] Update compiler-warning-c4394.md --- .../compiler-warnings/compiler-warning-c4394.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md index 95e4d0660a..8fcbc60416 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md @@ -1,20 +1,19 @@ --- -description: "Learn more about: Compiler Warning C4394" -title: "Compiler Warning C4394" +description: "Learn more about: Compiler Warning (level 1, Error) C4394" +title: "Compiler Warning (level 1, Error) C4394" ms.date: "11/04/2016" f1_keywords: ["C4394"] helpviewer_keywords: ["C4394"] -ms.assetid: 5de94de0-17e3-4e7c-92f4-5c3c1b825120 --- -# Compiler Warning C4394 +# Compiler Warning (level 1, Error) C4394 -'function' : per-appdomain symbol should not be marked with __declspec(dllexport) +> 'function' : per-appdomain symbol should not be marked with __declspec(dllexport) A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not to native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) are not supported for managed functions. You can declare a managed function to have public accessibility. For more information, see [Type visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Type_visibility) and [Member visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Member_visibility). -C4394 is always issued as an error. You can turn off this warning with the `#pragma warning` or **/wd**; see [warning](../../preprocessor/warning.md) or [/w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level)](../../build/reference/compiler-option-warning-level.md) for more information. +C4394 is always issued as an error. You can turn off this warning or change its level with `#pragma warning` or **/wd**; see [warning](../../preprocessor/warning.md) or [/w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level)](../../build/reference/compiler-option-warning-level.md) for more information. ## Example From 4a7b80443260ad0a47597a94c4fe90581716e764 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 11:49:20 -0700 Subject: [PATCH 0037/1239] Update compiler-warning-level-1-c4399.md --- .../compiler-warnings/compiler-warning-level-1-c4399.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md index a99bfcba5c..057f090657 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md @@ -1,12 +1,12 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4399" -title: "Compiler Warning (level 1) C4399" +description: "Learn more about: Compiler Warning (level 1, Error) C4399" +title: "Compiler Warning (level 1, Error) C4399" ms.date: "11/04/2016" f1_keywords: ["C4399"] helpviewer_keywords: ["C4399"] ms.assetid: f58d9ba7-71a0-4c3b-b26f-f946dda8af30 --- -# Compiler Warning (level 1) C4399 +# Compiler Warning (level 1, Error) C4399 > '*symbol*' : per-process symbol should not be marked with __declspec(dllimport) when compiled with /clr:pure @@ -16,6 +16,8 @@ The **/clr:pure** compiler option is deprecated in Visual Studio 2015 and unsupp Data from a native image or an image with native and CLR constructs can not be imported into a pure image. To resolve this warning, compile with **/clr** (not **/clr:pure**) or delete `__declspec(dllimport)`. +This warning can be issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable or change the warning level. + ## Example The following sample generates C4399. From 743ae5103acc643f88098b624b6fde88749c524b Mon Sep 17 00:00:00 2001 From: Michael Scovetta Date: Thu, 4 Apr 2024 14:53:20 -0400 Subject: [PATCH 0038/1239] Remove JiaT75 from contributing page. (#5009) This PR removes JiaT75 from the contributors page. --- docs/overview/whats-new-cpp-docs.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/overview/whats-new-cpp-docs.md b/docs/overview/whats-new-cpp-docs.md index 382b06fb78..e2a136c581 100644 --- a/docs/overview/whats-new-cpp-docs.md +++ b/docs/overview/whats-new-cpp-docs.md @@ -128,7 +128,6 @@ The following people contributed to the C++, C, and Assembler docs during this p - [0xbadfca11](https://github.com/0xbadfca11) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) - [edmund-leibert](https://github.com/edmund-leibert) - Edmund Leibert III ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) - [glenn-slayden](https://github.com/glenn-slayden) - Glenn Slayden ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) -- [JiaT75](https://github.com/JiaT75) - Jia Tan ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) - [lb90](https://github.com/lb90) ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) - [tsuyo](https://github.com/tsuyo) - Tsuyoshi Miyake ![1 pull requests.](https://img.shields.io/badge/Merged%20Pull%20Requests-1-green) From 939194c75c8572ee6eea2d89313cff4210d4b2c8 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 14:43:08 -0700 Subject: [PATCH 0039/1239] Update c4371.md --- docs/error-messages/compiler-warnings/c4371.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/c4371.md b/docs/error-messages/compiler-warnings/c4371.md index ca333f4019..10d29b3f10 100644 --- a/docs/error-messages/compiler-warnings/c4371.md +++ b/docs/error-messages/compiler-warnings/c4371.md @@ -9,6 +9,6 @@ helpviewer_keywords: ["C4371"] > '*classname*': layout of class may have changed from a previous version of the compiler due to better packing of member '*member*' -If your code relies on a particular memory layout for a class, warning C4371 tells you that the layout created by the current compiler may be different from the layout generated by previous versions of the compiler. This may be significant for serialization operations or operating system interfaces that rely on a particular memory layout. In most other cases, this warning is safe to ignore. +Warning C4371 tells you that the layout created by the current compiler may be different from the layout generated by previous versions of the compiler. This may be significant for serialization operations or operating system interfaces that rely on a particular memory layout. In most other cases, this warning is safe to ignore. Warning C4371 is off by default. For more information, see [Compiler Warnings That Are Off By Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). From 89359c21e827450005ce8b29695f648eb47e6400 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 14:44:37 -0700 Subject: [PATCH 0040/1239] Update c4388.md --- docs/error-messages/compiler-warnings/c4388.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/c4388.md b/docs/error-messages/compiler-warnings/c4388.md index 5b2c4cbdb0..ee8b36db8d 100644 --- a/docs/error-messages/compiler-warnings/c4388.md +++ b/docs/error-messages/compiler-warnings/c4388.md @@ -1,6 +1,6 @@ --- title: "Compiler Warning (level 4, off) C4388" -description: "Microsoft C/C++ compiler warning (level 4, off) C4388, its causes and resolution." +description: "Learn more about: Compiler Warning (level 4, off) C4388" ms.date: 10/16/2020 f1_keywords: ["C4388"] helpviewer_keywords: ["C4388"] From f85684f03359a02277e76efbe571fcc346529e57 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 14:46:26 -0700 Subject: [PATCH 0041/1239] Update compiler-warning-c4335.md --- docs/error-messages/compiler-warnings/compiler-warning-c4335.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4335.md b/docs/error-messages/compiler-warnings/compiler-warning-c4335.md index d874b32a75..e57e115b0b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4335.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4335.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4335"] The line termination character of the first line of a source file is the old Macintosh style ('\r') as opposed to UNIX ('\n') or DOS ('\r\n'). -This warning is only issued once per translation unit. Therefore, if there are multiple `#include` directives that specify files in Macintosh format, C4335 will only be issued once. +This warning is only issued once per translation unit. Therefore, if there are multiple `#include` directives that specify files in Macintosh format, C4335 is emitted once. One way to generate files in Macintosh format is by using the **Advanced Save Options** (on the **File** menu) in Visual Studio. From 930ccd212fb3ac9a12e0cd5f0f049261f4e3eab1 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:06:52 -0700 Subject: [PATCH 0042/1239] Update compiler-warning-c4368.md --- .../compiler-warnings/compiler-warning-c4368.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4368.md b/docs/error-messages/compiler-warnings/compiler-warning-c4368.md index 8bced21967..0d5f930532 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4368.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4368.md @@ -9,9 +9,9 @@ helpviewer_keywords: ["C4368"] > cannot define 'member' as a member of managed 'type': mixed types are not supported -You cannot embed a native data member in a CLR type. +You can't embed a native data member in a managed type. -You can, however, declare a pointer to a native type and control its lifetime in the constructor and destructor and finalizer of your managed class. For more information see [Destructors and finalizers](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Destructors_and_finalizers). +You can, however, declare a pointer to a native type and control its lifetime in the constructor and destructor and finalizer of your managed class. For more information, see [Destructors and finalizers](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Destructors_and_finalizers). This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable C4368. From 564328b7bdea0958f5f43f57309fa9849d6f42c6 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:11:54 -0700 Subject: [PATCH 0043/1239] Update compiler-warning-c4394.md --- .../compiler-warnings/compiler-warning-c4394.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md index 8fcbc60416..5edbea8bfc 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md @@ -9,11 +9,11 @@ helpviewer_keywords: ["C4394"] > 'function' : per-appdomain symbol should not be marked with __declspec(dllexport) -A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not to native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) are not supported for managed functions. +A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) aren`t supported for managed functions. You can declare a managed function to have public accessibility. For more information, see [Type visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Type_visibility) and [Member visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Member_visibility). -C4394 is always issued as an error. You can turn off this warning or change its level with `#pragma warning` or **/wd**; see [warning](../../preprocessor/warning.md) or [/w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level)](../../build/reference/compiler-option-warning-level.md) for more information. +C4394 is always issued as an error. You can turn off this warning or change its level with `#pragma warning` or **/wd**; see [warning](../../preprocessor/warning.md) or [/w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level)](../../build/reference/compiler-option-warning-level.md) for more information. ## Example From 18b039d0c1710390f8eb37d0e2784ad04b8c42d8 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:15:04 -0700 Subject: [PATCH 0044/1239] Update compiler-warning-level-1-c4264.md --- .../compiler-warnings/compiler-warning-level-1-c4264.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md index 2fb40257fc..34352b2504 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md @@ -7,8 +7,8 @@ helpviewer_keywords: ["C4264"] --- # Compiler Warning (level 4, off) C4264 -'virtual_function' : no override available for virtual member function from base 'class'; function is hidden +> 'virtual_function' : no override available for virtual member function from base 'class'; function is hidden C4264 is always generated after [C4263](../../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md). -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). From c6b4920846c762beb8d7149969d55232e39d4442 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:17:42 -0700 Subject: [PATCH 0045/1239] Update compiler-warning-level-1-c4392.md --- .../compiler-warnings/compiler-warning-level-1-c4392.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md index dff623773d..79d7ebd020 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4392.md @@ -7,9 +7,9 @@ helpviewer_keywords: ["C4392"] --- # Compiler Warning (level 1, Error) C4392 -'signature' : incorrect number of arguments for intrinsic function, expected 'number' arguments +> 'signature' : incorrect number of arguments for intrinsic function, expected 'number' arguments -A function declaration for a compiler intrinsic had the wrong number of arguments. The resulting image may not run correctly. To fix this warning, either correct the declaration or delete the declaration and simply #include the appropriate header file. +A function declaration for a compiler intrinsic had the wrong number of arguments. The resulting image may not run correctly. To fix this warning, either correct the declaration or delete the declaration and `#include` the appropriate header file. This warning is always issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable or change the warning level. From e3ea28732805fd122a9c57084dfaca37795273bc Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:19:20 -0700 Subject: [PATCH 0046/1239] Update compiler-warning-level-1-c4399.md --- .../compiler-warnings/compiler-warning-level-1-c4399.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md index 057f090657..f2f1db563b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md @@ -14,7 +14,7 @@ ms.assetid: f58d9ba7-71a0-4c3b-b26f-f946dda8af30 The **/clr:pure** compiler option is deprecated in Visual Studio 2015 and unsupported in Visual Studio 2017. -Data from a native image or an image with native and CLR constructs can not be imported into a pure image. To resolve this warning, compile with **/clr** (not **/clr:pure**) or delete `__declspec(dllimport)`. +Data from a native image or an image with native and common language runtime (CLR) constructs cannot be imported into a pure image. To resolve this warning, compile with **/clr** (not **/clr:pure**) or delete `__declspec(dllimport)`. This warning can be issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable or change the warning level. From 92d0ccea545ad8d044c9b76103227a69c5b07054 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:21:05 -0700 Subject: [PATCH 0047/1239] Update compiler-warning-level-3-c4265.md --- .../compiler-warnings/compiler-warning-level-3-c4265.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md index bc4f57b8c8..ba088275e7 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md @@ -7,11 +7,11 @@ helpviewer_keywords: ["C4265"] --- # Compiler Warning (level 3, off) C4265 -'class' : class has virtual functions, but destructor is not virtual +> 'class' : class has virtual functions, but destructor is not virtual When a class has virtual functions but a nonvirtual destructor, objects of the type might not be destroyed properly when the class is destroyed through a base class pointer. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4265: From bee4b610a4d0f1750656835721e74bd8e75feebe Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:28:07 -0700 Subject: [PATCH 0048/1239] Update compiler-warning-level-3-c4278.md --- .../compiler-warnings/compiler-warning-level-3-c4278.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md index d719f6910f..6a8dca0a4e 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md @@ -9,6 +9,4 @@ helpviewer_keywords: ["C4278"] > '*identifier*': identifier in type library '*tlb*' is already a macro; use the 'rename' qualifier -When using [#import](../../preprocessor/hash-import-directive-cpp.md), an identifier in the typelib you are importing is attempting to declare an identifier *identifier*. However, this is already a valid symbol. - -Use the `#import` **rename** attribute to assign an alias to the symbol in the type library. +The [`#import`](../../preprocessor/hash-import-directive-cpp.md) is attempting to import an identifier into the translation unit. However, there is already a symbol with that name. Use the `#import` **rename** attribute to assign an alias to the symbol in the type library. From 650a4053f69963bce531f66bb4d8f861bac138c0 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:30:25 -0700 Subject: [PATCH 0049/1239] Update compiler-warning-level-3-c4278.md --- .../compiler-warnings/compiler-warning-level-3-c4278.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md index 6a8dca0a4e..464d6497f3 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4278.md @@ -9,4 +9,4 @@ helpviewer_keywords: ["C4278"] > '*identifier*': identifier in type library '*tlb*' is already a macro; use the 'rename' qualifier -The [`#import`](../../preprocessor/hash-import-directive-cpp.md) is attempting to import an identifier into the translation unit. However, there is already a symbol with that name. Use the `#import` **rename** attribute to assign an alias to the symbol in the type library. +The [`#import`](../../preprocessor/hash-import-directive-cpp.md) is attempting to import an identifier into the translation unit. However, there's already a symbol with that name. Use the `#import` **rename** attribute to assign an alias to the symbol in the type library. From 9c77c3b10bb5c9e877996dd8759f37a272677af4 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:31:24 -0700 Subject: [PATCH 0050/1239] Update compiler-warning-level-3-c4287.md --- .../compiler-warnings/compiler-warning-level-3-c4287.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md index fafd64de0c..d93f73fcd3 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4287"] An unsigned variable was used in an operation with a negative number. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more informaiton, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). ## Example From a7ac13adbeca48fbc1b79a74ad54fab24ead0d83 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:32:10 -0700 Subject: [PATCH 0051/1239] Update compiler-warning-level-3-c4359.md --- .../compiler-warnings/compiler-warning-level-3-c4359.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md index d7fff11b5f..1323cb6fe5 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4359.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4359"] > 'type': actual alignment (8) is greater than the value specified in __declspec(align()) -The alignment specified for a type is less than the alignment of the type of one of its data members. For more information, see [align](../../cpp/align-cpp.md). +The alignment specified for a type is less than the alignment of the type of one of its data members. For more information, see [align](../../cpp/align-cpp.md). ## Example From 093be5137ced1975a10a3123a46d9752a80e3e1b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:43:01 -0700 Subject: [PATCH 0052/1239] Update compiler-warning-level-3-c4373.md --- .../compiler-warnings/compiler-warning-level-3-c4373.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md index 0236f09fad..c48860daef 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md @@ -11,13 +11,13 @@ helpviewer_keywords: ["C4373"] ## Remarks -Your application contains a method in a derived class that overrides a virtual method in a base class, and the parameters in the overriding method differ by only a [const](../../cpp/const-cpp.md) or [volatile](../../cpp/volatile-cpp.md) qualifier from the parameters of the virtual method. This means the compiler must bind a function reference to the method in either the base or derived class. +Your application contains a method in a derived class that overrides a virtual method in a base class. The parameters in the overriding method differ by a [`const`](../../cpp/const-cpp.md) or [`volatile`](../../cpp/volatile-cpp.md) qualifier from the parameters of the virtual method. -Versions of the compiler prior to Visual Studio 2008 bind the function to the method in the base class, then issue a warning message. Later versions of the compiler ignore the **`const`** or **`volatile`** qualifier, bind the function to the method in the derived class, then issue warning **C4373**. The later behavior conforms to the C++ standard. +Versions of the compiler prior to Visual Studio 2008 bind the function to the method in the base class, then issue a warning message. Later versions of the compiler ignore the **`const`** or **`volatile`** qualifier, bind the function to the method in the derived class, then issue warning **C4373**. The latter behavior conforms to the C++ standard. ## Example -The following code example generates warning C4373. To resolve this issue, you can either make the override use the same CV-qualifiers as the base member function, or if you did not intend to create an override, you can give the function in the derived class a different name. +The following code example generates warning C4373. To resolve this issue, you can either make the override use the same CV-qualifiers as the base member function, or if you didn't intend to create an override, you can give the function in the derived class a different name. ```cpp // c4373.cpp From a51d667ea2f9c7e73f45bfa28f85ebe4f2ab9932 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:45:40 -0700 Subject: [PATCH 0053/1239] Update compiler-warning-level-4-c4255.md --- .../compiler-warnings/compiler-warning-level-4-c4255.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md index 20cb586062..4358f2e093 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4255.md @@ -7,11 +7,11 @@ helpviewer_keywords: ["C4255"] --- # Compiler Warning (level 4, off) C4255 -'function' : no function prototype given: converting '()' to '(void)' +> 'function' : no function prototype given: converting '()' to '(void)' -The compiler did not find an explicit list of arguments to a function. This warning is for the C compiler only. +The compiler didn't find an explicit list of arguments to a function. This warning is for the C compiler only. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4255: From 8ff610af1aac005aa009ec5803ca8172c042fdd4 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:47:57 -0700 Subject: [PATCH 0054/1239] Update compiler-warning-level-4-c4263.md --- .../compiler-warnings/compiler-warning-level-4-c4263.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md index c5e054ab5a..7ea2676192 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4263.md @@ -7,11 +7,11 @@ helpviewer_keywords: ["C4263"] --- # Compiler Warning (level 4, off) C4263 -'function' : member function does not override any base class virtual member function +> 'function' : member function does not override any base class virtual member function -A class function definition has the same name as a virtual function in a base class but not the same number or type of arguments. This effectively hides the virtual function in the base class. +A class function definition has the same name as a virtual function in a base class but not the same number or type of arguments. This pattern effectively hides the virtual function in the base class. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4263: From d4478bd7b10fe384ebbb61a8be1a3bca7c86b69c Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:49:21 -0700 Subject: [PATCH 0055/1239] Update compiler-warning-level-4-c4266.md --- .../compiler-warnings/compiler-warning-level-4-c4266.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md index 0a52144340..88e8e554df 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4266.md @@ -7,11 +7,11 @@ helpviewer_keywords: ["C4266"] --- # Compiler Warning (level 4, off) C4266 -'function' : no override available for virtual member function from base 'type'; function is hidden +> 'function' : no override available for virtual member function from base 'type'; function is hidden -A derived class did not override all overloads of a virtual function. +A derived class didn't override all overloads of a virtual function. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4266: From ae21e2fe838047bd942977f3ed9b1fe3f0c0381a Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:52:31 -0700 Subject: [PATCH 0056/1239] Update compiler-warning-level-4-c4289.md --- .../compiler-warnings/compiler-warning-level-4-c4289.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md index 2dfe160b38..e12bb325ac 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4289.md @@ -9,11 +9,11 @@ helpviewer_keywords: ["C4289"] > nonstandard extension used : 'var' : loop control variable declared in the `for`-loop is used outside the `for`-loop scope -When compiling with [/Ze](../../build/reference/za-ze-disable-language-extensions.md) and **/Zc:forScope-**, a variable declared in a [`for`](../../cpp/for-statement-cpp.md) loop was used after the **`for`**-loop scope. +When [/Ze](../../build/reference/za-ze-disable-language-extensions.md) and **/Zc:forScope-** are used in a build, a variable declared in a [`for`](../../cpp/for-statement-cpp.md) loop was used after the **`for`**-loop scope. See [/Zc:forScope](../../build/reference/zc-forscope-force-conformance-in-for-loop-scope.md) for information about how to specify standard behavior in **`for`** loops with **/Ze**. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4289: From 0230c9a7f6c01f45c206c846d47c3912118d1368 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:53:25 -0700 Subject: [PATCH 0057/1239] Update compiler-warning-level-4-c4296.md --- .../compiler-warnings/compiler-warning-level-4-c4296.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md index a66912ba76..39cb0b6e93 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4296.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4296"] An unsigned variable was used in a comparison operation with zero. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4296: From 01855f000b5d77983f65b6a0fffb022673e0aa77 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:55:04 -0700 Subject: [PATCH 0058/1239] Update compiler-warning-level-4-c4339.md --- .../compiler-warnings/compiler-warning-level-4-c4339.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md index 200d348917..77a9a5a3e5 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4339.md @@ -9,9 +9,9 @@ helpviewer_keywords: ["C4339"] > 'type' : use of undefined type detected in WinRT or CLR meta-data - use of this type may lead to a runtime exception -A type was not defined in code that was compiled for Windows Runtime or the common language runtime. Define the type to avoid a possible runtime exception. +A type wasn't defined in code that was compiled for Windows Runtime or the common language runtime. Define the type to avoid a possible runtime exception. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4339 and shows how to fix it: From 269828b961e0dbf5c39880896de36cef48b99a2d Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 15:57:23 -0700 Subject: [PATCH 0059/1239] Update compiler-warning-level-4-c4365.md --- .../compiler-warnings/compiler-warning-level-4-c4365.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md index 81ddfa0ed0..d26dec6ad7 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4365.md @@ -9,9 +9,9 @@ helpviewer_keywords: ["C4365"] > 'action' : conversion from 'type_1' to 'type_2', signed/unsigned mismatch -For example, you tried to convert an unsigned value to a signed value. This can cause unexpected results if the source value at runtime in not in the range of the destination type. Such as a negative value being convrted into a signed value. +For example, you tried to convert an unsigned value to a signed value. This pattern can cause unexpected results when the source value at runtime in not in the range of the destination type. Such as a negative value being converted into a signed value. -C4365 is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). +C4365 is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). ## Example From 7f4afe19b7b3f62b23452a25ab8c714057c85c09 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:00:47 -0700 Subject: [PATCH 0060/1239] Update compiler-warnings-c4200-through-c4399.md --- .../compiler-warnings/compiler-warnings-c4200-through-c4399.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md index 878223f287..161e23b861 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4200-through-c4399.md @@ -6,7 +6,7 @@ f1_keywords: ["C4203", "C4277", "C4279", "C4298", "C4299", "C4301", "C4303", "C4 --- # Compiler warnings C4200 through C4399 -The articles in this section of the documentation explain a subset of the warning messages that are generated by the compiler. +The articles in this section of the documentation explain a subset of the warning messages that the compiler generates. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] From c4efa2247cac63da4476adf8dd105b28a9aecd9a Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:02:10 -0700 Subject: [PATCH 0061/1239] Update c4371.md --- docs/error-messages/compiler-warnings/c4371.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/c4371.md b/docs/error-messages/compiler-warnings/c4371.md index 10d29b3f10..aed32ad81b 100644 --- a/docs/error-messages/compiler-warnings/c4371.md +++ b/docs/error-messages/compiler-warnings/c4371.md @@ -9,6 +9,6 @@ helpviewer_keywords: ["C4371"] > '*classname*': layout of class may have changed from a previous version of the compiler due to better packing of member '*member*' -Warning C4371 tells you that the layout created by the current compiler may be different from the layout generated by previous versions of the compiler. This may be significant for serialization operations or operating system interfaces that rely on a particular memory layout. In most other cases, this warning is safe to ignore. +Warning C4371 tells you that the layout created by the current compiler may be different from the layout generated by previous versions of the compiler. This difference may be significant for serialization operations or operating system interfaces that rely on a particular memory layout. In most other cases, this warning is safe to ignore. Warning C4371 is off by default. For more information, see [Compiler Warnings That Are Off By Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). From 06a473e2273296754749e74b8d006439f3466213 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:04:51 -0700 Subject: [PATCH 0062/1239] Update compiler-warning-c4394.md --- docs/error-messages/compiler-warnings/compiler-warning-c4394.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md index 5edbea8bfc..1e6a3dec20 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md @@ -13,7 +13,7 @@ A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** You can declare a managed function to have public accessibility. For more information, see [Type visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Type_visibility) and [Member visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Member_visibility). -C4394 is always issued as an error. You can turn off this warning or change its level with `#pragma warning` or **/wd**; see [warning](../../preprocessor/warning.md) or [/w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level)](../../build/reference/compiler-option-warning-level.md) for more information. +C4394 is always issued as an error. You can turn off this warning or change its level with `#pragma warning` or **/wd**. For more information, see [warning](../../preprocessor/warning.md) or [/w, /W0, /W1, /W2, /W3, /W4, /w1, /w2, /w3, /w4, /Wall, /wd, /we, /wo, /Wv, /WX (Warning Level)](../../build/reference/compiler-option-warning-level.md). ## Example From a27f6e3e8cef18ab0941f68b9c5d56b6190738b9 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:05:42 -0700 Subject: [PATCH 0063/1239] Update compiler-warning-level-1-c4264.md --- .../compiler-warnings/compiler-warning-level-1-c4264.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md index 34352b2504..4fe4000068 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4264.md @@ -11,4 +11,4 @@ helpviewer_keywords: ["C4264"] C4264 is always generated after [C4263](../../error-messages/compiler-warnings/compiler-warning-level-4-c4263.md). -This warning is off by default. For more information see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). From f1f31fb3be88c5138be390cd3aa04aca3f4a0345 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:08:36 -0700 Subject: [PATCH 0064/1239] Update compiler-warning-c4394.md --- docs/error-messages/compiler-warnings/compiler-warning-c4394.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md index 1e6a3dec20..ebc5db940c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4394"] > 'function' : per-appdomain symbol should not be marked with __declspec(dllexport) -A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) aren`t supported for managed functions. +A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) are not supported for managed functions. You can declare a managed function to have public accessibility. For more information, see [Type visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Type_visibility) and [Member visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Member_visibility). From 82f22c508b6e50d0ae78d88eb9663604504b0f35 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:09:20 -0700 Subject: [PATCH 0065/1239] Update compiler-warning-level-1-c4399.md --- .../compiler-warnings/compiler-warning-level-1-c4399.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md index f2f1db563b..39947ec818 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4399.md @@ -14,7 +14,7 @@ ms.assetid: f58d9ba7-71a0-4c3b-b26f-f946dda8af30 The **/clr:pure** compiler option is deprecated in Visual Studio 2015 and unsupported in Visual Studio 2017. -Data from a native image or an image with native and common language runtime (CLR) constructs cannot be imported into a pure image. To resolve this warning, compile with **/clr** (not **/clr:pure**) or delete `__declspec(dllimport)`. +Data from a native image or an image with native and common language runtime (CLR) constructs can't be imported into a pure image. To resolve this warning, compile with **/clr** (not **/clr:pure**) or delete `__declspec(dllimport)`. This warning can be issued as an error. Use the [warning](../../preprocessor/warning.md) pragma to disable or change the warning level. From c532e8f1694063df3b8819b37537574c51ba399b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:10:01 -0700 Subject: [PATCH 0066/1239] Update compiler-warning-level-3-c4265.md --- .../compiler-warnings/compiler-warning-level-3-c4265.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md index ba088275e7..5824f4d1c6 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4265.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4265"] When a class has virtual functions but a nonvirtual destructor, objects of the type might not be destroyed properly when the class is destroyed through a base class pointer. -This warning is off by default. For more information see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4265: From 784b502694e0f450bf8b573764c8efc8cead610b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:10:52 -0700 Subject: [PATCH 0067/1239] Update compiler-warning-level-3-c4287.md --- .../compiler-warnings/compiler-warning-level-3-c4287.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md index d93f73fcd3..989066bb6b 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4287.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["C4287"] An unsigned variable was used in an operation with a negative number. -This warning is off by default. For more informaiton, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). ## Example From fd3c968cbaad1ef0d1f9038bbe3ef14cdb93cb45 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:13:09 -0700 Subject: [PATCH 0068/1239] Update compiler-warning-level-3-c4373.md --- .../compiler-warnings/compiler-warning-level-3-c4373.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md index c48860daef..5b0272a83d 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md @@ -11,9 +11,9 @@ helpviewer_keywords: ["C4373"] ## Remarks -Your application contains a method in a derived class that overrides a virtual method in a base class. The parameters in the overriding method differ by a [`const`](../../cpp/const-cpp.md) or [`volatile`](../../cpp/volatile-cpp.md) qualifier from the parameters of the virtual method. +Your application contains a method in a derived class that overrides a virtual method in a base class. The parameters in the overriding method differ by a [`const`](../../cpp/const-cpp.md) or [`volatile`](../../cpp/volatile-cpp.md) qualifier from the parameters of the virtual method. -Versions of the compiler prior to Visual Studio 2008 bind the function to the method in the base class, then issue a warning message. Later versions of the compiler ignore the **`const`** or **`volatile`** qualifier, bind the function to the method in the derived class, then issue warning **C4373**. The latter behavior conforms to the C++ standard. +Prior to Visual Studio 2008, the compiler would bind the function to the method in the base class. Later versions of the compiler ignore the **`const`** or **`volatile`** qualifier, bind the function to the method in the derived class, then issue warning **C4373**. The latter behavior conforms to the C++ standard. ## Example From 6778a5916cae4d4082b3f524162fbd94cbd3c97a Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:15:02 -0700 Subject: [PATCH 0069/1239] Update compiler-warning-c4394.md --- docs/error-messages/compiler-warnings/compiler-warning-c4394.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md index ebc5db940c..d49d391ea0 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-c4394.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-c4394.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C4394"] > 'function' : per-appdomain symbol should not be marked with __declspec(dllexport) -A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) are not supported for managed functions. +A function marked with the [appdomain](../../cpp/appdomain.md) **`__declspec`** modifier is compiled to MSIL (not native), and export tables ([export](../../windows/attributes/export.md) **`__declspec`** modifier) aren't supported for managed functions. You can declare a managed function to have public accessibility. For more information, see [Type visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Type_visibility) and [Member visibility](../../dotnet/how-to-define-and-consume-classes-and-structs-cpp-cli.md#BKMK_Member_visibility). From 3febfcc459446a1dc584044c0b6c26b8f9bfac8b Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:18:52 -0700 Subject: [PATCH 0070/1239] Update compiler-warning-level-3-c4373.md --- .../compiler-warnings/compiler-warning-level-3-c4373.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md index 5b0272a83d..4bcae67303 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4373.md @@ -13,11 +13,11 @@ helpviewer_keywords: ["C4373"] Your application contains a method in a derived class that overrides a virtual method in a base class. The parameters in the overriding method differ by a [`const`](../../cpp/const-cpp.md) or [`volatile`](../../cpp/volatile-cpp.md) qualifier from the parameters of the virtual method. -Prior to Visual Studio 2008, the compiler would bind the function to the method in the base class. Later versions of the compiler ignore the **`const`** or **`volatile`** qualifier, bind the function to the method in the derived class, then issue warning **C4373**. The latter behavior conforms to the C++ standard. +Before Visual Studio 2008, the compiler would bind the function to the method in the base class. Later versions of the compiler ignore the **`const`** or **`volatile`** qualifier, bind the function to the method in the derived class, then issue warning **C4373**. The latter behavior conforms to the C++ standard. ## Example -The following code example generates warning C4373. To resolve this issue, you can either make the override use the same CV-qualifiers as the base member function, or if you didn't intend to create an override, you can give the function in the derived class a different name. +The following code example generates warning C4373. To resolve this issue, make the override use the same CV-qualifiers as the base member function. If you didn't intend to create an override, rename the function in the derived class. ```cpp // c4373.cpp From 1a953ef99af8687fd0b29ccba8cd76a38e7737d0 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:56:27 -0700 Subject: [PATCH 0071/1239] Learn Editor: Update compiler-error-c3859.md --- .../compiler-errors-2/compiler-error-c3859.md | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index f2f7e9ae44..de1fc1715d 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -8,8 +8,22 @@ ms.assetid: 40e93b25-4393-4467-90de-035434a665c7 --- # Compiler Error C3859 -> virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm*value*' or greater +> Failed to create virtual memory for PCH -The virtual memory allocated for your precompiled header is too small for the amount of data the compiler is trying to put in it. Starting in Visual Studio 2015, the **`/Zm`** recommendation is only significant when using the `#pragma hdrstop` directive. In other cases, it's a spurious error that indicates Windows virtual memory pressure issues. +The error will have one of the following continuations: +>PCH: Address is not a multiple of the system's allocation granularity +>PCH: The chunk has not been previously reserved +>PCH: Commit size too large +>PCH: Unable to commit memory across file map +>PCH: Exhausted chunk list before committing all bytes +>PCH: Unexpected end of chunk list while trying to free +>PCH: Shouldn't be hitting a file map in the decommit case +>PCH: Invalid chunk +>PCH: Map size too large +>PCH: Unable to map file: memory already committed +>PCH: File map already in place +>PCH: Unable to get the requested block of memory +>consider using /Fp to allow the compiler to reserve the memory early + +The virtual memory allocated for your precompiled header is too small for the amount of data the compiler is trying to put in it. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). -If your precompiled header uses a `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). From da85bd62815b277a409e70135db74fbad3a70e83 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:56:35 -0700 Subject: [PATCH 0072/1239] update Metadata --- docs/error-messages/compiler-errors-2/compiler-error-c3859.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index de1fc1715d..62df0b5480 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -4,7 +4,6 @@ title: "Compiler Error C3859" ms.date: 02/22/2022 f1_keywords: ["C3859"] helpviewer_keywords: ["C3859"] -ms.assetid: 40e93b25-4393-4467-90de-035434a665c7 --- # Compiler Error C3859 From dfaee429ee5a7c31ffa2c051e9b2ee05aa123c59 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 4 Apr 2024 16:57:30 -0700 Subject: [PATCH 0073/1239] Learn Editor: Update compiler-errors-c3500-through-c3999.md --- .../compiler-errors-2/compiler-errors-c3500-through-c3999.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md index 414f0b1067..30b81e309a 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md @@ -372,7 +372,7 @@ The articles in this section of the documentation explain a subset of the error |[Compiler error C3856](compiler-error-c3856.md)|'*class*': class is not a class template/generic| |[Compiler error C3857](compiler-error-c3857.md)|'*template*': multiple template/generic parameter lists are not allowed| |[Compiler error C3858](compiler-error-c3858.md)|'*identifier*': cannot be redeclared in current scope| -|[Compiler error C3859](compiler-error-c3859.md)|virtual memory range for PCH exceeded; please recompile with a command line option of '`-Zm`*number*' or greater| +|[Compiler error C3859](compiler-error-c3859.md)|Failed to create virtual memory for PCH| |[Compiler error C3860](compiler-error-c3860.md)|template/generic argument list following class template/generic name must list parameters in the order used in template/generic parameter list| |[Compiler error C3861](compiler-error-c3861.md)|'*identifier*': identifier not found| |[Compiler error C3862](compiler-error-c3862.md)|'*function*': cannot compile an unmanaged function with `/clr:pure` or `/clr:safe`| From 113ee82fb6431967fe376a1866922376b5a4fe9b Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Fri, 5 Apr 2024 09:09:42 +0100 Subject: [PATCH 0074/1239] Enhance /std documentation with reference to /Zc:__cplusplus This change makes it much clearer as to what is required for C++ standards conformance when using the /std option - Specify Language Standard Version for C++. Motivation: The /std option implies standards conformance to C++ standards, yet it does not provide the most basic of conformance as it does not predefine the __cplusplus macro as mandated by the C++ standard (in section "Predefined macro names" - [cpp.predefined]). In order to conform to the standard, the /Zc:__cplusplus option is additionally required and this should be very clear in the documentation. --- docs/build/reference/std-specify-language-standard-version.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index ec24850a1b..eea2705af8 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -28,6 +28,8 @@ The Microsoft C++ compiler in Visual Studio 2017 and later versions doesn't supp The **`/std`** option in effect during a C++ compilation can be detected by use of the [`_MSVC_LANG`](../../preprocessor/predefined-macros.md) preprocessor macro. For more information, see [Preprocessor Macros](../../preprocessor/predefined-macros.md). +The [`/Zc:__cplusplus`](zc-cplusplus.md) option must additionally be used for the `__cplusplus` macro to be correctly defined for the appropriate C++ standard. + **`/std:c++14`**\ The **`/std:c++14`** option enables C++14 standard-specific features implemented by the MSVC compiler. This option is the default for code compiled as C++. It's available starting in Visual Studio 2015 Update 3. @@ -123,5 +125,6 @@ For more information, see the C Standard library features section of [Microsoft ## See also +[`/Zc:__cplusplus[-]`](zc-cplusplus.md)
[MSVC compiler options](compiler-options.md)
[MSVC compiler command-line syntax](compiler-command-line-syntax.md) From e5ea0f7b7616c2384259c1d8cdd8db27f58acb1d Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 5 Apr 2024 09:59:29 -0700 Subject: [PATCH 0075/1239] Update compiler-error-c3859.md --- docs/error-messages/compiler-errors-2/compiler-error-c3859.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index 62df0b5480..b71feea5bf 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C3859"] > Failed to create virtual memory for PCH -The error will have one of the following continuations: +The message will have one of the following notes: >PCH: Address is not a multiple of the system's allocation granularity >PCH: The chunk has not been previously reserved >PCH: Commit size too large @@ -24,5 +24,5 @@ The error will have one of the following continuations: >PCH: Unable to get the requested block of memory >consider using /Fp to allow the compiler to reserve the memory early -The virtual memory allocated for your precompiled header is too small for the amount of data the compiler is trying to put in it. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). +There isn't enough virtual memory allocated for your precompiled header. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). From 3059e82e99f09b4b6036cbd46d550e4132325945 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 5 Apr 2024 13:42:32 -0700 Subject: [PATCH 0076/1239] Update std-specify-language-standard-version.md Add info about what to set __cplusplus to --- .../reference/std-specify-language-standard-version.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index eea2705af8..58a1bb4dcd 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -28,7 +28,12 @@ The Microsoft C++ compiler in Visual Studio 2017 and later versions doesn't supp The **`/std`** option in effect during a C++ compilation can be detected by use of the [`_MSVC_LANG`](../../preprocessor/predefined-macros.md) preprocessor macro. For more information, see [Preprocessor Macros](../../preprocessor/predefined-macros.md). -The [`/Zc:__cplusplus`](zc-cplusplus.md) option must additionally be used for the `__cplusplus` macro to be correctly defined for the appropriate C++ standard. +> [!IMPORTANT] +> Because some existing code depends on the value of the macro `__cplusplus` being 199711L, the MSVC compiler doesn't change the value of this macro unless you explicitly opt in by setting [`/Zc:__cplusplus`](zc-cplusplus.md). Here are the values for `__cplusplus` depending on the language version you are compiling with: +> | Language version | __cplusplus value | +> | `/std:c++14` | 201402 | +> | `/std:c++17` | 201703 | +> | `/std:c++20` | 202002 | **`/std:c++14`**\ The **`/std:c++14`** option enables C++14 standard-specific features implemented by the MSVC compiler. This option is the default for code compiled as C++. It's available starting in Visual Studio 2015 Update 3. From 1356b993b9c6e576744d7f32222278dab5b62dde Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 5 Apr 2024 13:43:45 -0700 Subject: [PATCH 0077/1239] Update std-specify-language-standard-version.md minor housekeeping --- .../reference/std-specify-language-standard-version.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index 58a1bb4dcd..f684e0b79b 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -1,7 +1,7 @@ --- title: "/std (Specify Language Standard Version)" description: "The MSVC compiler option /std specifies the C or C++ language standard supported by the compiler." -ms.date: 11/13/2023 +ms.date: 4/5/2023 f1_keywords: ["/std", "-std", "/std:c++14", "/std:c++17", "/std:c++20", "/std:c11", "/std:c17", "/std:clatest", "VC.Project.VCCLCompilerTool.CppLanguageStandard"] --- # `/std` (Specify Language Standard Version) @@ -130,6 +130,6 @@ For more information, see the C Standard library features section of [Microsoft ## See also -[`/Zc:__cplusplus[-]`](zc-cplusplus.md)
-[MSVC compiler options](compiler-options.md)
+[`/Zc:__cplusplus[-]`](zc-cplusplus.md)\ +[MSVC compiler options](compiler-options.md)\ [MSVC compiler command-line syntax](compiler-command-line-syntax.md) From 2b8e24ea9601b7ff0ba290c8f204967169db49bc Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 5 Apr 2024 14:11:13 -0700 Subject: [PATCH 0078/1239] Update compiler-error-c3859.md --- .../compiler-errors-2/compiler-error-c3859.md | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index b71feea5bf..b5a80a6135 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -10,19 +10,25 @@ helpviewer_keywords: ["C3859"] > Failed to create virtual memory for PCH The message will have one of the following notes: ->PCH: Address is not a multiple of the system's allocation granularity ->PCH: The chunk has not been previously reserved ->PCH: Commit size too large ->PCH: Unable to commit memory across file map ->PCH: Exhausted chunk list before committing all bytes ->PCH: Unexpected end of chunk list while trying to free ->PCH: Shouldn't be hitting a file map in the decommit case ->PCH: Invalid chunk ->PCH: Map size too large ->PCH: Unable to map file: memory already committed ->PCH: File map already in place ->PCH: Unable to get the requested block of memory ->consider using /Fp to allow the compiler to reserve the memory early +>the system returned code *error code*: *OS error message*\ +>PCH: Address is not a multiple of the system's allocation granularity\ +>PCH: The chunk has not been previously reserved\ +>PCH: Commit size too large\ +>PCH: Unable to commit memory across file map\ +>PCH: Exhausted chunk list before committing all bytes\ +>PCH: Unexpected end of chunk list while trying to free\ +>PCH: Shouldn't be hitting a file map in the decommit case\ +>PCH: Invalid chunk\ +>PCH: Map size too large\ +>PCH: Unable to map file: memory already committed\ +>PCH: File map already in place\ +>PCH: Unable to get the requested block of memory\ +>consider using /Fp to allow the compiler to reserve the memory early\ There isn't enough virtual memory allocated for your precompiled header. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). +This disganotic primarily in two scenarios. + +The first scenario is that the system is overloaded with multiple `/Yu` compile requests at the same time. In this scenario setting the maximum starting virtual memory size typically resolves the issue. + +The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory which conflicts with where the PCH must reside. For example, `msbuild.exe` will inject `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag will ensure that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLL. These failures can be intermittent because Windows ASLR will allocate memory at different address across different process invocations. Without `/Fp`, memory for the PCH cannot be allocated until the compiler has compiled enough of the program to see the header file specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it is much more likely that the memory required by the PCH will already be reserved. From ef2193db2a97ba321b52cb53665ee03878108023 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 5 Apr 2024 14:19:08 -0700 Subject: [PATCH 0079/1239] Update compiler-error-c3859.md --- .../compiler-errors-2/compiler-error-c3859.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index b5a80a6135..a41cc8554d 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -9,7 +9,7 @@ helpviewer_keywords: ["C3859"] > Failed to create virtual memory for PCH -The message will have one of the following notes: +The message has one of the following notes: >the system returned code *error code*: *OS error message*\ >PCH: Address is not a multiple of the system's allocation granularity\ >PCH: The chunk has not been previously reserved\ @@ -29,6 +29,6 @@ There isn't enough virtual memory allocated for your precompiled header. If your This disganotic primarily in two scenarios. -The first scenario is that the system is overloaded with multiple `/Yu` compile requests at the same time. In this scenario setting the maximum starting virtual memory size typically resolves the issue. +The first scenario is that the system is overloaded with multiple `/Yu` compile requests at the same time. Setting the maximum starting virtual memory size typically resolves this issue. -The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory which conflicts with where the PCH must reside. For example, `msbuild.exe` will inject `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag will ensure that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLL. These failures can be intermittent because Windows ASLR will allocate memory at different address across different process invocations. Without `/Fp`, memory for the PCH cannot be allocated until the compiler has compiled enough of the program to see the header file specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it is much more likely that the memory required by the PCH will already be reserved. +The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory that conflicts with where the PCH must reside. For example, `msbuild.exe` injects `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag ensures that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLL. These failures can be intermittent because Windows ASLR allocates memory at different address across different process invocations. Without `/Fp`, memory for the PCH can't be allocated until the compiler finds the header file `#include` specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it's much more likely that the memory required by the PCH is reserved by somthing else. From 5d102d690c76952cd24aae8c73c8023640aaa1fa Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 5 Apr 2024 14:22:20 -0700 Subject: [PATCH 0080/1239] Update compiler-errors-c3500-through-c3999.md --- .../compiler-errors-2/compiler-errors-c3500-through-c3999.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md index 30b81e309a..5fb6456c64 100644 --- a/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md +++ b/docs/error-messages/compiler-errors-2/compiler-errors-c3500-through-c3999.md @@ -3,11 +3,10 @@ description: "Learn more about: Compiler errors C3500 through C3999" title: "Compiler errors C3500 through C3999" ms.date: 05/25/2022 f1_keywords: ["C3502", "C3503", "C3504", "C3511", "C3512", "C3513", "C3514", "C3515", "C3516", "C3517", "C3518", "C3520", "C3521", "C3522", "C3523", "C3524", "C3525", "C3526", "C3527", "C3528", "C3529", "C3534", "C3542", "C3543", "C3544", "C3545", "C3546", "C3547", "C3548", "C3549", "C3557", "C3558", "C3559", "C3560", "C3561", "C3562", "C3563", "C3564", "C3565", "C3566", "C3567", "C3568", "C3569", "C3570", "C3571", "C3572", "C3573", "C3574", "C3575", "C3576", "C3577", "C3578", "C3579", "C3580", "C3581", "C3582", "C3583", "C3584", "C3585", "C3586", "C3587", "C3588", "C3589", "C3590", "C3591", "C3592", "C3593", "C3594", "C3595", "C3596", "C3597", "C3598", "C3599", "C3600", "C3601", "C3602", "C3604", "C3605", "C3606", "C3613", "C3614", "C3616", "C3617", "C3620", "C3621", "C3635", "C3636", "C3639", "C3643", "C3649", "C3658", "C3659", "C3660", "C3663", "C3664", "C3667", "C3674", "C3676", "C3677", "C3678", "C3679", "C3680", "C3681", "C3682", "C3683", "C3684", "C3685", "C3686", "C3687", "C3688", "C3689", "C3690", "C3691", "C3692", "C3693", "C3694", "C3695", "C3696", "C3700", "C3716", "C3720", "C3725", "C3726", "C3729", "C3730", "C3735", "C3742", "C3746", "C3750", "C3751", "C3756", "C3757", "C3758", "C3759", "C3760", "C3770", "C3773", "C3774", "C3775", "C3776", "C3777", "C3778", "C3780", "C3781", "C3782", "C3783", "C3784", "C3785", "C3786", "C3787", "C3788", "C3789", "C3790", "C3791", "C3792", "C3793", "C3794", "C3795", "C3796", "C3801", "C3802", "C3806", "C3810", "C3811", "C3814", "C3819", "C3822", "C3823", "C3826", "C3827", "C3829", "C3837", "C3840", "C3841", "C3843", "C3844", "C3845", "C3847", "C3863", "C3870", "C3871", "C3875", "C3876", "C3877", "C3878", "C3879", "C3881", "C3882", "C3884", "C3885", "C3897", "C3905", "C3906", "C3907", "C3916", "C3921", "C3924", "C3925", "C3926", "C3927", "C3928", "C3930", "C3931", "C3932", "C3933", "C3934", "C3935", "C3936", "C3937", "C3938", "C3939", "C3940", "C3941", "C3945", "C3946", "C3947", "C3948", "C3949", "C3950", "C3951", "C3952", "C3953", "C3954", "C3955", "C3956", "C3957", "C3958", "C3959", "C3960", "C3961", "C3962", "C3963", "C3964", "C3965", "C3966", "C3967", "C3968", "C3969", "C3970", "C3971", "C3972", "C3973", "C3974", "C3975", "C3976", "C3977", "C3978", "C3979", "C3980", "C3981", "C3982", "C3983", "C3984", "C3985", "C3986", "C3987", "C3988", "C3989", "C3990", "C3991", "C3992", "C3993", "C3994", "C3995", "C3996", "C3997", "C3998", "C3999"] -ms.assetid: bd6f23ad-b300-4e07-8e35-9661cab1585f --- # Compiler errors C3500 through C3999 -The articles in this section of the documentation explain a subset of the error messages that are generated by the compiler. +The articles in this section of the documentation explain a subset of the error messages generated by the compiler. [!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] From fee6f6cc087240e1cfb912d64584f33d020edcef Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 5 Apr 2024 14:23:53 -0700 Subject: [PATCH 0081/1239] Update compiler-error-c3859.md --- docs/error-messages/compiler-errors-2/compiler-error-c3859.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index a41cc8554d..5949952495 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -31,4 +31,4 @@ This disganotic primarily in two scenarios. The first scenario is that the system is overloaded with multiple `/Yu` compile requests at the same time. Setting the maximum starting virtual memory size typically resolves this issue. -The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory that conflicts with where the PCH must reside. For example, `msbuild.exe` injects `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag ensures that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLL. These failures can be intermittent because Windows ASLR allocates memory at different address across different process invocations. Without `/Fp`, memory for the PCH can't be allocated until the compiler finds the header file `#include` specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it's much more likely that the memory required by the PCH is reserved by somthing else. +The second scenario is when the the Windows loader injects a DLL into the process at startup. That injected DLL can allocate memory that conflicts with where the PCH must reside. For example, `msbuild.exe` injects `FileTracker.dll` into every `CL.exe` process at startup. In this scenario, using the [`/Fp` (Name .pch file)](../../build/reference/fp-name-dot-pch-file.md) flag ensures that the memory for the PCH is allocated as early as possible in the `CL.exe` process, before any injected DLL. These failures can be intermittent because Windows ASLR allocates memory at different address across different process invocations. Without `/Fp`, memory for the PCH can't be allocated until the compiler finds the header file `#include` specified in the `/Yu` command line option or the `#pragma hdrstop`. By this time, it's much more likely that the memory required by the PCH is already reserved. From 9ea858dce37f1b85f214540ba65ad0e5e2c683c3 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 5 Apr 2024 14:44:45 -0700 Subject: [PATCH 0082/1239] fix language tagging and some of the code samples --- docs/code-quality/c6031.md | 54 +++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/docs/code-quality/c6031.md b/docs/code-quality/c6031.md index 5a6627f664..541fca4ba5 100644 --- a/docs/code-quality/c6031.md +++ b/docs/code-quality/c6031.md @@ -1,10 +1,9 @@ --- title: Warning C6031 description: "Describes C++ Code Analysis warning C6031 and how to resolve it." -ms.date: 10/04/2022 +ms.date: 4/5/2024 f1_keywords: ["C6031", "RETVAL_IGNORED_FUNC_COULD_FAIL", "__WARNING_RETVAL_IGNORED_FUNC_COULD_FAIL"] helpviewer_keywords: ["C6031"] -ms.assetid: 59e1ef0a-b3ca-4ffa-bcb3-ad2bd22ece22 --- # Warning C6031 @@ -16,44 +15,48 @@ Warning C6031 indicates the caller doesn't check a function's return value for f In general, it isn't safe to assume that calls to functions requiring disk, network, memory, or other resources will succeed. The caller should always check the return value and handle error cases appropriately. Also consider using the `_Must_inspect_result_` annotation, which checks that the value is examined in a useful way. +This warning applies to both C and C++ code. + Code analysis name: `RETVAL_IGNORED_FUNC_COULD_FAIL` ## Example The following code generates warning C6031: -```cpp +```c #include -void f( ) +int main() { - fopen( "test.c", "r" ); // C4996, C6031 return value ignored + fopen("test.c", "r"); // C4996, C6031 return value ignored // code ... } ``` To correct this warning, check the return value of the function as shown in the following code: -```cpp +```c #include -void f( ) +int main() { - FILE *stream; - if ( (stream = fopen( "test.c", "r" )) == NULL ) + FILE* stream; + if ((stream = fopen("test.c", "r")) == NULL) + { return; + } // code ... } ``` The following code uses safe function `fopen_s` to correct this warning: -```cpp +```c #include -void f( ) +int main() { - FILE *stream; + FILE* stream; errno_t err; - if ( (err = fopen_s( &stream, "test.c", "r" )) !=0 ) + if ((err = fopen_s(&stream, "test.c", "r")) != 0) { // code ... } @@ -64,11 +67,14 @@ This warning is also generated if the caller ignores the return value of a funct ```cpp #include -_Check_return_ bool func(); +_Check_return_ bool func() +{ + return true; +} -void test_f() +int main() { - func(); // Warning C6031 + func(); } ``` @@ -76,11 +82,15 @@ To correct the previous warning, check the return value as shown in the followin ```cpp #include -_Check_return_ bool func(); +_Check_return_ bool func() +{ + return true; +} -void test_f() +int main() { - if ( func() ) { + if (func()) + { // code ... } } @@ -91,10 +101,12 @@ In cases where it's necessary to ignore the return value of a function, assign t ```cpp #include #include +#include #include -void f() + +int main() { - std::srand(static_cast(std::time(nullptr))); // set initial seed value to system clock + std::srand(static_cast(std::time(nullptr))); // set initial seed value to system clock std::ignore = std::rand(); // Discard the first result as the few random results are always small. // ... } From 8c8f2dc54feaf0b64833459b88e512b9116fcec2 Mon Sep 17 00:00:00 2001 From: Courtney Wales <62625502+Court72@users.noreply.github.com> Date: Fri, 5 Apr 2024 15:48:47 -0600 Subject: [PATCH 0083/1239] fix table formatting --- docs/build/reference/std-specify-language-standard-version.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index f684e0b79b..71b87716e3 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -30,6 +30,7 @@ The **`/std`** option in effect during a C++ compilation can be detected by use > [!IMPORTANT] > Because some existing code depends on the value of the macro `__cplusplus` being 199711L, the MSVC compiler doesn't change the value of this macro unless you explicitly opt in by setting [`/Zc:__cplusplus`](zc-cplusplus.md). Here are the values for `__cplusplus` depending on the language version you are compiling with: +> > | Language version | __cplusplus value | > | `/std:c++14` | 201402 | > | `/std:c++17` | 201703 | From c54b897f9594d6ee59d581bd4aa342f69ced2b11 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Fri, 5 Apr 2024 14:58:32 -0700 Subject: [PATCH 0084/1239] Update std-specify-language-standard-version.md fix table --- docs/build/reference/std-specify-language-standard-version.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index 71b87716e3..bb789e1d46 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -32,6 +32,7 @@ The **`/std`** option in effect during a C++ compilation can be detected by use > Because some existing code depends on the value of the macro `__cplusplus` being 199711L, the MSVC compiler doesn't change the value of this macro unless you explicitly opt in by setting [`/Zc:__cplusplus`](zc-cplusplus.md). Here are the values for `__cplusplus` depending on the language version you are compiling with: > > | Language version | __cplusplus value | +> |------------------|-------------------| > | `/std:c++14` | 201402 | > | `/std:c++17` | 201703 | > | `/std:c++20` | 202002 | From c7bef2b58711b7a916a68f5fd846ab0dd3ad7630 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 5 Apr 2024 15:51:54 -0700 Subject: [PATCH 0085/1239] Update compiler-error-c3859.md --- docs/error-messages/compiler-errors-2/compiler-error-c3859.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index 5949952495..2ecb7c8add 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -10,7 +10,7 @@ helpviewer_keywords: ["C3859"] > Failed to create virtual memory for PCH The message has one of the following notes: ->the system returned code *error code*: *OS error message*\ +>The system returned code *error code*: *OS error message*\ >PCH: Address is not a multiple of the system's allocation granularity\ >PCH: The chunk has not been previously reserved\ >PCH: Commit size too large\ @@ -23,7 +23,7 @@ The message has one of the following notes: >PCH: Unable to map file: memory already committed\ >PCH: File map already in place\ >PCH: Unable to get the requested block of memory\ ->consider using /Fp to allow the compiler to reserve the memory early\ +>Consider using /Fp to allow the compiler to reserve the memory early There isn't enough virtual memory allocated for your precompiled header. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). From e65a4fffe0ac6a98ba4f78cdd3a113748742b587 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Tue, 9 Apr 2024 22:49:52 +0800 Subject: [PATCH 0086/1239] Remove excess comma --- docs/cppcx/platform-collections-vectoriterator-class.md | 5 ++--- docs/mfc/reference/cmfcbasetabctrl-class.md | 2 +- docs/mfc/reference/cwinappex-class.md | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/cppcx/platform-collections-vectoriterator-class.md b/docs/cppcx/platform-collections-vectoriterator-class.md index fca0453596..3935d05810 100644 --- a/docs/cppcx/platform-collections-vectoriterator-class.md +++ b/docs/cppcx/platform-collections-vectoriterator-class.md @@ -1,11 +1,10 @@ --- -description: "Learn more about: Platform::Collections::VectorIterator Class" title: "Platform::Collections::VectorIterator Class" +description: "Learn more about: Platform::Collections::VectorIterator Class" ms.date: "03/27/2019" ms.topic: "reference" f1_keywords: ["COLLECTION/Platform::Collections::VectorIterator::VectorIterator"] helpviewer_keywords: ["VectorIterator Class"] -ms.assetid: d531cb42-27e0-48a6-bf5e-c265891a18ff --- # Platform::Collections::VectorIterator Class @@ -34,7 +33,7 @@ The typename of the VectorIterator template class. |`difference_type`|A pointer difference (ptrdiff_t).| |`iterator_category`|The category of a random access iterator (::std::random_access_iterator_tag).| |`pointer`|A pointer to an internal type, Platform::Collections::Details::VectorProxy\, that is required for the implementation of VectorIterator.| -|`reference`|A reference to an internal type, Platform::Collections::Details::VectorProxy\,, that is required for the implementation of VectorIterator.| +|`reference`|A reference to an internal type, Platform::Collections::Details::VectorProxy\, that is required for the implementation of VectorIterator.| |`value_type`|The `T` typename.| ### Public Constructors diff --git a/docs/mfc/reference/cmfcbasetabctrl-class.md b/docs/mfc/reference/cmfcbasetabctrl-class.md index 96229275ad..cf6a14ee2c 100644 --- a/docs/mfc/reference/cmfcbasetabctrl-class.md +++ b/docs/mfc/reference/cmfcbasetabctrl-class.md @@ -209,7 +209,7 @@ Adds a new tab to the tab control. virtual void AddTab( CWnd* pTabWnd, LPCTSTR lpszTabLabel, - UINT uiImageId = (UINT)-1,, + UINT uiImageId = (UINT)-1, BOOL bDetachable = TRUE); virtual void AddTab( diff --git a/docs/mfc/reference/cwinappex-class.md b/docs/mfc/reference/cwinappex-class.md index 42271b822e..4d13acd2c3 100644 --- a/docs/mfc/reference/cwinappex-class.md +++ b/docs/mfc/reference/cwinappex-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: CWinAppEx Class" title: "CWinAppEx Class" +description: "Learn more about: CWinAppEx Class" ms.date: "11/04/2016" f1_keywords: ["CWinAppEx", "AFXWINAPPEX/CWinAppEx", "AFXWINAPPEX/CWinAppEx::CWinAppEx", "AFXWINAPPEX/CWinAppEx::CleanState", "AFXWINAPPEX/CWinAppEx::EnableLoadWindowPlacement", "AFXWINAPPEX/CWinAppEx::EnableTearOffMenus", "AFXWINAPPEX/CWinAppEx::EnableUserTools", "AFXWINAPPEX/CWinAppEx::ExitInstance", "AFXWINAPPEX/CWinAppEx::GetBinary", "AFXWINAPPEX/CWinAppEx::GetContextMenuManager", "AFXWINAPPEX/CWinAppEx::GetDataVersion", "AFXWINAPPEX/CWinAppEx::GetDataVersionMajor", "AFXWINAPPEX/CWinAppEx::GetDataVersionMinor", "AFXWINAPPEX/CWinAppEx::GetInt", "AFXWINAPPEX/CWinAppEx::GetKeyboardManager", "AFXWINAPPEX/CWinAppEx::GetMouseManager", "AFXWINAPPEX/CWinAppEx::GetObject", "AFXWINAPPEX/CWinAppEx::GetRegSectionPath", "AFXWINAPPEX/CWinAppEx::GetRegistryBase", "AFXWINAPPEX/CWinAppEx::GetSectionBinary", "AFXWINAPPEX/CWinAppEx::GetSectionInt", "AFXWINAPPEX/CWinAppEx::GetSectionObject", "AFXWINAPPEX/CWinAppEx::GetSectionString", "AFXWINAPPEX/CWinAppEx::GetShellManager", "AFXWINAPPEX/CWinAppEx::GetString", "AFXWINAPPEX/CWinAppEx::GetTooltipManager", "AFXWINAPPEX/CWinAppEx::GetUserToolsManager", "AFXWINAPPEX/CWinAppEx::InitContextMenuManager", "AFXWINAPPEX/CWinAppEx::InitKeyboardManager", "AFXWINAPPEX/CWinAppEx::InitMouseManager", "AFXWINAPPEX/CWinAppEx::InitShellManager", "AFXWINAPPEX/CWinAppEx::InitTooltipManager", "AFXWINAPPEX/CWinAppEx::IsResourceSmartUpdate", "AFXWINAPPEX/CWinAppEx::IsStateExists", "AFXWINAPPEX/CWinAppEx::LoadState", "AFXWINAPPEX/CWinAppEx::OnAppContextHelp", "AFXWINAPPEX/CWinAppEx::OnViewDoubleClick", "AFXWINAPPEX/CWinAppEx::OnWorkspaceIdle", "AFXWINAPPEX/CWinAppEx::SaveState", "AFXWINAPPEX/CWinAppEx::SetRegistryBase", "AFXWINAPPEX/CWinAppEx::ShowPopupMenu", "AFXWINAPPEX/CWinAppEx::WriteBinary", "AFXWINAPPEX/CWinAppEx::WriteInt", "AFXWINAPPEX/CWinAppEx::WriteObject", "AFXWINAPPEX/CWinAppEx::WriteSectionBinary", "AFXWINAPPEX/CWinAppEx::WriteSectionInt", "AFXWINAPPEX/CWinAppEx::WriteSectionObject", "AFXWINAPPEX/CWinAppEx::WriteSectionString", "AFXWINAPPEX/CWinAppEx::WriteString", "AFXWINAPPEX/CWinAppEx::LoadCustomState", "AFXWINAPPEX/CWinAppEx::LoadWindowPlacement", "AFXWINAPPEX/CWinAppEx::OnClosingMainFrame", "AFXWINAPPEX/CWinAppEx::PreLoadState", "AFXWINAPPEX/CWinAppEx::PreSaveState", "AFXWINAPPEX/CWinAppEx::ReloadWindowPlacement", "AFXWINAPPEX/CWinAppEx::SaveCustomState", "AFXWINAPPEX/CWinAppEx::StoreWindowPlacement", "AFXWINAPPEX/CWinAppEx::m_bForceImageReset"] helpviewer_keywords: ["CWinAppEx [MFC], CWinAppEx", "CWinAppEx [MFC], CleanState", "CWinAppEx [MFC], EnableLoadWindowPlacement", "CWinAppEx [MFC], EnableTearOffMenus", "CWinAppEx [MFC], EnableUserTools", "CWinAppEx [MFC], ExitInstance", "CWinAppEx [MFC], GetBinary", "CWinAppEx [MFC], GetContextMenuManager", "CWinAppEx [MFC], GetDataVersion", "CWinAppEx [MFC], GetDataVersionMajor", "CWinAppEx [MFC], GetDataVersionMinor", "CWinAppEx [MFC], GetInt", "CWinAppEx [MFC], GetKeyboardManager", "CWinAppEx [MFC], GetMouseManager", "CWinAppEx [MFC], GetObject", "CWinAppEx [MFC], GetRegSectionPath", "CWinAppEx [MFC], GetRegistryBase", "CWinAppEx [MFC], GetSectionBinary", "CWinAppEx [MFC], GetSectionInt", "CWinAppEx [MFC], GetSectionObject", "CWinAppEx [MFC], GetSectionString", "CWinAppEx [MFC], GetShellManager", "CWinAppEx [MFC], GetString", "CWinAppEx [MFC], GetTooltipManager", "CWinAppEx [MFC], GetUserToolsManager", "CWinAppEx [MFC], InitContextMenuManager", "CWinAppEx [MFC], InitKeyboardManager", "CWinAppEx [MFC], InitMouseManager", "CWinAppEx [MFC], InitShellManager", "CWinAppEx [MFC], InitTooltipManager", "CWinAppEx [MFC], IsResourceSmartUpdate", "CWinAppEx [MFC], IsStateExists", "CWinAppEx [MFC], LoadState", "CWinAppEx [MFC], OnAppContextHelp", "CWinAppEx [MFC], OnViewDoubleClick", "CWinAppEx [MFC], OnWorkspaceIdle", "CWinAppEx [MFC], SaveState", "CWinAppEx [MFC], SetRegistryBase", "CWinAppEx [MFC], ShowPopupMenu", "CWinAppEx [MFC], WriteBinary", "CWinAppEx [MFC], WriteInt", "CWinAppEx [MFC], WriteObject", "CWinAppEx [MFC], WriteSectionBinary", "CWinAppEx [MFC], WriteSectionInt", "CWinAppEx [MFC], WriteSectionObject", "CWinAppEx [MFC], WriteSectionString", "CWinAppEx [MFC], WriteString", "CWinAppEx [MFC], LoadCustomState", "CWinAppEx [MFC], LoadWindowPlacement", "CWinAppEx [MFC], OnClosingMainFrame", "CWinAppEx [MFC], PreLoadState", "CWinAppEx [MFC], PreSaveState", "CWinAppEx [MFC], ReloadWindowPlacement", "CWinAppEx [MFC], SaveCustomState", "CWinAppEx [MFC], StoreWindowPlacement", "CWinAppEx [MFC], m_bForceImageReset"] @@ -402,7 +402,7 @@ A pointer to the global `CMouseManager` object. ### Remarks -If the mouse manager isn't initialized,, this function calls [`CWinAppEx::InitMouseManager`](#initmousemanager) before it returns a pointer. +If the mouse manager isn't initialized, this function calls [`CWinAppEx::InitMouseManager`](#initmousemanager) before it returns a pointer. ##
`CWinAppEx::GetObject` From d868ce1cee64c99bbfa27bae1956aa7ae34cf133 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Tue, 9 Apr 2024 23:04:59 +0800 Subject: [PATCH 0087/1239] Remove another excess comma --- docs/atl-mfc-shared/reference/csimplestringt-class.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/atl-mfc-shared/reference/csimplestringt-class.md b/docs/atl-mfc-shared/reference/csimplestringt-class.md index f45b0dee60..968dd5f7ef 100644 --- a/docs/atl-mfc-shared/reference/csimplestringt-class.md +++ b/docs/atl-mfc-shared/reference/csimplestringt-class.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: CSimpleStringT Class" title: "CSimpleStringT Class" +description: "Learn more about: CSimpleStringT Class" ms.date: 01/26/2024 f1_keywords: ["CSimpleStringT", "ATLSIMPSTR/ATL::CSimpleStringT", "ATLSIMPSTR/ATL::CSimpleStringT::PCXSTR", "ATLSIMPSTR/ATL::CSimpleStringT::PXSTR", "ATLSIMPSTR/ATL::CSimpleStringT::CSimpleStringT", "ATLSIMPSTR/ATL::CSimpleStringT::Append", "ATLSIMPSTR/ATL::CSimpleStringT::AppendChar", "ATLSIMPSTR/ATL::CSimpleStringT::CopyChars", "ATLSIMPSTR/ATL::CSimpleStringT::CopyCharsOverlapped", "ATLSIMPSTR/ATL::CSimpleStringT::Empty", "ATLSIMPSTR/ATL::CSimpleStringT::FreeExtra", "ATLSIMPSTR/ATL::CSimpleStringT::GetAllocLength", "ATLSIMPSTR/ATL::CSimpleStringT::GetAt", "ATLSIMPSTR/ATL::CSimpleStringT::GetBuffer", "ATLSIMPSTR/ATL::CSimpleStringT::GetBufferSetLength", "ATLSIMPSTR/ATL::CSimpleStringT::GetLength", "ATLSIMPSTR/ATL::CSimpleStringT::GetManager", "ATLSIMPSTR/ATL::CSimpleStringT::GetString", "ATLSIMPSTR/ATL::CSimpleStringT::IsEmpty", "ATLSIMPSTR/ATL::CSimpleStringT::LockBuffer", "ATLSIMPSTR/ATL::CSimpleStringT::Preallocate", "ATLSIMPSTR/ATL::CSimpleStringT::ReleaseBuffer", "ATLSIMPSTR/ATL::CSimpleStringT::ReleaseBufferSetLength", "ATLSIMPSTR/ATL::CSimpleStringT::SetAt", "ATLSIMPSTR/ATL::CSimpleStringT::SetManager", "ATLSIMPSTR/ATL::CSimpleStringT::SetString", "ATLSIMPSTR/ATL::CSimpleStringT::StringLength", "ATLSIMPSTR/ATL::CSimpleStringT::Truncate", "ATLSIMPSTR/ATL::CSimpleStringT::UnlockBuffer"] helpviewer_keywords: ["shared classes, CSimpleStringT", "strings [C++], ATL class", "CSimpleStringT class"] @@ -1165,7 +1165,7 @@ CSimpleString str(_T("abcdefghi"), pMgr); _tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), str.GetAllocLength()); _tprintf_s(_T("Contents: %s\n"), (LPCTSTR)str); str.Truncate(4); -_tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), , str.GetAllocLength()); +_tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), str.GetAllocLength()); _tprintf_s(_T("Contents: %s\n"), (LPCTSTR)str); ``` @@ -1210,5 +1210,5 @@ Call this method to destroy the `CSimpleStringT` object. ## See also -[Hierarchy Chart](../../mfc/hierarchy-chart.md)
+[Hierarchy Chart](../../mfc/hierarchy-chart.md)\ [ATL/MFC Shared Classes](../../atl-mfc-shared/atl-mfc-shared-classes.md) From ff0b891f58dd95e39ca7110e54071c2bebae390f Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Tue, 9 Apr 2024 16:04:34 -0700 Subject: [PATCH 0088/1239] Update cwinappex-class.md small edit --- docs/mfc/reference/cwinappex-class.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/mfc/reference/cwinappex-class.md b/docs/mfc/reference/cwinappex-class.md index 4d13acd2c3..d9c7ac4fad 100644 --- a/docs/mfc/reference/cwinappex-class.md +++ b/docs/mfc/reference/cwinappex-class.md @@ -5,7 +5,7 @@ ms.date: "11/04/2016" f1_keywords: ["CWinAppEx", "AFXWINAPPEX/CWinAppEx", "AFXWINAPPEX/CWinAppEx::CWinAppEx", "AFXWINAPPEX/CWinAppEx::CleanState", "AFXWINAPPEX/CWinAppEx::EnableLoadWindowPlacement", "AFXWINAPPEX/CWinAppEx::EnableTearOffMenus", "AFXWINAPPEX/CWinAppEx::EnableUserTools", "AFXWINAPPEX/CWinAppEx::ExitInstance", "AFXWINAPPEX/CWinAppEx::GetBinary", "AFXWINAPPEX/CWinAppEx::GetContextMenuManager", "AFXWINAPPEX/CWinAppEx::GetDataVersion", "AFXWINAPPEX/CWinAppEx::GetDataVersionMajor", "AFXWINAPPEX/CWinAppEx::GetDataVersionMinor", "AFXWINAPPEX/CWinAppEx::GetInt", "AFXWINAPPEX/CWinAppEx::GetKeyboardManager", "AFXWINAPPEX/CWinAppEx::GetMouseManager", "AFXWINAPPEX/CWinAppEx::GetObject", "AFXWINAPPEX/CWinAppEx::GetRegSectionPath", "AFXWINAPPEX/CWinAppEx::GetRegistryBase", "AFXWINAPPEX/CWinAppEx::GetSectionBinary", "AFXWINAPPEX/CWinAppEx::GetSectionInt", "AFXWINAPPEX/CWinAppEx::GetSectionObject", "AFXWINAPPEX/CWinAppEx::GetSectionString", "AFXWINAPPEX/CWinAppEx::GetShellManager", "AFXWINAPPEX/CWinAppEx::GetString", "AFXWINAPPEX/CWinAppEx::GetTooltipManager", "AFXWINAPPEX/CWinAppEx::GetUserToolsManager", "AFXWINAPPEX/CWinAppEx::InitContextMenuManager", "AFXWINAPPEX/CWinAppEx::InitKeyboardManager", "AFXWINAPPEX/CWinAppEx::InitMouseManager", "AFXWINAPPEX/CWinAppEx::InitShellManager", "AFXWINAPPEX/CWinAppEx::InitTooltipManager", "AFXWINAPPEX/CWinAppEx::IsResourceSmartUpdate", "AFXWINAPPEX/CWinAppEx::IsStateExists", "AFXWINAPPEX/CWinAppEx::LoadState", "AFXWINAPPEX/CWinAppEx::OnAppContextHelp", "AFXWINAPPEX/CWinAppEx::OnViewDoubleClick", "AFXWINAPPEX/CWinAppEx::OnWorkspaceIdle", "AFXWINAPPEX/CWinAppEx::SaveState", "AFXWINAPPEX/CWinAppEx::SetRegistryBase", "AFXWINAPPEX/CWinAppEx::ShowPopupMenu", "AFXWINAPPEX/CWinAppEx::WriteBinary", "AFXWINAPPEX/CWinAppEx::WriteInt", "AFXWINAPPEX/CWinAppEx::WriteObject", "AFXWINAPPEX/CWinAppEx::WriteSectionBinary", "AFXWINAPPEX/CWinAppEx::WriteSectionInt", "AFXWINAPPEX/CWinAppEx::WriteSectionObject", "AFXWINAPPEX/CWinAppEx::WriteSectionString", "AFXWINAPPEX/CWinAppEx::WriteString", "AFXWINAPPEX/CWinAppEx::LoadCustomState", "AFXWINAPPEX/CWinAppEx::LoadWindowPlacement", "AFXWINAPPEX/CWinAppEx::OnClosingMainFrame", "AFXWINAPPEX/CWinAppEx::PreLoadState", "AFXWINAPPEX/CWinAppEx::PreSaveState", "AFXWINAPPEX/CWinAppEx::ReloadWindowPlacement", "AFXWINAPPEX/CWinAppEx::SaveCustomState", "AFXWINAPPEX/CWinAppEx::StoreWindowPlacement", "AFXWINAPPEX/CWinAppEx::m_bForceImageReset"] helpviewer_keywords: ["CWinAppEx [MFC], CWinAppEx", "CWinAppEx [MFC], CleanState", "CWinAppEx [MFC], EnableLoadWindowPlacement", "CWinAppEx [MFC], EnableTearOffMenus", "CWinAppEx [MFC], EnableUserTools", "CWinAppEx [MFC], ExitInstance", "CWinAppEx [MFC], GetBinary", "CWinAppEx [MFC], GetContextMenuManager", "CWinAppEx [MFC], GetDataVersion", "CWinAppEx [MFC], GetDataVersionMajor", "CWinAppEx [MFC], GetDataVersionMinor", "CWinAppEx [MFC], GetInt", "CWinAppEx [MFC], GetKeyboardManager", "CWinAppEx [MFC], GetMouseManager", "CWinAppEx [MFC], GetObject", "CWinAppEx [MFC], GetRegSectionPath", "CWinAppEx [MFC], GetRegistryBase", "CWinAppEx [MFC], GetSectionBinary", "CWinAppEx [MFC], GetSectionInt", "CWinAppEx [MFC], GetSectionObject", "CWinAppEx [MFC], GetSectionString", "CWinAppEx [MFC], GetShellManager", "CWinAppEx [MFC], GetString", "CWinAppEx [MFC], GetTooltipManager", "CWinAppEx [MFC], GetUserToolsManager", "CWinAppEx [MFC], InitContextMenuManager", "CWinAppEx [MFC], InitKeyboardManager", "CWinAppEx [MFC], InitMouseManager", "CWinAppEx [MFC], InitShellManager", "CWinAppEx [MFC], InitTooltipManager", "CWinAppEx [MFC], IsResourceSmartUpdate", "CWinAppEx [MFC], IsStateExists", "CWinAppEx [MFC], LoadState", "CWinAppEx [MFC], OnAppContextHelp", "CWinAppEx [MFC], OnViewDoubleClick", "CWinAppEx [MFC], OnWorkspaceIdle", "CWinAppEx [MFC], SaveState", "CWinAppEx [MFC], SetRegistryBase", "CWinAppEx [MFC], ShowPopupMenu", "CWinAppEx [MFC], WriteBinary", "CWinAppEx [MFC], WriteInt", "CWinAppEx [MFC], WriteObject", "CWinAppEx [MFC], WriteSectionBinary", "CWinAppEx [MFC], WriteSectionInt", "CWinAppEx [MFC], WriteSectionObject", "CWinAppEx [MFC], WriteSectionString", "CWinAppEx [MFC], WriteString", "CWinAppEx [MFC], LoadCustomState", "CWinAppEx [MFC], LoadWindowPlacement", "CWinAppEx [MFC], OnClosingMainFrame", "CWinAppEx [MFC], PreLoadState", "CWinAppEx [MFC], PreSaveState", "CWinAppEx [MFC], ReloadWindowPlacement", "CWinAppEx [MFC], SaveCustomState", "CWinAppEx [MFC], StoreWindowPlacement", "CWinAppEx [MFC], m_bForceImageReset"] --- -# `CWinAppEx` Class +# `CWinAppEx` class `CWinAppEx` handles the application state, saves the state to the registry, loads the state from the registry, initializes application managers, and provides links to those same application managers. @@ -13,7 +13,7 @@ For more detail, see the source code located in the `mfc` folder of your Visual ## Syntax -``` +```cpp class CWinAppEx : public CWinApp ``` From 9c608944d86df0edd0087fe98184a7397ede544d Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Tue, 9 Apr 2024 16:05:56 -0700 Subject: [PATCH 0089/1239] Update csimplestringt-class.md normalizing case for titles --- docs/atl-mfc-shared/reference/csimplestringt-class.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/atl-mfc-shared/reference/csimplestringt-class.md b/docs/atl-mfc-shared/reference/csimplestringt-class.md index 968dd5f7ef..6681333410 100644 --- a/docs/atl-mfc-shared/reference/csimplestringt-class.md +++ b/docs/atl-mfc-shared/reference/csimplestringt-class.md @@ -1,6 +1,6 @@ --- title: "CSimpleStringT Class" -description: "Learn more about: CSimpleStringT Class" +description: "Learn more about: CSimpleStringT class" ms.date: 01/26/2024 f1_keywords: ["CSimpleStringT", "ATLSIMPSTR/ATL::CSimpleStringT", "ATLSIMPSTR/ATL::CSimpleStringT::PCXSTR", "ATLSIMPSTR/ATL::CSimpleStringT::PXSTR", "ATLSIMPSTR/ATL::CSimpleStringT::CSimpleStringT", "ATLSIMPSTR/ATL::CSimpleStringT::Append", "ATLSIMPSTR/ATL::CSimpleStringT::AppendChar", "ATLSIMPSTR/ATL::CSimpleStringT::CopyChars", "ATLSIMPSTR/ATL::CSimpleStringT::CopyCharsOverlapped", "ATLSIMPSTR/ATL::CSimpleStringT::Empty", "ATLSIMPSTR/ATL::CSimpleStringT::FreeExtra", "ATLSIMPSTR/ATL::CSimpleStringT::GetAllocLength", "ATLSIMPSTR/ATL::CSimpleStringT::GetAt", "ATLSIMPSTR/ATL::CSimpleStringT::GetBuffer", "ATLSIMPSTR/ATL::CSimpleStringT::GetBufferSetLength", "ATLSIMPSTR/ATL::CSimpleStringT::GetLength", "ATLSIMPSTR/ATL::CSimpleStringT::GetManager", "ATLSIMPSTR/ATL::CSimpleStringT::GetString", "ATLSIMPSTR/ATL::CSimpleStringT::IsEmpty", "ATLSIMPSTR/ATL::CSimpleStringT::LockBuffer", "ATLSIMPSTR/ATL::CSimpleStringT::Preallocate", "ATLSIMPSTR/ATL::CSimpleStringT::ReleaseBuffer", "ATLSIMPSTR/ATL::CSimpleStringT::ReleaseBufferSetLength", "ATLSIMPSTR/ATL::CSimpleStringT::SetAt", "ATLSIMPSTR/ATL::CSimpleStringT::SetManager", "ATLSIMPSTR/ATL::CSimpleStringT::SetString", "ATLSIMPSTR/ATL::CSimpleStringT::StringLength", "ATLSIMPSTR/ATL::CSimpleStringT::Truncate", "ATLSIMPSTR/ATL::CSimpleStringT::UnlockBuffer"] helpviewer_keywords: ["shared classes, CSimpleStringT", "strings [C++], ATL class", "CSimpleStringT class"] @@ -18,7 +18,7 @@ class CSimpleStringT ### Parameters -*`BaseType`*
+*`BaseType`*\ The character type of the string class. Can be one of the following: - **`char`** (for ANSI character strings). From bd637ea7fbacbaa713dd594906965b7e2e84ca76 Mon Sep 17 00:00:00 2001 From: Tyler Whitney Date: Tue, 9 Apr 2024 16:23:26 -0700 Subject: [PATCH 0090/1239] Update platform-collections-vectoriterator-class.md carried away doing code escapes, normalizing titles. Didn't get them all - should have done this in an editor with search/replace --- ...atform-collections-vectoriterator-class.md | 232 +++++++++--------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/docs/cppcx/platform-collections-vectoriterator-class.md b/docs/cppcx/platform-collections-vectoriterator-class.md index 3935d05810..f7d2ee8c9f 100644 --- a/docs/cppcx/platform-collections-vectoriterator-class.md +++ b/docs/cppcx/platform-collections-vectoriterator-class.md @@ -1,28 +1,28 @@ --- -title: "Platform::Collections::VectorIterator Class" +title: "Platform::Collections::VectorIterator class" description: "Learn more about: Platform::Collections::VectorIterator Class" ms.date: "03/27/2019" ms.topic: "reference" f1_keywords: ["COLLECTION/Platform::Collections::VectorIterator::VectorIterator"] helpviewer_keywords: ["VectorIterator Class"] --- -# Platform::Collections::VectorIterator Class +# `Platform::Collections::VectorIterator` class -Provides a Standard Template Library iterator for objects derived from the Windows Runtime IVector interface. +Provides a Standard Template Library iterator for objects derived from the Windows Runtime `IVector` interface. -VectorIterator is a proxy iterator that stores elements of type VectorProxy\. However, the proxy object is almost never visible to user code. For more information, see [Collections (C++/CX)](../cppcx/collections-c-cx.md). +`VectorIterator` is a proxy iterator that stores elements of type `VectorProxy`. However, the proxy object is almost never visible to user code. For more information, see [Collections (C++/CX)](../cppcx/collections-c-cx.md). ## Syntax -``` +```cpp template class VectorIterator; ``` #### Parameters -*T*
-The typename of the VectorIterator template class. +*`T`*\ +The typename of the `VectorIterator` template class. ### Members @@ -30,37 +30,37 @@ The typename of the VectorIterator template class. |Name|Description| |----------|-----------------| -|`difference_type`|A pointer difference (ptrdiff_t).| -|`iterator_category`|The category of a random access iterator (::std::random_access_iterator_tag).| -|`pointer`|A pointer to an internal type, Platform::Collections::Details::VectorProxy\, that is required for the implementation of VectorIterator.| -|`reference`|A reference to an internal type, Platform::Collections::Details::VectorProxy\, that is required for the implementation of VectorIterator.| +|`difference_type`|A pointer difference (`ptrdiff_t`).| +|`iterator_category`|The category of a random access iterator (`::std::random_access_iterator_tag`).| +|`pointer`|A pointer to an internal type, `Platform::Collections::Details::VectorProxy`, that is required for the implementation of `VectorIterator`.| +|`reference`|A reference to an internal type, `Platform::Collections::Details::VectorProxy`, that is required for the implementation of `VectorIterator`.| |`value_type`|The `T` typename.| -### Public Constructors +### Public constructors |Name|Description| |----------|-----------------| -|[VectorIterator::VectorIterator](#ctor)|Initializes a new instance of the VectorIterator class.| +|[`VectorIterator::VectorIterator`](#ctor)|Initializes a new instance of the `VectorIterator` class.| -### Public Operators +### Public operators |Name|Description| |----------|-----------------| -|[VectorIterator::operator- Operator](#operator-minus)|Subtracts either a specified number of elements from the current iterator yielding a new iterator, or a specified iterator from the current iterator yielding the number of elements between the iterators.| -|[VectorIterator::operator-- Operator](#operator-decrement)|Decrements the current VectorIterator.| -|[VectorIterator::operator!= Operator](#operator-inequality)|Indicates whether the current VectorIterator is not equal to a specified VectorIterator.| -|[VectorIterator::operator* Operator](#operator-dereference)|Retrieves a reference to the element specified by the current VectorIterator.| -|[VectorIterator::operator\[\]](#operator-at)|Retrieves a reference to the element that is a specified displacement from the current VectorIterator.| -|[VectorIterator::operator+ Operator](#operator-plus)|Returns a VectorIterator that references the element at the specified displacement from the specified VectorIterator.| -|[VectorIterator::operator++ Operator](#operator-increment)|Increments the current VectorIterator.| -|[VectorIterator::operator+= Operator](#operator-plus-assign)|Increments the current VectorIterator by the specified displacement.| -|[VectorIterator::operator< Operator](#operator-less-than)|Indicates whether the current VectorIterator is less than a specified VectorIterator.| -|[VectorIterator::operator\<= Operator](#operator-less-than-or-equals)|Indicates whether the current VectorIterator is less than or equal to a specified VectorIterator.| -|[VectorIterator::operator-= Operator](#operator-minus-equals)|Decrements the current VectorIterator by the specified displacement.| -|[VectorIterator::operator== Operator](#operator-equality)|Indicates whether the current VectorIterator is equal to a specified VectorIterator.| -|[VectorIterator::operator> Operator](#operator-greater-than)|Indicates whether the current VectorIterator is greater than a specified VectorIterator.| -|[VectorIterator::operator-> Operator](#operator-arrow)|Retrieves the address of the element referenced by the current VectorIterator.| -|[VectorIterator::operator>= Operator](#operator-greater-than-or-equals)|Indicates whether the current VectorIterator is greater than or equal to a specified VectorIterator.| +|[`VectorIterator::operator-` Operator](#operator-minus)|Subtracts either a specified number of elements from the current iterator yielding a new iterator, or a specified iterator from the current iterator yielding the number of elements between the iterators.| +|[`VectorIterator::operator--` Operator](#operator-decrement)|Decrements the current VectorIterator.| +|[`VectorIterator::operator!=` Operator](#operator-inequality)|Indicates whether the current VectorIterator is not equal to a specified VectorIterator.| +|[`VectorIterator::operator*` Operator](#operator-dereference)|Retrieves a reference to the element specified by the current VectorIterator.| +|[`VectorIterator::operator[]`](#operator-at)|Retrieves a reference to the element that is a specified displacement from the current VectorIterator.| +|[`VectorIterator::operator+` Operator](#operator-plus)|Returns a VectorIterator that references the element at the specified displacement from the specified VectorIterator.| +|[`VectorIterator::operator++` Operator](#operator-increment)|Increments the current VectorIterator.| +|[`VectorIterator::operator+=` Operator](#operator-plus-assign)|Increments the current VectorIterator by the specified displacement.| +|[`VectorIterator::operator<` Operator](#operator-less-than)|Indicates whether the current VectorIterator is less than a specified VectorIterator.| +|[`VectorIterator::operator<=` Operator](#operator-less-than-or-equals)|Indicates whether the current VectorIterator is less than or equal to a specified VectorIterator.| +|[`VectorIterator::operator-=` Operator](#operator-minus-equals)|Decrements the current VectorIterator by the specified displacement.| +|[`VectorIterator::operator==` Operator](#operator-equality)|Indicates whether the current VectorIterator is equal to a specified VectorIterator.| +|[`VectorIterator::operator>` Operator](#operator-greater-than)|Indicates whether the current VectorIterator is greater than a specified VectorIterator.| +|[`VectorIterator::operator->` Operator](#operator-arrow)|Retrieves the address of the element referenced by the current VectorIterator.| +|[`VectorIterator::operator>=` Operator](#operator-greater-than-or-equals)|Indicates whether the current VectorIterator is greater than or equal to a specified VectorIterator.| ## Inheritance Hierarchy @@ -68,83 +68,83 @@ The typename of the VectorIterator template class. ### Requirements -**Header:** collection.h +**Header:** `collection.h` -**Namespace:** Platform::Collections +**Namespace:** `Platform::Collections` -## `VectorIterator::operator->` Operator +## `VectorIterator::operator->` operator Retrieves the address of the element referenced by the current VectorIterator. ### Syntax -``` +```cpp Detail::ArrowProxy operator->() const; ``` ### Return Value -The value of the element that is referenced by the current VectorIterator. +The value of the element that is referenced by the current `VectorIterator`. The type of the return value is an unspecified internal type that is required for the implementation of this operator. -## VectorIterator::operator-- Operator +## `VectorIterator::operator--` operator Decrements the current VectorIterator. ### Syntax -``` +```cpp VectorIterator& operator--(); VectorIterator operator--(int); ``` ### Return Value -The first syntax decrements and then returns the current VectorIterator. The second syntax returns a copy of the current VectorIterator and then decrements the current VectorIterator. +The first syntax decrements and then returns the current `VectorIterator`. The second syntax returns a copy of the current `VectorIterator` and then decrements the current `VectorIterator`. ### Remarks -The first VectorIterator syntax pre-decrements the current VectorIterator. +The first VectorIterator syntax pre-decrements the current `VectorIterator`. The second syntax post-decrements the current VectorIterator. The **`int`** type in the second syntax indicates a post-decrement operation, not an actual integer operand. -## VectorIterator::operator\* Operator +## `VectorIterator::operator*` operator -Retrieves the address of the element specified by the current VectorIterator. +Retrieves the address of the element specified by the current `VectorIterator`. ### Syntax -``` +```cpp reference operator*() const; ``` ### Return Value -The element specified by the current VectorIterator. +The element specified by the current `VectorIterator`. -## VectorIterator::operator== Operator +## `VectorIterator::operator==` operator -Indicates whether the current VectorIterator is equal to a specified VectorIterator. +Indicates whether the current `VectorIterator` is equal to a specified `VectorIterator`. ### Syntax -``` +```cpp bool operator==(const VectorIterator& other) const; ``` ### Parameters -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value **`true`** if the current VectorIterator is equal to *other*; otherwise, **`false`**. -## `VectorIterator::operator>` Operator +## `VectorIterator::operator>` operator -Indicates whether the current VectorIterator is greater than a specified VectorIterator. +Indicates whether the current `VectorIterator` is greater than a specified `VectorIterator`. ### Syntax @@ -154,16 +154,16 @@ bool operator>(const VectorIterator& other) const ### Parameters -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value -**`true`** if the current VectorIterator is greater than *other*; otherwise, **`false`**. +**`true`** if the current VectorIterator is greater than *`other`*; otherwise, **`false`**. -## `VectorIterator::operator>=` Operator +## `VectorIterator::operator>=` operator -Indicates whether the current VectorIterator is greater than or equal to the specified VectorIterator. +Indicates whether the current VectorIterator is greater than or equal to the specified `VectorIterator`. ### Syntax @@ -173,56 +173,56 @@ bool operator>=(const VectorIterator& other) const ### Parameters -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value -**`true`** if the current VectorIterator is greater than or equal to *other*; otherwise, **`false`**. +**`true`** if the current `VectorIterator` is greater than or equal to *`other`*; otherwise, **`false`**. -## VectorIterator::operator++ Operator +## `VectorIterator::operator++` operator -Increments the current VectorIterator. +Increments the current `VectorIterator`. ### Syntax -``` +```cpp VectorIterator& operator++(); VectorIterator operator++(int); ``` ### Return Value -The first syntax increments and then returns the current VectorIterator. The second syntax returns a copy of the current VectorIterator and then increments the current VectorIterator. +The first syntax increments and then returns the current `VectorIterator`. The second syntax returns a copy of the current `VectorIterator` and then increments the current `VectorIterator`. ### Remarks -The first VectorIterator syntax pre-increments the current VectorIterator. +The first `VectorIterator` syntax pre-increments the current `VectorIterator`. -The second syntax post-increments the current VectorIterator. The **`int`** type in the second syntax indicates a post-increment operation, not an actual integer operand. +The second syntax post-increments the current `VectorIterator`. The **`int`** type in the second syntax indicates a post-increment operation, not an actual integer operand. -## VectorIterator::operator!= Operator +## `VectorIterator::operator!=` operator -Indicates whether the current VectorIterator is not equal to a specified VectorIterator. +Indicates whether the current `VectorIterator` is not equal to a specified `VectorIterator`. ### Syntax -``` +```cpp bool operator!=(const VectorIterator& other) const; ``` ### Parameters -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value -**`true`** if the current VectorIterator is not equal to *other*; otherwise, **`false`**. +**`true`** if the current `VectorIterator` is not equal to *other*; otherwise, **`false`**. -## `VectorIterator::operator<` Operator +## `VectorIterator::operator<` operator -Indicates whether the current VectorIterator is less than a specified VectorIterator. +Indicates whether the current `VectorIterator` is less than a specified `VectorIterator`. ### Syntax @@ -232,16 +232,16 @@ bool operator<(const VectorIterator& other) const ### Parameters -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value -**`true`** if the current VectorIterator is less than *other*; otherwise, **`false`**. +**`true`** if the current `VectorIterator` is less than *`other`*; otherwise, **`false`**. -## `VectorIterator::operator<=` Operator +## `VectorIterator::operator<=` operator -Indicates whether the current VectorIterator is less than or equal to a specified VectorIterator. +Indicates whether the current `VectorIterator` is less than or equal to a specified `VectorIterator`. ### Syntax @@ -251,20 +251,20 @@ bool operator<=(const VectorIterator& other) const ### Parameters -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value -**`true`** if the current VectorIterator is less than or equal to *other*; otherwise, **`false`**. +**`true`** if the current `VectorIterator` is less than or equal to *`other`*; otherwise, **`false`**. -## VectorIterator::operator- Operator +## `VectorIterator::operator-` operator Subtracts either a specified number of elements from the current iterator yielding a new iterator, or a specified iterator from the current iterator yielding the number of elements between the iterators. ### Syntax -``` +```cpp VectorIterator operator-(difference_type n) const; difference_type operator-(const VectorIterator& other) const; @@ -272,42 +272,42 @@ difference_type operator-(const VectorIterator& other) const; ### Parameters -*n*
+*`n`*\ A number of elements. -*other*
-Another VectorIterator. +*`other`*\ +Another `VectorIterator`. ### Return Value -The first operator syntax returns a VectorIterator object that is `n` elements less than the current VectorIterator. The second operator syntax returns the number of elements between the current and the `other` VectorIterator. +The first operator syntax returns a `VectorIterator` object that is `n` elements less than the current `VectorIterator`. The second operator syntax returns the number of elements between the current and the `other` `VectorIterator`. -## VectorIterator::operator+= Operator +## `VectorIterator::operator+=` operator -Increments the current VectorIterator by the specified displacement. +Increments the current `VectorIterator` by the specified displacement. ### Syntax -``` +```cpp VectorIterator& operator+=(difference_type n); ``` ### Parameters -*n*
+*`n`*\ A integer displacement. ### Return Value -The updated VectorIterator. +The updated `VectorIterator`. -## VectorIterator::operator+ Operator +## `VectorIterator::operator+` operator -Returns a VectorIterator that references the element at the specified displacement from the specified VectorIterator. +Returns a `VectorIterator` that references the element at the specified displacement from the specified `VectorIterator`. ### Syntax -``` +```cpp VectorIterator operator+(difference_type n); template @@ -318,70 +318,70 @@ inline VectorIterator operator+( ### Parameters -*T*
-In the second syntax, the typename of the VectorIterator. +*`T`*\ +In the second syntax, the typename of the `VectorIterator`. -*n*
+*`n`*\ An integer displacement. -*i*
-In the second syntax, a VectorIterator. +*`i`*\ +In the second syntax, a `VectorIterator`. ### Return Value -In the first syntax, a VectorIterator that references the element at the specified displacement from the current VectorIterator. +In the first syntax, a `VectorIterator` that references the element at the specified displacement from the current `VectorIterator`. -In the second syntax, a VectorIterator that references the element at the specified displacement from the beginning of parameter `i`. +In the second syntax, a `VectorIterator` that references the element at the specified displacement from the beginning of parameter `i`. ### Remarks The first syntax example -## VectorIterator::operator-= Operator +## `VectorIterator::operator-=` operator -Decrements the current VectorIterator by the specified displacement. +Decrements the current `VectorIterator` by the specified displacement. ### Syntax -``` +```cpp VectorIterator& operator-=(difference_type n); ``` ### Parameters -*n*
+*`n`*\ An integer displacement. ### Return Value -The updated VectorIterator. +The updated `VectorIterator`. -## VectorIterator::operator\[\] +## `VectorIterator::operator[]` operator -Retrieves a reference to the element that is a specified displacement from the current VectorIterator. +Retrieves a reference to the element that is a specified displacement from the current `VectorIterator`. ### Syntax -``` +```cpp reference operator[](difference_type n) const; ``` ### Parameters -*n*
+*`n`*\ An integer displacement. ### Return Value -The element that is displaced by `n` elements from the current VectorIterator. +The element that is displaced by `n` elements from the current `VectorIterator`. -## VectorIterator::VectorIterator Constructor +## `VectorIterator::VectorIterator` constructor -Initializes a new instance of the VectorIterator class. +Initializes a new instance of the `VectorIterator` class. ### Syntax -``` +```cpp VectorIterator(); explicit VectorIterator( @@ -390,12 +390,12 @@ explicit VectorIterator( ### Parameters -*v*
-An IVector\ object. +*`v`*\ +An `IVector` object. ### Remarks -The first syntax example is the default constructor. The second syntax example is an explicit constructor that is used to construct a VectorIterator from an IVector\ object. +The first syntax example is the default constructor. The second syntax example is an explicit constructor that is used to construct a `VectorIterator` from an `IVector` object. ## See also From 520476041efd8e07a43774173fc1e97d0b74fbf2 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 9 Apr 2024 16:46:20 -0700 Subject: [PATCH 0091/1239] clarify how macro value is set --- .../reference/std-specify-language-standard-version.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/docs/build/reference/std-specify-language-standard-version.md b/docs/build/reference/std-specify-language-standard-version.md index bb789e1d46..e6044538be 100644 --- a/docs/build/reference/std-specify-language-standard-version.md +++ b/docs/build/reference/std-specify-language-standard-version.md @@ -1,7 +1,7 @@ --- title: "/std (Specify Language Standard Version)" description: "The MSVC compiler option /std specifies the C or C++ language standard supported by the compiler." -ms.date: 4/5/2023 +ms.date: 4/9/2023 f1_keywords: ["/std", "-std", "/std:c++14", "/std:c++17", "/std:c++20", "/std:c11", "/std:c17", "/std:clatest", "VC.Project.VCCLCompilerTool.CppLanguageStandard"] --- # `/std` (Specify Language Standard Version) @@ -29,13 +29,7 @@ The Microsoft C++ compiler in Visual Studio 2017 and later versions doesn't supp The **`/std`** option in effect during a C++ compilation can be detected by use of the [`_MSVC_LANG`](../../preprocessor/predefined-macros.md) preprocessor macro. For more information, see [Preprocessor Macros](../../preprocessor/predefined-macros.md). > [!IMPORTANT] -> Because some existing code depends on the value of the macro `__cplusplus` being 199711L, the MSVC compiler doesn't change the value of this macro unless you explicitly opt in by setting [`/Zc:__cplusplus`](zc-cplusplus.md). Here are the values for `__cplusplus` depending on the language version you are compiling with: -> -> | Language version | __cplusplus value | -> |------------------|-------------------| -> | `/std:c++14` | 201402 | -> | `/std:c++17` | 201703 | -> | `/std:c++20` | 202002 | +> Because some existing code depends on the value of the macro `__cplusplus` being `199711L`, the MSVC compiler doesn't change the value of this macro unless you explicitly opt in by setting [`/Zc:__cplusplus`](zc-cplusplus.md). Specify `/Zc:__cplusplus` and the **`/std`** option to set `__cplusplus` to the appropriate value. **`/std:c++14`**\ The **`/std:c++14`** option enables C++14 standard-specific features implemented by the MSVC compiler. This option is the default for code compiled as C++. It's available starting in Visual Studio 2015 Update 3. From 514c2bfca9659e3ab45f606626c17916d9670392 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Wed, 10 Apr 2024 22:58:00 +0800 Subject: [PATCH 0092/1239] Fix stream typos --- docs/c-runtime-library/byte-and-wide-streams.md | 3 +-- docs/standard-library/bitset-operators.md | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/c-runtime-library/byte-and-wide-streams.md b/docs/c-runtime-library/byte-and-wide-streams.md index 634f4df7b8..8ef801bf6c 100644 --- a/docs/c-runtime-library/byte-and-wide-streams.md +++ b/docs/c-runtime-library/byte-and-wide-streams.md @@ -4,7 +4,6 @@ description: "An overview of byte streams in the Microsoft C runtime library." ms.date: "11/04/2016" ms.topic: "conceptual" helpviewer_keywords: ["byte streams", "wide streams"] -ms.assetid: 61ef0587-4cbc-4eb8-aae5-4c298dbbc6f9 --- # Byte and wide streams @@ -12,7 +11,7 @@ A byte stream treats a file as a sequence of bytes. Within the program, the stre By contrast, a wide stream treats a file as a sequence of generalized multibyte characters, which can have a broad range of encoding rules. (Text and binary files are still read and written as previously described.) Within the program, the stream looks like the corresponding sequence of wide characters. Conversions between the two representations occur within the Standard C Library. The conversion rules can, in principle, be altered by a call to [`setlocale`](./reference/setlocale-wsetlocale.md) that alters the category `LC_CTYPE`. Each wide stream determines its conversion rules at the time it becomes wide oriented, and retains these rules even if the category `LC_CTYPE` later changes. -Positioning within a wide stream suffers the same limitations as for text steams. Moreover, the file-position indicator may well have to deal with a state-dependent encoding. Typically, it includes both a byte offset within the stream and an object of type `mbstate_t`. Thus, the only reliable way to obtain a file position within a wide stream is by calling [`fgetpos`](./reference/fgetpos.md), and the only reliable way to restore a position obtained this way is by calling [`fsetpos`](./reference/fsetpos.md). +Positioning within a wide stream suffers the same limitations as for text streams. Moreover, the file-position indicator may well have to deal with a state-dependent encoding. Typically, it includes both a byte offset within the stream and an object of type `mbstate_t`. Thus, the only reliable way to obtain a file position within a wide stream is by calling [`fgetpos`](./reference/fgetpos.md), and the only reliable way to restore a position obtained this way is by calling [`fsetpos`](./reference/fsetpos.md). ## See also diff --git a/docs/standard-library/bitset-operators.md b/docs/standard-library/bitset-operators.md index 6b845e06f0..b042e2cccc 100644 --- a/docs/standard-library/bitset-operators.md +++ b/docs/standard-library/bitset-operators.md @@ -1,9 +1,8 @@ --- -description: "Learn more about: operators" title: " operators" +description: "Learn more about: operators" ms.date: "11/04/2016" f1_keywords: ["bitset/std::operator&", "bitset/std::operator>>", "bitset/std::operator<<", "bitset/std::operator^", "bitset/std::operator|"] -ms.assetid: 84fe6a13-6f6e-4cdc-bf8f-6f65ab1134d4 helpviewer_keywords: ["std::operator& (bitset)", "std::operator>> (bitset)", "std::operator<< (bitset)"] --- # `` operators @@ -107,7 +106,7 @@ int main( ) << b1 << " )" << endl; // Compare converting bitset to a string before - // inserting it into the output steam + // inserting it into the output stream string s1; s1 = b1.template to_string, allocator >( ); From 3796953bec6995f789fa62d525e8add053980e41 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Wed, 10 Apr 2024 23:32:15 +0800 Subject: [PATCH 0093/1239] Tweak nolock function descriptions --- docs/c-runtime-library/reference/fclose-nolock.md | 5 ++--- docs/c-runtime-library/reference/fflush-nolock.md | 5 ++--- .../reference/fgetc-nolock-fgetwc-nolock.md | 5 ++--- .../reference/fputc-nolock-fputwc-nolock.md | 5 ++--- docs/c-runtime-library/reference/fread-nolock-s2.md | 5 ++--- docs/c-runtime-library/reference/fread-nolock.md | 5 ++--- .../reference/fseek-nolock-fseeki64-nolock.md | 5 ++--- .../reference/ftell-nolock-ftelli64-nolock.md | 5 ++--- docs/c-runtime-library/reference/fwrite-nolock.md | 5 ++--- docs/c-runtime-library/reference/getc-nolock-getwc-nolock.md | 5 ++--- .../reference/getch-nolock-getwch-nolock.md | 3 +-- .../reference/getchar-nolock-getwchar-nolock.md | 5 ++--- .../reference/getche-nolock-getwche-nolock.md | 3 +-- .../reference/getdcwd-nolock-wgetdcwd-nolock.md | 3 +-- docs/c-runtime-library/reference/putc-nolock-putwc-nolock.md | 5 ++--- .../reference/putch-nolock-putwch-nolock.md | 5 ++--- .../reference/putchar-nolock-putwchar-nolock.md | 5 ++--- .../reference/ungetc-nolock-ungetwc-nolock.md | 5 ++--- .../ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md | 5 ++--- 19 files changed, 35 insertions(+), 54 deletions(-) diff --git a/docs/c-runtime-library/reference/fclose-nolock.md b/docs/c-runtime-library/reference/fclose-nolock.md index ca205e0355..b03860a277 100644 --- a/docs/c-runtime-library/reference/fclose-nolock.md +++ b/docs/c-runtime-library/reference/fclose-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fclose_nolock" title: "_fclose_nolock" +description: "Learn more about: _fclose_nolock" ms.date: "4/2/2020" api_name: ["_fclose_nolock", "_o__fclose_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["fclose_nolock", "_fclose_nolock"] helpviewer_keywords: ["streams, closing", "fclose_nolock function", "_fclose_nolock function"] -ms.assetid: b4af4392-5fc8-49bb-9fe2-ca7293d3ce04 --- # `_fclose_nolock` -Closes a stream without thread-locking. +Closes a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/fflush-nolock.md b/docs/c-runtime-library/reference/fflush-nolock.md index 2934639b30..4c83497bc9 100644 --- a/docs/c-runtime-library/reference/fflush-nolock.md +++ b/docs/c-runtime-library/reference/fflush-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fflush_nolock" title: "_fflush_nolock" +description: "Learn more about: _fflush_nolock" ms.date: "4/2/2020" api_name: ["_fflush_nolock", "_o__fflush_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["fflush_nolock", "_fflush_nolock"] helpviewer_keywords: ["fflush_nolock function", "_fflush_nolock function", "streams, flushing", "flushing"] -ms.assetid: 5e33c4a1-b10c-4001-ad01-210757919291 --- # `_fflush_nolock` -Flushes a stream without locking the thread. +Flushes a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/fgetc-nolock-fgetwc-nolock.md b/docs/c-runtime-library/reference/fgetc-nolock-fgetwc-nolock.md index 6ef2d4d806..59604586b6 100644 --- a/docs/c-runtime-library/reference/fgetc-nolock-fgetwc-nolock.md +++ b/docs/c-runtime-library/reference/fgetc-nolock-fgetwc-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fgetc_nolock, _fgetwc_nolock" title: "_fgetc_nolock, _fgetwc_nolock" +description: "Learn more about: _fgetc_nolock, _fgetwc_nolock" ms.date: "4/2/2020" api_name: ["_fgetc_nolock", "_fgetwc_nolock", "_o__fgetc_nolock", "_o__fgetwc_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_fgetwc_nolock", "fgettc_nolock", "fgetwc_nolock", "_fgetc_nolock", "_fgettc_nolock", "fgetc_nolock"] helpviewer_keywords: ["fgetc_nolock function", "fgetwc_nolock function", "_fgetwc_nolock function", "characters, reading", "_fgetc_nolock function", "streams, reading characters from", "fgettc_nolock function", "reading characters from streams", "_fgettc_nolock function"] -ms.assetid: fb8e7c5b-4503-493a-879e-6a1db75aa114 --- # `_fgetc_nolock`, `_fgetwc_nolock` -Reads a character from a stream without locking the thread. +Reads a character from a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/fputc-nolock-fputwc-nolock.md b/docs/c-runtime-library/reference/fputc-nolock-fputwc-nolock.md index b5e7c99d06..ded60efc1b 100644 --- a/docs/c-runtime-library/reference/fputc-nolock-fputwc-nolock.md +++ b/docs/c-runtime-library/reference/fputc-nolock-fputwc-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fputc_nolock, _fputwc_nolock" title: "_fputc_nolock, _fputwc_nolock" +description: "Learn more about: _fputc_nolock, _fputwc_nolock" ms.date: "4/2/2020" api_name: ["_fputwc_nolock", "_fputc_nolock", "_o__fputc_nolock", "_o__fputwc_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_fputc_nolock", "fputwc_nolock", "fputc_nolock", "fputtc_nolock", "_fputwc_nolock", "_fputtc_nolock"] helpviewer_keywords: ["streams, writing characters to", "fputwc_nolock function", "fputtc_nolock function", "_fputc_nolock function", "fputc_nolock function", "_fputtc_nolock function", "_fputwc_nolock function"] -ms.assetid: c63eb3ad-58fa-46d0-9249-9c25f815eab9 --- # `_fputc_nolock`, `_fputwc_nolock` -Writes a character to a stream without locking the thread. +Writes a character to a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/fread-nolock-s2.md b/docs/c-runtime-library/reference/fread-nolock-s2.md index e2d09bd776..f471494eae 100644 --- a/docs/c-runtime-library/reference/fread-nolock-s2.md +++ b/docs/c-runtime-library/reference/fread-nolock-s2.md @@ -1,17 +1,16 @@ --- -description: "Learn more about: _fread_nolock_s" title: "_fread_nolock_s2" +description: "Learn more about: _fread_nolock_s" ms.date: "4/2/2020" api_name: ["_fread_nolock_s", "_o__fread_nolock_s"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_fread_nolock_s", "stdio/_fread_nolock_s"] -ms.assetid: 5badb9ab-11df-4e17-8162-30bda2a4572e --- # `_fread_nolock_s` -Reads data from a stream, without locking other threads. This version of [`fread_nolock`](fread-nolock.md) has security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). +Reads data from a stream without locking. This version of [`fread_nolock`](fread-nolock.md) has security enhancements, as described in [Security features in the CRT](../security-features-in-the-crt.md). ## Syntax diff --git a/docs/c-runtime-library/reference/fread-nolock.md b/docs/c-runtime-library/reference/fread-nolock.md index 33a87a6e60..44f32e0cac 100644 --- a/docs/c-runtime-library/reference/fread-nolock.md +++ b/docs/c-runtime-library/reference/fread-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fread_nolock" title: "_fread_nolock" +description: "Learn more about: _fread_nolock" ms.date: "4/2/2020" api_name: ["_fread_nolock", "_o__fread_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_fread_nolock", "fread_nolock"] helpviewer_keywords: ["reading data [C++], from input streams", "data [C++], reading from input stream", "fread_nolock function", "_fread_nolock function", "streams [C++], reading data from"] -ms.assetid: 60e4958b-1097-46f5-a77b-94af5e7dba40 --- # `_fread_nolock` -Reads data from a stream, without locking other threads. +Reads data from a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md b/docs/c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md index 093ec08bc1..9df36b8acd 100644 --- a/docs/c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md +++ b/docs/c-runtime-library/reference/fseek-nolock-fseeki64-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fseek_nolock, _fseeki64_nolock" title: "_fseek_nolock, _fseeki64_nolock" +description: "Learn more about: _fseek_nolock, _fseeki64_nolock" ms.date: "4/2/2020" api_name: ["_fseek_nolock", "_fseeki64_nolock", "_o__fseek_nolock", "_o__fseeki64_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_fseek_nolock", "_fseeki64_nolock", "fseek_nolock", "fseeki64_nolock"] helpviewer_keywords: ["_fseek_nolock function", "fseeki64_nolock function", "file pointers [C++], moving", "fseek_nolock function", "_fseeki64_nolock function", "seek file pointers"] -ms.assetid: 2dd4022e-b715-462b-b935-837561605a02 --- # `_fseek_nolock`, `_fseeki64_nolock` -Moves the file pointer to a specified location. +Moves the file pointer to a specified location without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md b/docs/c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md index 1ea776edcf..7b8c51b173 100644 --- a/docs/c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md +++ b/docs/c-runtime-library/reference/ftell-nolock-ftelli64-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _ftell_nolock, _ftelli64_nolock" title: "_ftell_nolock, _ftelli64_nolock" +description: "Learn more about: _ftell_nolock, _ftelli64_nolock" ms.date: "4/2/2020" api_name: ["_ftelli64_nolock", "_ftell_nolock", "_o__ftell_nolock", "_o__ftelli64_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_ftelli64_nolock", "ftelli64_nolock", "ftell_nolock", "_ftell_nolock"] helpviewer_keywords: ["ftelli64_nolock function", "_ftelli64_nolock function", "_ftell_nolock function", "ftell_nolock function", "file pointers [C++], getting current position"] -ms.assetid: 84e68b0a-32f8-4c4a-90ad-3f2387685ede --- # `_ftell_nolock`, `_ftelli64_nolock` -Gets the current position of a file pointer, without locking the thread. +Gets the current position of a file pointer without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/fwrite-nolock.md b/docs/c-runtime-library/reference/fwrite-nolock.md index 524a968125..1f72d29198 100644 --- a/docs/c-runtime-library/reference/fwrite-nolock.md +++ b/docs/c-runtime-library/reference/fwrite-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _fwrite_nolock" title: "_fwrite_nolock" +description: "Learn more about: _fwrite_nolock" ms.date: "4/2/2020" api_name: ["_fwrite_nolock", "_o__fwrite_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_fwrite_nolock", "fwrite_nolock"] helpviewer_keywords: ["fwrite_nolock function", "streams, writing data to", "_fwrite_nolock function"] -ms.assetid: 2b4ec6ce-742e-4615-8407-44a0a18ec1d7 --- # `_fwrite_nolock` -Writes data to a stream, without locking the thread. +Writes data to a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/getc-nolock-getwc-nolock.md b/docs/c-runtime-library/reference/getc-nolock-getwc-nolock.md index d825ec6c7b..f2ebc85b2a 100644 --- a/docs/c-runtime-library/reference/getc-nolock-getwc-nolock.md +++ b/docs/c-runtime-library/reference/getc-nolock-getwc-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _getc_nolock, _getwc_nolock" title: "_getc_nolock, _getwc_nolock" +description: "Learn more about: _getc_nolock, _getwc_nolock" ms.date: "4/2/2020" api_name: ["_getc_nolock", "_getwc_nolock", "_o__getc_nolock", "_o__getwc_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["getc_nolock", "_gettc_nolock", "_getc_nolock", "getwc_nolock", "gettc_nolock", "_getwc_nolock"] helpviewer_keywords: ["characters, reading", "_getc_nolock function", "_getwc_nolock function", "getwc_nolock function", "streams, reading characters from", "reading characters from streams", "getc_nolock function", "gettc_nolock function", "_gettc_nolock function"] -ms.assetid: eb37b272-e177-41c9-b077-12ce7ffd3b88 --- # `_getc_nolock`, `_getwc_nolock` -Reads a character from a stream. +Reads a character from a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md b/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md index 8c9b4a8a32..6804a86c26 100644 --- a/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md +++ b/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_getch_nolock", "getwch_nolock", "getch_nolock", "_getwch_nolock", "_gettch_nolock", "gettch_nolock"] helpviewer_keywords: ["characters, getting from console", "_getwch_nolock function", "_getch_nolock function", "getwch_nolock function", "_gettch_nolock function", "console, reading from", "getch_nolock function", "gettch_nolock function"] -ms.assetid: 9d248546-26ca-482c-b0c6-55812a987e83 --- # `_getch_nolock`, `_getwch_nolock` -Gets a character from the console without echo and without locking the thread. +Gets a character from the console without echo and without locking. > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). diff --git a/docs/c-runtime-library/reference/getchar-nolock-getwchar-nolock.md b/docs/c-runtime-library/reference/getchar-nolock-getwchar-nolock.md index aaf8bcf23a..2aba163479 100644 --- a/docs/c-runtime-library/reference/getchar-nolock-getwchar-nolock.md +++ b/docs/c-runtime-library/reference/getchar-nolock-getwchar-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _getchar_nolock, _getwchar_nolock" title: "_getchar_nolock, _getwchar_nolock" +description: "Learn more about: _getchar_nolock, _getwchar_nolock" ms.date: "11/04/2016" api_name: ["_getchar_nolock", "_getwchar_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["getwchar_nolock", "_getwchar_nolock", "_getchar_nolock", "getchar_nolock"] helpviewer_keywords: ["_getwchar_nolock function", "getwchar_nolock function", "characters, reading", "_getchar_nolock function", "getchar_nolock function", "standard input, reading from"] -ms.assetid: dc49ba60-0647-4ae9-aa9a-a0618b1666de --- # `_getchar_nolock`, `_getwchar_nolock` -Reads a character from standard input. +Reads a character from the standard input without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md b/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md index 821f722335..000b0dd405 100644 --- a/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md +++ b/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_getche_nolock", "_gettche_nolock", "_getwche_nolock", "getche_nolock", "getwche_nolock", "gettche_nolock"] helpviewer_keywords: ["characters, getting from console", "_gettche_nolock function", "getwche_nolock function", "_getche_nolock function", "getche_nolock function", "console, reading from", "_getwche_nolock function", "gettche_nolock function"] -ms.assetid: 9e853ad4-4d8a-4442-9ae5-da4b434f0b8c --- # `_getche_nolock`, `_getwche_nolock` -Gets a character from the console, with echo and without locking the thread. +Gets a character from the console with echo and without locking. > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). diff --git a/docs/c-runtime-library/reference/getdcwd-nolock-wgetdcwd-nolock.md b/docs/c-runtime-library/reference/getdcwd-nolock-wgetdcwd-nolock.md index 1ee8358edb..b186869ad1 100644 --- a/docs/c-runtime-library/reference/getdcwd-nolock-wgetdcwd-nolock.md +++ b/docs/c-runtime-library/reference/getdcwd-nolock-wgetdcwd-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _getdcwd_nolock, _wgetdcwd_nolock" title: "_getdcwd_nolock, _wgetdcwd_nolock" +description: "Learn more about: _getdcwd_nolock, _wgetdcwd_nolock" ms.date: "11/04/2016" api_name: ["_wgetdcwd_nolock", "_getdcwd_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_wgetdcwd_nolock", "tgetdcwd_nolock", "wgetdcwd_nolock", "_getdcwd_nolock", "_tgetdcwd_nolock", "getdcwd_nolock"] helpviewer_keywords: ["getdcwd_nolock function", "_tgetdcwd_nolock function", "working directory", "tgetdcwd_nolock function", "_getdcwd_nolock function", "current working directory", "wgetdcwd_nolock function", "_wgetdcwd_nolock function", "directories [C++], current working"] -ms.assetid: d9bdf712-43f8-4173-8f9a-844e82beaa97 --- # `_getdcwd_nolock`, `_wgetdcwd_nolock` diff --git a/docs/c-runtime-library/reference/putc-nolock-putwc-nolock.md b/docs/c-runtime-library/reference/putc-nolock-putwc-nolock.md index 2cac422792..6c629ae81f 100644 --- a/docs/c-runtime-library/reference/putc-nolock-putwc-nolock.md +++ b/docs/c-runtime-library/reference/putc-nolock-putwc-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _putc_nolock, _putwc_nolock" title: "_putc_nolock, _putwc_nolock" +description: "Learn more about: _putc_nolock, _putwc_nolock" ms.date: "4/2/2020" api_name: ["_putc_nolock", "_putwc_nolock", "_o__putc_nolock", "_o__putwc_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_puttc_nolock", "puttc_nolock", "putwc_nolock", "_putwc_nolock", "_putc_nolock", "putc_nolock"] helpviewer_keywords: ["puttc_nolock function", "putc_nolock function", "_putc_nolock function", "streams, writing characters to", "characters, writing", "putwc_nolock function", "_puttc_nolock function", "_putwc_nolock function"] -ms.assetid: 3cfc7f21-c9e8-4b7f-b0fb-af0d4d85e7e1 --- # `_putc_nolock`, `_putwc_nolock` -Writes a character to a stream without locking the thread. +Writes a character to a stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/putch-nolock-putwch-nolock.md b/docs/c-runtime-library/reference/putch-nolock-putwch-nolock.md index b3e11e0e26..d97eb45b18 100644 --- a/docs/c-runtime-library/reference/putch-nolock-putwch-nolock.md +++ b/docs/c-runtime-library/reference/putch-nolock-putwch-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _putch_nolock, _putwch_nolock" title: "_putch_nolock, _putwch_nolock" +description: "Learn more about: _putch_nolock, _putwch_nolock" ms.date: "4/2/2020" api_name: ["_putwch_nolock", "_putch_nolock", "_o__putch_nolock", "_o__putwch_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_putch_nolock", "_puttch_nolock", "putch_nolock", "putwch_nolock", "_putwch_nolock"] helpviewer_keywords: ["putwch_nolock function", "puttch_nolock function", "characters, writing", "putch_nolock function", "_putch_nolock function", "_puttch_nolock function", "console, writing characters to", "_putwch_nolock function"] -ms.assetid: edbc811d-bac6-47fa-a872-fe4f3a1590b0 --- # `_putch_nolock`, `_putwch_nolock` -Writes a character to the console without locking the thread. +Writes a character to the console without locking. > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). diff --git a/docs/c-runtime-library/reference/putchar-nolock-putwchar-nolock.md b/docs/c-runtime-library/reference/putchar-nolock-putwchar-nolock.md index 4748670c50..6fe752c348 100644 --- a/docs/c-runtime-library/reference/putchar-nolock-putwchar-nolock.md +++ b/docs/c-runtime-library/reference/putchar-nolock-putwchar-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _putchar_nolock, _putwchar_nolock" title: "_putchar_nolock, _putwchar_nolock" +description: "Learn more about: _putchar_nolock, _putwchar_nolock" ms.date: "11/04/2016" api_name: ["_putchar_nolock", "_putwchar_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["putwchar_nolock", "_puttchar_nolock", "_putchar_nolock", "_putwchar_nolock", "putchar_nolock"] helpviewer_keywords: ["_puttchar_nolock function", "putchar_nolock function", "characters, writing", "standard output, writing to", "putwchar_nolock function", "_putchar_nolock function", "_putwchar_nolock function", "puttchar_nolock function"] -ms.assetid: 9ac68092-bfc3-4352-b486-c3e780220575 --- # `_putchar_nolock`, `_putwchar_nolock` -Writes a character to `stdout` without locking the thread. +Writes a character to `stdout` without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md b/docs/c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md index d1fd1cff63..eba0a2a049 100644 --- a/docs/c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md +++ b/docs/c-runtime-library/reference/ungetc-nolock-ungetwc-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _ungetc_nolock, _ungetwc_nolock" title: "_ungetc_nolock, _ungetwc_nolock" +description: "Learn more about: _ungetc_nolock, _ungetwc_nolock" ms.date: "4/2/2020" api_name: ["_ungetwc_nolock", "_ungetc_nolock", "_o__ungetc_nolock", "_o__ungetwc_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["STDIO/_ungetc_nolock", "CORECRT_WSTDIO/_ungetwc_nolock", "TCHAR/_ungettc_nolock", "_ungetc_nolock", "_ungetwc_nolock", "_ungettc_nolock"] helpviewer_keywords: ["_ungettc_nolock function", "_ungetwc_nolock function", "characters, pushing back onto stream", "_ungetc_nolock function", "ungetwc_nolock function", "ungettc_nolock function", "ungetc_nolock function"] -ms.assetid: aa02d5c2-1be1-46d2-a8c4-b61269e9d465 --- # `_ungetc_nolock`, `_ungetwc_nolock` -Pushes a character back onto the stream. +Pushes a character back onto the stream without locking. ## Syntax diff --git a/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md b/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md index aaec9dbe4d..84a9aae2ec 100644 --- a/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md +++ b/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md @@ -1,6 +1,6 @@ --- -description: "Learn more about: _ungetch, _ungetwch, _ungetch_nolock, _ungetwch_nolock" title: "_ungetch, _ungetwch, _ungetch_nolock, _ungetwch_nolock" +description: "Learn more about: _ungetch, _ungetwch, _ungetch_nolock, _ungetwch_nolock" ms.date: "4/2/2020" api_name: ["_ungetch_nolock", "_ungetwch_nolock", "_ungetwch", "_ungetch", "_o__ungetch", "_o__ungetch_nolock", "_o__ungetwch", "_o__ungetwch_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"] @@ -8,11 +8,10 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["CONIO/_ungetch", "CONIO/_ungetch_nolock", "CORECRT_WCONIO/_ungetwch", "CORECRT_WCONIO/_ungetwch_nolock", "TCHAR/_ungettch", "TCHAR/_ungettch_nolock", "_ungetch", "_ungetch_nolock", "_ungetwch", "_ungetwch_nolock", "_ungettch", "_ungettch_nolock"] helpviewer_keywords: ["_ungetch function", "ungetwch function", "characters, pushing back to console", "_ungettch_nolock function", "ungettch function", "_ungettch function", "ungetch_nolock function", "ungettch_nolock function", "_ungetwch_nolock function", "_ungetch_nolock function", "ungetwch_nolock function", "_ungetwch function"] -ms.assetid: 70ae71c6-228c-4883-a57d-de6d5f873825 --- # `_ungetch`, `_ungetwch`, `_ungetch_nolock`, `_ungetwch_nolock` -Pushes back the last character that's read from the console. +Pushes back the last character that's read from the console without locking. > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). From f5a3d289aca6dfaa309c461679e0b21146135e70 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Thu, 11 Apr 2024 00:38:05 +0800 Subject: [PATCH 0094/1239] Normalize metadata description and remove a change --- docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md | 2 +- .../c-runtime-library/reference/getche-nolock-getwche-nolock.md | 2 +- .../ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md b/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md index 6804a86c26..61bf1a4ace 100644 --- a/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md +++ b/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md @@ -1,6 +1,6 @@ --- title: "_getch_nolock, _getwch_nolock" -description: "API reference for _getch_nolock, and _getwch_nolock; which get a character from the console without echo and without locking the thread." +description: "Learn more about: _getch_nolock, _getwch_nolock" ms.date: "4/2/2020" api_name: ["_getwch_nolock", "_getch_nolock", "_o__getch_nolock", "_o__getwch_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"] diff --git a/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md b/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md index 000b0dd405..c9c6b7ad6f 100644 --- a/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md +++ b/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md @@ -1,6 +1,6 @@ --- title: "_getche_nolock, _getwche_nolock" -description: "API reference for _getche_nolock, and _getwche_nolock; which gets a character from the console, with echo and without locking the thread." +description: "Learn more about: _getche_nolock, _getwche_nolock" ms.date: "4/2/2020" api_name: ["_getche_nolock", "_getwche_nolock", "_o__getche_nolock", "_o__getwche_nolock"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"] diff --git a/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md b/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md index 84a9aae2ec..5c15bfbf42 100644 --- a/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md +++ b/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md @@ -11,7 +11,7 @@ helpviewer_keywords: ["_ungetch function", "ungetwch function", "characters, pus --- # `_ungetch`, `_ungetwch`, `_ungetch_nolock`, `_ungetwch_nolock` -Pushes back the last character that's read from the console without locking. +Pushes back the last character that's read from the console. > [!IMPORTANT] > This API cannot be used in applications that execute in the Windows Runtime. For more information, see [CRT functions not supported in Universal Windows Platform apps](../../cppcx/crt-functions-not-supported-in-universal-windows-platform-apps.md). From f8a9fa4b65a98270c7509269842e97144f35a164 Mon Sep 17 00:00:00 2001 From: Masashi Jobara Date: Thu, 11 Apr 2024 17:53:54 +0900 Subject: [PATCH 0095/1239] The return value string express by 2 charactoer filling with space, not 0 charactor , same as asctimefunction. --- ...time-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index ff9fcbd2f5..efbd48aaa0 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -109,7 +109,7 @@ Zero if successful. If there's a failure due to an invalid parameter, the invali The **`ctime_s`** function converts a time value stored as a [`time_t`](../standard-types.md) structure into a character string. The *`sourceTime`* value is typically obtained from a call to [`time`](time-time32-time64.md), which returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, coordinated universal time (UTC). The return value string contains exactly 26 characters and has the form: -`Wed Jan 02 02:03:55 1980\n\0` +`Wed Jan 2 02:03:55 1980\n\0` A 24-hour clock is used. All fields have a constant width. The new line character ('\n') and the null character ('\0') occupy the last two positions of the string. From 4771ca20a8c5328f37fd1e05813efc8b6c8d5647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Horv=C3=A1th?= Date: Fri, 12 Apr 2024 10:06:49 -0700 Subject: [PATCH 0096/1239] Add missing documentation for C26459. (#5541) * Add missing documentation for C26459. * Fix acrolinx warnings. * Address review comments. --- docs/code-quality/c26459.md | 43 +++++++++++++++++++++++++++++++++++++ docs/code-quality/toc.yml | 2 ++ 2 files changed, 45 insertions(+) create mode 100644 docs/code-quality/c26459.md diff --git a/docs/code-quality/c26459.md b/docs/code-quality/c26459.md new file mode 100644 index 0000000000..0bd5855921 --- /dev/null +++ b/docs/code-quality/c26459.md @@ -0,0 +1,43 @@ +--- +description: "Learn more about: Warning C26459" +title: Warning C26459 +ms.date: 4/10/2024 +f1_keywords: ["C26459", "NO_RAW_POINTER_IN_STL_RANGE_CHECKED"] +helpviewer_keywords: ["C26459"] +--- +# Warning C26459 + +> You called an STL function '%function%' with a raw pointer parameter at position '%position%' that may be unsafe - this relies on the caller to check that the passed values are correct. Consider wrapping your range in a gsl::span and pass as a span iterator (stl.1) + +## Remarks + +Out of bound writes are one of the leading causes of remote code execution vulnerabilities. One remedy is to use bounds checked data structures like `gsl::span`. This warning identifies cases where Standard Template Library (STL) algorithms operate on raw pointers as output ranges. Raw pointers aren't bounds checked. To prevent vulnerabilities, use `gsl::span` instead. + +Code analysis name: `NO_RAW_POINTER_IN_STL_RANGE_CHECKED` + +## Example + +The following code demonstrates undefined behavior because there isn't any bounds checking and `copy_if` writes beyond the provided storage. + +```cpp +void f() +{ + std::vector myints = { 10, 20, 30, 40, 50, 60, 70 }; + int mydestinationArr[7] = { 10, 20, 80 }; + + std::copy_if(myints.begin(), myints.end(), mydestinationArr, [](int i) { return !(i<0); }); // Warning: C26459 +} +``` + +To fix the warning, use `gsl::span` to make sure the output range is bounds checked: + +```cpp +void f() +{ + std::vector myints = { 10, 20, 30, 40, 50, 60, 70 }; + int mydestinationArr[7] = { 10, 20, 80 }; + gsl::span mySpan{mydestinationArr}; + + std::copy_if(myints.begin(), myints.end(), mySpan.begin(), [](int i) { return !(i<0); }); // No warning +} +``` \ No newline at end of file diff --git a/docs/code-quality/toc.yml b/docs/code-quality/toc.yml index 2a5f36d499..049d6ad622 100644 --- a/docs/code-quality/toc.yml +++ b/docs/code-quality/toc.yml @@ -142,6 +142,8 @@ items: href: ../code-quality/c26456.md - name: Warning C26457 href: ../code-quality/c26457.md + - name: Warning C26459 + href: ../code-quality/c26459.md - name: Warning C26460 href: ../code-quality/c26460.md - name: Warning C26461 From a6d81cca80e17ce6c2ba01fddfeb5e187e9c7b3b Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Sat, 13 Apr 2024 01:20:21 +0800 Subject: [PATCH 0097/1239] Add some warning entries --- .../compiler-warnings-c4400-through-c4599.md | 8 ++-- .../compiler-warnings-c4600-through-c4799.md | 14 ++++-- .../compiler-warnings-c4800-through-c4999.md | 46 +++++++++---------- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md index 743de7d29f..b9d0cf2361 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: Compiler warnings C4400 Through C4599" title: "Compiler warnings C4400 Through C4599" +description: "Learn more about: Compiler warnings C4400 Through C4599" ms.date: "04/21/2019" -f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4452", "C4453", "C4454", "C4455", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] -helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4456", "C4457", "C4459", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] -ms.assetid: b07850a5-ae89-48ea-bf9a-f0e30939f9b9 +f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] +helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] --- # Compiler warnings C4400 Through C4599 @@ -78,6 +77,7 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (level 1, Error) C4462](../../error-messages/compiler-warnings/compiler-warning-level-1-c4462.md)|'*type*' : cannot determine the GUID of the type. Program may fail at runtime.| |[Compiler warning (level 4) C4463](compiler-warning-level-4-c4463.md)|overflow; assigning '*value*' to bit-field that can only hold values from '*min_value*' to '*max_value*'| |[Compiler warning (level 4) C4464](../../error-messages/compiler-warnings/compiler-warning-level-4-c4464.md)|relative include path contains '..'| +|Compiler warning C4466|Could not perform coroutine heap elision| |Compiler warning (level 1) C4467|Usage of ATL attributes is deprecated| |Compiler warning (level 1) C4468|The [[fallthrough]] attribute must be followed by a `case` label or a `default` label| |[Compiler warning (level 1) C4470](../../error-messages/compiler-warnings/compiler-warning-level-1-c4470.md)|floating-point control pragmas ignored under /clr| diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md index f7ecc2d0b3..524eb9d7c5 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md @@ -1,10 +1,9 @@ --- -description: "Learn more about: Compiler warnings C4600 Through C4799" title: "Compiler warnings C4600 Through C4799" +description: "Learn more about: Compiler warnings C4600 Through C4799" ms.date: 05/03/2021 -f1_keywords: ["C4609", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4728", "C4732", "C4751", "C4752", "C4755", "C4757", "C4767"] -helpviewer_keywords: ["C4609", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4728", "C4732", "C4751", "C4752", "C4755", "C4757", "C4767"] -ms.assetid: 22bd4392-f3be-445c-9f23-6126aebac901 +f1_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] +helpviewer_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] --- # Compiler warnings C4600 Through C4799 @@ -124,6 +123,7 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (level 3) C4723](../../error-messages/compiler-warnings/compiler-warning-level-3-c4723.md)|potential divide by 0| |[Compiler warning (level 3) C4724](compiler-warning-level-3-c4724.md)|potential mod by 0| |Compiler warning (level 3) C4725|instruction may be inaccurate on some Pentiums| +|Compiler warning C4726|ARM arch4/4T supports only ' or ' with immediate value| |[Compiler warning (level 1) C4727](../../error-messages/compiler-warnings/compiler-warning-level-1-c4727.md)|PCH named pch_file with same timestamp found in obj_file_1 and obj_file_2. Using first PCH.| |Compiler warning (level 1) C4728|/Yl- option ignored because PCH reference is required| |Compiler warning (level 4) C4729|function too big for flow graph based warnings| @@ -131,6 +131,7 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (Level 1) C4731](../../error-messages/compiler-warnings/compiler-warning-level-1-c4731.md)|'pointer': frame pointer register 'register' modified by inline assembly code| |Compiler warning (level 1) C4732|intrinsic '%s' is not supported in this architecture| |[Compiler warning (Level 1) C4733](../../error-messages/compiler-warnings/compiler-warning-level-1-c4733.md)|Inline asm assigning to 'FS:0': handler not registered as safe handler| +|Compiler warning C4734|More than 64k line numbers in a COFF debug info section; stop emitting COFF debug line numbers for module 'module'| |Compiler warning C4735|`align_function` attribute argument '*argument*' is not a power of two and is not positive. Ignoring attribute| |Compiler warning C4736|`align_function` attribute ignored because `/Gy` was not specified| |[Compiler warning (Level 3) C4738](../../error-messages/compiler-warnings/compiler-warning-level-3-c4738.md)|storing 32-bit float result in memory, possible loss of performance| @@ -139,6 +140,7 @@ The articles in this section of the documentation explain a subset of the warnin |[Compiler warning (Level 1) C4742](../../error-messages/compiler-warnings/compiler-warning-level-1-c4742.md)|'var' has different alignment in 'file1' and 'file2': number and number| |[Compiler warning (Level 1) C4743](../../error-messages/compiler-warnings/compiler-warning-level-1-c4743.md)|'type' has different size in 'file1' and 'file2': number and number bytes| |[Compiler warning (Level 1) C4744](../../error-messages/compiler-warnings/compiler-warning-level-1-c4744.md)|'var' has different type in 'file1' and 'file2': 'type1' and 'type2'| +|Compiler warning C4745|volatile access of 'name' cannot be honored due to its size| |[Compiler warning C4746](../../error-messages/compiler-warnings/compiler-warning-c4746.md)|volatile access of '*expression*' is subject to /volatile:\ setting; consider using __iso_volatile_load/store intrinsic functions| |[Compiler warning (level 1) C4747](../../error-messages/compiler-warnings/compiler-warning-level-1-c4747.md)|Calling managed 'entrypoint': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint| |Compiler warning (level 4) C4749|conditionally supported: offsetof applied to non-standard-layout type '*type*'| @@ -150,6 +152,7 @@ The articles in this section of the documentation explain a subset of the warnin |Compiler warning C4755|Conversion rules for arithmetic operations in the comparison at %s(%d) mean that one branch cannot be executed in an inlined function. Cast '%s' to '%s' (or similar type of %d bytes).| |[Compiler warning (level 2) C4756](../../error-messages/compiler-warnings/compiler-warning-level-2-c4756.md)|overflow in constant arithmetic| |Compiler warning (level 4) C4757|subscript is a large unsigned value, did you intend a negative constant?| +|Compiler warning C4761|integral size mismatch in argument; conversion supplied| |[Compiler warning (level 4) C4764](compiler-warning-level-4-c4764.md)|Can not align catch objects to greater than 16 bytes| |Compiler warning (level 4) C4767|section name '%s' is longer than 8 characters and will be truncated by the linker| |[Compiler warning (level 3) C4768](c4768.md)|__declspec attributes before linkage specification are ignored| @@ -166,9 +169,10 @@ The articles in this section of the documentation explain a subset of the warnin |Compiler warning (level 2) C4792|function '%s' declared using sysimport and referenced from native code; import library required to link| |[Compiler warning (level 1 and 3) C4793](../../error-messages/compiler-warnings/compiler-warning-level-1-and-3-c4793.md)|'function': function compiled as native: 'reason'| |[Compiler warning (level 1) C4794](compiler-warning-level-1-c4794.md)|segment of thread local storage variable '%s' changed from '%s' to '%s'| +|Compiler warning C4798|native code generated for p-code function 'name' with exception handler or unwind semantics| |[Compiler warning (level 1) C4799](../../error-messages/compiler-warnings/compiler-warning-level-1-c4799.md)|function 'function' has no EMMS instruction| ## See also -[C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md) \ +[C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md)\ [Compiler warnings C4000 - C5999](compiler-warnings-c4000-c5999.md) \ No newline at end of file diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index 48504cbce1..6632c433f3 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -2,8 +2,8 @@ title: "Compiler warnings C4800 Through C5999" description: "Table of Microsoft C/C++ compiler warnings C4800 through C5999." ms.date: 02/09/2024 -f1_keywords: ["C4808", "C4809", "C4825", "C4827", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4854", "C4855", "C4856", "C4857", "C4872", "C4880", "C4881", "C4882", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998", "C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5072", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5266", "C5300"] -helpviewer_keywords: ["C4808", "C4809", "C4825", "C4827", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4854", "C4855", "C4856", "C4857", "C4872", "C4880", "C4881", "C4882", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998", "C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5072", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5266", "C5300"] +f1_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998", "C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110", "C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] +helpviewer_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998", "C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110", "C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] --- # Compiler warnings C4800 through C5999 @@ -28,7 +28,7 @@ The articles in this section of the documentation explain a subset of the warnin | [Compiler warning (level 1) C4811](compiler-warning-level-1-c4811.md) | value of `pragma conform(forScope, show)` == *value* | | [Compiler warning (level 1) C4812](compiler-warning-level-1-c4812.md) | obsolete declaration style: please use '*new_syntax*' instead | | [Compiler warning (level 1) C4813](compiler-warning-level-1-c4813.md) | '*function*': a friend function of a local class must have been previously declared | -|Compiler warning (level 4) C4815|'*object name*': zero-sized array in stack object will have no elements (unless the object is an aggregate that has been aggregate initialized)| +| Compiler warning (level 4) C4815 | '*object name*': zero-sized array in stack object will have no elements (unless the object is an aggregate that has been aggregate initialized) | | [Compiler warning (level 4) C4816](compiler-warning-level-4-c4816.md) | '*param*': parameter has a zero-sized array which will be truncated (unless the object is passed by reference) | | [Compiler warning (level 1) C4817](compiler-warning-level-1-c4817.md) | '*member*': illegal use of '.' to access this member; compiler replaced with '->' | | [Compiler warning (level 1) C4819](compiler-warning-level-1-c4819.md) | The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss | @@ -54,19 +54,19 @@ The articles in this section of the documentation explain a subset of the warnin | Compiler warning (level 4) C4846 | '*value*' is not a valid argument for '`/d1initall`': command-line flag ignored | | Compiler warning (level 4) C4847 | '`__declspec(no_init_all)`' can only be applied to a function, a class type, or a local variable: ignored | | Compiler warning (level 1) C4848 | support for standard attribute '`no_unique_address`' in C++17 and earlier is a vendor extension | -|Compiler warning (level 1) C4849|OpenMP '*clause*' clause ignored in '*directive*' directive| +| Compiler warning (level 1) C4849 | OpenMP '*clause*' clause ignored in '*directive*' directive | | Compiler warning (Level 1, error) C4854 | binding dereferenced null pointer to reference has undefined behavior | | Compiler warning (level 1, off) C4855 | implicit capture of '`this`' via '`[=]`' is deprecated in 'version' | | Compiler warning (level 4) C4856 | '*value*' is not a valid argument for '`/d1initAll:FillPattern`' (value must be between 0 and 255). Command-line flag ignored | | Compiler warning (level 1) C4857 | C++/CLI mode does not support C++ versions newer than C++17; setting language to `/std:c++17` | -|Compiler warning (level 1) C4858|discarding return value: *function name*| -|Compiler warning (level 4) C4859|'*value*' is not a valid argument for '`/presetWarn`': it must be a decimal value > 0. Command-line flag ignored| -|Compiler warning (level 4) C4860|'*object name*': compiler zero initialized '*number*' bytes of storage| -|Compiler warning (level 4) C4861|compiler zero initialized '*number*' bytes of storage| +| Compiler warning (level 1) C4858 | discarding return value: *function name* | +| Compiler warning (level 4) C4859 | '*value*' is not a valid argument for '`/presetWarn`': it must be a decimal value > 0. Command-line flag ignored | +| Compiler warning (level 4) C4860 | '*object name*': compiler zero initialized '*number*' bytes of storage | +| Compiler warning (level 4) C4861 | compiler zero initialized '*number*' bytes of storage | | [Compiler warning (level 4) C4866](c4866.md) | compiler may not enforce left-to-right evaluation order for call to *operator_name* | | [Compiler warning (level 1, error) C4867](compiler-warning-c4867.md) | '*function*': function call missing argument list; use '*call*' to create a pointer to member | | [Compiler warning (level 4) C4868](compiler-warning-c4868.md) | '*file*(*line_number*)' compiler may not enforce left-to-right evaluation order in braced initialization list | -|Compiler warning (level 3) C4869|'`nodiscard`' may only be applied to classes, enumerations, and functions| +| Compiler warning (level 3) C4869 | '`nodiscard`' may only be applied to classes, enumerations, and functions | | Compiler warning (level 2) C4872 | floating point division by zero detected when compiling the call graph for the `concurrency::parallel_for_each` at: '*location*' | | Compiler warning (level 1) C4880 | casting from 'const *type_1*' to '*type_2*': casting away constness from a pointer or reference may result in undefined behavior in an amp restricted function | | Compiler warning (level 4) C4881 | the constructor and/or the destructor will not be invoked for `tile_static` variable '*variable-name*' | @@ -126,8 +126,8 @@ The articles in this section of the documentation explain a subset of the warnin | [Compiler warning (level 1, Error) C4972](compiler-warning-c4972.md) | Directly modifying or treating the result of an unbox operation as an lvalue is unverifiable | | Compiler warning (level 1) C4973 | '*symbol*': marked as deprecated | | Compiler warning (level 1) C4974 | '*symbol*': marked as deprecated | -|Compiler warning (level 1) C4975|modopt '[*modifier*]' was ignored for formal parameter '*parameter*'| -|Compiler warning (level 1) C4976|invalid value '*value*' for '`/W`'; assuming '1'| +| Compiler warning (level 1) C4975 | modopt '[*modifier*]' was ignored for formal parameter '*parameter*' | +| Compiler warning (level 1) C4976 | invalid value '*value*' for '`/W`'; assuming '1' | | Compiler warning (level 3) C4981 | Warbird: function '*function*' marked as __forceinline not inlined because it contains exception semantics | | Compiler warning (level 3) C4983 | '/analyze:sarif:hashname' ignored because the argument to '/analyze:log' is a single file rather than a directory | | [Compiler warning C4984](compiler-warning-c4984.md) | '`if constexpr`' is a C++17 language extension | @@ -263,23 +263,23 @@ The articles in this section of the documentation explain a subset of the warnin | [Compiler warning (level 1, error, off) C5262](c5262.md) | implicit fall-through occurs here; are you missing a break statement? Use `[[fallthrough]]` when a `break` statement is intentionally omitted between cases | | Compiler warning (level 4, off) C5263 | calling '`std::move`' on a temporary object prevents copy elision | | Compiler warning (level 4, off) C5264 | '*variable-name*': 'const' variable is not used | -|Compiler warning (level 1) C5265|cannot open search path '*path*'| +| Compiler warning (level 1) C5265 | cannot open search path '*path*' | | [Compiler warning (level 4, off) C5266](compiler-warning-level-4-c5266.md) | 'const' qualifier on return type has no effect | | [Compiler warning C5267](c5267.md) | definition of implicit copy constructor/assignment operator for '*type*' is deprecated because it has a user-provided assignment operator/copy constructor | -|Compiler warning (level 1) C5268|Failed to allocate memory at fixed address 0x*address*. Use `/Yb` to specify a specific address base if bit-identical .pch files are required.| -|Compiler warning (level 1) C5269|Failed to allocate PCH memory at fixed address 0x*address*. Use `/Ym` to specify a specific address base if bit-identical .pch files are required.| -|Compiler warning (level 3) C5270|'*value*' is not allowed for option '*switch name*'; allowed values are: *value list*| -|Compiler warning (level 4) C5271|previously imported assembly '*assembly1*' has the same name as assembly '*assembly2*' being imported. Is this intentional?| -|Compiler warning (level 1) C5272|throwing an object of non-copyable type '*type*' is non-standard. If a copy is needed at runtime it will be made as if by `memcpy`.| -|Compiler warning (level 1) C5273|behavior change: `_Alignas` on anonymous type no longer ignored (promoted members will align)| -|Compiler warning (level 1) C5274|behavior change: `_Alignas` no longer applies to the type '*type*' (only applies to declared data objects)| -|Compiler warning (Error) C5275|facade assembly '*name*' being imported under '`/clr`'; missing option '`/clr:netcore`'?| +| Compiler warning (level 1) C5268 | Failed to allocate memory at fixed address 0x*address*. Use `/Yb` to specify a specific address base if bit-identical .pch files are required. | +| Compiler warning (level 1) C5269 | Failed to allocate PCH memory at fixed address 0x*address*. Use `/Ym` to specify a specific address base if bit-identical .pch files are required. | +| Compiler warning (level 3) C5270 | '*value*' is not allowed for option '*switch name*'; allowed values are: *value list* | +| Compiler warning (level 4) C5271 | previously imported assembly '*assembly1*' has the same name as assembly '*assembly2*' being imported. Is this intentional? | +| Compiler warning (level 1) C5272 | throwing an object of non-copyable type '*type*' is non-standard. If a copy is needed at runtime it will be made as if by `memcpy`. | +| Compiler warning (level 1) C5273 | behavior change: `_Alignas` on anonymous type no longer ignored (promoted members will align) | +| Compiler warning (level 1) C5274 | behavior change: `_Alignas` no longer applies to the type '*type*' (only applies to declared data objects) | +| Compiler warning (Error) C5275 | facade assembly '*name*' being imported under '`/clr`'; missing option '`/clr:netcore`'? | | Compiler warning (level 1, error) C5300 | '#pragma omp atomic': left operand of '*operator*' must match left hand side of assignment-expression | | [Compiler warning (level 1) C5301](c5301-c5302.md) | '#pragma omp for': '*loop-index*' increases while loop condition uses '*comparison*'; non-terminating loop? | | [Compiler warning (level 1) C5302](c5301-c5302.md) | '#pragma omp for': '*loop-index*' decreases while loop condition uses '*comparison*'; non-terminating loop? | -|Compiler warning (level 1) C5303|function marked with `[[msvc::intrinsic]]` did not result in a no-op cast| -|Compiler warning (level 1) C5304|a declaration designated by the using-declaration '*name1*' exported from this module has internal linkage and using such a name outside the module is ill-formed; consider declaring '*name2*' '`inline`' to use it outside of this module| -|Compiler warning (level 1) C5305|'*name*': an explicit instantiation declaration that follows an explicit instantiation definition is ignored| +| Compiler warning (level 1) C5303 | function marked with `[[msvc::intrinsic]]` did not result in a no-op cast | +| Compiler warning (level 1) C5304 | a declaration designated by the using-declaration '*name1*' exported from this module has internal linkage and using such a name outside the module is ill-formed; consider declaring '*name2*' '`inline`' to use it outside of this module | +| Compiler warning (level 1) C5305 | '*name*': an explicit instantiation declaration that follows an explicit instantiation definition is ignored | ## See also From f7652f2c5e0948499f6dc588d36a7f6b29716017 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 12 Apr 2024 10:41:54 -0700 Subject: [PATCH 0098/1239] updates regarding Xamarin --- SECURITY.md | 2 +- ...stall-visual-cpp-for-cross-platform-mobile-development.md | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index e138ec5d6a..675ad2a215 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Security -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, such as [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), and [our GitHub organizations](https://opensource.microsoft.com/). If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. diff --git a/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md b/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md index 5d610defde..7abea8d72c 100644 --- a/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md +++ b/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md @@ -2,7 +2,6 @@ description: "Learn more about: Install cross-platform mobile development with C++" title: "Install cross-platform mobile development with C++" ms.date: "10/17/2019" -ms.assetid: aaea6b8d-55eb-4427-8185-c050f855c257 ms.custom: intro-installation --- # Install cross-platform mobile development with C++ @@ -32,7 +31,7 @@ This article describes how to install the tools and third-party software require To build apps for specific device platforms, there are some additional requirements: -- The x86 Android emulators that come with the Android SDK work best on computers that can use hardware acceleration, such as the Intel Hardware Accelerated Execution Manager (HAXM). For more information, see [Hardware acceleration for emulator performance (Hyper-V & HAXM)](/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?tabs=vswin&pivots=windows). +- The x86 Android emulators that come with the Android SDK work best on computers that can use hardware acceleration. For more information, see [How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)](/dotnet/maui/android/emulator/hardware-acceleration?view=net-maui-8.0). - Building code for iOS requires an Apple ID, an iOS Developer Program account, and a Mac computer that can run [Xcode](https://developer.apple.com/xcode/) version 10.2 or later on OS X Mavericks (version 10.9) or later versions. For a link to installation steps, see [Install tools for iOS](#install-tools-for-ios). @@ -89,7 +88,7 @@ You don't have to install all the third-party dependencies when you install the You can run the SDK Manager app in the Android SDK directory again to update the SDK. And, to install optional tools and additional API levels. Updates may fail to install unless you use **Run as administrator** to run the SDK Manager app. If you have problems building an Android app, check the SDK Manager for updates to your installed SDKs. -To use some of the Android SDK emulators, you may need to set up hardware acceleration. For more information, see [Hardware acceleration for emulator performance (Hyper-V & HAXM)](/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?tabs=vswin). +To use some of the Android SDK emulators, you may need to set up hardware acceleration. For more information, see [How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)](/dotnet/maui/android/emulator/hardware-acceleration?view=net-maui-8.0). In most cases, Visual Studio can detect the configurations for the third-party software you've installed. It maintains the installation paths in internal environment variables. You can override the default paths of these cross-platform development tools in the Visual Studio IDE. From 8c969182e0e8fbe085bbab5cf16701f108db1dea Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Sat, 13 Apr 2024 01:42:12 +0800 Subject: [PATCH 0099/1239] Fix missing quotes --- .../compiler-warnings-c4400-through-c4599.md | 4 ++-- .../compiler-warnings-c4600-through-c4799.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md index b9d0cf2361..59e090b842 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4400-through-c4599.md @@ -2,8 +2,8 @@ title: "Compiler warnings C4400 Through C4599" description: "Learn more about: Compiler warnings C4400 Through C4599" ms.date: "04/21/2019" -f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] -helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] +f1_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] +helpviewer_keywords: ["C4413", "C4415", "C4416", "C4417", "C4418", "C4419", "C4421", "C4423", "C4424", "C4425", "C4426", "C4427", "C4438", "C4442", "C4443", "C4444", "C4446", "C4447", "C4448", "C4449", "C4450", "C4451", "C4452", "C4453", "C4454", "C4455", "C4466", "C4467", "C4468", "C4472", "C4474", "C4475", "C4476", "C4478", "C4480", "C4482", "C4483", "C4491", "C4492", "C4493", "C4494", "C4495", "C4496", "C4497", "C4498", "C4499", "C4509", "C4519", "C4531", "C4542", "C4562", "C4568", "C4569", "C4573", "C4574", "C4575", "C4576", "C4578", "C4582", "C4583", "C4585", "C4586", "C4587", "C4588", "C4589", "C4591", "C4592", "C4593", "C4594", "C4595", "C4598", "C4599"] --- # Compiler warnings C4400 Through C4599 diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md index 524eb9d7c5..4b012150a6 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4600-through-c4799.md @@ -2,8 +2,8 @@ title: "Compiler warnings C4600 Through C4799" description: "Learn more about: Compiler warnings C4600 Through C4799" ms.date: 05/03/2021 -f1_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] -helpviewer_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] +f1_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] +helpviewer_keywords: ["C4604", "C4605", "C4609", "C4631", "C4642", "C4643", "C4644", "C4647", "C4648", "C4649", "C4654", "C4658", "C4671", "C4676", "C4689", "C4695", "C4696", "C4719", "C4720", "C4721", "C4725", "C4726", "C4728", "C4729", "C4732", "C4734", "C4735", "C4736", "C4745", "C4749", "C4751", "C4752", "C4753", "C4755", "C4757", "C4761", "C4767", "C4771", "C4774", "C4775", "C4776", "C4777", "C4778", "C4792", "C4798"] --- # Compiler warnings C4600 Through C4799 From 9fd5ce5ae6aad4e5c7308b11c40094a01498b5a5 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 12 Apr 2024 11:15:00 -0700 Subject: [PATCH 0100/1239] fix links; acrolinx --- ...pp-for-cross-platform-mobile-development.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md b/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md index 7abea8d72c..200c128cb3 100644 --- a/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md +++ b/docs/cross-platform/install-visual-cpp-for-cross-platform-mobile-development.md @@ -6,7 +6,7 @@ ms.custom: intro-installation --- # Install cross-platform mobile development with C++ -You can use C++ in Visual Studio to build Windows Desktop apps, Universal Windows Platform (UWP) apps, and Linux apps. And now, you can build C++ apps for Android and iOS. The **Mobile development with C++** workload is an installable set of components in Visual Studio. It includes cross-platform iOS, Android, and UWP Visual Studio templates. The workload installs the cross-platform tools and SDKs you need to get started quickly. You won't have to locate, download, and configure them yourself. You can use these tools in Visual Studio to easily create, edit, debug, and test your cross-platform projects. +You can use C++ in Visual Studio to build Windows Desktop apps, Universal Windows Platform (UWP) apps, and Linux apps. And now, you can build C++ apps for Android and iOS. The **Mobile development with C++** workload is an installable set of components in Visual Studio. It includes cross-platform iOS, Android, and UWP Visual Studio templates. The workload installs the cross-platform tools and SDKs you need to get started quickly. You don't have to locate, download, and configure them yourself. You can use these tools in Visual Studio to easily create, edit, debug, and test your cross-platform projects. This article describes how to install the tools and third-party software required to develop cross-platform apps in C++ using Visual Studio. For an overview, see [Visual C++ cross-platform mobile](https://visualstudio.microsoft.com/vs/features/cplusplus-mdd/) @@ -29,9 +29,9 @@ This article describes how to install the tools and third-party software require ::: moniker-end -To build apps for specific device platforms, there are some additional requirements: +To build apps for specific device platforms, there are some other requirements: -- The x86 Android emulators that come with the Android SDK work best on computers that can use hardware acceleration. For more information, see [How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)](/dotnet/maui/android/emulator/hardware-acceleration?view=net-maui-8.0). +- The x86 Android emulators that come with the Android SDK work best on computers that can use hardware acceleration. For more information, see [How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)](/dotnet/maui/android/emulator/hardware-acceleration). - Building code for iOS requires an Apple ID, an iOS Developer Program account, and a Mac computer that can run [Xcode](https://developer.apple.com/xcode/) version 10.2 or later on OS X Mavericks (version 10.9) or later versions. For a link to installation steps, see [Install tools for iOS](#install-tools-for-ios). @@ -61,13 +61,13 @@ The Visual Studio Installer includes a **Mobile development with C++** workload. 1. Run the **Visual Studio Installer** from the **Start** menu. -1. If you've already installed Visual Studio, choose the **Modify** button for the installed version of Visual Studio you'd like to modify. Otherwise, choose **Install** to install Visual Studio. +1. If you've installed Visual Studio, choose the **Modify** button for the installed version of Visual Studio you'd like to modify. Otherwise, choose **Install** to install Visual Studio. 1. With the **Workloads** tab selected, scroll down and select the **Mobile development with C++** workload in the Visual Studio Installer. When this workload is selected, other required components for C++ development are also selected. You can also choose other workloads and individual components to install at the same time. To build cross-platform code that also targets UWP, select the **Universal Windows Platform development** workload. -1. In the **Installation details** pane, expand **Mobile development with C++**. In the **Optional** section, you can choose additional versions of the NDK, the Google Android Emulator, the Intel Hardware Accelerated Execution Manager, and the IncrediBuild build acceleration tool. +1. In the **Installation details** pane, expand **Mobile development with C++**. In the **Optional** section, you can choose other versions of the NDK, the Google Android Emulator, the Intel Hardware Accelerated Execution Manager, and the IncrediBuild build acceleration tool. -1. By default, one or more Android SDK setup components are included by the workload. Additional versions of the Android SDK are available. To add one to your installation, choose the **Individual components** tab, then scroll down to the **SDKs, libraries, and frameworks** section to make your selection. +1. By default, one or more Android SDK setup components are included by the workload. More versions of the Android SDK are available. To add one to your installation, choose the **Individual components** tab, then scroll down to the **SDKs, libraries, and frameworks** section to make your selection. 1. Choose the **Modify** or **Install** button to install the **Mobile development with C++** workload and your other selected workloads and optional components. @@ -86,11 +86,11 @@ You can use Visual Studio to edit, debug, and deploy iOS code to the iOS Simulat You don't have to install all the third-party dependencies when you install the **Mobile development with C++** workload (or in Visual Studio 2015, the Visual C++ Mobile Development option). Install them later by using the steps in [Install the tools](#install-the-tools). The Visual Studio Installer is updated regularly to install the latest third-party components. Use it to install updated SDKs and NDKs. You can also install or update them independently of Visual Studio. -You can run the SDK Manager app in the Android SDK directory again to update the SDK. And, to install optional tools and additional API levels. Updates may fail to install unless you use **Run as administrator** to run the SDK Manager app. If you have problems building an Android app, check the SDK Manager for updates to your installed SDKs. +You can run the SDK Manager app in the Android SDK directory again to update the SDK. And, to install optional tools and other API levels. Updates may fail to install unless you use **Run as administrator** to run the SDK Manager app. If you have problems building an Android app, check the SDK Manager for updates to your installed SDKs. -To use some of the Android SDK emulators, you may need to set up hardware acceleration. For more information, see [How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)](/dotnet/maui/android/emulator/hardware-acceleration?view=net-maui-8.0). +To use some of the Android SDK emulators, you may need to set up hardware acceleration. For more information, see [How to enable hardware acceleration with Android emulators (Hyper-V & AEHD)](/dotnet/maui/android/emulator/hardware-acceleration). -In most cases, Visual Studio can detect the configurations for the third-party software you've installed. It maintains the installation paths in internal environment variables. You can override the default paths of these cross-platform development tools in the Visual Studio IDE. +In most cases, Visual Studio can detect the configurations for installed third-party software. It maintains the installation paths in internal environment variables. You can override the default paths of these cross-platform development tools in the Visual Studio IDE. ### To set the paths for third-party tools From 7fde0cf0313f574f509ba38104fef5a89250a0d4 Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Sun, 14 Apr 2024 18:19:37 +0800 Subject: [PATCH 0101/1239] Tabulate nolock functions --- docs/c-runtime-library/nolock-functions.md | 65 +++++++++------------- 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/docs/c-runtime-library/nolock-functions.md b/docs/c-runtime-library/nolock-functions.md index 2f99d4430c..b231f2d923 100644 --- a/docs/c-runtime-library/nolock-functions.md +++ b/docs/c-runtime-library/nolock-functions.md @@ -1,53 +1,38 @@ --- -description: "Learn more about: _nolock Functions" title: "_nolock Functions" -ms.date: "11/04/2016" +description: "Learn more about: _nolock Functions" +ms.date: "04/14/2024" helpviewer_keywords: ["_nolock functions", "nolock functions"] -ms.assetid: 7d651d87-38d2-4303-9897-fdb5f7a3e899 --- # `_nolock` functions -The `_nolock` functions are versions of I/O functions that don't perform any locking. They're provided for users requiring maximum performance. For more information, see [Multithreaded libraries performance](./multithreaded-libraries-performance.md). +The `_nolock` functions are versions of I/O functions that don't perform any locking. They're provided for users requiring maximum performance. For more information, see [Multithreaded libraries performance](multithreaded-libraries-performance.md). -Use _nolock functions only if your program is truly single-threaded or if it does its own locking. +Use `_nolock` functions only if your program is truly single-threaded or if it does its own locking. ## No lock routines -[`_fclose_nolock`](./reference/fclose-nolock.md) - -[`_fflush_nolock`](./reference/fflush-nolock.md) - -[`_fgetc_nolock`, `_fgetwc_nolock`](./reference/fgetc-nolock-fgetwc-nolock.md) - -[`_fread_nolock`](./reference/fread-nolock.md) - -[`_fseek_nolock`, `_fseeki64_nolock`](./reference/fseek-nolock-fseeki64-nolock.md) - -[`_ftell_nolock`, `_ftelli64_nolock`](./reference/ftell-nolock-ftelli64-nolock.md) - -[`_fwrite_nolock`](./reference/fwrite-nolock.md) - -[`_getc_nolock`, `_getwc_nolock`](./reference/getc-nolock-getwc-nolock.md) - -[`_getch_nolock`, `_getwch_nolock`](./reference/getch-nolock-getwch-nolock.md) - -[`_getchar_nolock`, `_getwchar_nolock`](./reference/getchar-nolock-getwchar-nolock.md) - -[`_getche_nolock`, `_getwche_nolock`](./reference/getche-nolock-getwche-nolock.md) - -[`_getdcwd_nolock`, `_wgetdcwd_nolock`](./reference/getdcwd-nolock-wgetdcwd-nolock.md) - -[`_putc_nolock`, `_putwc_nolock`](./reference/putc-nolock-putwc-nolock.md) - -[`_putch_nolock`, `_putwch_nolock`](./reference/putch-nolock-putwch-nolock.md) - -[`_putchar_nolock`, `_putwchar_nolock`](./reference/putchar-nolock-putwchar-nolock.md) - -[`_ungetc_nolock`, `_ungetwc_nolock`](./reference/ungetc-nolock-ungetwc-nolock.md) - -[`_ungetch_nolock`, `_ungetwch_nolock`](./reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md) +| Routine | Use | +|---|---| +| [`_fclose_nolock`](reference/fclose-nolock.md) | Closes a stream without locking | +| [`_fflush_nolock`](reference/fflush-nolock.md) | Flushes a stream without locking | +| [`_fgetc_nolock`, `_fgetwc_nolock`](reference/fgetc-nolock-fgetwc-nolock.md) | Reads a character from a stream without locking | +| [`_fread_nolock`](reference/fread-nolock.md) | Reads data from a stream without locking | +| [`_fseek_nolock`, `_fseeki64_nolock`](reference/fseek-nolock-fseeki64-nolock.md) | Moves the file pointer to a specified location without locking | +| [`_ftell_nolock`, `_ftelli64_nolock`](reference/ftell-nolock-ftelli64-nolock.md) | Gets the current position of a file pointer without locking | +| [`_fwrite_nolock`](reference/fwrite-nolock.md) | Writes data to a stream without locking | +| [`_getc_nolock`, `_getwc_nolock`](reference/getc-nolock-getwc-nolock.md) | Reads a character from a stream without locking | +| [`_getch_nolock`, `_getwch_nolock`](reference/getch-nolock-getwch-nolock.md) | Gets a character from the console without echo and without locking | +| [`_getchar_nolock`, `_getwchar_nolock`](reference/getchar-nolock-getwchar-nolock.md) | Reads a character from the standard input without locking | +| [`_getche_nolock`, `_getwche_nolock`](reference/getche-nolock-getwche-nolock.md) | Gets a character from the console with echo and without locking | +| [`_getdcwd_nolock`, `_wgetdcwd_nolock`](reference/getdcwd-nolock-wgetdcwd-nolock.md) | Gets the full path of the current working directory on the specified drive | +| [`_putc_nolock`, `_putwc_nolock`](reference/putc-nolock-putwc-nolock.md) | Writes a character to a stream without locking | +| [`_putch_nolock`, `_putwch_nolock`](reference/putch-nolock-putwch-nolock.md) | Writes a character to the console without locking | +| [`_putchar_nolock`, `_putwchar_nolock`](reference/putchar-nolock-putwchar-nolock.md) | Writes a character to `stdout` without locking | +| [`_ungetc_nolock`, `_ungetwc_nolock`](reference/ungetc-nolock-ungetwc-nolock.md) | Pushes a character back onto the stream without locking | +| [`_ungetch_nolock`, `_ungetwch_nolock`](reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md) | Pushes back the last character that's read from the console without locking | ## See also -[Input and output](./input-and-output.md)\ -[Universal C runtime routines by category](./run-time-routines-by-category.md) +[Input and output](input-and-output.md)\ +[Universal C runtime routines by category](run-time-routines-by-category.md) From 91d5ae9569a5969dedcadef0b31f874bddd149f6 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Mon, 15 Apr 2024 13:05:19 -0700 Subject: [PATCH 0102/1239] Update compiler-error-c3859.md --- docs/error-messages/compiler-errors-2/compiler-error-c3859.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md index 2ecb7c8add..c01ebcdc93 100644 --- a/docs/error-messages/compiler-errors-2/compiler-error-c3859.md +++ b/docs/error-messages/compiler-errors-2/compiler-error-c3859.md @@ -27,7 +27,7 @@ The message has one of the following notes: There isn't enough virtual memory allocated for your precompiled header. If your precompiled header uses an explicit `#pragma hdrstop` directive, use the **`/Zm`** compiler flag to specify a larger value for the precompiled header file. Otherwise, consider reducing the number of parallel compilation processes in your build. For more information, see [`/Zm` (Specify precompiled header memory allocation limit)](../../build/reference/zm-specify-precompiled-header-memory-allocation-limit.md). -This disganotic primarily in two scenarios. +This diagnostic shows up mostly in two scenarios: The first scenario is that the system is overloaded with multiple `/Yu` compile requests at the same time. Setting the maximum starting virtual memory size typically resolves this issue. From abd9dbce8e8f2af10e82673bbebd1ae32a0cecff Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Wed, 17 Apr 2024 10:15:39 +0800 Subject: [PATCH 0103/1239] Split C5000+ warning list --- .../compiler-warnings-c4000-c5999.md | 16 +- .../compiler-warnings-c4800-through-c4999.md | 149 +----------------- .../compiler-warnings-c5000-through-c5199.md | 77 +++++++++ .../compiler-warnings-c5200-through-c5399.md | 103 ++++++++++++ docs/error-messages/toc.yml | 14 +- 5 files changed, 207 insertions(+), 152 deletions(-) create mode 100644 docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md create mode 100644 docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md index 36315ad4e8..72650a5baa 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-c5999.md @@ -1,7 +1,7 @@ --- -description: "Learn more about: Compiler warnings C4000 - C5999" title: "Compiler warnings C4000 - C5999" -ms.date: "04/22/2019" +description: "Learn more about: Compiler warnings C4000 - C5999" +ms.date: "04/17/2024" --- # Compiler warnings C4000 - C5999 @@ -9,11 +9,13 @@ The articles in this section of the documentation explain a subset of the warnin ## In this section -[Compiler warnings C4000 through C4199](../compiler-warnings/compiler-warnings-c4000-through-c4199.md) \ -[Compiler warnings C4200 through C4399](../compiler-warnings/compiler-warnings-c4200-through-c4399.md) \ -[Compiler warnings C4400 through C4599](../compiler-warnings/compiler-warnings-c4400-through-c4599.md) \ -[Compiler warnings C4600 through C4799](../compiler-warnings/compiler-warnings-c4600-through-c4799.md) \ -[Compiler warnings C4800 through C5999](../compiler-warnings/compiler-warnings-c4800-through-c4999.md) +[Compiler warnings C4000 through C4199](../compiler-warnings/compiler-warnings-c4000-through-c4199.md)\ +[Compiler warnings C4200 through C4399](../compiler-warnings/compiler-warnings-c4200-through-c4399.md)\ +[Compiler warnings C4400 through C4599](../compiler-warnings/compiler-warnings-c4400-through-c4599.md)\ +[Compiler warnings C4600 through C4799](../compiler-warnings/compiler-warnings-c4600-through-c4799.md)\ +[Compiler warnings C4800 through C4999](../compiler-warnings/compiler-warnings-c4800-through-c4999.md)\ +[Compiler warnings C5000 through C5199](../compiler-warnings/compiler-warnings-c5000-through-c5199.md)\ +[Compiler warnings C5200 through C5399](../compiler-warnings/compiler-warnings-c5200-through-c5399.md) ## See also diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index 6632c433f3..c08e7ca725 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -1,11 +1,11 @@ --- -title: "Compiler warnings C4800 Through C5999" -description: "Table of Microsoft C/C++ compiler warnings C4800 through C5999." -ms.date: 02/09/2024 -f1_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998", "C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110", "C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] -helpviewer_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998", "C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110", "C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] +title: "Compiler warnings C4800 Through C4999" +description: "Table of Microsoft C/C++ compiler warnings C4800 through C4999." +ms.date: 04/17/2024 +f1_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] +helpviewer_keywords: ["C4801", "C4808", "C4809", "C4815", "C4827", "C4828", "C4837", "C4842", "C4844", "C4845", "C4846", "C4847", "C4848", "C4849", "C4854", "C4855", "C4856", "C4857", "C4858", "C4859", "C4860", "C4861", "C4869", "C4872", "C4880", "C4881", "C4882", "C4883", "C4907", "C4916", "C4921", "C4934", "C4954", "C4955", "C4963", "C4966", "C4970", "C4971", "C4973", "C4974", "C4975", "C4976", "C4981", "C4983", "C4987", "C4988", "C4989", "C4990", "C4991", "C4992", "C4998"] --- -# Compiler warnings C4800 through C5999 +# Compiler warnings C4800 through C4999 The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. @@ -144,143 +144,6 @@ The articles in this section of the documentation explain a subset of the warnin | [Compiler warning (level 1) C4997](compiler-warning-level-1-c4997.md) | '*class*': coclass does not implement a COM interface or pseudo-interface | | Compiler warning (level 1) C4998 | EXPECTATION FAILED: *expectation*(*value*) | | [Compiler warning C4999](compiler-warning-level-1-c4999.md) | UNKNOWN WARNING Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information | -| Compiler warning C5022 | '*type*': multiple move constructors specified | -| Compiler warning C5023 | '*type*': multiple move assignment operators specified | -| Compiler warning (level 4, off) C5024 | '*type*': move constructor was implicitly defined as deleted | -| Compiler warning (level 4, off) C5025 | '*type*': move assignment operator was implicitly defined as deleted | -| Compiler warning (level 1 and level 4, off) C5026 | '*type*': move constructor was implicitly defined as deleted | -| Compiler warning (level 1 and level 4, off) C5027 | '*type*': move assignment operator was implicitly defined as deleted | -| Compiler warning (level 1) C5028 | '*name*': Alignment specified in prior declaration (*number*) not specified in definition | -| Compiler warning (level 4, off) C5029 | nonstandard extension used: alignment attributes in C++ apply to variables, data members and tag types only | -| Compiler warning (level 3) C5030 | attribute '*attribute-name*' is not recognized | -| Compiler warning (level 4, off) C5031 | `#pragma warning(pop)`: likely mismatch, popping warning state pushed in different file | -| Compiler warning (level 4, off) C5032 | detected `#pragma warning(push)` with no corresponding `#pragma warning(pop)` | -| [Compiler warning (level 1) C5033](c5033.md) | '*storage-class*' is no longer a supported storage class | -| Compiler warning (level 5, off) C5034 | use of intrinsic '*intrinsic*' causes function *function-name* to be compiled as guest code | -| Compiler warning (level 5, off) C5035 | use of feature '*feature*' causes function *function-name* to be compiled as guest code | -| Compiler warning (level 1) C5036 | varargs function pointer conversion when compiling with `/hybrid:x86arm64` '*type1*' to '*type2*' | -| [Compiler warning (error) C5037](c5037.md) | '*member-function*': an out-of-line definition of a member of a class template cannot have default arguments | -| [Compiler warning (level 4, off) C5038](c5038.md) | data member '*member1*' will be initialized after data member '*member2*' | -| Compiler warning (level 4, off) C5039 | '*function*': pointer or reference to potentially throwing function passed to `extern C` function under `-EHc`. Undefined behavior may occur if this function throws an exception. | -| Compiler warning (level 3) C5040 | dynamic exception specifications are valid only in C++14 and earlier; treating as noexcept(false) | -| Compiler warning (level 1, off) C5041 | '*definition*': out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 | -| Compiler warning (level 3, off) C5042 | '*declaration*': function declarations at block scope cannot be specified 'inline' in standard C++; remove 'inline' specifier | -| Compiler warning (level 2) C5043 | '*specification*': exception specification does not match previous declaration | -| Compiler warning (level 4) C5044 | An argument to command-line option *option-name* points to a path '*path-name*' that does not exist | -| [Compiler warning (level 4) C5045](c5045.md) | Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified | -| [Compiler warning (level 2) C5046](c5046.md) | '*function*': Symbol involving type with internal linkage not defined | -| Compiler warning (level 1) C5047 | use of nonstandard `__if_exists` with modules is not supported | -| Compiler warning (level 1) C5048 | Use of macro '*macroname*' may result in non-deterministic output | -| Compiler warning (level 1) C5049 | '*string*': Embedding a full path may result in machine-dependent output | -| [Compiler warning (level 1) C5050](c5050.md) | Possible incompatible environment while importing module '*module_name*': *issue* | -| Compiler warning (level 1) C5051 | attribute 'attribute-name' requires at least 'standard-level'; ignored | -| Compiler warning (level 3, off) C5052 | Keyword 'keyword-name' was introduced in C++\ and requires use of the 'option-name' command-line option | -| Compiler warning (level 1) C5053 | support for '`explicit()`' in C++17 and earlier is a vendor extension | -| [Compiler warning (level 4) C5054](c5054.md) | operator 'operator-name': deprecated between enumerations of different types | -| [Compiler warning (level 1) C5055](c5055.md) | operator 'operator-name': deprecated between enumerations and floating-point types | -| [Compiler warning (level 1) C5056](c5056.md) | operator 'operator-name': deprecated for array types | -| Compiler warning (level 1) C5057 | header unit reference to 'name' already exists. Ignoring header unit 'header-name' | -| Compiler warning (level 1) C5058 | file system error: cannot find header file 'file-name' for header unit 'unit-name' | -| Compiler warning C5059 | runtime checks and address sanitizer is not currently supported - disabling runtime checks | -| Compiler warning (level 4) C5060 | `/Qpar` and address sanitizer not currently supported - disabling auto-parallelization | -| Compiler warning (level 4) C5061 | the use of a comma operator as a subscript expression has been deprecated | -| Compiler warning (level 4) C5062 | enum direct list initialization between 'type-1' and 'type-2' is no longer supported | -| Compiler warning (level 1) C5063 | '`std::is_constant_evaluated`' always evaluates to true in manifestly constant-evaluated expressions | -| [Compiler warning (level 1) C5072](compiler-warning-c5072.md) | ASAN enabled without debug information emission. Enable debug info for better ASAN error reporting | -| Compiler warning (level 1) C5081 | Secure hotpatch is not supported with `/GENPROFILE`, `/FASTGENPROFILE` or `/LTCG:PGI`, disabling secure hotpatch. | -| Compiler warning (level 1) C5100 | `__VA_ARGS__` is reserved for use in variadic macros | -| Compiler warning (level 1) C5101 | use of preprocessor directive in function-like macro argument list is undefined behavior | -| Compiler warning (level 1) C5102 | ignoring invalid command-line macro definition '*value*' | -| Compiler warning (level 1) C5103 | pasting '*token1*' and '*token2*' does not result in a valid preprocessing token | -| Compiler warning (level 1) C5104 | found '*string1*`#`*string2*' in macro replacement list, did you mean '*string1*`""#`*string2*'? | -| [Compiler warning (level 1) C5105](c5105.md) | macro expansion producing 'defined' has undefined behavior | -| Compiler warning (level 1) C5106 | macro redefined with different parameter names | -| Compiler warning (level 1) C5107 | missing terminating '*char*' character | -| Compiler warning (level 1) C5108 | `__VA_OPT__` is reserved for use in variadic macros | -|Compiler warning (level 1) C5109|`__VA_OPT__` use in macro requires '`/Zc:preprocessor`'| -|Compiler warning (level 4, off) C5110|`__VA_OPT__` is an extension prior to C++20 or C23| -| Compiler warning (level 1) C5200 | feature 'feature-name' requires compiler flag 'option-name' | -| Compiler warning (level 1) C5201 | a module declaration can appear only at the start of a translation unit unless a global module fragment is used | -| Compiler warning (level 1) C5202 | a global module fragment can only contain preprocessor directives | -| Compiler warning (level 1) C5203 | a parenthesized declarator name after 'explicit' will be considered an explicit-specifier in C++20 | -| Compiler warning (level 3, off) C5204 | 'type-name': class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly | -| Compiler warning (level 4) C5205 | delete of an abstract class 'type-name' that has a non-virtual destructor results in undefined behavior | -| Compiler warning (level 3) C5206 | deduced return types for coroutines is a non-standard extension | -| Compiler warning (level 1) C5207 | the simple requirement asserts the validity of expression '`e->id`'. Did you mean '`{ e } -> id`'? You can suppress the warning using '`{ e->id }`' | -| [Compiler warning (level 1) C5208](c5208.md) | unnamed class used in `typedef` name cannot declare members other than non-static data members, member enumerations, or member classes | -| Compiler warning (level 1) C5209 | the C++20 syntax for an init-capture has changed to '& ...opt identifier initializer' | -| Compiler warning (level 1) C5210 | '*name*' is not a valid header unit reference; ignoring | -| Compiler warning (level 1) C5212 | '*name*' is not a valid named reference; treating as reference to file | -| Compiler warning (level 1) C5213 | '*name*' named reference is treated as a named partition but the name is not specified; treating as reference to file | -| Compiler warning (level 4, off) C5214 | applying '*modifier*' to an operand with a volatile qualified type is deprecated in C++20 | -| Compiler warning (level 4, off) C5215 | '*name*' a function parameter with a volatile qualified type is deprecated in C++20 | -| Compiler warning (level 4, off) C5216 | '*name*' a volatile qualified return type is deprecated in C++20 | -| Compiler warning (level 4, off) C5217 | a structured binding declaration that includes volatile is deprecated in C++20 | -| Compiler warning (level 1) C5218 | destroying delete may not behave as intended when non-conforming switches '`/Zc:sizedDealloc-`' or '`/Zc:alignedNew-`' are used | -| Compiler warning (level 2, off) C5219 | implicit conversion from '*type-1*' to '*type-2*', possible loss of data | -| Compiler warning (level 4, off) C5220 | '*name*': a non-static data member with a volatile qualified type no longer implies that compiler generated copy/move constructors and copy/move assignment operators are not trivial | -| Compiler warning (level 1) C5221 | xfg::rename is deprecated. | -| Compiler warning (level 3) C5222 | '*attribute-name*': all unscoped attribute names are reserved for future standardization | -| Compiler warning (level 3) C5223 | all attribute names in the attribute namespace 'msvc' are reserved for the implementation | -| Compiler warning (level 3) C5224 | all attribute names in the attribute namespace '*namespace-name*' are reserved for future standardization | -| Compiler warning (level 1) C5225 | '*symbol*': exported inline function defined in a private module fragment is a non-standard extension | -| Compiler warning (level 1) C5226 | '*symbol*': exported template defined in private module fragment has no reachable instantiation | -| Compiler warning (level 4) C5227 | nonstandard extension, resolved '*symbol*' to '*value*' which is not visible with `/permissive-` on. | -| Compiler warning (level 4) C5228 | nonstandard extension, '*identifier*' resolved to a member of a dependent base. This lookup is not allowed under `/permissive-`. | -| Compiler warning (level 4) C5229 | nonstandard extension, the hidden friend function '*function-name*' was found by name lookup which isn't allowed under `/permissive-`. | -| Compiler warning C5230 | nonstandard extension, '*identifier*' was resolved to '*symbol-1*' under `/permissive`. Under `/permissive-` it would resolve to '*symbol-2*'. | -| Compiler warning (level 3) C5231 | the expression '`co_await promise.final_suspend()`' must be non-throwing | -| Compiler warning (level 1) C5232 | in C++20 this comparison calls '*name*' recursively | -| Compiler warning (level 4, off) C5233 | explicit lambda capture '*identifier*' is not used | -| Compiler warning (level 1) C5234 | file system error: '*filename*' is not a valid header-name; ignoring | -| Compiler warning (level 1) C5235 | JSON parse error: *message*; ignoring '*filename*' | -| Compiler warning (level 1) C5236 | JSON ill-formed: *message*; ignoring '*filename*' | -| Compiler warning (level 1) C5237 | cannot resolve header unit entry '*name*' to a header file in '*filename*'; ignoring entry | -| Compiler warning (level 1) C5238 | file system error: cannot open '*filename*' for reading; ignoring | -| Compiler warning (level 4) C5239 | '*symbol*': potentially throwing function called from a function declared `__declspec(nothrow)`. Undefined behavior may occur if an exception is thrown. | -| [Compiler warning (level 4) C5240](c5240.md) | '*attribute-name*': attribute is ignored in this syntactic position | -| Compiler warning (level 1) C5241 | '`/exportHeader`' usage to lookup header-name is deprecated; prefer '/headerName:name value=filename' | -| Compiler warning (level 1) C5242 | syntax error in pragma '*identifier*' | -| [Compiler warning (level 1, off) C5243](c5243.md) | '*type-name*': using incomplete class 'class-name' can cause potential one definition rule violation due to ABI limitation | -| Compiler warning (level 1) C5244 | '#include \<*filename*>' in the purview of module '*module-name-1*' appears erroneous. Consider moving that directive before the module declaration, or replace the textual inclusion with 'import \<*module-name-2*>;'. | -| Compiler warning (level 4, off) C5245 | '*function*': unreferenced function with internal linkage has been removed | -| Compiler warning (level 1, off) C5246 | '*member*': the initialization of a subobject should be wrapped in braces | -| [Compiler warning (level 1, off) C5247](c5247.md) | section '*section-name*' is reserved for C++ dynamic initialization. Manually creating the section will interfere with C++ dynamic initialization and may lead to undefined behavior | -| [Compiler warning (level 1, off) C5248](c5248.md) | section '*section-name*' is reserved for C++ dynamic initialization. Variables manually put into the section may be optimized out and their order relative to compiler generated dynamic initializers is unspecified. | -| Compiler warning (level 1, off) C5249 | '*bitfield*' of type '*enumeration_name*' has named enumerators with values that cannot be represented in the given bit field width of '*bitfield_width*'. | -| Compiler warning (level 3, off) C5250 | '*function_name*': intrinsic function not declared. | -| Compiler warning (level 4, off) C5251 | *segment-name* changed after including header | -| Compiler warning (level 4) C5252 | Multiple different types resulted in the same XFG type-hash *hash-value*; the PDB will only record information for one of them | -| Compiler warning (level 4) C5253 | a non-local lambda cannot have a capture default | -| Compiler warning (level 4, off) C5254 | language feature 'terse static assert' requires compiler flag '/std:c++17' | -| Compiler warning (level 3) C5255 | unterminated bidirectional character encountered: 'U+XXXX' | -| Compiler warning (level 1, off) C5256 | '*enumeration*': a non-defining declaration of an enumeration with a fixed underlying type is only permitted as a standalone declaration | -| Compiler warning (level 1 or 4) C5257 | '*enumeration*': enumeration was previously declared without a fixed underlying type | -| Compiler warning (level 4, off) C5258 | explicit capture of '*symbol*' is not required for this use | -| Compiler warning (level 4, off) C5259 | '*specialized-type*': explicit specialization requires 'template <>' | -| Compiler warning (level 1) C5260 | the constant variable '*variable-name*' has internal linkage in an included header file context, but external linkage in imported header unit context; consider declaring it 'inline' as well if it will be shared across translation units, or 'static' to express intent to use it local to this translation unit | -| Compiler warning (level 2) C5261 | no integer type can represent all enumerator values in enumeration '*enum-name*' | -| [Compiler warning (level 1, error, off) C5262](c5262.md) | implicit fall-through occurs here; are you missing a break statement? Use `[[fallthrough]]` when a `break` statement is intentionally omitted between cases | -| Compiler warning (level 4, off) C5263 | calling '`std::move`' on a temporary object prevents copy elision | -| Compiler warning (level 4, off) C5264 | '*variable-name*': 'const' variable is not used | -| Compiler warning (level 1) C5265 | cannot open search path '*path*' | -| [Compiler warning (level 4, off) C5266](compiler-warning-level-4-c5266.md) | 'const' qualifier on return type has no effect | -| [Compiler warning C5267](c5267.md) | definition of implicit copy constructor/assignment operator for '*type*' is deprecated because it has a user-provided assignment operator/copy constructor | -| Compiler warning (level 1) C5268 | Failed to allocate memory at fixed address 0x*address*. Use `/Yb` to specify a specific address base if bit-identical .pch files are required. | -| Compiler warning (level 1) C5269 | Failed to allocate PCH memory at fixed address 0x*address*. Use `/Ym` to specify a specific address base if bit-identical .pch files are required. | -| Compiler warning (level 3) C5270 | '*value*' is not allowed for option '*switch name*'; allowed values are: *value list* | -| Compiler warning (level 4) C5271 | previously imported assembly '*assembly1*' has the same name as assembly '*assembly2*' being imported. Is this intentional? | -| Compiler warning (level 1) C5272 | throwing an object of non-copyable type '*type*' is non-standard. If a copy is needed at runtime it will be made as if by `memcpy`. | -| Compiler warning (level 1) C5273 | behavior change: `_Alignas` on anonymous type no longer ignored (promoted members will align) | -| Compiler warning (level 1) C5274 | behavior change: `_Alignas` no longer applies to the type '*type*' (only applies to declared data objects) | -| Compiler warning (Error) C5275 | facade assembly '*name*' being imported under '`/clr`'; missing option '`/clr:netcore`'? | -| Compiler warning (level 1, error) C5300 | '#pragma omp atomic': left operand of '*operator*' must match left hand side of assignment-expression | -| [Compiler warning (level 1) C5301](c5301-c5302.md) | '#pragma omp for': '*loop-index*' increases while loop condition uses '*comparison*'; non-terminating loop? | -| [Compiler warning (level 1) C5302](c5301-c5302.md) | '#pragma omp for': '*loop-index*' decreases while loop condition uses '*comparison*'; non-terminating loop? | -| Compiler warning (level 1) C5303 | function marked with `[[msvc::intrinsic]]` did not result in a no-op cast | -| Compiler warning (level 1) C5304 | a declaration designated by the using-declaration '*name1*' exported from this module has internal linkage and using such a name outside the module is ill-formed; consider declaring '*name2*' '`inline`' to use it outside of this module | -| Compiler warning (level 1) C5305 | '*name*': an explicit instantiation declaration that follows an explicit instantiation definition is ignored | - ## See also diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md new file mode 100644 index 0000000000..2440c66dfa --- /dev/null +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5000-through-c5199.md @@ -0,0 +1,77 @@ +--- +title: "Compiler warnings C5000 Through C5199" +description: "Table of Microsoft C/C++ compiler warnings C5000 through C5199." +ms.date: 04/17/2024 +f1_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] +helpviewer_keywords: ["C5022", "C5023", "C5024", "C5025", "C5026", "C5027", "C5028", "C5029", "C5030", "C5031", "C5032", "C5034", "C5035", "C5036", "C5039", "C5040", "C5041", "C5042", "C5043", "C5044", "C5047", "C5048", "C5049", "C5051", "C5052", "C5053", "C5057", "C5058", "C5059", "C5060", "C5061", "C5062", "C5063", "C5081", "C5100", "C5101", "C5102", "C5103", "C5104", "C5106", "C5107", "C5108", "C5109", "C5110"] +--- +# Compiler warnings C5000 through C5199 + +The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. + +[!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] + +## Warning messages + +| Warning | Message | +|--|--| +| Compiler warning C5022 | '*type*': multiple move constructors specified | +| Compiler warning C5023 | '*type*': multiple move assignment operators specified | +| Compiler warning (level 4, off) C5024 | '*type*': move constructor was implicitly defined as deleted | +| Compiler warning (level 4, off) C5025 | '*type*': move assignment operator was implicitly defined as deleted | +| Compiler warning (level 1 and level 4, off) C5026 | '*type*': move constructor was implicitly defined as deleted | +| Compiler warning (level 1 and level 4, off) C5027 | '*type*': move assignment operator was implicitly defined as deleted | +| Compiler warning (level 1) C5028 | '*name*': Alignment specified in prior declaration (*number*) not specified in definition | +| Compiler warning (level 4, off) C5029 | nonstandard extension used: alignment attributes in C++ apply to variables, data members and tag types only | +| Compiler warning (level 3) C5030 | attribute '*attribute-name*' is not recognized | +| Compiler warning (level 4, off) C5031 | `#pragma warning(pop)`: likely mismatch, popping warning state pushed in different file | +| Compiler warning (level 4, off) C5032 | detected `#pragma warning(push)` with no corresponding `#pragma warning(pop)` | +| [Compiler warning (level 1) C5033](c5033.md) | '*storage-class*' is no longer a supported storage class | +| Compiler warning (level 5, off) C5034 | use of intrinsic '*intrinsic*' causes function *function-name* to be compiled as guest code | +| Compiler warning (level 5, off) C5035 | use of feature '*feature*' causes function *function-name* to be compiled as guest code | +| Compiler warning (level 1) C5036 | varargs function pointer conversion when compiling with `/hybrid:x86arm64` '*type1*' to '*type2*' | +| [Compiler warning (error) C5037](c5037.md) | '*member-function*': an out-of-line definition of a member of a class template cannot have default arguments | +| [Compiler warning (level 4, off) C5038](c5038.md) | data member '*member1*' will be initialized after data member '*member2*' | +| Compiler warning (level 4, off) C5039 | '*function*': pointer or reference to potentially throwing function passed to `extern C` function under `-EHc`. Undefined behavior may occur if this function throws an exception. | +| Compiler warning (level 3) C5040 | dynamic exception specifications are valid only in C++14 and earlier; treating as noexcept(false) | +| Compiler warning (level 1, off) C5041 | '*definition*': out-of-line definition for constexpr static data member is not needed and is deprecated in C++17 | +| Compiler warning (level 3, off) C5042 | '*declaration*': function declarations at block scope cannot be specified 'inline' in standard C++; remove 'inline' specifier | +| Compiler warning (level 2) C5043 | '*specification*': exception specification does not match previous declaration | +| Compiler warning (level 4) C5044 | An argument to command-line option *option-name* points to a path '*path-name*' that does not exist | +| [Compiler warning (level 4) C5045](c5045.md) | Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified | +| [Compiler warning (level 2) C5046](c5046.md) | '*function*': Symbol involving type with internal linkage not defined | +| Compiler warning (level 1) C5047 | use of nonstandard `__if_exists` with modules is not supported | +| Compiler warning (level 1) C5048 | Use of macro '*macroname*' may result in non-deterministic output | +| Compiler warning (level 1) C5049 | '*string*': Embedding a full path may result in machine-dependent output | +| [Compiler warning (level 1) C5050](c5050.md) | Possible incompatible environment while importing module '*module_name*': *issue* | +| Compiler warning (level 1) C5051 | attribute 'attribute-name' requires at least 'standard-level'; ignored | +| Compiler warning (level 3, off) C5052 | Keyword 'keyword-name' was introduced in C++\ and requires use of the 'option-name' command-line option | +| Compiler warning (level 1) C5053 | support for '`explicit()`' in C++17 and earlier is a vendor extension | +| [Compiler warning (level 4) C5054](c5054.md) | operator 'operator-name': deprecated between enumerations of different types | +| [Compiler warning (level 1) C5055](c5055.md) | operator 'operator-name': deprecated between enumerations and floating-point types | +| [Compiler warning (level 1) C5056](c5056.md) | operator 'operator-name': deprecated for array types | +| Compiler warning (level 1) C5057 | header unit reference to 'name' already exists. Ignoring header unit 'header-name' | +| Compiler warning (level 1) C5058 | file system error: cannot find header file 'file-name' for header unit 'unit-name' | +| Compiler warning C5059 | runtime checks and address sanitizer is not currently supported - disabling runtime checks | +| Compiler warning (level 4) C5060 | `/Qpar` and address sanitizer not currently supported - disabling auto-parallelization | +| Compiler warning (level 4) C5061 | the use of a comma operator as a subscript expression has been deprecated | +| Compiler warning (level 4) C5062 | enum direct list initialization between 'type-1' and 'type-2' is no longer supported | +| Compiler warning (level 1) C5063 | '`std::is_constant_evaluated`' always evaluates to true in manifestly constant-evaluated expressions | +| [Compiler warning (level 1) C5072](compiler-warning-c5072.md) | ASAN enabled without debug information emission. Enable debug info for better ASAN error reporting | +| Compiler warning (level 1) C5081 | Secure hotpatch is not supported with `/GENPROFILE`, `/FASTGENPROFILE` or `/LTCG:PGI`, disabling secure hotpatch. | +| Compiler warning (level 1) C5100 | `__VA_ARGS__` is reserved for use in variadic macros | +| Compiler warning (level 1) C5101 | use of preprocessor directive in function-like macro argument list is undefined behavior | +| Compiler warning (level 1) C5102 | ignoring invalid command-line macro definition '*value*' | +| Compiler warning (level 1) C5103 | pasting '*token1*' and '*token2*' does not result in a valid preprocessing token | +| Compiler warning (level 1) C5104 | found '*string1*`#`*string2*' in macro replacement list, did you mean '*string1*`""#`*string2*'? | +| [Compiler warning (level 1) C5105](c5105.md) | macro expansion producing 'defined' has undefined behavior | +| Compiler warning (level 1) C5106 | macro redefined with different parameter names | +| Compiler warning (level 1) C5107 | missing terminating '*char*' character | +| Compiler warning (level 1) C5108 | `__VA_OPT__` is reserved for use in variadic macros | +| Compiler warning (level 1) C5109 | `__VA_OPT__` use in macro requires '`/Zc:preprocessor`' | +| Compiler warning (level 4, off) C5110 | `__VA_OPT__` is an extension prior to C++20 or C23 | + +## See also + +[C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md)\ +[Compiler warnings C4000 - C5999](compiler-warnings-c4000-c5999.md) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md new file mode 100644 index 0000000000..c68e4a5f0b --- /dev/null +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c5200-through-c5399.md @@ -0,0 +1,103 @@ +--- +title: "Compiler warnings C5200 Through C5399" +description: "Table of Microsoft C/C++ compiler warnings C5200 through C5399." +ms.date: 04/17/2024 +f1_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] +helpviewer_keywords: ["C5200", "C5201", "C5202", "C5203", "C5204", "C5205", "C5206", "C5207", "C5209", "C5210", "C5211", "C5212", "C5213", "C5214", "C5215", "C5216", "C5217", "C5218", "C5219", "C5220", "C5221", "C5222", "C5223", "C5224", "C5225", "C5226", "C5227", "C5228", "C5229", "C5230", "C5231", "C5232", "C5233", "C5234", "C5235", "C5236", "C5237", "C5238", "C5239", "C5241", "C5242", "C5244", "C5245", "C5246", "C5249", "C5250", "C5251", "C5252", "C5253", "C5254", "C5255", "C5256", "C5257", "C5258", "C5259", "C5260", "C5261", "C5263", "C5264", "C5265", "C5268", "C5269", "C5270", "C5271", "C5272", "C5273", "C5274", "C5275", "C5300", "C5303", "C5304", "C5305"] +--- +# Compiler warnings C5200 through C5399 + +The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. + +[!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] + +## Warning messages + +| Warning | Message | +|--|--| +| Compiler warning (level 1) C5200 | feature 'feature-name' requires compiler flag 'option-name' | +| Compiler warning (level 1) C5201 | a module declaration can appear only at the start of a translation unit unless a global module fragment is used | +| Compiler warning (level 1) C5202 | a global module fragment can only contain preprocessor directives | +| Compiler warning (level 1) C5203 | a parenthesized declarator name after 'explicit' will be considered an explicit-specifier in C++20 | +| Compiler warning (level 3, off) C5204 | 'type-name': class has virtual functions, but its trivial destructor is not virtual; instances of objects derived from this class may not be destructed correctly | +| Compiler warning (level 4) C5205 | delete of an abstract class 'type-name' that has a non-virtual destructor results in undefined behavior | +| Compiler warning (level 3) C5206 | deduced return types for coroutines is a non-standard extension | +| Compiler warning (level 1) C5207 | the simple requirement asserts the validity of expression '`e->id`'. Did you mean '`{ e } -> id`'? You can suppress the warning using '`{ e->id }`' | +| [Compiler warning (level 1) C5208](c5208.md) | unnamed class used in `typedef` name cannot declare members other than non-static data members, member enumerations, or member classes | +| Compiler warning (level 1) C5209 | the C++20 syntax for an init-capture has changed to '& ...opt identifier initializer' | +| Compiler warning (level 1) C5210 | '*name*' is not a valid header unit reference; ignoring | +| Compiler warning (level 1) C5212 | '*name*' is not a valid named reference; treating as reference to file | +| Compiler warning (level 1) C5213 | '*name*' named reference is treated as a named partition but the name is not specified; treating as reference to file | +| Compiler warning (level 4, off) C5214 | applying '*modifier*' to an operand with a volatile qualified type is deprecated in C++20 | +| Compiler warning (level 4, off) C5215 | '*name*' a function parameter with a volatile qualified type is deprecated in C++20 | +| Compiler warning (level 4, off) C5216 | '*name*' a volatile qualified return type is deprecated in C++20 | +| Compiler warning (level 4, off) C5217 | a structured binding declaration that includes volatile is deprecated in C++20 | +| Compiler warning (level 1) C5218 | destroying delete may not behave as intended when non-conforming switches '`/Zc:sizedDealloc-`' or '`/Zc:alignedNew-`' are used | +| Compiler warning (level 2, off) C5219 | implicit conversion from '*type-1*' to '*type-2*', possible loss of data | +| Compiler warning (level 4, off) C5220 | '*name*': a non-static data member with a volatile qualified type no longer implies that compiler generated copy/move constructors and copy/move assignment operators are not trivial | +| Compiler warning (level 1) C5221 | xfg::rename is deprecated. | +| Compiler warning (level 3) C5222 | '*attribute-name*': all unscoped attribute names are reserved for future standardization | +| Compiler warning (level 3) C5223 | all attribute names in the attribute namespace 'msvc' are reserved for the implementation | +| Compiler warning (level 3) C5224 | all attribute names in the attribute namespace '*namespace-name*' are reserved for future standardization | +| Compiler warning (level 1) C5225 | '*symbol*': exported inline function defined in a private module fragment is a non-standard extension | +| Compiler warning (level 1) C5226 | '*symbol*': exported template defined in private module fragment has no reachable instantiation | +| Compiler warning (level 4) C5227 | nonstandard extension, resolved '*symbol*' to '*value*' which is not visible with `/permissive-` on. | +| Compiler warning (level 4) C5228 | nonstandard extension, '*identifier*' resolved to a member of a dependent base. This lookup is not allowed under `/permissive-`. | +| Compiler warning (level 4) C5229 | nonstandard extension, the hidden friend function '*function-name*' was found by name lookup which isn't allowed under `/permissive-`. | +| Compiler warning C5230 | nonstandard extension, '*identifier*' was resolved to '*symbol-1*' under `/permissive`. Under `/permissive-` it would resolve to '*symbol-2*'. | +| Compiler warning (level 3) C5231 | the expression '`co_await promise.final_suspend()`' must be non-throwing | +| Compiler warning (level 1) C5232 | in C++20 this comparison calls '*name*' recursively | +| Compiler warning (level 4, off) C5233 | explicit lambda capture '*identifier*' is not used | +| Compiler warning (level 1) C5234 | file system error: '*filename*' is not a valid header-name; ignoring | +| Compiler warning (level 1) C5235 | JSON parse error: *message*; ignoring '*filename*' | +| Compiler warning (level 1) C5236 | JSON ill-formed: *message*; ignoring '*filename*' | +| Compiler warning (level 1) C5237 | cannot resolve header unit entry '*name*' to a header file in '*filename*'; ignoring entry | +| Compiler warning (level 1) C5238 | file system error: cannot open '*filename*' for reading; ignoring | +| Compiler warning (level 4) C5239 | '*symbol*': potentially throwing function called from a function declared `__declspec(nothrow)`. Undefined behavior may occur if an exception is thrown. | +| [Compiler warning (level 4) C5240](c5240.md) | '*attribute-name*': attribute is ignored in this syntactic position | +| Compiler warning (level 1) C5241 | '`/exportHeader`' usage to lookup header-name is deprecated; prefer '/headerName:name value=filename' | +| Compiler warning (level 1) C5242 | syntax error in pragma '*identifier*' | +| [Compiler warning (level 1, off) C5243](c5243.md) | '*type-name*': using incomplete class 'class-name' can cause potential one definition rule violation due to ABI limitation | +| Compiler warning (level 1) C5244 | '#include \<*filename*>' in the purview of module '*module-name-1*' appears erroneous. Consider moving that directive before the module declaration, or replace the textual inclusion with 'import \<*module-name-2*>;'. | +| Compiler warning (level 4, off) C5245 | '*function*': unreferenced function with internal linkage has been removed | +| Compiler warning (level 1, off) C5246 | '*member*': the initialization of a subobject should be wrapped in braces | +| [Compiler warning (level 1, off) C5247](c5247.md) | section '*section-name*' is reserved for C++ dynamic initialization. Manually creating the section will interfere with C++ dynamic initialization and may lead to undefined behavior | +| [Compiler warning (level 1, off) C5248](c5248.md) | section '*section-name*' is reserved for C++ dynamic initialization. Variables manually put into the section may be optimized out and their order relative to compiler generated dynamic initializers is unspecified. | +| Compiler warning (level 1, off) C5249 | '*bitfield*' of type '*enumeration_name*' has named enumerators with values that cannot be represented in the given bit field width of '*bitfield_width*'. | +| Compiler warning (level 3, off) C5250 | '*function_name*': intrinsic function not declared. | +| Compiler warning (level 4, off) C5251 | *segment-name* changed after including header | +| Compiler warning (level 4) C5252 | Multiple different types resulted in the same XFG type-hash *hash-value*; the PDB will only record information for one of them | +| Compiler warning (level 4) C5253 | a non-local lambda cannot have a capture default | +| Compiler warning (level 4, off) C5254 | language feature 'terse static assert' requires compiler flag '/std:c++17' | +| Compiler warning (level 3) C5255 | unterminated bidirectional character encountered: 'U+XXXX' | +| Compiler warning (level 1, off) C5256 | '*enumeration*': a non-defining declaration of an enumeration with a fixed underlying type is only permitted as a standalone declaration | +| Compiler warning (level 1 or 4) C5257 | '*enumeration*': enumeration was previously declared without a fixed underlying type | +| Compiler warning (level 4, off) C5258 | explicit capture of '*symbol*' is not required for this use | +| Compiler warning (level 4, off) C5259 | '*specialized-type*': explicit specialization requires 'template <>' | +| Compiler warning (level 1) C5260 | the constant variable '*variable-name*' has internal linkage in an included header file context, but external linkage in imported header unit context; consider declaring it 'inline' as well if it will be shared across translation units, or 'static' to express intent to use it local to this translation unit | +| Compiler warning (level 2) C5261 | no integer type can represent all enumerator values in enumeration '*enum-name*' | +| [Compiler warning (level 1, error, off) C5262](c5262.md) | implicit fall-through occurs here; are you missing a break statement? Use `[[fallthrough]]` when a `break` statement is intentionally omitted between cases | +| Compiler warning (level 4, off) C5263 | calling '`std::move`' on a temporary object prevents copy elision | +| Compiler warning (level 4, off) C5264 | '*variable-name*': 'const' variable is not used | +| Compiler warning (level 1) C5265 | cannot open search path '*path*' | +| [Compiler warning (level 4, off) C5266](compiler-warning-level-4-c5266.md) | 'const' qualifier on return type has no effect | +| [Compiler warning C5267](c5267.md) | definition of implicit copy constructor/assignment operator for '*type*' is deprecated because it has a user-provided assignment operator/copy constructor | +| Compiler warning (level 1) C5268 | Failed to allocate memory at fixed address 0x*address*. Use `/Yb` to specify a specific address base if bit-identical .pch files are required. | +| Compiler warning (level 1) C5269 | Failed to allocate PCH memory at fixed address 0x*address*. Use `/Ym` to specify a specific address base if bit-identical .pch files are required. | +| Compiler warning (level 3) C5270 | '*value*' is not allowed for option '*switch name*'; allowed values are: *value list* | +| Compiler warning (level 4) C5271 | previously imported assembly '*assembly1*' has the same name as assembly '*assembly2*' being imported. Is this intentional? | +| Compiler warning (level 1) C5272 | throwing an object of non-copyable type '*type*' is non-standard. If a copy is needed at runtime it will be made as if by `memcpy`. | +| Compiler warning (level 1) C5273 | behavior change: `_Alignas` on anonymous type no longer ignored (promoted members will align) | +| Compiler warning (level 1) C5274 | behavior change: `_Alignas` no longer applies to the type '*type*' (only applies to declared data objects) | +| Compiler warning (Error) C5275 | facade assembly '*name*' being imported under '`/clr`'; missing option '`/clr:netcore`'? | +| Compiler warning (level 1, error) C5300 | '#pragma omp atomic': left operand of '*operator*' must match left hand side of assignment-expression | +| [Compiler warning (level 1) C5301](c5301-c5302.md) | '#pragma omp for': '*loop-index*' increases while loop condition uses '*comparison*'; non-terminating loop? | +| [Compiler warning (level 1) C5302](c5301-c5302.md) | '#pragma omp for': '*loop-index*' decreases while loop condition uses '*comparison*'; non-terminating loop? | +| Compiler warning (level 1) C5303 | function marked with `[[msvc::intrinsic]]` did not result in a no-op cast | +| Compiler warning (level 1) C5304 | a declaration designated by the using-declaration '*name1*' exported from this module has internal linkage and using such a name outside the module is ill-formed; consider declaring '*name2*' '`inline`' to use it outside of this module | +| Compiler warning (level 1) C5305 | '*name*': an explicit instantiation declaration that follows an explicit instantiation definition is ignored | + +## See also + +[C/C++ Compiler and build tools errors and warnings](../compiler-errors-1/c-cpp-build-errors.md)\ +[Compiler warnings C4000 - C5999](compiler-warnings-c4000-c5999.md) diff --git a/docs/error-messages/toc.yml b/docs/error-messages/toc.yml index d43a125259..a67f2b6583 100644 --- a/docs/error-messages/toc.yml +++ b/docs/error-messages/toc.yml @@ -4174,10 +4174,10 @@ items: href: compiler-warnings/compiler-warning-level-1-c4794.md - name: Compiler warning (level 1) C4799 href: compiler-warnings/compiler-warning-level-1-c4799.md - - name: Compiler warnings C4800 Through C5999 + - name: Compiler warnings C4800 Through C4999 expanded: false items: - - name: Compiler warnings C4800 Through C5999 + - name: Compiler warnings C4800 Through C4999 href: compiler-warnings/compiler-warnings-c4800-through-c4999.md - name: Compiler warning (level 3) C4800 href: compiler-warnings/compiler-warning-level-3-c4800.md @@ -4333,6 +4333,11 @@ items: href: compiler-warnings/compiler-warning-level-1-c4997.md - name: Compiler warning (level 1) C4999 href: compiler-warnings/compiler-warning-level-1-c4999.md + - name: Compiler warnings C5000 Through C5199 + expanded: false + items: + - name: Compiler warnings C5000 Through C5199 + href: compiler-warnings/compiler-warnings-c5000-through-c5199.md - name: Compiler warning (level 1) C5033 href: compiler-warnings/c5033.md - name: Compiler warning C5037 @@ -4355,6 +4360,11 @@ items: href: compiler-warnings/compiler-warning-c5072.md - name: Compiler warning (level 1) C5105 href: compiler-warnings/c5105.md + - name: Compiler warnings C5200 Through C5399 + expanded: false + items: + - name: Compiler warnings C5200 Through C5399 + href: compiler-warnings/compiler-warnings-c5200-through-c5399.md - name: Compiler warning (level 1) C5208 href: compiler-warnings/c5208.md - name: Compiler warning (level 1) C5240 From 4275b58391d5859b2078538bb6a0c628a83850ad Mon Sep 17 00:00:00 2001 From: Rageking8 <106309953+Rageking8@users.noreply.github.com> Date: Wed, 17 Apr 2024 10:39:40 +0800 Subject: [PATCH 0104/1239] Fix some formatting --- .../compiler-warnings-c4800-through-c4999.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md index c08e7ca725..4b17213058 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4800-through-c4999.md @@ -16,7 +16,7 @@ The articles in this section of the documentation explain a subset of the warnin | Warning | Message | |--|--| | [Compiler warning (level 4, off) C4800](compiler-warning-level-3-c4800.md) | Implicit conversion from '*type*' to `bool`. Possible information loss | -|Compiler warning C4801|Return by reference is not verifiable: *message*| +| Compiler warning C4801 | Return by reference is not verifiable: *message* | | [Compiler warning (level 1) C4803](compiler-warning-level-1-c4803.md) | '*method*': the raise method has a different storage class from that of the event, '*event*' | | [Compiler warning (level 1) C4804](compiler-warning-level-1-c4804.md) | '*operation*': unsafe use of type '`bool`' in operation | | [Compiler warning (level 1) C4805](compiler-warning-level-1-c4805.md) | '*operation*': unsafe mix of type '*type1*' and type '*type2*' in operation | @@ -38,7 +38,7 @@ The articles in this section of the documentation explain a subset of the warnin | [Compiler warning (level 3) C4823](compiler-warning-level-3-c4823.md) | '*function*': uses pinning pointers but unwind semantics are not enabled. Consider using `/EHa` | | Compiler warning (level 2, off) C4826 | Conversion from '*type1*' to '*type2*' is sign-extended. This may cause unexpected runtime behavior. | | Compiler warning (level 3) C4827 | A public '`ToString`' method with 0 parameters should be marked as `virtual` and `override` | -|Compiler warning (level 1) C4828|The file contains a character starting at offset 0x*HexOffset* that is illegal in the current source character set (codepage *codepage*).| +| Compiler warning (level 1) C4828 | The file contains a character starting at offset 0x*HexOffset* that is illegal in the current source character set (codepage *codepage*). | | [Compiler warning (level 1) C4829](compiler-warning-level-1-c4829.md) | Possibly incorrect parameters to function `main`. Consider '`int main(Platform::Array^ argv)`' | | [Compiler warning (level 1) C4834](c4834.md) | discarding return value of function with 'nodiscard' attribute | | [Compiler warning (level 1) C4835](compiler-warning-level-1-c4835.md) | '*variable*': the initializer for exported data will not be run until managed code is first executed in the host assembly | @@ -71,11 +71,11 @@ The articles in this section of the documentation explain a subset of the warnin | Compiler warning (level 1) C4880 | casting from 'const *type_1*' to '*type_2*': casting away constness from a pointer or reference may result in undefined behavior in an amp restricted function | | Compiler warning (level 4) C4881 | the constructor and/or the destructor will not be invoked for `tile_static` variable '*variable-name*' | | Compiler warning (level 1) C4882 | passing functors with non-const call operators to `concurrency::parallel_for_each` is deprecated | -|Compiler warning C4883|'*function name*': function size suppresses optimizations| +| Compiler warning C4883 | '*function name*': function size suppresses optimizations | | [Compiler warning C4900](compiler-warning-level-1-c4900.md) | Il mismatch between '*tool1*' version '*version1*' and '*tool2*' version '*version2*' | | [Compiler warning (level 1, off) C4905](compiler-warning-level-1-c4905.md) | wide string literal cast to '`LPSTR`' | | [Compiler warning (level 1, off) C4906](compiler-warning-level-1-c4906.md) | string literal cast to '`LPWSTR`' | -|Compiler warning (Error) C4907|multiple calling conventions cannot be specified; last given will be used| +| Compiler warning (Error) C4907 | multiple calling conventions cannot be specified; last given will be used | | [Compiler warning (level 1) C4910](compiler-warning-level-1-c4910.md) | '\: '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation | | [Compiler warning (level 1) C4912](compiler-warning-level-1-c4912.md) | '*attribute*': attribute has undefined behavior on a nested UDT | | [Compiler warning (level 4) C4913](compiler-warning-level-4-c4913.md) | user defined binary operator '`,`' exists but no overload could convert all operands, default built-in binary operator '`,`' used | From 04d0f956ff13768ff8734c8f313dc5b1a9af29b5 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Thu, 18 Apr 2024 10:37:02 -0700 Subject: [PATCH 0105/1239] Update compiler-warnings-c4000-through-c4199.md (#5551) * Learn Editor: Update compiler-warnings-c4000-through-c4199.md * Learn Editor: Update compiler-warnings-c4000-through-c4199.md * Update compiler-warnings-c4000-through-c4199.md * Update toc.yml * Update compiler-warning-level-4-c4001.md * Update compiler-warning-level-1-c4002.md * Update compiler-warning-level-1-c4003.md * Update compiler-warning-level-2-c4007.md * Update compiler-warning-level-1-c4052.md * Update compiler-warning-level-4-c4061.md * Update compiler-warning-level-4-c4061.md * Update compiler-warning-level-4-c4062.md * Update compiler-warning-level-1-c4091.md * Update compiler-warning-level-3-c4101.md * Update compiler-warning-levels-1-and-4-c4112.md * Update compiler-warning-level-3-c4133.md * Update compiler-warning-level-1-c4141.md * Update compiler-warning-level-4-c4189.md * Update compiler-warning-level-3-c4191.md * Update compiler-warning-level-1-c4002.md * Update compiler-warning-level-1-c4002.md * Update compiler-warning-level-1-c4052.md * Update compiler-warning-level-1-c4091.md * Update compiler-warning-level-2-c4007.md * Update compiler-warning-level-3-c4101.md * Update compiler-warning-level-3-c4133.md * Update compiler-warning-level-3-c4191.md * Update compiler-warning-level-4-c4001.md * Update compiler-warning-level-4-c4061.md * Update compiler-warning-level-4-c4062.md * Update compiler-warning-level-4-c4189.md * Update compiler-warning-levels-1-and-4-c4112.md * Update compiler-warning-level-4-c4061.md * Update compiler-warnings-c4000-through-c4199.md --- .../compiler-warning-level-1-c4002.md | 13 +- .../compiler-warning-level-1-c4003.md | 9 +- .../compiler-warning-level-1-c4052.md | 11 +- .../compiler-warning-level-1-c4091.md | 13 +- .../compiler-warning-level-1-c4141.md | 9 +- .../compiler-warning-level-2-c4007.md | 11 +- .../compiler-warning-level-3-c4101.md | 15 +- .../compiler-warning-level-3-c4133.md | 11 +- .../compiler-warning-level-3-c4191.md | 15 +- .../compiler-warning-level-4-c4001.md | 11 +- .../compiler-warning-level-4-c4061.md | 15 +- .../compiler-warning-level-4-c4062.md | 14 +- .../compiler-warning-level-4-c4189.md | 14 +- .../compiler-warning-levels-1-and-4-c4112.md | 13 +- .../compiler-warnings-c4000-through-c4199.md | 253 +++++++++--------- docs/error-messages/toc.yml | 28 +- 16 files changed, 217 insertions(+), 238 deletions(-) diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4002.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4002.md index eb79eb1e82..18d513c787 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4002.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4002.md @@ -1,18 +1,17 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4002" -title: "Compiler Warning (level 1) C4002" +description: "Learn more about: Compiler Warning (level 1, Error) C4002" +title: "Compiler Warning (level 1, Error) C4002" ms.date: "11/04/2016" f1_keywords: ["C4002"] helpviewer_keywords: ["C4002"] -ms.assetid: 6bda1dfe-e2e4-4771-9794-5a404c466dd5 --- -# Compiler Warning (level 1) C4002 +# Compiler Warning (level 1, Error) C4002 -too many actual parameters for macro 'identifier' +> too many arguments for function-like macro invocation '*identifier*' The number of actual parameters in the macro exceeds the number of formal parameters in the macro definition. The preprocessor collects the extra parameters but ignores them during macro expansion. -C4002 can occur when incorrectly using [Variadic Macros](../../preprocessor/variadic-macros.md). +C4002 can occur when incorrectly using [variadic macros](../../preprocessor/variadic-macros.md). The following sample generates C4002: @@ -32,7 +31,7 @@ int main() { This error can also be generated as a result of compiler conformance work that was done for Visual Studio .NET 2003: extra commas in macro no longer accepted. -The compiler will no longer accept extra commas in a macro. For code to be valid in both the Visual Studio .NET 2003 and Visual Studio .NET versions of Visual C++, remove the extra commas. +The compiler no longer accepts extra commas in a macro. For code to be valid in both the Visual Studio .NET 2003 and Visual Studio .NET versions of Visual C++, remove the extra commas. ```cpp // C4002b.cpp diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4003.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4003.md index da9d1a36c9..360f59e894 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4003.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4003.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4003" -title: "Compiler Warning (level 1) C4003" +description: "Learn more about: Compiler Warning (level 1, Error) C4003" +title: "Compiler Warning (level 1, Error) C4003" ms.date: "11/04/2016" f1_keywords: ["C4003"] helpviewer_keywords: ["C4003"] -ms.assetid: 0ed1c285-4428-4c90-8131-86897e31f115 --- -# Compiler Warning (level 1) C4003 +# Compiler Warning (level 1, Error) C4003 -not enough actual parameters for macro 'identifier' +> not enough arguments for function-like macro invocation '*identifier*' The number of formal parameters in the macro definition exceeds the number of actual parameters in the macro. Macro expansion substitutes empty text for the missing parameters. diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4052.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4052.md index 889c7e063b..aaf4746a46 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4052.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4052.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4052" -title: "Compiler Warning (level 1) C4052" +description: "Learn more about: Compiler Warning (level 1 and level 4) C4052" +title: "Compiler Warning (level 1 and level 4) C4052" ms.date: "11/04/2016" f1_keywords: ["C4052"] helpviewer_keywords: ["C4052"] -ms.assetid: f9955421-16ab-46e5-8f9d-bf1639a519ef --- -# Compiler Warning (level 1) C4052 +# Compiler Warning (level 1 and level 4) C4052 -function declarations different; one contains variable arguments +> function declarations different; one contains variable arguments -One declaration of the function does not contain variable arguments. It is ignored. +One declaration of the function doesn't contain variable arguments. The empty declaration is ignored. The following sample generates C4052: diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4091.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4091.md index 89745ffea5..bd1e02649e 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4091.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4091.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4091" -title: "Compiler Warning (level 1) C4091" +description: "Learn more about: Compiler Warning (level 1 and level 2) C4091" +title: "Compiler Warning (level 1 and level 2) C4091" ms.date: "11/04/2016" f1_keywords: ["C4091"] helpviewer_keywords: ["C4091"] -ms.assetid: 3a404967-ab42-49b0-b324-fd7ba1859d78 --- -# Compiler Warning (level 1) C4091 +# Compiler Warning (level 1 and level 2) C4091 -'keyword' : ignored on left of 'type' when no variable is declared +> '*keyword*': ignored on left of '*type*' when no variable is declared -The compiler detected a situation where the user probably intended a variable to be declared, but the compiler was not able to declare the variable. +The compiler detected a situation where the user probably intended a variable to be declared, but the compiler wasn't able to declare the variable. ## Examples @@ -29,7 +28,7 @@ __declspec(dllimport) class X2 {} varX; class __declspec(dllimport) X3 {}; ``` -If an identifier is a typedef, it cannot also be a variable name. The following sample generates C4091. +If an identifier is a typedef, it can't also be a variable name. The following sample generates C4091. ```cpp // C4091_b.cpp diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4141.md b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4141.md index abe11df5f5..e166131289 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4141.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-1-c4141.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 1) C4141" -title: "Compiler Warning (level 1) C4141" +description: "Learn more about: Compiler Warning (level 1, Error) C4141" +title: "Compiler Warning (level 1, Error) C4141" ms.date: "11/04/2016" f1_keywords: ["C4141"] helpviewer_keywords: ["C4141"] -ms.assetid: 6ce8c058-7f4c-41cf-93e7-90a466744656 --- -# Compiler Warning (level 1) C4141 +# Compiler Warning (level 1, Error) C4141 -'modifier' : used more than once +> '*modifier*': used more than once ## Example diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4007.md b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4007.md index 7b38ae77bb..336918d5ce 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4007.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-2-c4007.md @@ -1,13 +1,12 @@ --- -description: "Learn more about: Compiler Warning (level 2) C4007" -title: "Compiler Warning (level 2) C4007" +description: "Learn more about: Compiler Warning (level 3) C4007" +title: "Compiler Warning (level 3) C4007" ms.date: "11/04/2016" f1_keywords: ["C4007"] helpviewer_keywords: ["C4007"] -ms.assetid: 56a70c07-59a5-4fd7-80ed-63592c65cbb7 --- -# Compiler Warning (level 2) C4007 +# Compiler Warning (level 3) C4007 -'function' : must be 'attribute' +> '*function*': must be '*attribute*' -A required attribute for a function is not explicitly stated. For example, the function **main** must have the **`__cdecl`** attribute. The compiler forces the attribute. +A required attribute for a function isn't explicitly stated. For example, the function `main` must have the `__cdecl` attribute. The compiler forces the attribute. diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4101.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4101.md index 8044b98d73..3199f6c3e5 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4101.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4101.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4101" -title: "Compiler Warning (level 3) C4101" +description: "Learn more about: Compiler Warning (level 3 and level 4) C4101" +title: "Compiler Warning (level 3 and level 4) C4101" ms.date: "11/04/2016" f1_keywords: ["C4101"] helpviewer_keywords: ["C4101"] -ms.assetid: d98563cd-9dce-4aae-8f12-bd552a4ea677 --- -# Compiler Warning (level 3) C4101 +# Compiler Warning (level 3 and level 4) C4101 -'identifier' : unreferenced local variable +> '*identifier*': unreferenced local variable -The local variable is never used. This warning will occur in the obvious situation: +The local variable is never used. This warning occurs in the obvious situation: ```cpp // C4101a.cpp @@ -20,7 +19,7 @@ int i; // C4101 } ``` -However, this warning will also occur when calling a **`static`** member function through an instance of the class: +However, this warning also occurs when calling a **`static`** member function through an instance of the class: ```cpp // C4101b.cpp @@ -39,7 +38,7 @@ int main() { } ``` -In this situation, the compiler uses information about `si` to access the **`static`** function, but the instance of the class is not needed to call the **`static`** function; hence the warning. To resolve this warning, you could: +In this situation, the compiler uses information about `si` to access the **`static`** function, but the instance of the class isn't needed to call the **`static`** function; hence the warning. To resolve this warning, you could: - Add a constructor, in which the compiler would use the instance of `si` in the call to `func`. diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4133.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4133.md index 77a80d1326..48a818c0f0 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4133.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4133.md @@ -1,15 +1,14 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4133" -title: "Compiler Warning (level 3) C4133" +description: "Learn more about: Compiler Warning (level 1 and level 3) C4133" +title: "Compiler Warning (level 1 and level 3) C4133" ms.date: "11/04/2016" f1_keywords: ["C4133"] helpviewer_keywords: ["C4133"] -ms.assetid: bdef87b0-21b3-41ac-9b23-1fa86101a9ac --- -# Compiler Warning (level 3) C4133 +# Compiler Warning (level 1 and level 3) C4133 -'type' : incompatible types - from 'type1' to 'type2' +> '*expression*': incompatible types - from '*type1*' to '*type2*' -This warning can be caused by trying to subtract two pointers of different types. +This warning is emitted when incompatible types are used in an expression. For example, doing arithmetic operations such as subtraction with different pointer types. To avoid this warning, provide an appropriate type cast. diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4191.md b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4191.md index a0bdee8047..fc3a8e001c 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4191.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-3-c4191.md @@ -1,14 +1,13 @@ --- -description: "Learn more about: Compiler Warning (level 3) C4191" -title: "Compiler Warning (level 3) C4191" +description: "Learn more about: Compiler Warning (level 3, off) C4191" +title: "Compiler Warning (level 3, off) C4191" ms.date: "11/04/2016" f1_keywords: ["C4191"] helpviewer_keywords: ["C4191"] -ms.assetid: 576d3bc6-95b7-448a-af31-5d798452df09 --- -# Compiler Warning (level 3) C4191 +# Compiler Warning (level 3, off) C4191 -'operator/operation' : unsafe conversion from 'type of expression' to 'type required' +> '*operation*': unsafe conversion from '*type_of_expression*' to '*type_required*'
Making a function call using the resulting pointer may cause your program to fail Several operations involving function pointers are considered unsafe: @@ -18,15 +17,15 @@ Several operations involving function pointers are considered unsafe: - Argument or return types with different sizes, type categories, or classifications. -- Differing argument list lengths (on **`__cdecl`**, only on cast from longer list to shorter list, even if shorter is varargs). +- Different argument list lengths (on **`__cdecl`**, only on cast from longer list to shorter list, even if shorter is varargs). -- Pointer to data (other than **`void`**\*) aliased against a pointer to function. +- Pointer to data (other than **`void*`**) aliased against a pointer to function. - Any other type difference that would yield an error or warning on a **`reinterpret_cast`**. Calling this function through the result pointer might cause your program to crash. -This warning is off by default. See [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md) for more information. +This warning is off by default. For more information, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). The following sample generates C4191: diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4001.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4001.md index cea9a5aa4a..73499a4579 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4001.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4001.md @@ -1,20 +1,19 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4001" -title: "Compiler Warning (level 4) C4001" +description: "Learn more about: Compiler Warning (level 4, no longer emitted) C4001" +title: "Compiler Warning (level 4, no longer emitted) C4001" ms.date: "11/04/2016" f1_keywords: ["C4001"] helpviewer_keywords: ["C4001"] -ms.assetid: 414a47fe-d597-425e-9374-6a569231dc0a --- -# Compiler Warning (level 4) C4001 +# Compiler Warning (level 4, no longer emitted) C4001 -nonstandard extension 'single line comment' was used +> nonstandard extension 'single line comment' was used > [!NOTE] > This warning is removed in Visual Studio 2017 version 15.5 because single-line comments are standard in C99. Single-line comments are standard in C++ and standard in C starting with C99. -Under strict ANSI compatibility ([/Za](../../build/reference/za-ze-disable-language-extensions.md)), C files that contain single-line comments, generate C4001 due to the usage of a nonstandard extension. Since single-line comments are standard in C++, C files containing single-line comments do not produce C4001 when compiling with Microsoft extensions (/Ze). +Under strict ANSI compatibility ([/Za](../../build/reference/za-ze-disable-language-extensions.md)), C files that contain single-line comments, generate C4001 due to the usage of a nonstandard extension. Since single-line comments are standard in C++, C files containing single-line comments don't produce C4001 when compiling with Microsoft extensions (/Ze). ## Example diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4061.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4061.md index fb09ff4c50..a3649649a1 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4061.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4061.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4061" -title: "Compiler Warning (level 4) C4061" +description: "Learn more about: Compiler Warning (level 4, off) C4061" +title: "Compiler Warning (level 4, off) C4061" ms.date: "04/05/2019" f1_keywords: ["C4061"] helpviewer_keywords: ["C4061"] -ms.assetid: a99cf88e-7941-4519-8b1b-f6889d914b2f --- -# Compiler Warning (level 4) C4061 +# Compiler Warning (level 4, off) C4061 -> enumerator '*identifier*' in switch of enum '*enumeration*' is not explicitly handled by a case label +> enumerator '*identifier*' in switch of `enum` '*enumeration*' is not explicitly handled by a `case` label -The specified enumerator *identifier* has no associated handler in a **`switch`** statement that has a **`default`** case. The missing case might be an oversight, or it may not be an issue. It may depend on whether the enumerator is handled by the default case or not. For a related warning on unused enumerators in **`switch`** statements that have no **`default`** case, see [C4062](compiler-warning-level-4-c4062.md). +The specified enumerator *identifier* has no associated handler in a `switch` statement that has a `default` case. The missing case might be an oversight, or it may not be an issue. Whether the missing `case` is an issue in practice depends on if the default case handles the enumerator. For a related warning on unused enumerators in `switch` statements that have no `default` case, see [C4062](compiler-warning-level-4-c4062.md). This warning is off by default. For more information about how to enable warnings that are off by default, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). @@ -34,10 +33,6 @@ void func ( E e ) break; } // C4061 c' not handled } - -int main() -{ -} ``` ## See also diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4062.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4062.md index 7a88ec1ecc..e6430b05b8 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4062.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4062.md @@ -1,16 +1,15 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4062" -title: "Compiler Warning (level 4) C4062" +description: "Learn more about: Compiler Warning (level 4, off) C4062" +title: "Compiler Warning (level 4, off) C4062" ms.date: "04/05/2019" f1_keywords: ["C4062"] helpviewer_keywords: ["C4062"] -ms.assetid: 36d1c6ae-c917-4b08-bf30-2eb49ee94169 --- -# Compiler Warning (level 4) C4062 +# Compiler Warning (level 4, off) C4062 -> enumerator '*identifier*' in switch of enum '*enumeration*' is not handled +> enumerator '*identifier*' in switch of `enum` '*enumeration*' is not handled -The enumerator *identifier* has no associated `case` handler in a **`switch`** statement, and there's no **`default`** label that can catch it. The missing case may be an oversight, and is a potential error in your code. For a related warning on unused enumerators in **`switch`** statements that have a **`default`** case, see [C4061](compiler-warning-level-4-c4061.md). +The enumerator *identifier* doesn't have a `case` handler associated with it in a **`switch`** statement, and there's no **`default`** label that can catch it. The missing case may be an oversight, and is a potential error in your code. For a related warning on unused enumerators in **`switch`** statements that have a **`default`** case, see [C4061](compiler-warning-level-4-c4061.md). This warning is off by default. For more information about how to enable warnings that are off by default, see [Compiler Warnings That Are Off by Default](../../preprocessor/compiler-warnings-that-are-off-by-default.md). @@ -31,9 +30,6 @@ void func ( E e ) { break; // no default label } // C4062, enumerator 'c' not handled } - -int main() { -} ``` ## See also diff --git a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4189.md b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4189.md index 7c3e2d6bf6..6376aebe9d 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4189.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-level-4-c4189.md @@ -1,11 +1,11 @@ --- -description: "Learn more about: Compiler Warning (level 4) C4189" -title: "Compiler Warning (level 4) C4189" +description: "Learn more about: Compiler Warning (level 3 and level 4) C4189" +title: "Compiler Warning (level 3 and level 4) C4189" ms.date: 05/03/2021 f1_keywords: ["C4189"] helpviewer_keywords: ["C4189"] --- -# Compiler Warning (level 4) C4189 +# Compiler Warning (level 3 and level 4) C4189 > '*identifier*' : local variable is initialized but not referenced @@ -19,16 +19,16 @@ The following sample generates C4189: // C4189.cpp // compile with: /W4 int main() { - int a = 1; // C4189, remove declaration to resolve + int a = 1; // C4189 } ``` -Starting in Visual Studio 2017 version 15.5, warning C4189 is emitted in more cases, as shown in the following code: +In Visual Studio 2017 version 15.5 and later, warning C4189 is emitted in more cases, as shown in the following code: ```cpp void f() { - char s[2] = {0}; // C4189. Either use the variable or remove it. + char s[2] = {0}; // C4189 } ``` -To fix the error, remove the unused variable. +To fix the error, remove the unused variable or add the `[[maybe_unused]]` attribute. diff --git a/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md b/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md index e8ca7c73d0..6dc4a888be 100644 --- a/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md +++ b/docs/error-messages/compiler-warnings/compiler-warning-levels-1-and-4-c4112.md @@ -1,25 +1,24 @@ --- -description: "Learn more about: Compiler Warning (levels 1 and 4) C4112" -title: "Compiler Warning (levels 1 and 4) C4112" +description: "Learn more about: Compiler Warning (level 1 and level 4) C4112" +title: "Compiler Warning (level 1 and level 4) C4112" ms.date: "11/04/2016" f1_keywords: ["C4112"] helpviewer_keywords: ["C4112"] -ms.assetid: aff64897-bb79-4a67-9b6f-902c6d44f3dc --- -# Compiler Warning (levels 1 and 4) C4112 +# Compiler Warning (level 1 and level 4) C4112 -\#line requires an integer between 1 and number +> `#line` requires an integer between 1 and '*line_count*' The [#line](../../preprocessor/hash-line-directive-c-cpp.md) directive specifies an integer parameter that is outside the allowable range. -If the specified parameter is less than 1, the line counter is reset to 1. If the specified parameter is greater than *number*, which is the compiler-defined limit, the line counter is unchanged. This is a level 1 warning under ANSI compatibility ([/Za](../../build/reference/za-ze-disable-language-extensions.md)) and a level 4 warning with Microsoft extensions ([/Ze](../../build/reference/za-ze-disable-language-extensions.md)). +If the specified parameter is less than 1, the line counter is reset to 1. If the specified parameter is greater than *number*, which is the compiler-defined limit, the line counter is unchanged. This diagnostic is a level 1 warning under ANSI C compatibility ([/Za](../../build/reference/za-ze-disable-language-extensions.md)) and a level 4 warning with Microsoft extensions ([/Ze](../../build/reference/za-ze-disable-language-extensions.md)). The following sample generates C4112: ```cpp // C4112.cpp // compile with: /W4 -#line 0 // C4112, value must be between 1 and number +#line 0 // C4112 int main() { } diff --git a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md index fd5a5c3f73..038b6c7059 100644 --- a/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md +++ b/docs/error-messages/compiler-warnings/compiler-warnings-c4000-through-c4199.md @@ -3,167 +3,166 @@ description: "Learn more about: Compiler warnings C4000 Through C4199" title: "Compiler warnings C4000 Through C4199" ms.date: "04/21/2019" f1_keywords: ["C4000", "C4035", "C4060", "C4063", "C4064", "C4065", "C4069", "C4123", "C4137", "C4181", "C4188", "C4193", "C4194", "C4195", "C4196", "C4199"] -ms.assetid: 426f495a-43af-4906-ad2b-6e5822c09965 --- # Compiler warnings C4000 Through C4199 -The articles in this section of the documentation explain a subset of the warning messages that are generated by the compiler. +The articles in this section of the documentation explain a subset of the warning messages generated by the compiler. -[!INCLUDE[error-boilerplate](../../error-messages/includes/error-boilerplate.md)] +[!INCLUDE[error-boilerplate](../includes/error-boilerplate.md)] ## Warning messages |Warning|Message| |-------------|-------------| |Compiler warning C4000|UNKNOWN WARNING
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information| -|[Compiler warning (level 4) C4001](../../error-messages/compiler-warnings/compiler-warning-level-4-c4001.md)|nonstandard extension 'single line comment' was used| -|[Compiler warning (level 1) C4002](compiler-warning-level-1-c4002.md)|too many actual parameters for macro 'identifier'| -|[Compiler warning (level 1) C4003](../../error-messages/compiler-warnings/compiler-warning-level-1-c4003.md)|not enough actual parameters for macro 'identifier'| -|[Compiler warning (level 1) C4005](../../error-messages/compiler-warnings/compiler-warning-level-1-c4005.md)|'identifier': macro redefinition| -|[Compiler warning (level 1) C4006](compiler-warning-level-1-c4006.md)|#undef expected an identifier| -|[Compiler warning (level 2) C4007](../../error-messages/compiler-warnings/compiler-warning-level-2-c4007.md)|'function': must be 'attribute'| -|[Compiler warning (level 3) C4008](compiler-warning-levels-2-and-3-c4008.md)|'function': 'attribute' attribute ignored| -|[Compiler warning (level 1) C4010](../../error-messages/compiler-warnings/compiler-warning-level-1-c4010.md)|single-line comment contains line-continuation character| -|[Compiler warning (level 3) C4013](../../error-messages/compiler-warnings/compiler-warning-level-3-c4013.md)|'function' undefined; assuming extern returning int| -|[Compiler warning (level 1) C4015](../../error-messages/compiler-warnings/compiler-warning-level-1-c4015.md)|'identifer': type of bit field must be integral| -|[Compiler warning (level 3) C4018](../../error-messages/compiler-warnings/compiler-warning-level-3-c4018.md)|'expression': signed/unsigned mismatch| +|[Compiler warning (level 4, no longer emitted) C4001](compiler-warning-level-4-c4001.md)|nonstandard extension 'single line comment' was used| +|[Compiler warning (level 1, Error) C4002](compiler-warning-level-1-c4002.md)|too many arguments for function-like macro invocation '*identifier*'| +|[Compiler warning (level 1, Error) C4003](compiler-warning-level-1-c4003.md)|not enough arguments for function-like macro invocation '*identifier*'| +|[Compiler warning (level 1) C4005](compiler-warning-level-1-c4005.md)|'*identifier*': macro redefinition| +|[Compiler warning (level 1) C4006](compiler-warning-level-1-c4006.md)|`#undef` expected an identifier| +|[Compiler warning (level 3) C4007](compiler-warning-level-2-c4007.md)|'*function*': must be '*attribute*'| +|[Compiler warning (level 3) C4008](compiler-warning-levels-2-and-3-c4008.md)|'*function*': '*attribute*' attribute ignored| +|[Compiler warning (level 1) C4010](compiler-warning-level-1-c4010.md)|single-line comment contains line-continuation character| +|[Compiler warning (level 3) C4013](compiler-warning-level-3-c4013.md)|'*function*' undefined; assuming extern returning int| +|[Compiler warning (level 1) C4015](compiler-warning-level-1-c4015.md)|'*identifier*': type of bit field must be integral| +|[Compiler warning (level 3) C4018](compiler-warning-level-3-c4018.md)|'*expression*': signed/unsigned mismatch| |[Compiler warning (level 4) C4019](compiler-warning-level-4-c4019.md)|empty statement at global scope| -|[Compiler warning (level 1) C4020](../../error-messages/compiler-warnings/compiler-warning-level-1-c4020.md)|'function': too many actual parameters| -|[Compiler warning (level 1) C4022](../../error-messages/compiler-warnings/compiler-warning-level-1-c4022.md)|'function': pointer mismatch for actual parameter 'parameter number'| -|Compiler warning (level 1) C4023|'function': based pointer passed to unprototyped function: parameter 'parameter_number'| -|[Compiler warning (level 1) C4024](../../error-messages/compiler-warnings/compiler-warning-level-1-c4024.md)|'function': different types for formal and actual parameter 'parameter_number'| -|[Compiler warning (level 1) C4025](compiler-warning-level-1-c4025.md)|'function': based pointer passed to function with variable arguments: parameter 'parameter_number'| +|[Compiler warning (level 1) C4020](compiler-warning-level-1-c4020.md)|'function': too many actual parameters| +|[Compiler warning (level 1) C4022](compiler-warning-level-1-c4022.md)|'*function*': pointer mismatch for actual parameter '*parameter_number*'| +|Compiler warning (level 1) C4023|'*function*': based pointer passed to unprototyped function: parameter '*parameter_number*'| +|[Compiler warning (level 1) C4024](compiler-warning-level-1-c4024.md)|'*function*': different types for formal and actual parameter '*parameter_number*'| +|[Compiler warning (level 1) C4025](compiler-warning-level-1-c4025.md)|'*function*': based pointer passed to function with variable arguments: parameter '*parameter_number*'| |[Compiler warning (level 1) C4026](compiler-warning-level-1-c4026.md)|function declared with formal parameter list| |[Compiler warning (level 1) C4027](compiler-warning-level-1-c4027.md)|function declared without formal parameter list| -|[Compiler warning (level 1) C4028](../../error-messages/compiler-warnings/compiler-warning-level-1-c4028.md)|formal parameter 'parameter_number' different from declaration| -|[Compiler warning (level 1) C4029](../../error-messages/compiler-warnings/compiler-warning-level-1-c4029.md)|declared formal parameter list different from definition| +|[Compiler warning (level 1) C4028](compiler-warning-level-1-c4028.md)|formal parameter *parameter_number* different from declaration| +|[Compiler warning (level 1) C4029](compiler-warning-level-1-c4029.md)|declared formal parameter list different from definition| |[Compiler warning (level 1) C4030](compiler-warning-level-1-c4030.md)|first formal parameter list longer than the second list| -|[Compiler warning (level 1) C4031](../../error-messages/compiler-warnings/compiler-warning-level-1-c4031.md)|second formal parameter list longer than the first list| -|[Compiler warning (level 4) C4032](../../error-messages/compiler-warnings/compiler-warning-level-4-c4032.md)|formal parameter 'parameter_number' has different type when promoted| -|[Compiler warning (level 1) C4033](compiler-warning-level-1-c4033.md)|'function' must return a value| -|[Compiler warning (level 1) C4034](../../error-messages/compiler-warnings/compiler-warning-level-1-c4034.md)|sizeof returns 0| -|Compiler warning (level 3) C4035|'function': no return value| +|[Compiler warning (level 1) C4031](compiler-warning-level-1-c4031.md)|second formal parameter list longer than the first list| +|[Compiler warning (level 4) C4032](compiler-warning-level-4-c4032.md)|formal parameter *parameter_number* has different type when promoted| +|[Compiler warning (level 1) C4033](compiler-warning-level-1-c4033.md)|'*function*' must return a value| +|[Compiler warning (level 1) C4034](compiler-warning-level-1-c4034.md)|sizeof returns 0| +|Compiler warning (level 3) C4035|'*function*': no return value| |[Compiler warning (level 1) C4036](compiler-warning-level-1-c4036.md)|unnamed 'type' as actual parameter| -|[Compiler warning (level 1) C4038](compiler-warning-level-1-c4038.md)|'modifier': illegal class modifier| +|[Compiler warning (level 1) C4038](compiler-warning-level-1-c4038.md)|'*modifier*': illegal class modifier| |[Compiler warning (level 1) C4041](compiler-warning-level-1-c4041.md)|compiler limit: terminating browser output| -|[Compiler warning (level 1) C4042](../../error-messages/compiler-warnings/compiler-warning-level-1-c4042.md)|'identifier': has bad storage class| -|[Compiler warning (level 1) C4045](compiler-warning-level-1-c4045.md)|'array': array bounds overflow| -|[Compiler warning (level 1) C4047](../../error-messages/compiler-warnings/compiler-warning-level-1-c4047.md)|'operator': 'identifier1' differs in levels of indirection from 'identifier2'| -|[Compiler warning (level 1) C4048](../../error-messages/compiler-warnings/compiler-warning-level-1-c4048.md)|different array subscripts: 'identifier1' and 'identifier2'| -|[Compiler warning (level 1) C4049](../../error-messages/compiler-warnings/compiler-warning-level-1-c4049.md)|compiler limit: terminating line number emission| +|[Compiler warning (level 1) C4042](compiler-warning-level-1-c4042.md)|'*identifier*': has bad storage class| +|[Compiler warning (level 1) C4045](compiler-warning-level-1-c4045.md)|'*array*': array bounds overflow| +|[Compiler warning (level 1) C4047](compiler-warning-level-1-c4047.md)|'*operator*': '*identifier1*' differs in levels of indirection from '*identifier2*'| +|[Compiler warning (level 1) C4048](compiler-warning-level-1-c4048.md)|different array subscripts: '*identifier1*' and '*identifier2*'| +|[Compiler warning (level 1) C4049](compiler-warning-level-1-c4049.md)|compiler limit: terminating line number emission| |Compiler warning (level 1) C4051|type conversion; possible loss of data| -|[Compiler warning (level 4) C4052](compiler-warning-level-1-c4052.md)|function declarations different; one contains variable arguments| -|[Compiler warning (level 4) C4053](compiler-warning-level-4-c4053.md)|one void operand for '?:'| +|[Compiler warning (level 1 and level 4) C4052](compiler-warning-level-1-c4052.md)|function declarations different; one contains variable arguments| +|[Compiler warning (level 4) C4053](compiler-warning-level-4-c4053.md)|one void operand for '`?:`'| |[Compiler warning (level 1) C4055](compiler-warning-level-1-c4055.md)|'conversion' : from data pointer '*type1*' to function pointer '*type2*'| -|[Compiler warning (level 2) C4056](../../error-messages/compiler-warnings/compiler-warning-level-2-c4056.md)|overflow in floating-point constant arithmetic| -|[Compiler warning (level 4) C4057](compiler-warning-level-4-c4057.md)|'operator': 'identifier1' differs in indirection to slightly different base types from 'identifier2'| -|Compiler warning C4060|switch statement contains no 'case' or 'default' labels| -|[Compiler warning (level 4) C4061](../../error-messages/compiler-warnings/compiler-warning-level-4-c4061.md)|enumerator 'identifier' in switch of enum 'enumeration' is not explicitly handled by a case label| -|[Compiler warning (level 4) C4062](../../error-messages/compiler-warnings/compiler-warning-level-4-c4062.md)|enumerator 'identifier' in switch of enum 'enumeration' is not handled| -|Compiler warning C4063|case 'identifier' is not a valid value for switch of enum 'enumeration'| -|Compiler warning C4064|switch of incomplete enum 'enumeration'| -|Compiler warning C4065|switch statement contains 'default' but no 'case' labels| +|[Compiler warning (level 2) C4056](compiler-warning-level-2-c4056.md)|overflow in floating-point constant arithmetic| +|[Compiler warning (level 4) C4057](compiler-warning-level-4-c4057.md)|'*operator*': '*identifier1*' differs in indirection to slightly different base types from '*identifier2*'| +|Compiler warning (level 3, off) C4060|switch statement contains no 'case' or 'default' labels| +|[Compiler warning (level 4, off) C4061](compiler-warning-level-4-c4061.md)|enumerator '*identifier*' in switch of `enum` '*enumeration*' is not explicitly handled by a `case` label| +|[Compiler warning (level 4, off) C4062](compiler-warning-level-4-c4062.md)|enumerator '*identifier*' in switch of `enum` '*enumeration*' is not handled| +|Compiler warning (level 4) C4063|case '*identifier*' is not a valid value for switch of `enum` '*enumeration*'| +|Compiler warning (level 4) C4064|switch of incomplete `enum` '*enumeration*'| +|Compiler warning (level 3, off) C4065|switch statement contains '`default`' but no '`case`' labels| |[Compiler warning (level 3) C4066](compiler-warning-level-3-c4066.md)|characters beyond first in wide-character constant ignored| -|[Compiler warning (level 1) C4067](../../error-messages/compiler-warnings/compiler-warning-level-1-c4067.md)|unexpected tokens following preprocessor directive - expected a newline| -|[Compiler warning (level 1) C4068](compiler-warning-level-1-c4068.md)|unknown pragma| +|[Compiler warning (level 1) C4067](compiler-warning-level-1-c4067.md)|unexpected tokens following preprocessor directive - expected a newline| +|[Compiler warning (level 1) C4068](compiler-warning-level-1-c4068.md)|unknown pragma '*identifier*'| |Compiler warning C4069|long double is the same precision as double| -|[Compiler warning (level 3) C4073](../../error-messages/compiler-warnings/compiler-warning-level-3-c4073.md)|initializers put in library initialization area| -|[Compiler warning (level 1) C4074](../../error-messages/compiler-warnings/compiler-warning-level-1-c4074.md)|initializers put in compiler reserved initialization area| +|[Compiler warning (level 3) C4073](compiler-warning-level-3-c4073.md)|initializers put in library initialization area| +|[Compiler warning (level 1) C4074](compiler-warning-level-1-c4074.md)|initializers put in compiler reserved initialization area| |[Compiler warning (level 1) C4075](compiler-warning-level-1-c4075.md)|initializers put in unrecognized initialization area| -|[Compiler warning (level 1) C4076](compiler-warning-level-1-c4076.md)|'type_modifier': can't be used with type 'typename'| +|[Compiler warning (level 1) C4076](compiler-warning-level-1-c4076.md)|'*type_modifier*': can't be used with type '*typename*'| |[Compiler warning (level 1) C4077](compiler-warning-level-1-c4077.md)|unknown check_stack option| -|[Compiler warning (level 1) C4079](../../error-messages/compiler-warnings/compiler-warning-level-1-c4079.md)|unexpected token 'token'| -|[Compiler warning (level 1) C4080](compiler-warning-level-1-c4080.md)|expected identifier for segment name; found 'symbol'| -|[Compiler warning (level 1) C4081](compiler-warning-level-1-c4081.md)|expected 'token1'; found 'token2'| -|[Compiler warning (level 1) C4083](../../error-messages/compiler-warnings/compiler-warning-level-1-c4083.md)|expected 'token'; found identifier 'identifier'| -|[Compiler warning (level 1) C4085](compiler-warning-level-1-c4085.md)|expected pragma parameter to be 'on' or 'off'| +|[Compiler warning (level 1) C4079](compiler-warning-level-1-c4079.md)|unexpected token '*token*'| +|[Compiler warning (level 1) C4080](compiler-warning-level-1-c4080.md)|expected identifier for segment name; found '*symbol*'| +|[Compiler warning (level 1) C4081](compiler-warning-level-1-c4081.md)|expected '*token1*'; found '*token2*'| +|[Compiler warning (level 1) C4083](compiler-warning-level-1-c4083.md)|expected '*token*'; found identifier '*identifier*'| +|[Compiler warning (level 1) C4085](compiler-warning-level-1-c4085.md)|expected pragma parameter to be '`on`' or '`off`'| |[Compiler warning (level 1) C4086](compiler-warning-level-1-c4086.md)|expected pragma parameter to be '1', '2', '4', '8', or '16'| -|[Compiler warning (level 1) C4087](compiler-warning-level-1-c4087.md)|'function': declared with 'void' parameter list| -|[Compiler warning (level 1) C4088](../../error-messages/compiler-warnings/compiler-warning-level-1-c4088.md)|'function': pointer mismatch in actual parameter 'parameter_number', formal parameter 'parameter_number'| -|[Compiler warning (level 1) C4089](../../error-messages/compiler-warnings/compiler-warning-level-1-c4089.md)|'function': different types in actual parameter 'parameter_number', formal parameter 'parameter_number'| -|[Compiler warning (level 1) C4090](../../error-messages/compiler-warnings/compiler-warning-level-1-c4090.md)|'operation': different 'modifier' qualifiers| -|[Compiler warning (level 1) C4091](../../error-messages/compiler-warnings/compiler-warning-level-1-c4091.md)|keyword': ignored on left of 'type' when no variable is declared| -|[Compiler warning (level 4) C4092](../../error-messages/compiler-warnings/compiler-warning-level-4-c4092.md)|sizeof returns 'unsigned long'| -|[Compiler warning (level 2) C4094](../../error-messages/compiler-warnings/compiler-warning-level-2-c4094.md)|untagged 'token' declared no symbols| -|[Compiler warning (level 1) C4096](../../error-messages/compiler-warnings/compiler-warning-level-1-c4096.md)|'identifier': interface is not a COM interface; will not be emitted to IDL| -|[Compiler warning (level 1) C4097](compiler-warning-level-1-c4097.md)|expected pragma parameter to be 'restore' or 'off'| -|[Compiler warning (level 1) C4098](../../error-messages/compiler-warnings/compiler-warning-level-1-c4098.md)|'function': 'void' function returning a value| -|[Compiler warning (level 2) C4099](../../error-messages/compiler-warnings/compiler-warning-level-2-c4099.md)|'identifier': type name first seen using 'object_type1' now seen using 'object_type2'| -|[Compiler warning (level 4) C4100](../../error-messages/compiler-warnings/compiler-warning-level-4-c4100.md)|'identifier': unreferenced formal parameter| -|[Compiler warning (level 3) C4101](../../error-messages/compiler-warnings/compiler-warning-level-3-c4101.md)|'identifier': unreferenced local variable| -|[Compiler warning (level 3) C4102](compiler-warning-level-3-c4102.md)|'label': unreferenced label| -|[Compiler warning (level 1) C4103](../../error-messages/compiler-warnings/compiler-warning-level-1-c4103.md)|'filename': alignment changed after including header, may be due to missing #pragma pack(pop)| -|[Compiler warning (level 1) C4109](compiler-warning-level-1-c4109.md)|unexpected identifier 'identifier'| -|[Compiler warning (level 1) C4112](compiler-warning-levels-1-and-4-c4112.md)|#line requires an integer between 1 and 'line_count'| -|[Compiler warning (level 1) C4113](../../error-messages/compiler-warnings/compiler-warning-level-1-c4113.md)|'identifier1' differs in parameter lists from 'identifier2'| -|[Compiler warning (level 1) C4114](../../error-messages/compiler-warnings/compiler-warning-level-1-c4114.md)|same type qualifier used more than once| -|[Compiler warning (level 1 and level 4) C4115](compiler-warning-levels-1-and-4-c4115.md)|'type': named type definition in parentheses| -|[Compiler warning (level 1) C4116](../../error-messages/compiler-warnings/compiler-warning-level-1-c4116.md)|unnamed type definition in parentheses| -|[Compiler warning (level 1) C4117](compiler-warning-level-1-c4117.md)|macro name 'name' is reserved, 'command' ignored| -|[Compiler warning (level 1) C4119](compiler-warning-level-1-c4119.md)|different bases 'base1' and 'base2' specified| +|[Compiler warning (level 1) C4087](compiler-warning-level-1-c4087.md)|'function': declared with '`void`' parameter list| +|[Compiler warning (level 1) C4088](compiler-warning-level-1-c4088.md)|'*function*': pointer mismatch in actual parameter '*parameter_number*', formal parameter '*parameter_number*'| +|[Compiler warning (level 1) C4089](compiler-warning-level-1-c4089.md)|'*function*': different types in actual parameter '*parameter_number*', formal parameter '*parameter_number*'| +|[Compiler warning (level 1) C4090](compiler-warning-level-1-c4090.md)|'*operation*': different '*modifier*' qualifiers| +|[Compiler warning (level 1 and level 2) C4091](compiler-warning-level-1-c4091.md)|'*keyword*': ignored on left of '*type*' when no variable is declared| +|[Compiler warning (level 4) C4092](compiler-warning-level-4-c4092.md)|sizeof returns 'unsigned long'| +|[Compiler warning (level 2) C4094](compiler-warning-level-2-c4094.md)|untagged '*token*' declared no symbols| +|[Compiler warning (level 1) C4096](compiler-warning-level-1-c4096.md)|'*identifier*': interface is not a COM interface; will not be emitted to IDL| +|[Compiler warning (level 1) C4097](compiler-warning-level-1-c4097.md)|expected pragma parameter to be '`restore`' or '`off`'| +|[Compiler warning (level 1) C4098](compiler-warning-level-1-c4098.md)|'*function*': '`void`' function returning a value| +|[Compiler warning (level 2) C4099](compiler-warning-level-2-c4099.md)|'*identifier*': type name first seen using '*object_type1*' now seen using '*object_type2*'| +|[Compiler warning (level 4) C4100](compiler-warning-level-4-c4100.md)|'*identifier*': unreferenced formal parameter| +|[Compiler warning (level 3 and level 4) C4101](compiler-warning-level-3-c4101.md)|'*identifier*': unreferenced local variable| +|[Compiler warning (level 3) C4102](compiler-warning-level-3-c4102.md)|'*label*': unreferenced label| +|[Compiler warning (level 1) C4103](compiler-warning-level-1-c4103.md)|alignment changed after including header, may be due to missing `#pragma pack(pop)`| +|[Compiler warning (level 1) C4109](compiler-warning-level-1-c4109.md)|unexpected identifier '*identifier*'| +|[Compiler warning (level 1 and level 4) C4112](compiler-warning-levels-1-and-4-c4112.md)|`#line` requires an integer between 1 and '*line_count*'| +|[Compiler warning (level 1) C4113](compiler-warning-level-1-c4113.md)|'*identifier1*' differs in parameter lists from '*identifier2*'| +|[Compiler warning (level 1) C4114](compiler-warning-level-1-c4114.md)|same type qualifier used more than once| +|[Compiler warning (level 1 and level 4) C4115](compiler-warning-levels-1-and-4-c4115.md)|'*type*': named type definition in parentheses| +|[Compiler warning (level 1) C4116](compiler-warning-level-1-c4116.md)|unnamed type definition in parentheses| +|[Compiler warning (level 1) C4117](compiler-warning-level-1-c4117.md)|macro name '*name*' is reserved, '*command*' ignored| +|[Compiler warning (level 1) C4119](compiler-warning-level-1-c4119.md)|different bases '*base1*' and '*base2*' specified| |[Compiler warning (level 1) C4120](compiler-warning-level-1-c4120.md)|based/unbased mismatch| -|[Compiler warning (level 4) C4121](../../error-messages/compiler-warnings/compiler-warning-level-4-c4121.md)|'symbol': alignment of a member was sensitive to packing| -|[Compiler warning (level 1) C4122](compiler-warning-level-1-c4122.md)|'function': alloc_text applicable only to functions with C linkage| +|[Compiler warning (level 4) C4121](compiler-warning-level-4-c4121.md)|'*symbol*': alignment of a member was sensitive to packing| +|[Compiler warning (level 1) C4122](compiler-warning-level-1-c4122.md)|'*function*': alloc_text applicable only to functions with C linkage| |Compiler warning (level 1) C4123|different base expressions specified| -|[Compiler warning (level 1) C4124](../../error-messages/compiler-warnings/compiler-warning-level-1-c4124.md)|__fastcall with stack checking is inefficient| +|[Compiler warning (level 1) C4124](compiler-warning-level-1-c4124.md)|__fastcall with stack checking is inefficient| |[Compiler warning (level 4) C4125](compiler-warning-level-4-c4125.md)|decimal digit terminates octal escape sequence| -|[Compiler warning (level 4) C4127](../../error-messages/compiler-warnings/compiler-warning-level-4-c4127.md)|conditional expression is constant| -|[Compiler warning (level 1) C4129](../../error-messages/compiler-warnings/compiler-warning-level-1-c4129.md)|'character': unrecognized character escape sequence| -|[Compiler warning (level 4) C4130](compiler-warning-level-4-c4130.md)|'operator': logical operation on address of string constant| -|[Compiler warning (level 4) C4131](compiler-warning-level-4-c4131.md)|'function': uses old-style declarator| -|[Compiler warning (level 4) C4132](compiler-warning-level-4-c4132.md)|'object': const object should be initialized| -|[Compiler warning (level 3) C4133](../../error-messages/compiler-warnings/compiler-warning-level-3-c4133.md)|'expression': incompatible types - from 'type1' to 'type2'| +|[Compiler warning (level 4) C4127](compiler-warning-level-4-c4127.md)|conditional expression is constant| +|[Compiler warning (level 1) C4129](compiler-warning-level-1-c4129.md)|'*character*': unrecognized character escape sequence| +|[Compiler warning (level 4) C4130](compiler-warning-level-4-c4130.md)|'*operator*': logical operation on address of string constant| +|[Compiler warning (level 4) C4131](compiler-warning-level-4-c4131.md)|'*function*': uses old-style declarator| +|[Compiler warning (level 4) C4132](compiler-warning-level-4-c4132.md)|'*object*': `const` object should be initialized| +|[Compiler warning (level 1 and level 3) C4133](compiler-warning-level-3-c4133.md)|'*expression*': incompatible types - from '*type1*' to '*type2*'| |Compiler warning C4137|'function': no return value from floating-point function| -|[Compiler warning (level 1) C4138](compiler-warning-level-1-c4138.md)|'*/' found outside of comment| -|[Compiler warning (level 1) C4141](compiler-warning-level-1-c4141.md)|'modifier': used more than once| -|[Compiler warning (level 1) C4142](../../error-messages/compiler-warnings/compiler-warning-level-1-c4142.md)|benign redefinition of type| -|[Compiler warning (level 1) C4143](compiler-warning-level-1-c4143.md)|pragma 'same_seg' not supported; use __based allocation| -|[Compiler warning (level 1) C4144](../../error-messages/compiler-warnings/compiler-warning-level-1-c4144.md)|'expression': relational expression as switch expression| -|[Compiler warning (level 1) C4145](compiler-warning-level-1-c4145.md)|'expression1': relational expression as switch expression; possible confusion with 'expression2'| -|[Compiler warning (level 2) C4146](../../error-messages/compiler-warnings/compiler-warning-level-2-c4146.md)|unary minus operator applied to unsigned type, result still unsigned| -|[Compiler warning (level 2) C4150](../../error-messages/compiler-warnings/compiler-warning-level-2-c4150.md)|deletion of pointer to incomplete type 'type'; no destructor called| +|[Compiler warning (level 1) C4138](compiler-warning-level-1-c4138.md)|'`*/`' found outside of comment| +|[Compiler warning (level 1, Error) C4141](compiler-warning-level-1-c4141.md)|'*modifier*': used more than once| +|[Compiler warning (level 1) C4142](compiler-warning-level-1-c4142.md)|'*identifier*': benign redefinition of type| +|[Compiler warning (level 1) C4143](compiler-warning-level-1-c4143.md)|`pragma` 'same_seg' not supported; use `__based` allocation| +|[Compiler warning (level 1) C4144](compiler-warning-level-1-c4144.md)|'*expression*': relational expression as switch expression| +|[Compiler warning (level 1) C4145](compiler-warning-level-1-c4145.md)|'*expression1*': relational expression as switch expression; possible confusion with '*expression2*'| +|[Compiler warning (level 2) C4146](compiler-warning-level-2-c4146.md)|unary minus operator applied to unsigned type, result still unsigned| +|[Compiler warning (level 2) C4150](compiler-warning-level-2-c4150.md)|deletion of pointer to incomplete type '*type*'; no destructor called| |[Compiler warning (level 4) C4152](compiler-warning-level-4-c4152.md)|nonstandard extension, function/data pointer conversion in expression| |[Compiler warning (level 1) C4153](compiler-warning-level-1-c4153.md)|function/data pointer conversion in expression| -|[Compiler warning (level 1) C4154](../../error-messages/compiler-warnings/compiler-warning-level-1-c4154.md)|deletion of an array expression; conversion to pointer supplied| +|[Compiler warning (level 1) C4154](compiler-warning-level-1-c4154.md)|deletion of an array expression; conversion to pointer supplied| |[Compiler warning (level 1) C4155](compiler-warning-level-1-c4155.md)|deletion of an array expression without using the array form of 'delete'| -|[Compiler warning (level 2) C4156](../../error-messages/compiler-warnings/compiler-warning-level-2-c4156.md)|deletion of an array expression without using the array form of 'delete'; array form substituted| -|[Compiler warning (level 1) C4157](../../error-messages/compiler-warnings/compiler-warning-level-1-c4157.md)|pragma was ignored by C compiler| -|[Compiler warning (level 1) C4158](compiler-warning-level-1-c4158.md)|assuming #pragma pointers_to_members(full_generality, 'inheritance_type')| -|[Compiler warning (level 3) C4159](../../error-messages/compiler-warnings/compiler-warning-level-3-c4159.md)|#pragma 'pragma'(pop,...): has popped previously pushed identifier 'identifier'| -|[Compiler warning (level 1) C4160](compiler-warning-level-1-c4160.md)|#pragma 'pragma'(pop,...): did not find previously pushed identifier 'identifier'| -|[Compiler warning (level 3) C4161](compiler-warning-level-3-c4161.md)|#pragma 'pragma'(pop...): more pops than pushes| -|[Compiler warning (level 1) C4162](../../error-messages/compiler-warnings/compiler-warning-level-1-c4162.md)|'identifier': no function with C linkage found| -|[Compiler warning (level 1) C4163](compiler-warning-level-1-c4163.md)|'identifier': not available as an intrinsic function| -|[Compiler warning (level 1) C4164](compiler-warning-level-1-c4164.md)|'function': intrinsic function not declared| -|[Compiler warning (level 3, off) C4165](compiler-warning-level-1-c4165.md)|'HRESULT' is being converted to 'bool'; are you sure this is what you want?| +|[Compiler warning (level 2) C4156](compiler-warning-level-2-c4156.md)|deletion of an array expression without using the array form of 'delete'; array form substituted| +|[Compiler warning (level 1) C4157](compiler-warning-level-1-c4157.md)|pragma was ignored by C compiler| +|[Compiler warning (level 1) C4158](compiler-warning-level-1-c4158.md)|assuming `#pragma pointers_to_members(full_generality, `'*inheritance_type*'`)`| +|[Compiler warning (level 3) C4159](compiler-warning-level-3-c4159.md)|`#pragma `'*pragma*'`(pop,...)`: has popped previously pushed identifier '*identifier*'| +|[Compiler warning (level 1) C4160](compiler-warning-level-1-c4160.md)|`#pragma `'*pragma*'`(pop,...)`: did not find previously pushed identifier '*identifier*'| +|[Compiler warning (level 3) C4161](compiler-warning-level-3-c4161.md)|`#pragma `'*pragma*'`(pop...)`: more pops than pushes| +|[Compiler warning (level 1) C4162](compiler-warning-level-1-c4162.md)|'*identifier*': no function with C linkage found| +|[Compiler warning (level 1) C4163](compiler-warning-level-1-c4163.md)|'*identifier*': not available as an intrinsic function| +|[Compiler warning (level 1) C4164](compiler-warning-level-1-c4164.md)|'*function*': intrinsic function not declared| +|[Compiler warning (level 3, off) C4165](compiler-warning-level-1-c4165.md)|'`HRESULT`' is being converted to '`bool`'; are you sure this is what you want?| |[Compiler warning (level 1) C4166](compiler-warning-level-1-c4166.md)|illegal calling convention for constructor/destructor| -|[Compiler warning (level 1) C4167](compiler-warning-level-1-c4167.md)|'function': only available as an intrinsic function| -|[Compiler warning (level 1) C4168](compiler-warning-level-1-c4168.md)|compiler limit: out of debugger types, delete program database 'database' and rebuild| -|[Compiler warning (level 1) C4172](../../error-messages/compiler-warnings/compiler-warning-level-1-c4172.md)|returning address of local variable or temporary| -|[Compiler warning (level 1) C4174](compiler-warning-level-1-c4174.md)|'name': not available as a #pragma component| -|[Compiler warning (level 1) C4175](compiler-warning-level-1-c4175.md)|#pragma component(browser, on): browser info must initially be specified on the command line| -|[Compiler warning (level 1) C4176](compiler-warning-level-1-c4176.md)|'subcomponent': unknown subcomponent for #pragma component browser| -|[Compiler warning (level 1) C4177](compiler-warning-level-1-c4177.md)|#pragma 'pragma' should only be used at global scope or namespace scope| -|[Compiler warning (level 1) C4178](compiler-warning-level-1-c4178.md)|case constant 'constant' too big for the type of the switch expression| -|[Compiler warning (level 4) C4179](compiler-warning-level-1-c4179.md)|'//*': parsed as '/' and '/\*': confusion with standard '//' comments| +|[Compiler warning (level 1) C4167](compiler-warning-level-1-c4167.md)|'*function*': only available as an intrinsic function| +|[Compiler warning (level 1) C4168](compiler-warning-level-1-c4168.md)|compiler limit: out of debugger types, delete program database '*database*' and rebuild| +|[Compiler warning (level 1) C4172](compiler-warning-level-1-c4172.md)|returning address of local variable or temporary *optional_context*| +|[Compiler warning (level 1) C4174](compiler-warning-level-1-c4174.md)|'*name*': not available as a `#pragma component`| +|[Compiler warning (level 1) C4175](compiler-warning-level-1-c4175.md)|`#pragma component(browser, on)`: browser info must initially be specified on the command line| +|[Compiler warning (level 1) C4176](compiler-warning-level-1-c4176.md)|'*subcomponent*': unknown subcomponent for `#pragma component` browser| +|[Compiler warning (level 1) C4177](compiler-warning-level-1-c4177.md)|`#pragma `'*pragma*' should only be used at global scope or namespace scope| +|[Compiler warning (level 1) C4178](compiler-warning-level-1-c4178.md)|`case` constant '*constant*' too big for the type of the switch expression| +|[Compiler warning (level 4, no longer emitted) C4179](compiler-warning-level-1-c4179.md)|'`//*`': parsed as '`/`' and '`/\*`': confusion with standard '`//`' comments| |[Compiler warning (level 1) C4180](compiler-warning-level-1-c4180.md)|qualifier applied to function type has no meaning; ignored| |Compiler warning C4181|qualifier applied to reference type; ignored| -|[Compiler warning (level 1) C4182](compiler-warning-level-1-c4182.md)|#include nesting level is 'nest_count' deep; possible infinite recursion| -|[Compiler warning (level 1) C4183](../../error-messages/compiler-warnings/compiler-warning-level-1-c4183.md)|'identifier': missing return type; assumed to be a member function returning 'int'| -|[Compiler warning (level 1) C4185](compiler-warning-level-1-c4185.md)|ignoring unknown #import attribute 'attribute'| -|[Compiler warning (level 1) C4186](compiler-warning-level-1-c4186.md)|#import attribute 'attribute' requires 'argument_count' arguments; ignored| -|[Compiler warning (level 1) C4187](compiler-warning-level-1-c4187.md)|#import attributes 'attribute1' and 'attribute2' are incompatible; both ignored| +|[Compiler warning (level 1) C4182](compiler-warning-level-1-c4182.md)|`#include` nesting level is *nest_count* deep; possible infinite recursion| +|[Compiler warning (level 1) C4183](compiler-warning-level-1-c4183.md)|'*identifier*': missing return type; assumed to be a member function returning '`int`'| +|[Compiler warning (level 1) C4185](compiler-warning-level-1-c4185.md)|ignoring unknown `#import` attribute '*attribute*'| +|[Compiler warning (level 1) C4186](compiler-warning-level-1-c4186.md)|`#`*import* attribute '*attribute*' requires '*argument_count*' arguments; ignored| +|[Compiler warning (level 1) C4187](compiler-warning-level-1-c4187.md)|`#import` attributes '*attribute1*' and '*attribute2*' are incompatible; both ignored| |Compiler warning (level 1) C4188|constant expression is not integral| -|[Compiler warning (level 4) C4189](compiler-warning-level-4-c4189.md)|'identifier': local variable is initialized but not referenced| -|[Compiler warning (level 1) C4190](../../error-messages/compiler-warnings/compiler-warning-level-1-c4190.md)|'identifier1' has C-linkage specified, but returns UDT 'identifier2' which is incompatible with C| -|[Compiler warning (level 3) C4191](compiler-warning-level-3-c4191.md)|'operator/operation': unsafe conversion from 'type_of_expression' to 'type_required'\nCalling this function through the result pointer may cause your program to fail| -|[Compiler warning (level 3) C4192](../../error-messages/compiler-warnings/compiler-warning-level-3-c4192.md)|automatically excluding 'identifier' while importing type library 'library'| -|Compiler warning (level 3) C4193|#pragma warning(pop): no matching '#pragma warning(push)'| -|Compiler warning (level 1) C4194|#pragma start_map_region cannot be nested; ignored| -|Compiler warning (level 1) C4195|#pragma stop_map_region used without matching #pragma start_map_region; ignored| -|Compiler warning (level 1) C4196|expected '%$L' or '%$L'; found '%$L'| -|[Compiler warning (level 3) C4197](../../error-messages/compiler-warnings/compiler-warning-level-3-c4197.md)|'type': top-level volatile in cast is ignored| -|Compiler warning (level 1, level 2, level 3, and level 4) C4199|%s| +|[Compiler warning (level 3 and level 4) C4189](compiler-warning-level-4-c4189.md)|'*identifier*': local variable is initialized but not referenced| +|[Compiler warning (level 1) C4190](compiler-warning-level-1-c4190.md)|'*identifier1*' has C-linkage specified, but returns UDT '*identifier2*' which is incompatible with C| +|[Compiler warning (level 3, off) C4191](compiler-warning-level-3-c4191.md)|'*operation*': unsafe conversion from '*type_of_expression*' to '*type_required*'
Making a function call using the resulting pointer may cause your program to fail| +|[Compiler warning (level 3) C4192](compiler-warning-level-3-c4192.md)|automatically excluding '*identifier*' while importing type library '*library*'| +|Compiler warning (level 3) C4193|`#pragma warning(pop)`: no matching '`#pragma warning(push)`'| +|Compiler warning (level 1) C4194|`#pragma start_map_region` cannot be nested; ignored| +|Compiler warning (level 1) C4195|`#pragma stop_map_region` used without matching `#pragma start_map_region`; ignored| +|Compiler warning (level 1) C4196|expected '*token1*' or '*token2*'; found '*token3*'| +|[Compiler warning (level 3) C4197](compiler-warning-level-3-c4197.md)|'*type*': top-level `volatile` in cast is ignored| +|Compiler warning (level 1, level 2, level 3, and level 4) C4199|*message*| ## See also diff --git a/docs/error-messages/toc.yml b/docs/error-messages/toc.yml index d43a125259..c0bc37b846 100644 --- a/docs/error-messages/toc.yml +++ b/docs/error-messages/toc.yml @@ -3181,17 +3181,17 @@ items: items: - name: Compiler warnings C4000 Through C4199 href: compiler-warnings/compiler-warnings-c4000-through-c4199.md - - name: Compiler warning (level 4) C4001 + - name: Compiler warning (level 4, no longer emitted) C4001 href: compiler-warnings/compiler-warning-level-4-c4001.md - - name: Compiler warning (level 1) C4002 + - name: Compiler warning (level 1, Error) C4002 href: compiler-warnings/compiler-warning-level-1-c4002.md - - name: Compiler warning (level 1) C4003 + - name: Compiler warning (level 1, Error) C4003 href: compiler-warnings/compiler-warning-level-1-c4003.md - name: Compiler warning (level 1) C4005 href: compiler-warnings/compiler-warning-level-1-c4005.md - name: Compiler warning (level 1) C4006 href: compiler-warnings/compiler-warning-level-1-c4006.md - - name: Compiler warning (level 2) C4007 + - name: Compiler warning (level 3) C4007 href: compiler-warnings/compiler-warning-level-2-c4007.md - name: Compiler warning (levels 2 and 3) C4008 href: compiler-warnings/compiler-warning-levels-2-and-3-c4008.md @@ -3251,7 +3251,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4049.md - name: Compiler warning (level 2) C4051 href: compiler-warnings/compiler-warning-level-2-c4051.md - - name: Compiler warning (level 1) C4052 + - name: Compiler warning (level 1 and level 4) C4052 href: compiler-warnings/compiler-warning-level-1-c4052.md - name: Compiler warning (level 4) C4053 href: compiler-warnings/compiler-warning-level-4-c4053.md @@ -3261,9 +3261,9 @@ items: href: compiler-warnings/compiler-warning-level-2-c4056.md - name: Compiler warning (level 4) C4057 href: compiler-warnings/compiler-warning-level-4-c4057.md - - name: Compiler warning (level 4) C4061 + - name: Compiler warning (level 4, off) C4061 href: compiler-warnings/compiler-warning-level-4-c4061.md - - name: Compiler warning (level 4) C4062 + - name: Compiler warning (level 4, off) C4062 href: compiler-warnings/compiler-warning-level-4-c4062.md - name: Compiler warning (level 3) C4066 href: compiler-warnings/compiler-warning-level-3-c4066.md @@ -3301,7 +3301,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4089.md - name: Compiler warning (level 1) C4090 href: compiler-warnings/compiler-warning-level-1-c4090.md - - name: Compiler warning (level 1) C4091 + - name: Compiler warning (level 1 and level 2) C4091 href: compiler-warnings/compiler-warning-level-1-c4091.md - name: Compiler warning (level 4) C4092 href: compiler-warnings/compiler-warning-level-4-c4092.md @@ -3317,7 +3317,7 @@ items: href: compiler-warnings/compiler-warning-level-2-c4099.md - name: Compiler warning (level 4) C4100 href: compiler-warnings/compiler-warning-level-4-c4100.md - - name: Compiler warning (level 3) C4101 + - name: Compiler warning (level 3 and level 4) C4101 href: compiler-warnings/compiler-warning-level-3-c4101.md - name: Compiler warning (level 3) C4102 href: compiler-warnings/compiler-warning-level-3-c4102.md @@ -3325,7 +3325,7 @@ items: href: compiler-warnings/compiler-warning-level-1-c4103.md - name: Compiler warning (level 1) C4109 href: compiler-warnings/compiler-warning-level-1-c4109.md - - name: Compiler warning (levels 1 and 4) C4112 + - name: Compiler warning (level 1 and level 4) C4112 href: compiler-warnings/compiler-warning-levels-1-and-4-c4112.md - name: Compiler warning (level 1) C4113 href: compiler-warnings/compiler-warning-level-1-c4113.md @@ -3359,11 +3359,11 @@ items: href: compiler-warnings/compiler-warning-level-4-c4131.md - name: Compiler warning (level 4) C4132 href: compiler-warnings/compiler-warning-level-4-c4132.md - - name: Compiler warning (level 3) C4133 + - name: Compiler warning (level 1 and level 3) C4133 href: compiler-warnings/compiler-warning-level-3-c4133.md - name: Compiler warning (level 1) C4138 href: compiler-warnings/compiler-warning-level-1-c4138.md - - name: Compiler warning (level 1) C4141 + - name: Compiler warning (level 1, Error) C4141 href: compiler-warnings/compiler-warning-level-1-c4141.md - name: Compiler warning (level 1) C4142 href: compiler-warnings/compiler-warning-level-1-c4142.md @@ -3437,11 +3437,11 @@ items: href: compiler-warnings/compiler-warning-level-1-c4186.md - name: Compiler warning (level 1) C4187 href: compiler-warnings/compiler-warning-level-1-c4187.md - - name: Compiler warning (level 4) C4189 + - name: Compiler warning (level 3 and level 4) C4189 href: compiler-warnings/compiler-warning-level-4-c4189.md - name: Compiler warning (level 1) C4190 href: compiler-warnings/compiler-warning-level-1-c4190.md - - name: Compiler warning (level 3) C4191 + - name: Compiler warning (level 3, off) C4191 href: compiler-warnings/compiler-warning-level-3-c4191.md - name: Compiler warning (level 3) C4192 href: compiler-warnings/compiler-warning-level-3-c4192.md From 1bfdc15da5f6dd44f64bf1189315a134b0e6cce7 Mon Sep 17 00:00:00 2001 From: snehara99 <113148726+snehara99@users.noreply.github.com> Date: Thu, 18 Apr 2024 14:17:37 -0400 Subject: [PATCH 0106/1239] Update connect-to-your-remote-linux-computer.md (#5548) * Learn Editor: Update connect-to-your-remote-linux-computer.md * Learn Editor: Update connect-to-your-remote-linux-computer.md * Learn Editor: Update connect-to-your-remote-linux-computer.md * Learn Editor: Update connect-to-your-remote-linux-computer.md * Learn Editor: Update connect-to-your-remote-linux-computer.md * Learn Editor: Update connect-to-your-remote-linux-computer.md * Learn Editor: Update connect-to-your-remote-linux-computer.md * Update connect-to-your-remote-linux-computer.md edits * Update connect-to-your-remote-linux-computer.md acrolinx fixes * Learn Editor: Update connect-to-your-remote-linux-computer.md * update filenames for graphics --------- Co-authored-by: Tyler Whitney Co-authored-by: TylerMSFT --- .../connect-to-your-remote-linux-computer.md | 32 ++++++++++-------- .../connect-updated.png | Bin 0 -> 14131 bytes ...tings-connection-manager-error-updated.png | Bin 0 -> 16952 bytes .../settings-connection-manager-updated.png | Bin 0 -> 64012 bytes 4 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 docs/linux/media/connect-to-your-remote-linux-computer/connect-updated.png create mode 100644 docs/linux/media/connect-to-your-remote-linux-computer/settings-connection-manager-error-updated.png create mode 100644 docs/linux/media/connect-to-your-remote-linux-computer/settings-connection-manager-updated.png diff --git a/docs/linux/connect-to-your-remote-linux-computer.md b/docs/linux/connect-to-your-remote-linux-computer.md index e0c79a2daa..b7147b0589 100644 --- a/docs/linux/connect-to-your-remote-linux-computer.md +++ b/docs/linux/connect-to-your-remote-linux-computer.md @@ -64,14 +64,16 @@ If `ssh` isn't already set up and running on your Linux system, follow these ste 1. In the Connection Manager dialog, choose the **Add** button to add a new connection. - :::image type="content" source="media/settings_connectionmanager.png" alt-text="Screenshot of the Visual Studio options pane. CrossPlatform > C++ > Connection Manager is selected and the Add button is highlighted."::: - - In either scenario, the **Connect to Remote System** window is displayed. - - :::image type="content" source="media/connect.png" alt-text="Screenshot of the Visual Studio Connect to Remote System window."::: - There are fields for host name, port, user name, authentication type, and password. Port is set to 22. Authentication type is set to 'Password'. + :::image type="complex" source="media/connect-to-your-remote-linux-computer/settings-connection-manager-updated.png" alt-text="Screenshot of the Visual Studio options pane."::: + In the options pane, CrossPlatform > C++ > Connection Manager is selected and the Add button is highlighted. :::image-end::: + To edit an existing connection, choose **Edit**. In either scenario, the **Connect to Remote System** window is displayed. + + :::image type="complex" source="media/connect-to-your-remote-linux-computer/connect-updated.png" alt-text="Screenshot of the Visual Studio Connect to Remote System window."::: + In the Connect to Remote System window, there are fields for host name, port, user name, authentication type, and password. Port is set to 22. Authentication type is set to 'Password'. + :::image-end::: + 1. Enter the following information: | Entry | Description | @@ -83,22 +85,24 @@ If `ssh` isn't already set up and running on your Linux system, follow these ste | **Password** | Password for the entered user name | | **Private key file** | Private key file created for ssh connection | | **Passphrase** | Passphrase used with private key selected above | - + + You can't click the **Connect** button until all the required fields are completed and the port is set to an integer between 1 and 65535. + You can use either a password or a key file and passphrase for authentication. For many development scenarios, password authentication is sufficient, but key files are more secure. If you already have a key pair, it's possible to reuse it. Versions of Visual Studio before 17.10 support EC, RSA, and DSA keys for remote connections. Because of security concerns, RSA and DSA keys are no longer supported in VS 17.10 and later. Only EC keys are currently supported. To create a key pair compatible with the connection manager use the command: `ssh-keygen -m pem -t ecdsa -f ` > [!NOTE] - > If using `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key will not be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. + > If using `ssh-keygen` to create the private key, you must specify the switch `-m pem`, or the key will not be accepted by Visual Studio. If your private key begins with `-----BEGIN OPENSSH PRIVATE KEY-----`, you must convert it with `ssh-keygen -p -f -m pem`. 1. Choose the **Connect** button to attempt a connection to the remote computer. If the connection succeeds, Visual Studio configures IntelliSense to use the remote headers. For more information, see [IntelliSense for headers on remote systems](configure-a-linux-project.md#remote_intellisense). - If the connection fails, the entry boxes that need to be changed are outlined in red. + If the connection fails, an info bar with error information appears and the fields that you may need to change are outlined in red. - :::image type="content" source="media/settings_connectionmanagererror.png" alt-text="Screenshot of the Visual Studio Connect to Remote System window. The host name and port fields are outlined in red to indicate incorrect entries."::: + :::image type="content" source="media/connect-to-your-remote-linux-computer/settings-connection-manager-error-updated.png" alt-text="Screenshot of the Visual Studio Connect to Remote System window. The host name and port fields are outlined in red to indicate incorrect entries."::: If you use key files for authentication, make sure the target machine's SSH server is running and configured properly. @@ -110,17 +114,17 @@ If `ssh` isn't already set up and running on your Linux system, follow these ste ## Host key verification -In Visual Studio version 16.10 or later, you are asked to verify the server's host key fingerprint whenever Visual Studio connects to a remote system for the first time. You may be familiar with this process if you've used the OpenSSH command-line client or PuTTY before. The fingerprint identifies the server. Visual Studio uses the fingerprint to ensure it's connecting to the intended and trusted server. +In Visual Studio version 16.10 or later, you're asked to verify the server's host key fingerprint whenever Visual Studio connects to a remote system for the first time. You may be familiar with this process if you've used the OpenSSH command-line client or PuTTY before. The fingerprint identifies the server. Visual Studio uses the fingerprint to ensure it's connecting to the intended and trusted server. -The first time Visual Studio establishes a new remote connection, you are asked to accept or deny the host key fingerprint presented by the server. Or, anytime there are changes to a cached fingerprint. You can also verify a fingerprint on demand: select a connection in the Connection Manager and choose **Verify**. +The first time Visual Studio establishes a new remote connection, you're asked to accept or deny the host key fingerprint presented by the server. Or, anytime there are changes to a cached fingerprint. You can also verify a fingerprint on demand: select a connection in the Connection Manager and choose **Verify**. -If you upgrade to Visual Studio 16.10 or later from an older version, it treats any existing remote connections as new connections. You are prompted to accept the host key fingerprint first. Then, Visual Studio establishes a connection and caches the accepted fingerprint. +If you upgrade to Visual Studio 16.10 or later from an older version, it treats any existing remote connections as new connections. You're prompted to accept the host key fingerprint first. Then, Visual Studio establishes a connection and caches the accepted fingerprint. You can also update remote connections from `ConnectionManager.exe` using the `update` argument. ## Supported SSH algorithms -Starting in Visual Studio version 16.9, support for older, insecure SSH algorithms used to encrypt data and exchange keys, has been removed. Only the following algorithms are supported. They're supported for both client-to-server and server-to-client SSH communication: +Starting in Visual Studio version 16.9, support for older, insecure SSH algorithms used to encrypt data and exchange keys is removed. Only the following algorithms are supported. They're supported for both client-to-server and server-to-client SSH communication: | Algorithm type | Supported algorithms | |--|--| diff --git a/docs/linux/media/connect-to-your-remote-linux-computer/connect-updated.png b/docs/linux/media/connect-to-your-remote-linux-computer/connect-updated.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8bb50e8abbc0ca831f096fc12757069da304ff GIT binary patch literal 14131 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 I#p_A`16H{%?EnA( literal 0 HcmV?d00001 diff --git a/docs/linux/media/connect-to-your-remote-linux-computer/settings-connection-manager-error-updated.png b/docs/linux/media/connect-to-your-remote-linux-computer/settings-connection-manager-error-updated.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e8fee6ef813d917a3740d30a1b62af502d51ab GIT binary patch literal 16952 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