From b9a44880c782782d63bd7f21288f0b1818872c3a Mon Sep 17 00:00:00 2001 From: Amy Wishnousky Date: Mon, 11 Dec 2023 15:19:29 -0800 Subject: [PATCH 001/972] 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 002/972] 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 003/972] 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 004/972] 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 ef2f3a17a8ccfe28c4af445c15f0dd0886ccd962 Mon Sep 17 00:00:00 2001 From: Phil Christensen Date: Fri, 17 May 2024 10:07:30 -0700 Subject: [PATCH 005/972] 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 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 006/972] 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 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 007/972] 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 008/972] 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 009/972] 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 010/972] 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 011/972] 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 012/972] 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 013/972] 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 014/972] 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 015/972] 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 016/972] 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 017/972] 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 018/972] 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 019/972] 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 020/972] 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 021/972] 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 022/972] 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 023/972] 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 024/972] 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 025/972] 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 026/972] 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 027/972] 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 028/972] 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 029/972] 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 030/972] 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 031/972] 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 032/972] 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 033/972] 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 034/972] 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 035/972] 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 036/972] 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 037/972] 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 038/972] 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 039/972] 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 040/972] 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 041/972] 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 042/972] 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 043/972] 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 044/972] 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 045/972] 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 046/972] 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 047/972] 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 048/972] 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 049/972] 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 zcmcG$bx@qm^2Zy3!{Y7>1a}MW4k5U^ySoQ>5AN>n?(Xgyf@>hS+&$+_-t)VE-?~-1 zwYAH$&&h5PW~1A?T4h{A^t;K(07fCa)pfj%jU8}b9afH^9N z3w@}X!aoMRfiM-65&ZC>HU|Dh9}@H))=om*@xuqi{{K9|hHXoXK74qTk`xhCa??3` zb@fVAcR7sO^1aODzMRO!nVxu#<~8&*v5GNVztC%5&n#~v5v6qa`VmYBmGUq{PD}#k zr+}OQYEFjZ6z5?^|Lo}8<;8D_vOHv^*+qc}1Ml_jc&8~J7q_ec{!`aG9nbgf9!5a_ ze;+sTHGX>7!TSGs927okfY-LPeA|sf*~daBq2q-Y9W*W}wG?o)Vp@7&NF= zqg~Q0X}Y6lZEnbIYa)acEp&@d@_PsjIXXTM(x}{W0-rWb_fyl<4A7!arl+T-kDKUE zX!v4e^fR}j4s+64`{)>NsORdzRZ;lg8@g(~f*T&4;D{(nQ%H?l#wNuDKwl%pr6vYk zTo6u7PIk^nSg|0NmzS56R1D-(luArb2%3u`XmESXFyP{*XY`->10raoXsgS*)8j!s z{HLSa)^wF6H8ll26B}?trx(943*F``^eO+{kJ4_7nZ8(Q?oe}4Oa@4Q7!M^8f*mztvc-B4)Y zjm~;=WRgZm*_n=N#p^FjJT?f|BpNXltFoOm$unDpU&pN)8$yw;lm)894 zVZ~)qlLMx=V|~; z5%2G)VV-WzCdK7+97a}X?e8Dxdl~GNLm9Zc<6vMUhRS{s^EA!g=gLyW`DfBV9e=ur z01VuoF`wYA$7UwP1P_Us&+Wp4GjVc~Sv=gSqy@zSMBGKm@(eC=n{q|dymx*||Jxl)2M?6Q#or?glznGswCW)U;PUe7WarOo ztGqyC-FiR0TD6L1iRpFq=s|-{Pmis4U%gr%=s1cTYaPw?_PEqcnoJb&@sv;CvokB7 zbSC<*RvH?#Pj9F}-}}?XWs;dguC1PuR8e%N=esoc?9x|?8D;p8T3R?8oAt5(b=+K@ z5Q2a;SywH5qy*cnF&!$eyc~*Y56#hti29^Vyq-^1Vy; z1ecmbXnA?%m}jKDZVTYaiooBQ*2x{=nF!N!b@IZDk|Cg^t`e}(VR8tBgBvf{^yX@N zF3j}V!ax%w*E6z$LfG?ZXmFNZFNlwOYP+8IR0}C-@OTP$LmKqEe*0sv5t#PMcr1vlnjm745PD6jt$tbp7R|>Nmn6Kl;qgR zv9c%jgXq6g$1RQiaCa9&LPv_U9Q7s8d?g00cxvY=&hX)J+Skwb?U3llnL5EIKCi&6 zE|gI_p6aa2_$EMLW;Hp))QvALQ zP4#+!|qVke`E{!*id=46kR~SHD9 zb{n~(!s>czi{yJwdFKaqSR3se3lU)2K$Y^w|N9#9Z8a( z5op`*&S9*qag(y~ifc@XkozyNGX_tb35}X*%`7IE(8UuK=jU4rgjZ&(zLzh-BZ$b# zzBe-?Z*~gTphN8~96N?acg6%CAex64cGV*E5~Faq>^1DuA3LW7<%r;(3n0%E|Q_E2Z|S~=tmeC zS)(5UjkMY-DCi6=Y|fJa0~0Ud--BeA8=LMW)c36kyyIy$+fZ)7@;kzO33C*d2t~&-O`qF3#{AXz7KxQ^Jw=d*|^0TrBuo)3io&xV`Sur?(&g0^{iG( zdXn;7S5WaRb_>15T@rzvJVDx+c0K!_COn>_oyt0@apW)$?u= z+i(}<@1(ITy6!S-DK=!XM~(wpyed*{HrAI(Hc&W`!=n>WK>q%S_m&cd#`7C7+U_c zY11tmBB4I$VnjT=Dt_n?F7TN^^;f4i0~`0&0Grbq&VWg`i3%W8Qg2eDy&&KvJnQe`b9XNUb|l5ThJ z#INSc%-qG#1f!zzeAoB%GhD>@?92j`BfO>8)vh>)!!3u_h7C|-V`8R;QVY%RJ%q@Y zWb&(=7}w@V@X%+fg!iogk%5gU;aEm+Bc74PBA%}aCdA>=)P={jzK^4__Fu)ZeBPRo zvC&B)Bf3Dlo^0#b)NYN4IRZ<6&GB) z*l`z?WN>>w11rf5)BnFAD(0!WJaSrAD#c*Ti0W^+i^I0&%70w_qZ$z*mC3- z(1sjrW~%0(!>V|d;QLyN-lIs^w?C1$5c1NeKy`J0cb%NXLcrq$!H?n{9_|g4ft^*y zz!Hgl-wh$^A6=C>QPuXQ5$ekelH~M@;ol-7^KN#L``VxLeZld#j&Eb5Q%*}IXy^cO z^vLViF+D!Fj{-CH#U3vf7LxuK`n|*MheV@KW_N*z)1ImXtbYRd2oW$lF9SHA*Dc!u zhOmCpODVyd_8RBY<**^yYby;gM6FHUTvCIhe(@OC%%0Vowi;I_v>_VZ@DN`j&gSY- zffXs~;675r!X17(kb`*>9#1$D7HS2{+h0|pzY_Po-M+qj+k6k=e+c03@qLo@ z1^T?ZK2*Q|?%wN<;p;o+)~BqlNB|5Jj;o^Jc*|;ViDVX)RzhD(KHSbv?;M}Ul&z6F z-2o&Xp}*2!#B)CM|Hqw&ygv|K+rFQ758l7+5)~kkbADz<#$wPJ8ci_0Qo}|a%gp&? zJ?79{?-~aX6jRB%<@%{77u+6INy-ywp3@m#KF~r-XH7=&@czjD4)y-F{qFhVcf@`C z{?z@J>GT#&+>=6;ioCGS)?@TV6);fFA@P+NS*2;NE+?>HSmBO` za}-9OoYJ*-YgXMsak5fdL7_3OwzUB;x_(c7u_Y_e*Do$1;q~b!u2C4?^1=pjVq;Cs zkg~V%DC102Ub=KUbsTYSY8al5&m8)S@HO%6T`R07G}Z>7C937YC@^Svr;d^6{b@d% z^r;jFMtgId!}F`SMTpJE$?(|KTyeE8L&igIs zxkz|2gZW>yC){Bss$_Wv3$hV# zO85JOfb4sy6NiMPI$KA_YaxUo+*xVwisv=SLsLj*3#<`!2|f;ZS~&6SCA!;uFUfcC zT-Qatc>$}l0udHuU0fL5PvpFPl{wsfsjJeX91W4?YTt8_^7C6Bzh7QCL;3rAYq%cn zwHX7$3kJ@jv~#*FfJa6m(6g8M;xW>#*hcZ>MVMJ9?O!}%@rL{+!T(rCecno(%Uppn z(XF+Iuwn?hYo{fY|CDIHArj?q(%u&eEF>*td+NakDp}@2(vJt2`|%}!R45jBJahAe zgz^xl&k&VY?uz57IuU+3o6#cz1Gcy@Yw1Zz(DGNZhr%f-8dBRc^GOv$onE3uzW1)%2}#QG+;gbp%*dwGzJmfY=Dze*?0Pi#n=atHv^W@P3Kmv2;ydTa zR4D09%ThAicEJt8XumV#ix0PEg#UV5yhb)~!Sopsk*!3RL$CSmqDu(*4rzO9m9HpP zXBh>Kgk}kZY3{(As|KbV?39aH!)wAxkr`BqC!wsp`M2C__PUdwjo2__syViIgOVH~D`oH<%h-uWxeiqJAW32TQb=7Kzk8hEI3yyD|;;rwTTtM;$oGM%d zIQ2C&;7pG-{X*A`uXVfqr1(VgJfP_D3!-qe-|Bn1L9I zho3s|f-2KGQqYrWLQESZ$jDaz-2~9pnUf=BZ|VuqQBYG$d6_LAgiqeU1mlT0osLQx=Hq+WNX?u4Oo+|G6sj44 zYBQ!GS`7iw|0|4gw zUj^Fvh(w&^bf$R)R%wYjWU5Yfo9Ss%e{x5Ubx;KMGed`+Il+KGEzHc!BKhNq>!^Sn zBmH1e7T?t!LaYg4*KsUITd+#^%n6Qd_lJik=)8uGgL4+-0&^5Q)n!&mPNZA9*QFk; zWDEu1S8m|!Eqdi;-YT3FdM;iP{YOtOoHP^cy}(hoTT1P<-Z0ekQA#;NaL5bo%>dm6 zNg}SY{G8CK@T1uHvf~}jwu?ABYa@^EV;n&MkLhZuTwvq(UqekoWaXCAG3U zyDH|b=qZc7UHM&wS2kiyey3acV%2Bva@z9rRHvA$>FL$!J)3^`&n&FbhbL!6&r{|; zxc}@rT??nmj$-SURJwC#Iyqe^XGa!NI$q|?Hr?KSdUp4iWs^O1zqIbWtH`3SSH5ts z?mRoytnQSMO*Z~RQM{G$xxGtmJ(0FDSz)uyCfZf0P)Y(3L0Y%^J`S{f5sa0?cZ|- z;D3AzC~niy=m-q^Cw}{HEC1ssY8AB@(ch73^kvrp#Sw^6ZO%b0YT(d zHKD}Q<9TLb1FBW1|IavrUef0b^vyBYoDo7JWFO`PZhznBcXooWH9G%$)Y;vdY~&&Ys)2lEeR4c6De{fzvFzxH>qS^@vw+}(Ud;9oF1_kY2x{{P<%xXVBp zXuo7*;wF9!UsSHBqRy2wuWh2&d51eyo43fp%#@@0E?3?-Ggp{?$^579_4RHtP(oA_ z{SabYW%8NHG5-Eg3(k{z@y zTpUO(idp6UowyW&QA<{2QHkHp{=MBVAG2R~o>!{N;pe#vN31k@!#xQ4#6WDAG$>t)3M?hX>aOALq^f@oUs@rm-#{`jIz~tl2<9jNA_}0EEIt3-n_Q zJm)lp@YM%W@(aONia{0%A+}}|d=tv`m#Xv=lfEp?l`kK-?2DAJ%v-AM>LTx~Qh_zk zk{ZFRt`57Sl+?`EM*I00Q{FqwO{Sw-zO*3FrcsJ&O~I;(CPav8Z85a1IWnrnCu&Vz zAv^0NJAMtrTJm?qn_T9e2HPUdQyHo=&F69I<|oSEs#@)VD{prSjGP)Z7Rpgx(SNd68~w8uQ&dM!*^qsfYWT~*X&g;CHaid;NyS^9hDaNo z5fhjTVGgp{kY(_ogz|gRDu@CmgGNHTL!Ra3L!%?by@bHR%i3mnxdMB$xSSSLbKLD< z(Z)~Zs>6CT`J!`|xE8Qfa!ZY|^Jz5XlNqVQ%_n4?@~TRS2)ygnbd-59^di1#)_)s3 zwrRjb&!r~COC(!$`}II;)<@fhL}4!vg@EqK z^_`f|L^-$48Wo<#LEZ{wyk6UEj834jq`9pK!kx3!&Fzw&kVj%5;l*OXB~m}96Vv%o zQo;+k79KtHy8p#U^>>b?7Y1D7Q6VG$X__&m>H4fznxFW+p*=e@E|dJIgu6o6+8rpZ z`l9F402!6II6`wOw7tNrGBRQn9s9@Zbug-3VH2`3&SbSi0yJs+;^R?v%^}$FDAYt3 z@|$cCrGNR{#`!Ta1`^8N;EC!~)(VF;cau*ddLGsBBZ4sH)_om5F&uhB7kA zB0m?P^`kK}t{3~c#Pei+i{14d=3GYwYSEl@HQQk%O z$f@jsVPs@W4GxqCT#Rz4fdW7JA9j4-G2RZkUohTIkobDUFW38dsqqTwjLk+nqcoQg zIZV()#GQq)lgoqH4E`?BanKU&G6F{K>?H&iq-mfZ29t~pqC!!4+w&J=SSxOtm6Czm zBe)!9+CR&)l???mtt3V$AxXFBvV~NdqJQiUGH>z5bM54{yHSC7x#aEbH}l=NZw~JA z1)D3Qs9{``QJ z>#NgpVDJ5c>B{?Z_Rb6>d&`43G4&CYzqOOy;|Sy#Kbrr}gbToY38+d{!#EcR}8l5)S6^lMeCJ_G~W|K zyVIDm`xN2Qu}>-R5ZGCYsa$x^4hW2fx1mVR@92h|EOgzmw?c~UaD{uaL4gVV+7n>M zFXE;Zl30oMrQ?E_o*EnJvSqhJl!Va8RllYab5m9e<);(=p%a7tcB34J$YOr2a7sWP zHctaTct|YmCnXtuEBX3Vc0n(5;LFrmZ?7+Bgml&MNXg0Yg8=wb#Kq2(GkC_DG5m50 z>Oz$n@q9^+I(DC#CuH~yAt@&nwqVu}Baa*EA>s-tV>xV8{pOK1V#ssWz5P*fv3>6? z;l;t{{PK3(N_VgpW2X<@kF)gnO)U{6dBnF!2zqT~kmf!rGyFyX@A7Af^Api+CrAsT z_MROgpCHBINc~;BfLJqqpba;1&nkKmBA6Wj6N-e5P}bnGpQZr@V{<-5(IRIPpZJf* z@1Wia^|QN?6?SfaxHuP z%KwJq^SDZU#_jTPI2ylaRyg}dY&1@l`v3_iF=nZJ*G#(;-mYXKB?Fy+O$`DG?{B?x zg8;{6aJ}6ZWcS3q-vz*j%%wj~1sMD4kJjGi=Sl zG6Q@^aC3?4n!sz*eM5Yo-m0(Cr(k&CNc0b=JTDQdG!0Ki zJ|6$AUYvi$8T~wks%v0csN?=8|IEnN%VGk|li0v-{4HH3LV+T*#xkJ`goR zZcWR-3|&?0{YdfU4BFG~C5@_TeYJO}7bUuC>k3g)Ku87Wr0hmM9{nQ)0nJ8uM@&jV z2#kx9xKR#!pP}%M$ssfrn(QYdk=?H;M3K?ldxAPNYln%k=H|Njbe{ntvd#dTEMDjz z_3X&+t)NNw7mK=FW$Rd-`793YegN>WOldT&0E_ zdR}C{Lx7$)8}hwW+U!caU!EQ5+4J`0Zoll;os3e*FX!j_r$;cR)0!<9=|K}^U|*&x z4P@GD#}|^v>;J@)2aCU;5CZX8q}EW(KcW$+yX`we+Nf}~z|S>XVcvYFUeLLLX*X}{d(V##v zu@ey~CS_*_r)u`HA71#-Oq!{`>y36;Jw#e>f}ODL0Isto(DGOaEN=w2CX^p#S5Lm!iMqI2aajXF2se*VQXeQ z)c4P@APG8|i4DX{CnI6`*FvcXVGDRXF=C=Fd){pc24UanrbwJXCBtT#x zBl7a@NwYq%NZBdN5C2!|S0|H4;KCgTV)wnH*L(LnKG9`epsB*D38Dxkk1T%Q@oP~{ zSf!BuGsI9)khz-Lz+OCn#sN|#xtM7y#V-SoVkf5?D}+9EH}bczNO5CcVJ#E_k~gxc zC*ZE>iNhMtpQfv^e0Taan`%Th)Xj!DZ*;Ccz0E>7xT@sx=3m>AzWS z9^!@8Kh@;ngpPe}0I25DFM==oKETo+J?@%Vz@I=DG4WDd4DX>PVPe(rtOkrevGPQB zB4yVYFnyi+o2lp^Rj&&0uz@oHhasTz9(K{q47#W25!g9()sUI-HpUsR!=L&Jb}NPnsBkAB|d z+#i_%`)yQ_i1&IGFVQ7GIBsP#hV)L==WcL_E=s!<8sNfCw*6Xp)(m&)otl zxjt~ePhbYM$Vnea>*Ebe*br#GuMRFKo#Jm-ZSsMj{uSG-C8Wgi+5WnQeoChc%r)Ci zWN<@NOMzOUUP>-CJ1iK&)eSdwcRpe^w0ciFutR<*ycC;*6WWh!nT)Lukss86teRxtl#3K9s6Fk`%(U2ntSoJUAXYyNB=Jk7Tb8 zeSZ}{MEE{ny_|(|PS{}Obr>t9jbc~A^;^%6w>WIU^1(Wn;3w(po5M+at5b$IgsjGm zGdhG1_aown8Run8_< zVe}uVqZWzqMzzkO?niL(MynGa`H)c$FRCfQljfg^Nb9f)MV;@M;{|*lq5{y4=Vn-n z>&hd4l!@8(#wYh_X9FXVP1>gGLuhfP~od!0CtRg4jOpQAZIiDl)*?Z1dXVV zYl&chMody}CdBJnrqHM`v9ni>PX(BHIVxK0jS!U%VC9MgW>hp{l0Ix{&qYjR^8#d5 zsthrD4fRlk>Y|k8Cw)Dr*4@+<<4pq}=$2SP9_==#vH+cpOy(#{t=C^6CCVA{d-)IS zV>1D7z9>V96l4se@_KB`av@``Op(_QNT`HA^rb%6vHX%(Ru7rFR-d58s%2ddICwEw zP;SUG^#U<-XMMduVl|w8J5O+n8|s-2rs%LlHp)ia3iCromJPq9I_d>g=NwxP4C#}o zgc6MUz2CpA3Whd^UsJFL1_t(QwBX`d#^rV9!+Y;MSXGxvx;vm>6~_%KyinQxi5_lF zKnb~jljNdMzJd^ys!-va#P*9Xn+uk)$V`R&D6y{gAa&xrS#Ba+*gH%>t~^yuTV3SO zpM^4XhN9$SG>daK!hJ!ZTnlnk=yEf^E$n$aJHEDJI(4FkD|4bN`Di}NlKP)ddVGh& zSeW}NcFPrIn4iTkM0}!yW;m~~S%)zqlAV-ntfr1)h-^)TA!W}SWmrG8ILSqovt8y` zZ!2}3CDpiUTIy<)rIh|E7vWJt*CrC_81>W)w~BQi;8Ue1ikmG}CQC+Gq}66qPWLBi zcW>+<|GQH&PPn4{f1w~Z8i0W(E^}=q2@S))0Bg%;mI(}fpSgNiz>F35SSxUF(3tkG z0!PiZ_2`8z2qvQ$C!$%YI|2t(05!0&0dxK>LrF<3?4w_b{Q8H58`N$IVSLZ)$b;(i z4p38%6BG==?*2)FCeZudyxWK!Iy!2Oo~)Et)1t+UN>@o>X7XvmT1b7B5KO<`^(WKZx3C5aXA3ZQs<72D8nNncF)ct zb>Ds^KRo=1+5P!5=;Xu#MOs#h1%0~xPC3l=;W#C=tMdB_tO%TOEU4+G_uSf1&4FJ4naJVE z26#R2?fTOI~ zczFH2ybSZ#e|pj`RIt{0 zR0b9Hd{n^&x#!rVslplD<~y*-F2rI!>&s-t#iST2#74H7l+W|4C7(vB=NF68{FzJ3T!e zg=j|pnz&R%TmFO9_BwcgQDw56q) zLF&;QOr*e9sQ=o_ge?-}TLZ+=Zhy#J^9!hij`{7QeK-aUHFa!S8Z{X+5&$4kk1_p2 zdGbHPqb_W0Y`yI+Zw~igpEfo(3;94+oRgaiHaa>wS21w?W7vMD2P`Eum6(?|69EG9 z*SC+X9?=aqEOsOaQ3}#>dpPi$)4sZr90fpr zcdb+Y>d-z57A)>jk+_d+kjxXZVvNR3rFA z%Fw%S>%ESQi%j3bf~e@TIsHh9xX-73?m5`&;O{ez8s`-Z> z>pfcR2Ep&PV&rBv!1_Sr9Y6JoaecUe3be>3#_NW+<+PO4?p z4a3ej&bY@5mUPcMnUbpk4Lat8;&r=&R-4Qb9o<*`m=u|^S=_lP5VCD zKIp!`GF-jh-x*#iYo@5J_b>0^zHGiA$MSt!Vv1t@QQO2E_SgnJ0%!&EJT!Zt_?&O) zf-x4AKJ-t4;RSOBm0Y7q1a`b(JuV?3!3g_evz-F+#K*^H4$KA}X1=M60j{VyiSe~+ zy+xr4@+UKB+mWb80NFund}(RvcMh4nPZn5MSX7L*R#xA?mJs6Oe@{~XeRn6-&fZye zuDxA{19Ngjl5`jzi(>_N?S8|!dzq)wV!RIUHTy(3;6Xg|$o%!JE3ka&K6Z^Od@I#M z$;6}oF<;j1fe3NWUliu!B}QI>RKsj$K!crSiw+00u%T`XB;UX*v}+vlE`;qVO^e+c z;Z*MyzCHkWjX!HDox76g%ToSanf& zU_G_(&7aB2CUDQhjrIcinWS$Pg1&hVSw$;gE?DW)qjtcoc=qlLh>A{}})f5_CH1daohbL3K zrFJp)kVX(;suP;9JI{9A-3eK;Yfcv@^{KF!u5rj+L<5DodrtU_TapJ@kp~34!xrj30=Gf{jf{Mn60-kW*FlH4WvV2>7H-r|+SmN$wxt&dbYtU9S5I*Y0xe zUtL|jz~B+{i*Uq9E*pu6j}|9#z1dc}9%bQjdr_pL5GoHs-StfWzLoIo{70+;x8JTY zg3_3=KHOOBu|3q5%I7PoOF>Cj@Ugjo9nTXu+No#aA~$618#v13HbxCJuy^TY`^N%y zp?b}kwt_$_Zv^U9S}2-?xP2%5tP3z0+H?``W;2#P*t_TIo~b9oc#9#XmQQO+wEAWF z=&O8fS51upwo>3y<@Ip{=E3m%&v-AF@AvOm@Atk>(+@H4$NYQz@6Wyg@6RzHk#plZ z{*d742(5%jT{c_BG$?+c!zn$FNGXEOJMR^cX0`Eh`3FGZ3#|L&mXE5m!0>7KCh>`((Y*P?(PaW zX<<1`Jk=M;vxw7v54hkcdoaVKVs`f){%6sUU#OOHlp{WLw8NNBiSODNfh~(~Ql6oM zc|Tb{WHNo5EEE_}j?PoXhFmm&7NZf`^_&GH%R&R|atJcZrR0`^#Jc=zg8@b!nStGh zG7lIsc})?3K=_Pkt&nt0IA-nxCP8lEQcR{*uyyYJEQ;6N z8(B&ymlr8%L8D`wysQ1YBvW`g?jSZxEUq3B76D6(dxZV%7-P9YSC2r2U@i(#ODbYR z!60yH4URBZ_6o>N;7;XpbssIFr$ko9ZCYEVeMs;JFX*6rM-v=Rq`V>r7x48>a0fR1 zXLIF5o(?xbE@5cUqT=S(lsd4nwoWv-%E-VsKkx&9XTl1)qdM6@Sf5G-`)`qw3UZ=u zyO8hE>GTlOQMx)FS7&Wzj~ z=!Y$MS%-R(NEpd3LM(7eO;2FoTRALamZE52EQ7H4i_!y*2)OowzhS!}sC4rw4SGai zreavs{^pXT)&sS_FSJB8gi$FyH1xDsuj(*R6Gx`RW=dSAf@b1Q+kc9RUj*GX&po^; zos7;W1_qmO%=oyq#b(U#6-R*V609ESPWUhq+6&b}eswKC zf7Zl3o*(}!Zr{KsR7n}{qtsGy=OX@%7=qzdUh&+E=*kY0 z!HO+n?6cLV`QYdpgmE#ApC5*buyQo;djw?Q`Unv0o)V_*pE~ILQKjVhI|9it7|jUwof=NU5t8?7SFi~7(?C?KohTO8RQ5n(IaE!%c4$MJ=mh0{Y`Mpba$+F#*DjcAuh5Mos>qS$+NLT$ z6}E_=H=*xj9{rOm$jQ?>fm5sSEd_=!j_bfc)23W~C8)-1R)UoG+O-m0rSJtyM2QZGm9*Nanhei z=A`7;)k5=H(dW?tqi9f2`>Xwg*qDfRjzMw*Mb07*8IvkFlz!*Y%GHOQ$d{f@`w~O24NW= zIECzjJxLupi!}_pjiBMcPf*64)II%p3zCOE0n*BK9>_hl}(u297pgQCr*+%t{4w`kOmDI zsv@wvi~dWX7($~EWTFC{PVp*qDYM^$u{KB`0$b>XQNHJqHkON4^V4B57%UFexQi7T zF$A!Ch8{DFV0e_dY3Asxj2Lt>{+T@|6#`*_8ghS6%yyxjI8}>k%ra-uB1b;V<-5>H zlwx7?FNczCjYgqc%bP1?`zVD->2eIiI2nTmP9#a4q$`Iz;V*&=8Wam^KkJG9Vc;%+ zZU%6{>w_g?w+16BTG~jY_;t0ueIQ`Kxn2-aP;ox5Nl~C zus7RpQeHoyn22B#L@Dqztm;R)qUWDUa%@y~?E0_}3~JA(?ETvY`hVKUBa;HHoxuZd zZ|}Lw@2syKb={R)QsA}Bs^M15$k5f+*f1y)veaEKcW;Yz=0HrTIJ{#(2zZ|W2R!&J zUx>YhWB!b#SPJwaPtlWwd@6dlgsI|6TH22^$B%iA&ok`B-wdJ>igEs%Zn~g$%YxUE znUjqdW!=9u&uW?gDMfU8PZR=R3i^?4euNyg50+r74P~4-L*6Krw>*v`l=$HLF>30H z45H_B_` zXAnOlPjiQ*sRgLC`xhSDe*w&_!hxVh#E0kgs9mz$4e;5635X%lbhNxl(ZN%j8}mRx zHATT%o`~aIo!h3y+G)Hrt3OkH1qjI~1F?{uphb4sf8wPN9`&+%1k3jCk9P5#UgK=H1-d$NGYmeCh5*~u|u1cxt9b0 zNHIXFMxsfo%grXhsUQ|o|zu0F5NQQUFH><9$U|{r|Bo|Tc_J944T_2t=mm6%VA?3R^GCf zr)}Fm*A6?ypNhD;Wzq|?x~DEr)WTlbrndrEaSCb{&7azlNgsyf!O z@@@9kwhFmOxT)dgU~W+pq7xK2CwdnCj0Z}von0q;U@r=sw*-3 zU!mbCT|9S&wwAu3B{YLA5jrM@Abqm5;Ek&wdb2McNH=a~X&F#lOkuOp;`e-i`2z%y z{x`bCAxK1h+uKBhgoGobqjCO+u9={je0g~(z~f_O{Zv_>cTD(iJJu+JH7qPFBa@SZ zncS|inVFMNLRV{mfys3CYY@NtA}ed#^@k5L+F~^rl{Pe>>+9=V0YAG}LirbY|I2u7 zX&M~mB_&~ngoRfHtor_y!s&d#3q3zG0~d6TD>1xH_#=Ya`eX%csy9S{SY+Ymrg5(7 z>LLVLx|)uT3F#lHWCv3g8?w^}yleX50`55hIf8}S;9w{>clX}aRh;YVYlUuB+({Fv zgVR}|@+3oNdlYF$>DbD$91XO4mmBRr7%3f8R3|1T9+{Z<{#KOpsI5a>Pl^DM3egtr zV$bFC!r^kh2I=YPsidMJrD@^49wNFdx%Tq>yJmIh^7oBMF&w>tdlTBEJ13 z$KkLK!}qw4hK-9Wm3el4o_M$K{TL#8AqV#JgqHj{gz+;^(5f*R`kHe^=iFiCV44d? zT@clm+b|a~Q>JRQgpYUZ@3nJqQQJ-8Hr1zUrxI0^VwG!ncSixF%OBQrKOs>I{(sAs)>n-0<;f`3JNou zn^A>@WXHMQH{gnfGAzNRejf{-w#2lQpu#mNn5Z=ql5RV2OOVRtMxJIAGoy{NxkKAk z1IL)y4wMb7Y+qPJ>GfgqwIxFrIzQIS%Gj~wVk)!bC3k#`{O?>J6oTeJP*AYN_q_`} zBswNWTGwrUEX8$Jo^9`uW}(QB;?PEr*CLT+9`$J+`x8W`t7 zB}($yZF%Azn8-^U#Tz;~6QpggmGG>`95%mNr7}cV22wT^_V1fXdV6|u2L}fiD3+NU1L#aWk{w7~0{wt!a;mD(va+)H z+%A9+L<0ZH%1YMtnZ-pi97tw>5edC+7j38S@f?|msHh|h=EC)%FxVwEdb#ycSqJ$2 zbadZKIF=C0x*R|KaJ)aN-avp3=+sDguoQ8KmKV%X05E|{q+4mmj7?~dH&HgL+Og$f6LM?If#&YtM`EXK@PBy`#lsDGX`(S8j7~czA2AwV@O?-U0 znI;n!RFs%zM@Da85Nw+H)>iSsE$bDV=zY3-fFDFKudiVZwQjzOXz5@<4V&g_oD8cu za>e`G_N*>on}{VbvLgt{8A1KR6W!5H2#WNKllVd}q%+QgiK&{CY9?l?4uy(Ze^pR| zp6F~Y5n~@X*}J{-`u=<;}|tFd4tLORe-_<2Z-k&VeOD2nvs#ZQuI?O>`@Mr_M| z?B{U55-cbK1c$<-XD@gSxJ#0=VDK{;89f6dfHb%1gJ>a1zCILbgwthGuEx2DwFWb) zw=MBO62nKY0DG1rrmXKS`T|vbp#Mhkk5}K;ZUQA5fRnvF|CJRrBO@aT78DSiQmA;Y zniTqv0a*@%m8>=}L+W8zSKmWTw zv?!7t*!YbyrR?3e^R4VXtoL)->(1^6VxP8W{He8I(lbfAwYD{~n^+|cD?rs5rK~hRWS{S-p5NV{lr19M7|9Rd|=d82V%YqNASu<W~Z-@_O4FX5<2xk9W zIcEudA?d~S3p69iUMAFxJ2?;@8bE_gDWS@|pOl))chL)N%uvHh4yFIDiMENG-IWJ= z>U?`7ktNhZQsh={;@3>-JA3cFNlOdm13p`C z|0ztae+nNT|LF8I$>{X=@6>2e21cepzPW8?2Q7ij`8#xRF`}tbbXBZhbb@mjGycEn z)M)sEUyLy@rh4YuSD^)ohp{Gx}?Ew=3NU4 z#rxPoq)Rd~4oLZqDD5-9h!LxiniHbobol9>{9oum3XnK=#_j~S^?25c0jC<8rVqk)ZtGI>|W_#FjET4U|kytSjD zi>tGFbaHh~@_37Zi<@@c;-|yRRJ%is#i!V@d74z!N*$1%@9#FmUez=ew35jZoRQTY z_Gc~ZvK#HjdHI%U%U}w2kO30%I~J*Edb%R*PttRv2hqceB%M@0PNKOZlW6>f`LV!= zFOIER8TE0pqh{C+;rj+^F;dGq0xc3r|h17pt8GuTvAGll9U!I+J$hyToWGXCKHL2BOKli0$MrePqK)W&M^G z1g(P70xM@~JYcT&gVXJ8BE-@Y&sa3rzY!vokNag?qE@UigcOa+YhDe}dQFEFy8#9{ zlNF+2uMq162i|K9`MqL8`}YxghFf7HuP*~InR0<8s2YTYEKQY17CJv~V9?@)4^-o! z&CShj63Coy=rt!W#9Jnd)K#8py*fZnDGGaz>tn_oNS*tH++FaR0>0dO$oRGb9i+*E z)s;p0rP~2Zr<-=@jOX|LK3x{SGfdwci~bN03ZdcReN2pqo)D-#S2y#{M|<@N+TeKg zxb4E~580vdNtp39%iL3bjpsMD&oDrmQKf{E4U|G?Dubkq9_&T~QlGgzbH52u8d(jS zxC!H}G?s70mwi-zNlawDuJIx@pKSz_*q6fu`ukCwz5=9P;b&K*#1J-|shfoR`_pCW z)6cM~SqPr}d9n8%?v3B|*d%VREK~|Lg*-e?RNG2%EP*T#SGGjr?>gs7Oj0y@01sQ01z6!V}h!9L6 z|Jw$)m+lWtt}B7Ks)&xMUpCSWCkVe0N{i)4-;|5H?~2ivdc!@J9-ymlmUVS(p^IWc zTW*GAcB-Ol^aiHN+*>Nc>M((nsz5$|0>Sgdid$~4R(JkYira$N)tGJ#@Wv0e`^b$) zoI3t|OYd&OmG*m`ZW^vhgMiVLJu-oz&Sh5$-1IHVpl$h?Mgi_xCQ@mm?UeXQ=z@fJ zI{AD@>lcZ$&*0NsKoY6}ibTvW!#&9)jz6(%?aHZ~zCxvML+)M}E*`}R{<*^2@Odq$ zFW<|IWnW`=6#Kk0=>UqQ4hBKtxTg$-M-i-w{owyBVT+uzQg5w# z$-$*z^Sr(d1c`fNxku2Iz+`JmmZsWMUWiuulPonyUENjoPlxPMbO5SkvY18R%OX(j|A#Y^` zM#NHy!Ik3;XX0{xlk;sZ$%of*Mvu%(nH%xyZTOB&(_wXK`RVR`Vzh-m3iTZ~B8Y-? zc8*CpV5L>jo4>w@a5=Yr7OnU>isCcZqLju<;hj_kZvM2Oo9{YM|5@`%slFfo+;XRC z9jKF*K!i>wkn$hLuWm@|`$~C0P1uccy z9p*aE4h$t@cL7Dqt-IB1SmBz|8{Vd-vhh@!K;DhVg_Ter}wM82i8xGln)<^SvRe?1+l&gbHBT`jPVU6(G$_ny5DGu?R zVjj{$KcI^k>mrM-PpuN|&RY>#WZ5Wl@!`UCQB*#-aJ5pAEE!jR~h zSzeDpf}x*PH%YoCsU5e&6%0jcbm(F{aUtl379Bu$e(&sLzY^@D8McD{qFem+!`018Zze4nh?;Fy-2ZypU zr3yH({yQN=9|Isrixv=S0JbI$^svs)0E@i5?TR3nZT92>ByfytQn=~Y>bNISXe|D= z$z{5v+j5Ss{I+(x8Z#4dZPh3ogM_-TIHd&ygC&%Cp0Ue&+prDo{3UQd%Lu`7JRy0TKi z{SDc`gERVtN}&RGbwRL9lM!~g<>N_^AL-s!?`$&U`9NKzI{3fBJN99dAxuJ>XpRT`)ILDQ@}*2tgD{++jcLp z;foEfPjt93hREE$u#|pB%W|nx#y@7gt%{b%k6ml)<5)xO6LbHykf@S9@8!ffdwylm zmK~ea$enc;GRjIlp5GA?C`G&FwMT&&+-VP=mfwQII7*ji398N<1C3U{Z>TEDj0 z`8PtFBHy08SDS2HCq=JCt@8(I_14oAxO0j8w~{!D%2%uP+Vhx13sIE@Tyv>Io!X6c z_A`zxy?-?}rw;A^E_60fL>afVt<5Miq^i1F+RcrxskxcSwTd?vH%^8$6^CzAaixBo z$Uxi;tQdkrDHa}thP!su;VR@kg)SKAswp5AMHWNcA`||%iniSR`?8;4wAR9tdwZX! zyhUh$bUT%Sgk0%8N^7z)K4u>~&5X>zUeCkTwlPDc3#UT|`qhKYyy8-lAk4D(@^Z7M z=Q;l>a>Fp}E{{b$ko1@fvyUzxc+T0zDg!N0LW)8qGkLZ1tFn~}xcqq{RGv9$Br~3U zN}ZGHKl_~r25`KeYX7gP**m)mHjDFr{(THQ{C}*_e?h|kH8iJ_JY2&6`kpsX{_mbT z5-WiBn#4U)Ez4hr8vGB;tZ{wV*{JMji*r&^h#pj~05&27|%v zz*igp;X_nmA@la&0U(&|TX!jzyH)1?tXKZyc*44N={o9)%7(U&5m1}bva@3rsekNg z^SfEz*@i~axq%7 z)9q~1=0x%oeo&xi@_&xlJlz0!=tT)eUG={t?7l`=d}DQ3U{}0qz&K?)ekS_QI-gDg z^z4*W*}1MO^k)_12*d;`HT7bH-%~*N`;?ZI3AY;_(DVG#1ERK2B zw1fmruQMScl#uS?iVAr%GfX`o4T*C8il|OPk;~`LZp9U|-((%dp=WMh^_#OsEP1B& z^o;B~?d`{+2q}%uRe*zk8gT%BnlDGEuD{E^(wY7XDlK`?Y zF*P^?e_{y-R1676q9^zj*GidRh#O=jLSdcT`K?+Wu zs}0q_QW7kkYEbsOJ(TwTYCa8BrvE?qe`9x+2hYL5;XzGaR8&OxLBi(@Y++#mtR@2P zyyU2+QIO`$h2b8x6;+B7(= z1oGWDT^txreNTkj$pMn*cYc0QYipL_=d(Y4DB;FBbVbcLj9{ZjQ8!%>>x5*f=oJju8hEo!3p)`V4a~Bd<#& zYblj$;o5e2hVZt@%VKo|SaV5mP-7{j6x+2{p?}So6s(wje`y1%e%4d(EzYDH<@|h& z_(F=cr-B%?q`NBj=LcyspFFJ^|bc2&v@O1t8i;+vkxvhQ$4)nGzpJ8n>{r zQr(AzpPwI$jh!;otw`e+3}hTBH}fX^gvUCDA-R+NVmI9S94#L_jZS&>fo8e${8+(J7h`iv%12AsA&y}1e-WB9Ttb!(gu11drC2v1oF8;Z~_jh0B!Frb% zuQ3bNT=;lSk&4chk?GeSKb4zGtc+;ez$K&y|Zef zWOQxWeR{OpHYj{E-Q$6f43dTExcFsz?7_*Wd9E8+fMfw%mfdsS|8?9zo4l$TwrK%3 z%C_fQXoc(JUfhp8+ey7n*R#|H4I4;biL3!okA%7IG%~7Qx*_8=Y_*VEm5W92=29#ctegvJWqP)*aC1Sj1aP?RnJIT%cIXn{OuedHN97#~3w zQ6b-aha8mN`M10f8&5XE@1l#_#z43Te&@?fBXb&;}~XaEK(Y z5SihV&@S}0i&9NtvCxiVdhd-30Sr84+RIL zb%C)A;xB4Y9(sIB7qV;L%FcZUY-P0d)lTk^t9zsZ6y5fnJqul5Oooa1sKSGXR3Kf6 zlbde4I%lxpG_0TORRi)SU6C1elIv=xq;BMwn}de?sHOHHP8?kF>v2Af;Ap&8x-=4@ zQBC(p>btTt4F>PFSVm22ZvG=~xc_1{q~V;_zS>P!=jZ1Qem4R*R3gFZl6S9_D+)e&r|5X^uk-w9|}t2U!~%gstv=ztTX|n35)y#~rmV zqWUy*EI-i-n2^UdUv1)AJ*(3y-uN(<>4)a8qw2g~g-ajRJkAhW0V5{=!Kn8Vgm3Rj zb|7emZ#W(_SN{TZ%(b~foEdc+t35?1*KwGSAI;^n_Iu5TkE^t*sUk#AAmsjwT$j-u zSyn3?-)JsuuHuRLe09jAjkxa5rQXg$Z`D4*n}4r<+;vi3I(Sz4L~S19-$i;loQ%WR#6net#;`FEn!6txynBjh@D=Uf2L3&Ft+N z3#Gy8ae+Gy+-1(Mgr*e{E|;0!z8b*kV8xg3pn!Zf%zbpb$HH-bho>bJ@EZk6+jc+} zvFvB~J?^;4OD8G$x(r1Dv&j1=R18xxdAglejQe7o(r?DqpzM-6pN`UOp>+~ZQC zGClck5VSb)%635()Pzss#l&Vm04g<@746D?xOfC3>_S*2-2h!i&I40KM=STtAx0*& zI+VkF?v64?5RRue6}1!l(tOc5@Ta#~gBK$M+=}egQf<(GK)*iD!$N-!EOa#xr$v6N zhm9xmKuGQnG#=twUIHeqR}{UmR7sXB)^<8R=>WEq*q9sE3Z>6+q!rm9)HR&TgjIDl zeta(sqAPN|`9v1}^tm%{a9j-q0^_H~BA|`EKL_t+uN@a#;4qXSq>B5b#H0$U(T8wn zS3C+Kcs1s<`OdO{yf>VUTCO*7YglktsxK_W`N{9&8HVtA=Oa~GUs2xGbQ!4STbYj%i1l-T>Pv}8V z4y@q)LfDqH`k234#2h)JS_+jFSt5PDjyr-RaC(+NpqYsPkDet&KpggC(Uh?Fvg4?TWSKY%mbF56 zrkYGII)z@b`JbZa^x&Zh7xh35%zdn>28ys`Wa$tAI?kC&xt=0s@U{N6YADI85c!1Fvg8fZP1ZubTuK z96ZtPAAiN$v%n;A)z{SvUQ;vW%q&vmZqp4KAmq}$Kcan0wH7}i76r|Cf}us@V|&1` zI_I8#P_3Y$fVpE;1ewo>C{_tG@mdzD(7owouOPiTXGqV|c_;kgh)BRvm2fa zR+2&2pfMKH$LOe;jALKUor@dW+r4#*nx9WqkqlpgV@h}rgk72+<6nX+y|=}<2^wPH?SrD<}lHw8|qPJ&pb85bDG1F z?#SpnB*v9iE7FQHY2XL3F4B()qRYJl5)_G3(kblaHRD<5-6VVad7B!nX(Fm>1|{+mEw^yug6qrOSes1i5fZX;Vs79oOu$FwvWp*s3-! z9L0-B9<n-k?xfE`01jSIc03s=TSB(acB7%5Gv0M13t-_j5@b z$^(UOT2-z=SZeB%@{-&)*AaC>fZBzYYpTX zkRzV^l3`GHuT^+Saxh}xCn)u?*eZO0;9{2YbE|1OxMML;ofr4B$iM0p>M^&|C{59* zj5hsT_T?r=Z^PQ~NNQLz2EXGE`4dVdoQ||9S!h2TP_yn*`yp*u79RGO# z1D(9f{zCf$QW^_@avN3s4&G&}*CW@=M@B)xz`y{Km6e_F#-pgg)dv&gY06a72ffpJ zoT7((hY)?s!H{1=FV|iH$nM_E8yqihZU%3VRM)m(G=jJIU;c=30a5}_EHrV4#ln^Q z^2grK@U1#FQo3Y-zsuiE@Y}5x$uRGH!kysQ*Z?wH#v(Vq$Ph;28aCniT?#Np%jmHV zls1nGat?tE0oa+9U?cdNkx!9k;FCq)FWX`{kX^D{YawyR9h-J)R~X>XuQ^=x$$+qs z^Wc6kOCE^0kKkraUiDNaB)Ld3nhD>v7*zS$Q!(4(Z?|Xr2_npM+yoKX8Ls|kS$dZS zeIPgnq~1zXeWK7XGQvSaLu1XzOy#btuUE#+xUM?YzzE_FXuIxxe&!rdK7wK}G2Y=# zM>XLsZqT%h6c_ONSADFh0rKI_F#A6-arzSOU*wY<9QdTnrdfM#gkN0TaIP&S@$8@7O*XL?b1=8@MO^yG-A#oqb zgF0X%#z_J|+_4GfYu`sISRdwfk;Z1Msiyy^>=IU@t%-> zmFUo6#9;-D#aHlu-1VI;YF_`J_-aeAjp!&p9tZ^b9}G6#lR5{0Z%6+pesTyCxO=Gn zH=p4Y$qRkbjP7+G_f!QfBg6!m)CE>5y@Ov+4c2pZHe}fnS&enE`N9hAZS=- za*5BswMNzQ0l0YZRW%)!`){bV7ivuzdGYM--wQoW1%z`3hKA1jbNoWW!VJsWvY8fvAUw!2CnN zo4XSXWCUD4Kw*1J-)MjtBoeBsssMD%-YBX!chnnWkBfX!&FvOJS@zi`aPdbm>gQ@?-l<&yvK%Ld&+dru{vG?oXsf^9DoEkg^zRH zoPnaE{}=@g4c^jXP@1ILbr`BpD+nurQ5IYax9@b89mTTBJ1?<>`jl$K#|IQ#QW6Tr znd;W#tg~MUWY1-FooPJdLCQ9{OQ05Gh}0CzM+AcFm(&1E+Nf*Cl<9XgE@^9f{PykM^7?wz(Gd%yq)*^&py_Mv>3o2G161nPHv4!x z^W(NeJG(T=C(*3;_x3;VQ3EUT!gvAWyZc6e($fjP1V9D)I_}%IZ)anal$1`JBUFS$ zM0sDolDH!H{d^guYaW}^emR=`NxboGB1Ey)DW;QW=oy!(hb_jdq?&YNZ5g`gA7$tV z0DG%uY70TLdHlQTvhLZuY?Ox3=dN3Q2U_zeqCRx@(82y)Cuem9+n-3xzbKgg?GuaI zIU_KL;Mai4N-iJ_Ga)Ajwv(ync5$X0(SLf1sjFuM><@dKV{E@%y1!=n(E=jY2R7qF zGQ@AK2m9D*2#|Ht4GU>dBa8FxENh=cJ}3&P$&1|>aa(_Si5g-` z3Ku7Pe*6V?Rmla2RbulsiHN85tmQuP+3NlL#*E}Ur{M7dK=2LA@MhR@Uzg;54;Sf< z(bp%Cl=qHNHc(ujVq+Xpu0?6S`t!Z3Zq+Act65tpA+3qwgL~;m+gBy8rI})E%KXRci*L4hDDIw^ zEwu;&8Cim=q~Wg=MuCmAqR8%JTh3fwuS~aGBR^-1amzEg#%Ib*3%zMH|D4xDWtM|d zUS3}9b93Z?RCxkbk`P`WnV#16sA%3W(#rT5v)|3bmz~O~Ni0eh6eoGF`(#*R?6>ZN zJLS9X1FDLS-VuUHax|_;v$8b~PmD-UPxp!_A&GpcHP*)r8D9##{$ff<@+-Gk3_IgT zLW8{->YA}30y`5%YS?o&!KWZ9I;NsDLJ*~kC#Y1<6V%^ET${WOXOYwy=w&JSthn1w z$eae`2M9(~AE>zr3c!oLg33A1Sw;tCp+*wQc6#!S!b2SFasiUC?Ytr^IbHn7P_1;M zR5R#jG`|-X#VjKP=bLnuRah483tN;qVXE~3jVsTvYQN^c_fklnky0wuOwV^;=ON^k zCEYrZHoFmGCRx`AU%ua!M9>%OaF|$DfvEVISh)J+bG95cZJ5ZLpFW_dSb^aAX~YY4 z4>-I6>C;udx^TXMG~GZc#W;6Mz>jHn{N-@ZgeL6VW?4sz}>bVMnV|b+5GEINeUXF@Okmb+3^)9dFhK zmmqhW!MA8Q5N4GWV3&rVhCO0FHP!rYHKf8TBUR$nXo|o6LKm7PJIO$zm&~c~f-h3it8?OEYAe6$J{+~_0MUdBQxZ)fzD5<`C@w|m8w^Wx)3@ZpQ?K?( zStF#Q-{XDubM5v`O4p3!c3gy2%Fx(mLNmHwzemBycUoX6x3^&qJD5yt8IGug|xOX4wz^WUv!EMU^W!ry*e?!Z{@EXy-N|%=g^o zY67`sw0K4{?oOsN)O&YsX$_u0^Y=wKtMepbT8K+EnB}RRqTR7La!xbGjY<gxnu>~w&8{{uH_GvbM$C&= zTqrXm_s(!6iMKRZ}Xli)krCPh^Axtvoa~%g2Rmj z{_H!FAjdv*Stk?`D?G$r#|3WK{&_F2dY%Fo8bR|DHh zz{TC!{+gsoh2Cj&mBlS?du7PN%DI)3a%f~V^FY{u=cpql+~xHdj+uEOY6@!w%$TIe~E}yf}Xp@#*^q22qpiY-h zIOYM|U>=OdNd*T2d-6TBR%j?;b_%Zv%;siA)2vO zLSB?U#85AdrKtK97xUn^q+p#3xq^C+{Bl8p?Y0@GV?bZDOT8Ulso!-p#j$a%qH*00 zQWHso=5EG>uUZ0g9`jeL**W}g0@woum7cbqxfFvE;@JVc~eFh)k?5@nbzR zVYZj^%a%?^hlf0YvTjVubA^zvj7SdHC=2Ga2lTgd7F(^JC<0$G6DAwM844)ftF+|Q zD66qo77aJ@D@GQgY#(xX@Sqe*Q?602x;w-Q>mAs-M&dAa$$J$4d-(e<$=emll^}8A zBd#r(1u5~;n*8OmL(KP;e1x87rcP}H=kopFuNShq);Oh#<}YOgn4UTYoiI(E#>WxS z2~MFfH^-Q4W&}^wJ4X+&=6RpyyYqiv2kCA#MYXf1<@$Ev_~Y7X@RqediLrr#7rLDr ztXxsmMjnINi9!o1v9>+4R)Fa+JDFpzFYu0kTMAv$xGm%BghUDxrPk^}O_;}wbE3lp zqnEdrgO~SElP{+7ZW9FG-k%eYeo&+>wMOjf|wKl@_+3>%Dxfug@+nMc!v=uRHTuieD?F-as;a z>l(p8OOgVFp-)XXD6FOL4R$ebQKa8r^N8g~Y2Ffnpm86ZiCFgcWv%>Bc}#CtEG=;3 zC>|euql!Rd6=tzHkUumh(PLZ1vw4eLGivX|UPpD#t7rXvCRbY(E-p$~{hefag(|W* zQ6PC*QXHfij%ZWD@|elL?yyJxnZDLkycyZezhx*E0YBVF9Gek?Ikpu$r%0P@dEohDfoq@PRL*(bKq zg<{;bV~3FXd}dl9OxY#^tbziP19L(6i$X+c@tfABfa*|H^Q)cqi%^=tkj9ejXR>-# z5WJ$8mDSXMr_<-wEF^wkY7qy2Ok(x7v8_|f=m@6mw0KncHsQ2glpQ%9;DKUAXJ4v; zm$xQ2lb|Zs$j;6tR;UB?|cazc8t2a z&7Of(?WK|+PkA)MY%MT?wBiz0OEJ~sq~ww%f!GaHgdu7894enS({dX`?&khI>T1qZ zp2Hhb@Ud!bBuey@1^rzi3evnGUgpp6$ODmNU^c?VWRR0ngrZ9)pMp78y3#*$nYZlU z4U7*D**&!0`qMk`oK>2Ll1lQHv?db&u+W${zJC5G9SeXwUp!Y)>0DmUEe=u(fb;+1 z+$w3pPJ6X!;^2a*`6k<%GPC+y3W1gvy11K+Y8W!9} zEoeQ%2unMh=dl{3!5pK|E1Mh2OUA~O#b;5_dA zQDcRVhZoS-_k6p+b|8&*9O?#eoga!`m*r{Un&tD7;SR-huC`EP?R72_Bm_4!OM~5K zI#XIduHL;D1C?Dncj5naI!=PZXHt33r z3$d^E41;`EGmQ$v(Tvw%ye=qdiE91@ShgXKse(o*m;g-`Uso)+(3|sD8GXQEzpPI( znrioD+@S=B!0x>m%eDe;_QFw}FlZIjS`n-u9D1KA$Jjv8zLUwsK_!bvnG*f9WV?@( zMcVxaFLcAQTF5vi&Y${sV8+|Nf%inba_d+3#*W~b>f%->(B*MJ$FiDr&;v%^Hc3%@RtB!)$8woRg=(+*UE1>_%j920zj_q^kqlgAKKV$o}Xl z#aWcZYoiKT9kS zJE;kT*b#BhJKhgX+{K$&RG^f1uYlblJ#|SU4Nf~q&myYH^hMXSO;MC@%ykVi5MHl% zz8vZzc1|p^#GTPaHlMA28L=QWa)l{+;h+4pgp_A>PPlMJ9^R}Jwt*ZLpC}agqMBh6 zr0)zU*wpgBeYUgui@V8)q$wW>` z7x{1H+*1FCEst@?>FAJ9i~BHgY5~AGi)5gjN;&`!6-<`cqy~FE z4D?q~Vb^{0qjN-nlx{qvc#8}%Yb!Wsw}$8cg63LM6vOPeZ5rECHxf4^CR-fI^ku>V zBqYz9=h0w1=UHwIJ?;Janz!J%1205xH$IMop!1p~AHA$;!o3iI zmMms^e5Eu)Prh!JoQ?zXL9pVJ<8(uR@wVI!U2C)zYb61+)BY#RxH> zin+scxK@$IK3`sL!f?I2>W*3cCZ?F;yNT8(n8zm?hT#k^!UHreU;SCVA03PRG%$P{ z7VGTxEw)@E9jQ;GGLG(#F$g9#b>|~TScOx&B^k?sszvz6u)vb~RICUYrTfnb_ASu#{sZ zFeACk$moeCy%`!3+aR$(n7lnxA}3&qX4kH6YN5Z+i}1H*jWB3ot(b|tX*=mYcT?Z! zI$zBhYyIS)(i1k90E91iulYFF%!>U5<49eS?EZ9`~< z4c022X3<-J zJdoFMCo09<8Ix!Uc*A6Y+Je#5@O^rW#fp1Q8+MZHRnR4_psmC^*F#*Ld%dG3PjO-T z!Y6%{r1jgI^nVrFl^#$LY?ce+eS5zpn;)VL4>r{bolenWd97z{v~8t`d}l{qyw1}{ zOj6LbvrZ&TSPM_I4!e8w&k3^&18$E0ccut<>9GI9Q#}ICw*NEQjO(F&`oDN8K)eG! zr3qOEO~pFB{SDE7xFXi+^~2}%UY=%`BNKb8!}PP#<%d`6YP{_Lyy|J{hN*gsOD#06+IXq)u<%ik<$2`;d5|ue)9LLLeL~dG?KURbh6|>T7Hadin&)6xf&F ztkD(Ld8-kOfA_paq=))Vku03^6e1xJ3nb@WUS2LwmAtwH!WRJLbT|+zuq|z$5$=h5 zEj0p#enA$dt2i2~>%y+=?c09SQ|kin8j(RSZ=zWfM+b}fkrRthhxhHu4}K;u%Njxa zg^Be4UIZW^oY6p>4Gcu`odQw4$Urs*5NO=d-Hj3(8~YGC(%LEx@Dc^@!hv9G7D9}Y z$wQnEsHXYgHyyD~!j4EfapvakoKV{^a&Sx&E_?wPAl0Rrp5-q6Tn#tVYAPO>J@{8d z!TI;Q06?izDZ!7?vaeqg&d<-A*xF)9N=gC&34kj?g$GAXO>H6w-joFR_Kl6XGGdo@ zq$9rU?%GY5e2YJu+qmgE9RO>J8rvwbJ+1xSa&k6jDI8J$#hCMA8VEYDEUSn~JVi(m zGKkKiSBMlkwI%@5He$%YY-d@!+jW&^>rC+#-u~jo+UHq3>M1u9Qe7(>{bms1&B(Dz zQZU=sd;S^6YR%Z5^Yz&r&i_PgJAdyoU^InGV=};XT7~^(5$O4h`8)x;+y^92-T2+@j)4*F4WssL05= zFQ>#Tb@()FSjG&4wBhYLs~nb36}XuP-n}Wp;#n7|J%dfM#XcHqob)NTQp9%*?q}rG3*nU^b7N93%svob zD9jg?`>U#sLZR{~Oy{!mD&@9hgRZ9Y6Rm_7O7mq2)y}HJ5q9f#8d3KxV^ZMBVy$wi zdPq!3_3(}AlM4qI4<&=j5IvRF>2MM4Y96kG!G;E7)3*c!uSh?p_vWjjq(Gizsr}V; z4ebU#pexa^;?mOVNLVhK+{^`#HvIVQix=1c(Cl=)+Fkh&&EKEK2TYft4jtFZ4EK%I zaoXRqn!VXpob~*L740xD|8ANxl%#g70?YKvI^BV9#_~>H>+DSj+U2iFL!m-f>=AsF zzWvu`(s_XjywR{8)q?pWg$6jot@v9fAWLX(u?DRfm%3NJ*$LSKJMX>nGo%$F4mCbF z&oQ%uk!XbLjRd0iqd(gYU-0gNGT}vW6|IC<+A)r7h>DsXZh^cuVR$LB z1*#0x1E%N|Vlj#uhi)H_R^6=OR@;sG8@M;bq$B9uR7>fMsk`6mpiao{JKb$<3LRCG zPKME}_BEDOwPwfGhN47sMM$87xPKFY#-lcDn6$N-AwQF%=1FyQKT1Y|X#4`=B(F(* zaVSHsh83TeX5x>^avm%Y7KRPRlekm(lf(dk6EXpVC@Fa_eMvsa-9x5^_&;l(_w?W1 z9*{Khv)3uDx3;ttP^AGzCOksIV8ATDoyYX_sfsuL#>U3WXUKpB`~(O|Kf}h2Y}3?{ zYU2wZ`GWTR=xb1R2fx8&GY)~-t68BYhGhp-7yUwR0ZCZ(_osbr7T^zqK0=<~Np*^| zI>@$+#Uci0T9(N*gEBkFR4d(bx&H{X0A1^+3tXAaeEbUX51p3-WLs1}nUFkXDeDGg z9DWKFl3YV()1!4AMM;gvf;xy~xg}JDyyxX!D-i62ra`zDLw_6K=ZccGA7xqV_ma+F zoyqwr=6N1dx(%)3B`pM1WS~b!6Vjd56U@5}1;d^zSk5qpTA_^@Q-_)3zS5=0Y;PZ< zWS&ulmiSV6d>6z|9uGfJLeVyESYjV$3%{uq3csK0ecrkTwlnlI_~!Cr{waa3-cN)e zJ=u1h>{bTeMF~4e_jtWivkP^RIz_~dITphmFJw$SBI>%rsl_lju%27>^BJ^(9p^DZ zDjfrapZYVR2Yq}g$MkhqBYI5%X7*%ggI7N(b0~?^-Kxa@L)uqHMYXCT~t?)Yy#=eO4T{ap*b?b&-j&%K|!@9WBJ zH^yAZX!&JB-1kdWui$e4P0mTA6K#7NunDpOZ5SJ7(S1(K4~3>@!KT{^<5|rnydF*8MR0@o7G;K4Bl)OA>-^8DNNs9Xjjzr3-g94)Y+`4dNMN`8ozxR z_Uk$OexfOHbJ1|mH1z_X3pMsr$n#gVd2;Cd11LjWcKV)ZL^*D%M3DFNAGfWCOz|F@ zR%*-#6b}%-y?@U&InD8FY{#FVo9g8k@|WG7p>M-W+pv&KpBp@T_-LTF6_scru~aAJFL@Jr_XZb8m&StFbaoo9=DElEoZ zOngN8vZ{)&=}hqXxL~f+(3OFj47vjK5_T}e8tSn3@5p5}9Fi$k{yboxox*zv9pHXM#7O_p4mLl_Jj@p3+ALbpfgE=~DS>n~-Xevf!} zN{hXG6`AMjyk8Q7strrgdQmXHxSahOJz3p8`s#Nq^E8~{2sOFHx7BHIA=uv@T|K)w zyYXuxN|CVH-SLHx7u|uFg)G#mmiw1&5Nx*(*UYt1=C%h9&qW*5kcAXcsG5nb29S-a zod=lOUh$W}$<~%X5^aBZ3BYY{{*q=;YN5rhMANmX0r+wggR}#P!;Xn3K43?j2oBXy z6U{bvCoj-ls9!EwZ5r~lUs%7$S?E29&ZzFdRg{&ZYvJ>BnrlhsdUAc{TS@a;$2;ZG z7i?wSrV9uV_*;2xN?vp-PVh3iGUO<_q_ngP82KL+zKd#F30Tlhq7xKc+$kJ`U9ba) zF5;N(6K536`pw3S@cES$k=?G+9Lk49Te;%**PIzfO{RCuR(_}ZrL8>QzKIPaL?5qK zvQtkzyUv>Hi8ne}?QPJGPxswbw^$-0{n1Vz*{c`UT)9Hijl2|d<>@m70PvAZ>)FtV9}t8yORdkSRy zauMhq>B&eO|JKV=m6*xsxOi#TzlV>Pc{NDcei6jZ)jx^*LJaGL*tODY1hyo6sOTp* zg87#_S;ZCQ)GQHKo-|n0X$7Kvea7q+(HA2 zU{9{gfre1C9vW*e=L$h5^2IM+Ch_ zdswp?@pu}ad5FQr?}-YC=&XzVx1f((hkh9x_?4~?mQ_;FY|nPI8B%vSs8B1A z9W7+Y#DcuhY1`w?Gen4}xh+EO{I-^+KH7V#G92}WUeQ0No<}(b(#V`qRI-MeliSCA=u`~LE77{H*ohEK9%XuORbcC8^R;)BCPP7Sc&&0S^ zg!8na_mM3@L*sqr2G^vKv0g45^ue1Y8M767L&>;dys&I(o5_C+5Zcchl0RZ?_s&V3 z@tN$$IGRwm;F?LK#weqisP@x~41_H}68%p0xei*0<+SA(M%pF%hXg%h^P`rZ;_-EX zMKKk#4}KlW;Hf=26UszmrpkA2%Tnj-q3i)=&F@-&pc?M9_LEe3iRYYZal(})uE?=%WznWOG;1Hhshyk`y zMd7cDom{{)h9$`A8xSDgKtvCwkxVH)9udtw!h?WAfc0YSP7JMA-B24LcN|k(Ic8eu zl@ByHn~{Ws#9pwi#T6!ekTy2dx~I5}$Ef{ty)Tjvn1AHs|Fg^CmIU~Sz)v#TG|otAd>Sv6|Rv$=u-ngoKaDA)~Uxj!5WKXXIQu{0k<7lYLv zwSQ_45sgyJV=jxKzMsHrgkFbB?K3;wT5{IVwY+(Qr=qVZXCXmkzvP+3<~uJh)V6u@D>D##6&5$4REth@|vQ(p2lHx1`X#iY@J=DP{_g?2an?|NNNUr?awInPq z0Z*znhlG~r!0Kw+wwd~k>b#bmcLWc!KvV7R3RB;I=ck?G&-nr7BI2P?B>+G++AyqX z*=Oi&#~-Y9fG#OI?Dk}U?CkLlPIM=?<4=7KQs5ug$c;HemSowK#?V~xGIb;Qg znswbvmDkP=iwR)f*QS@kKjjxPCeGSs%(a-m%Yo|uD%U~P=Cs0)->&L%slu7*DJ$9A zEAlJ|(YGLnLUl(T(Ul3qS^dhJsxRS5K~75VXlRuSHM{{49_}SErgx_H!Heo~^Cutj4en@lsvFZ~-D$VLz*PbyiH~ zT~>8EoQ}Brp8QTah_{H_9zLOEpWb`+Y@d1C>A1WJ3ukv3vFDsF_`c@)#Z@yh?dlQc zcRo&m2hHl~R^F}_2iRkjEo2GjcL^(t8h=MFWHcII@DL>iecYA^Wkva`@`T>~5m|K5 z*w&u+Yj7=)Z|Og#7J{3=m)nU2y~bt*Oz$oa`+I;|U?B(ud5grAt+z#HT-_9Y|4GY% zbZ*GdLY#4?%IYk}KNGyIEL*vJZ5J~Bh@|^1_@vb*o>H%Twt4ysI-bC+?+&}tJHE|^ zJ%hwBjXA~N`2AP`BLqfQpW@|p+0didT{<&5pwHQ#3pxpVWQ}dQd}H|VUhe#7-w~D` zkG=V!E<-tEtV{2Fc`==@#s2H|)Qdp2-Uz zb}(5T4+*t?Yg^okfU9nPyXxnJkKDg7sET+zzzp6fQ;@Y-5CV{e+|(s;wtTY9^myv5 zvk>w28*BGJlf*pkn*Y8UFMa$jEu*)?Ui{j5i=GtYu@{#@a#WH-@d0SC;H4Jx?0A{+P^eSNJF*q*EJ$gmA^ z$)_uR{Jx07*Qbp_HM5CvMVLwA`>gU0L|1cPDNvq4(7^f1GgAza=9fF)>$7H=(SaX8Ee}-IQ_3KTFHevPdZ^YvO6@ zSz`yZ1XQKO0r?t85pbzUj8B{@})kIiwX;JUR2$S7ji!?2Q^6o~_CwMDlfW z0PK3UYIv!mQ{z2J!%Z+hyd90q>vc@i^icQy(|)1WOki8)p#5=mNB_mSvj3BEeFC_u z=8~1Z;A5wtUGd-*TbvO=bn#}Odau`G#3iu^oNqC;S3+0`9?xrAwYo zrHYS7eGg)thUp*dMB|VkyHQ7SN}E>4HNtC z15=~^$mutd_+OVn468#P_>~k|$X_XbAs0ks!%}P<@nA2-%q!`a%1^~nHzNF=H`ZBO8xJJSpF>ID;E|x6F?oxXEf+aPba*+y$yKt zze~K>fY(UEpAg+)KbQD5IJgGn_=)-5UIJ(d`G#OEaV%2joV)z1W***O#!uv)@Mu;S zqjrf6E5tvs0#-IMutM*5=po!F_V)JDkAH$Z0uIY+Pq-lfII;_eKdA_&I!4(LEeV?u zid-77-tcdPbp%RJUHI-;Gv&X3mmKorMeVorPY0c&;cXOu_reb~JSY`{YC-O{92fVR zUqE0G0_k2}&IX*WQ>XyE+Id5|t-U=Oyo-Ee=EZA-IYo+j&U3Ql#+hbqyIbIEoZ6Z% zUH-(B*Lgx_T2hsOp~g|cWN?lV{V2L}8(Wgn7!(@+kKh%2?bk$){t1+(&LZSp8Z+fz z&DZq#k32sjiC+mSq#|bp?oU@7%r`{ZFErLz4B=sr2}c3wHvmdJYef?8Q8a|=F&?p2Zfy}%WDMdk z|M)TRGoe`@^Y1pANaE7qe~lv(`5)sL5;WE?Ry^6?H8V5g#d`ZJOVE3wB$XRot5TnB zTbx+PCozM^5gQlR;)S24ACY+A12AuQ=Cx?bG9j`^vgRD-i|323h`oBT@+m}lj-+@wAMFrDP z3X9cR_t$=e2}~KS%7TKBot;nl!x#HAbzUc?+>Xn3nKQ1`Zhbj1KH-?sZ(C-R9et4v zbPY)An;ORK*iE>(CMTAqJXf%S{SD6RGp1^22#GRSxthkOxkR6qRHUQjqmsCMs#3C{ zn!4&>nxx87xuo$t$PU^1vcG%9xEK<+b;r)3uq;2T@e)sAPxlrvLx1}L`IfqM=wl$} z(qY#5IU1`MTsR+uPPW63c{MpRCugOH?=L|Kvdc%B`~e}O%gWF( zotio`pfRLiAD>+!)^U9@nfgf;k4}-43tOlYH7KO~mU;e8{RWiVaX%{EwDz9T^P;`9 zk+qE5+J2`0G;~J$17s^_o%aCf$_zZzb|(NcCxLA$t$O0ynM+T%D~0R`8_T!C^#6QOtWJB zuxZ6|xy@U@!;heD?jFDukVFi(cjL6ghHZZM9!c~pD0>lX6MO+BA)a-8p$9V-kN@yX z9_`)wrSs*{>@T08=mUP|v@#&N&^Uj)ao^zGEb?1iOYyn$vKDWX8Hd2Mqea=4H8c~G zoH73kxXXhdEI%0gsuxxuB$nOO>^+%WA<$Ukuz`1(1^zQyPM{$KkvwNe_^51Q`DSgV zJv@r;$FJYYSJkhgWHk5`=L&A`R(+YiCqk6ciyo4Vh!8Y1J)gC_PHC>bM-aY_>|84j zyn+v>cA^Z`buAF;GoHfFvRBdq7)qVTgGxPXV zp1kOX0peURTExQr*#Lj|lWpcGRx&j#}K=1f}Rx%Q`BhoLAr=a!&(X#&C>)1R4&n$0*`m~e9# zWD8PWZZUajFbfXB(U}b{g^_xO6?0(qK*CEK58wab?IH>5X`QX}K;PG@>aw{rg!12F zr7tNM6oZC>g)LM+Xe=PET6q${A{%G3Tz?*^Vs(`!{bty3_iWq#t1<7d|LX8=(VY)F zhDbu3a-*Kwb(Ya=S8KNy`#{EkNFoD>j#>Z|tnssIlO7~9VPGQW2b@<`xN&eFf3p86>Dh8%#;BIIiSsof{%H2*@UjMD>Vq)6^9J4~;3|Ap zUTLAGo1e5~+IxaaaUIy|ucyOf@TF`2rwfhX!i@EnzQW}nZcv{DWxRecG<*_c77 zj7#=v9?M&Vx z^M?$tv<==lc0$8AR#qb~ka?ZBqMP&ZhTFN+aTU0+tP4`XyL*hqG>`1e1B}|2YmCA^ z4+hJ=XYRt+s|I)#^ZmlDpL!(g(Hh4l-bBEyEsBj_y6cYLlf*O^S#M~wPBP8 z{{94EG2RmXMKVgDr+QDW7@i_0?N5NnC%ibFP=bySC#f3DZiFkg$XA`X zWCW;_*E|PHlqeW&!B0%KO7O+-K2UyUYnCXe6d2zmUyLm`z8JNtHC}s%F&Fk4TTeks z0(mL_ih!W1DU1jaIN|I!E>ZjtPYYRQ zG<76{{cJ7cb?Hv|$AUZ^2~LloBBhwkfT71&?d2$tVzxh+GcEe*JQ75!qV+Lpt9MQ( za<*%G^&8V~ips{q zEp&u4<;6y$Bc*`m`weHhkkxf1{!khVKc|%OAUl^HXw6eYi}tWkgoGQqlmY$s&a&sX zAnk7EL(7G7L}HJZG}=N}QEo;+Cb`Cl=w*`^cG>BBrFKZ1vatD7p2TeE)b|CCoS^5HWkOJ#UAT(1O;&dUC3~ zX25%sOWU*yp1_`!$4BMsNs(L1$Nj(?iN}5A$IqSD#WP<1eJC-lFA}oXBH*PJ<##YC z;?_6?b$5|0Pv5sY!&FP~=fzr%rUOX6g02uc`yq;LJvJ-}&>?-vFt{&G2X)TgVkml+ z@S8vw!9hhX-wX=OKj*AfpcB^-B>tKF6+{!_~-Tx|DZdn;7 ze04`(s@(qdFg?r8&>iFMv%;xQ=uY6ZXHftFiFq?q1X@*{owor&mb=n5F3F*c7UbnAEYKYn$u(2M=5Rh==}Xwc%)T|Rvv z0`=>dW)g$`H2F$itLb>{*YJdePR=!BH~h|+_?jia)s0hYgki`L)3HxmeazwICc zWFjWz&F5=jWQ5XUn0gbKDj6a3^SXjULebINhQ5bf-1hV4jEA5q9zj7t!+6VX(Z$VS z+Q_-4K|C0*d!WJ9TVm^?Lhj7Zb$7EDx4KGvg;*=R;_zSOSD~oCBAR>C`u67SR9= z=J^)nbdg$!e_?hpS)%dKn_bJ+ksjoD8-6irOAan$vs&7|6h;-kCqvb4IOD_@YIx+OVZ2w1RL;6v@?cy9y@XAx?)5`VM2R&#=lM0A*L#VxW-1Tkv_%gdq zLZ!3EjS_c7{f4eKDRuB3UsUm14lD$;CaUk-&dG{Z_EtkkT3;X|slVq`EdDw2X!?j3 zfPVFml#3UINRLgtCBN1eaD@*-G{+4X=G6ZqaC0?8cDdotRfg727Afd7jsH zBRb_IwNXhW;Ls$LA2UG7DX39Ec&t@pM|O{c6vE={ipx zR8SP)L)KdSP8vM<>r`Y2I-^;8g6gZ!L0AI5`+P@<017}XXwKX?NKeXiMWHRPmu<&1 z6T<2zemTR74XJ$}-rBpIhN@k+j>e-(_Q|1|D^29kr%8w4d=(eOn~&aWqqL}slxNZ{x=Dnz z{`-sjfxa{8Od__+ey!}4$Y3@B$F=F)>zGAZa?P~Qd-F)?3L~6l{2rITC-jN((0Vne zABI$wS}n1v&?HmXu@HbNBhtLHAwjso{?t&4j=Z-FQ%jeJzK%djJ2JELAWQ7#qAIBN zKEh)W5~@RXY6}!D0)a%CD>8s@AHpI2qb4vFKo^Mqj_DDL# zoqL(7Q=M3WXXO-5|E{$%BSzRlJj(Ff?#BU{)}3-?_H9<;1>-?z4^J~*ro5p})=B0_ z#i1Med6~#>>~A=grgdHz8F=vSdAhI1nf#z3*Z1FCx2D&EwVCSs*?6-Krd3~^4bZBL zu0%%rK96uORNrhh?YuQ(ggLJLFk|l`09DAJz5j6BeYolD!P3+Z6^a?Il(r%4MsscO z3}VNc`Cke4<$rROP640=>dzNnE|vYDRoTD6`ok_BiN^#ao=5?ZkskHobgoFC^>X&@ zQDSy>*KxI>2n-P8L)Y_5ZNpW~VJZZb3bfwRcDttw`tpV#uUUlLFPlyRN+UWwP-=*1 z!IbLaw4_;(ND%EzwMCbpu%9EJ5o3e-) zjV3?vBe}p~56VzUu|~tbT8gv3Q*5ihyLwUUnni0u){th+d0m5c$=yQYB~jIy^Tx~m z;cwzIbgj9p;@29<78K=mIIV(xlrrX;m9~u9W1{h7c>RPEzaQuh_gD@qLPUw@y0g6n z`1Z;F&B%tx{87I3Na8H9AX>ISoDKkAlFG-WAsacDEHnG;$5k*uu^2v%nyY13TV2h1 z8SCWXp@~#7%u2#Kydz7w4SLxYo4J{Kt^?pxJvlc6NfB@D7<^ulxt|5=oP*?_8}ZiEVO~<YYW^cOh&EJ&Lku^TrL-GX|v*iaG z>nsm_lB*Ve_O}bn1?-UD@f;0of2I_>srY@l?|g4&&xYHcxi93SSZEH;+FXZjX*u@*hT*DctVrhYrR0^^>d$wkxyx(Tc}x*bS2P)K97!Aqn8jvAvujyZwD`^8kIw2U z9NKf1aEEu8^dRbC>Z|ivRJ5O?UySJ|OD|qXWY+5TrjOjsTHr{2{J_Kn5fyxZZ$G<| zx!Z*^=Dk;$8uAfoO{wDI_NuF{H(eQIXr|))I4>yasD)6`_by~faBxjgvs`0$xO5f&Nf(%hV-9~mRoi}vBn%b)J8j zcV0>e*>k2?#bpr7DcA`*6ZE~&;+y~yvibHd5B+Aj0h26$)UjQS|{c+~;5qT$B8^qy^PkI*DevajHKoRL%(JLW^b6N9^mM8zJd z#$y}1&2ND*wvz0W@^$*Z#Uyc{xN_dU=e06A3XcmaDJ$~@$`aCAsv@%XE&%JKHrTC{ zEz=snD(w&ceMVK!FtJOT`{n%32j5&s#Vcg|Zttx31o^6^>bdF0V#)0iFPo*{(Y|2+ z=KAZ4R;4oK=p-(Fzt~m@2{d#J!XXF-`tIN_Fj_lDJvS=-N6lx~`RrU~GlX0ab!(bE zHp8$rU(aaVA|&^gJ<_Pbkv&+o;q%7M^oe?>FC-+*4pswF)OrGX2X-u_D_PBJZ^ir? z*=2$uk|p4!Rsr++p6{T^YIfl(+Tp}k<+PP&)kpmeq0uQOlGfUoL>xz+2Zr$25_WZ> zsHGw8tY{A+f>!9*lHu*$e$w0r^68$mg%oC&U6Y4{#7g79uACnw;*f>AovB06UT&4U zV;d=0_%`5z_*>ZMPgVnv;VohC#vywFt>3=YrvlaqA=Zh~({pEc(}U*jPctX?5_^Oo zw1>?8(|tc_iVZ`WQ<2BE|EJh?YZw_B8O?HT^a?ONGh;nz0OtXp?x~TFu*J!6nqSHJZmb1NhttM?ho?sSYa7M zZV}K{P`c(isL-sr&5u>ja(l33Kl3lV65dGgymYztdwJ4eU;kc$k}~A)t9TLoDW&;W zQBzaDKtk#e1nQ83r@t@S-)0${cWE+ zPk_(*?pkc85wnFvA59ga^~b9mzXFA^?rJ~f26?GynfzN<#0r7q{JF0OE{#38VTeEZ z-(><#Nnw(}S6&}<4dsrXf>Ft$d!%Db@qV)oZQc)I~0B1vVWVj?n zoGcY~gd|JG`LgLeBe6(;K3Xp?*q{RkA(zLyuAzbY{rg`#ml3hCfuM8mf3Ky8+mVVt z@&*8qy2r=k+I_DGu@O#42wrAsWrP9f|AZn{`Yr5IJ~N*xp+4^SQ7o2l^BhUtWm3`ftU`2}j;z+kfhrz>wxtxZ}q9dQ_pph-F<( z*U9m5HSkCqa!&9&fLT^fQIQK`iIDcwY9nVHZ-@m*y`JPNMd6nw^@9H!+lf~8U+OfnhfmV!0!Bm zerJFI)vab>Cl`>Q%|I4%Q@Z-R>ma*iMgxcvSl>D4u9w(AsSi~&X-C0^zR+G#U0p(M z?mM#$eS6YgQ9lV9w2&j6F(GsSfIZYC^}E9kQ2y-^-8sAU@j**Fsu>e{-PP6AKRv6A z;g21Wt>rVD$&Kyd;n55RV*?#-=gGT)FKG%yM7-@zTXthaB57d$^YDZV#j3(H#m%hB zC>Dk*oywbfcG`XG-J;1&L8GE7wdKv6(Xw60O>ON(OL10UGQZ+x4)bAe4GROz8kViO zZSFsH!!lX7`9R}-SL;H1>aUZI;;+FsNs=>Gmnfn$njS#0G^6-rF=5>?c=6}P*+s=$ z8Do=>Ox{Ne?@k5fA)cFS9;Q1ve;vM+X)c;`iz}|1#e_}~rj?oTNr>0HdybS*@}o{A zPuBU(?u4I)a0Tt8pw4tcPEH~zAT?4KSJzSyh~3ms$ZvOm^GWQi{cSkPB&!Y%l6dh{ zJJ#*HH@Nsj4$OZtoj9d*bOmkC*^m0h&S6q3Ip<^@RaI5vL%4W&mgU($M#>EN6rM7# z{ZC z7{z4aBA8%eN(xcWu{&B>C)G?lCIIbfN)EWsxg%X6CaE9~vwXgUY)lnBc?*j|XM=~& zZiTO2{YJ<*C(ogIV9mJ~+?wr$-%^il;q8s`kK_ZBzutI?`nD8~HS~@Ow|=?cFux7M zes$IWW%|Q}iwyOCwOGZr-hL~8zk~aPoBC`Izx7440n*07d=XNAOw7O>_3257|NP0I zPx4v9q{82=2KF5%T{a&bbmTs^6l-m5-G5gK+x$=8`6r!^`H{5l&1zP)ottrDrjw0{ z){ie6%GgUG4Zd6U;@4lRjgGF#+y`(d_0nX5L8u~SNZfdhE&y;{85}PCr5{ZG9YO-i=?pjFskDs{(t_`6=Hs9WRMw5F^{I>U@-h3N%+d3DLCvo8bg|8p2q zcr`y(*mUYLVfF?;Ufn#eqcjaqqmub_qC(i_i)Fvxy6g}1=lFbfmqkmO_WOBJM4H(MQ25Z?PP8VRQVE*9Z6KHf{8FsT!lx@{L;+OcmW-qm&BS*X6F4t4(4;w#=?*`FD6JckF!utGJ;5@mVZo zOLZuHf(=X76~oZuV?irwgZCJN$L|CID)He9X3ZK87%OlDzCtzo(sHq9I z6b#w^w`co%1HUkh$@>+0Q-gld2wW0!Go+YtS>ebqBd@2ZD9KrHae*)z+%GuOb*-&6 zyh$$&cb20DXw5x6lrq(x`RQTsq42cWS@%uHdYbO%D4N=*yhdwkN@pwk(NdEeN2A6u zQbAwBxtCYqE0@g(H!%>PG1wnGOZaV*S4bb-%_;yb+Ydb67H0Muz)~xMmwrB7lx2^n zjQGGzQ&=5cw0&9QQnWa_NlHZWGUcPeURQ%Ng7c;+tC%;sdOB@!hJMP4nKa*gK_UY} zUR1)NSYu~Le16Io6lR+uNcmA`!&f|497T{KA(0}aqyfaOZnB~?;V!U`4A2~{fdWjRN!()u`N zv6Eu>Z`A4K5kQWRi(s{+_X9nIlDkZ^#=VOf$~*AdVES9BKjX3Ao45P9{4@&D=$z9G zYU3Z34g9leE-N(+f?s_ep;xqRe-)A-i_y5&`-PhE?#2c~pbuMpR?>0^ z-n=nyUU&NypA;w($uzL!q*y^!HD6H4Camxw$;@WLzTm9PcYH=8^w;l_d9(Fp+axyu zF6;c<{UW$tL#_>F0;z66wtIejwoz`5d~^W!1&AryDnEL-pz$_+f<_E8Vv-1bx!Jjg z^&c>@Sf`PX%Xu#;#cgr+!jF|M+M)mYR=*tI`>`Oc4~jY{SnBHbqxS-7r5iuwVh3p) z6}!A#9pp=0eo?J1D|y7Nn?Wk17g*cgVXL177Cl-bqNAA_FEMy;q;Zl|WL0!%bey5Q zBzgl7qo>f7hr^8F8s6b$Te0ij&5s{5B?3M$IzO)U(wfI<>BxC&JmW)&3t94@{W*#2 zIU~TkfZ}Cb_z;a!Vc3kJ%4WF!TqZG9;Valp@|iy;rfb6n#9NA$k`kCe6@ssL1%6J$Dv{ zRcAMScCQNjdD>TZy_E3;4ZKx;ig-Ft=v-Z~gj)_tIo{_9Itg{6L>fJk1U`{H=G=!p z4Fs+}Jp?|`1>VF^mnkj3dq05=k3{Be{`rkk#=%(zG47;PxS4d}TVH2KSNGNOW_uIt zxPQTy*M%~*y8JD+xCVKfJt@c2uH#MJ%ALgH=+nL0;}%@AZYzqX<3=MfUGGzXml5O* z7d~CxM%Up+nfCovr^Qh^sX^?=B8}g5A%- zpUCdXIy}0z5r^j59m&G%F-%SdGuj?IA7lcaMDArCH=Zs#&x{@)TrKUJ zV4<-B9X!g;9u>I0JefUgjIqOeK7A+N@R7mn=zEue)$|9;W^4T=k;wJhUv~5Jox>? zonOrcF|9tuOC<$rhJB1|SW}Jt_A8IWwr}!&&s8Fr7iaS;ue6?eeRH&H9G(=39g%Ue z2$j5!xhfCle^qWJ+lkl>lt#`p2Ry#G^ktm$+~bEK)X6bhvxe^M3_>b=gvD$T6wz-s zsc)PH97J02{h?nlh1Vi+iTFwsVzf+gr5b#GeH50mu52dOg>Lhm>6mz@OIQ&*SBs4F znE?$pjZt4CW1Ij4&zdc%H=D6UFY}Sb(+Z5HVTGb#8U6u15y^&G(MvZ3D;Qak! z&D(}UPguV3-RpZ?J|Xl9%p*VQJk~0gBj_Cu zWD#mzVM;&`tsR=}gb=pRV{pJz5rc&7DV5FtnxKtx$c9Dh=@G`u(ImHgZ$Efk`zw^7TD=Zh;{;I6Nt>LX=zRWj#)FPiMWGga# z^jb2h_ce}3MBPww-L@y5b}Ka)&?E)N<(L=eJHKo_ z-6NrL8}?0ie*bd%YOgFY$Z2_Wnnz@_E{CQ6v|0#O$+u?eII`s*sogY^ZjYajB43u* zVcjkIX;&lRcY7KG-3ZD6Y>^bB>NcFZZe{H(X<^R2i!5iB*aa0^_E@AZZdAnhq@0Pk zJxNwl2|Wqd`wexo>;88{yc{OuGdZnHj#q=j9vkye4S-Z)H9U)_WA_9i%IoC3;lmx! zoQ4B6Ljp|LR55p|fK_Ad;Rf!(EG%5jl(44M)2VK`dpuPsG&&?td<8RF9JO>HqJ2LJAbpKQ`MD_(fQ9C*pHC+Lsez)Zi{q(RwPgh3n3s~`M z9Iw#eoVKomrsP_eCXPyzw8ZWHI3llPSKH*Xp(j`BI|pfO9s4}6j`Fvhb5cKa#nhKV zI=Y?JfB0nQ=hOFRs)z&>_M>0Ya(j8F|F6|ukW8d4D7>TlW-C(XuIp7JX-hxu$|njl zY`O4JDu$*gdNuS0bT&zEUDwq~sq(D$SPs%ss*=x*rSCG<-ylP)^q_mOO)iUUsbg&~ z@_IDV7&L2-(B+kukeB3S~{4gng zQa1-ZiH_uRV)`ynS}KXCzxt~SzUR^boCD@i+@)@M{7h&6s12!kl%*e2K-3l!_NIum9 zfo~bE-SzA@Gp*++kQiF_b9R_|nr%bSM@veOIGi#U$V>$_vqlH;HbUIkQ^$6FD z#GsM_;ZfAU1x3G;`PTc(VzL_JENUVT2djlkk^^C-Ua(}imPyN+l4XZX55>*YP-`H#p;@yb!RHC$itVR*M+z&%q&-0{GVLS55UWA4PR!5Q09<3UImXS4B5?bQE z9q@LOTsoP+#4-3^tY&9^DClI8u^KTu+soHKmZj+^5Atz+y@lxMB+&SEEAamR8vDwq zsMfIUqeu$UCEYM|m-Nux4H83l%21NhJ#VDSpy}Vw#sIa1X+A5{=@bX~dI3;`g<2HB)H?8%(Hc0_&3~=$TKiDvm$s9F+{!tY7r&Q>It3wk9MinF6YMPV=gveqEE*G_% z1W=wu6NUXiN9(rWxz_^-X$bk*>(Yv;CDDFL#EubxC1qP4M6#Nba?sH5aYIta=ui;vCGLxJIXQP?3($bUSPo z7Ig6F#%|11-z!Y5zmym*Sb<8r&NDg)GHT}7<3}s5}BV|&bNgVWn9l; z6~IG$>ozPp_pT^TWu^ob%)S|7hG5!5Hflc04*+d< z==hrsIFm=0yE_<7Zc5Jp&{_6nOZ58VlAU24Z2gtri)7q{#O;W#D@`3A^A3t>rM6wd zZpjwsyD_K-v%%n1t?*(D3nd+6Kt)__rrr}FSv!9Y#Jkd!O7&XwX3fh&km%8#CnJ{6 znXxjpqDBn_%0u!5=4%5lGHbY1GHE*tBnsZEnj*G6!zc+%Z_+*>D zG3B4`W3=xY5J$e;(9xghq(7v&h!eUO$lk5t0w;pOj+l@IuhuJr<&2xKel`#Wn|J~GFxiSB5t^*B^M6A zc&B}osWTK4@=~|n4nL!wWb)c!Z zZ3$myc!3wBm|cWO0Bs8IYC|w49Dz%}ds+J^c)DLkWHR{cbT?Sq*Ys?lt zXB0V=kAY2OBWBaZc*Oks;hs=<-4Kw~Ra@{#dPAz8`rZ?P= z>15(1NMH0f1vN%s=P}^+h~3PSn$14xbujcf1)dWzI9h4h-*vZ~2+56R{fFC(+^(X6 zYhO(;mV#s{*l%8C&sMHEol@enE|^$a7W)}>cFYqw;@Vl_ZYAarD*L=;i>CmUuvQe+ zbVLmpNEmA3m9A0*--Tl5XepSuV{76T;!uZR9j$(gwtZ#be$~TB8I*aCT7#Vzc7;Yk z%ae65!4Wa!G7uF>eXoSUF1sf%P5WBG?9$%4OoNs(BngRik+{lbz9gkAzqM@t@UMG! zbg=c|4I8bmGVSn4nG(0IIk?nz;YaLJ;-Kel1l8=4I8w||e#zJ6RMv4jHLr4xfvC%_ z^DS;-7Q?lKB}k<}qYE8<_C}r_D8sGk3)d7Rku>*cfG+AL={ZXI>(Z+7B7i}-kYP1& zFyh|x*xl2tY;JPBt4H*!^aJ;qCulBU|G}eX+>ejP>c&qdP0hpAcU+|$00zmZNqCsI#~W|FIXw~J zl3!+)*nC{=LOZeNDsVW*ot}iuwqTxTPiCb4ka@H`%{hL3Qi5+%VKDj5&%TIOgvhX7 z6&#r5EyU`HCzHuPOk~M%0UyU}QL8be%;iCQ0LNbQ?I2Ob;rPMS%2=_&C@x zh6e*49{!z|mk*5#0NMOO--20MUedH;kc`7T?g);zrGwt$OG)6 z-@biwY)7O7fd<(yfuJX9C}vV-CNOR;%EZatG5F6tR`q$Bk_!k3M43=RS&>LetT`#L zT9MM#PkgR+jj?(vH$Xa^gLb$2JO9X^BXTO>FA)4l9Fzp>7;;)WoBoS>SAo; z!u%?s9r=Ks%(3oc)W4tcCO&T+fy96(Z5SsdSzSd#+{C$b2RFg52v?K);_8YpV7d0= zVGyG^WSZvfi1Opy+V4V;&gQk#0?EwcW_lcsYz;bGYl$p(^8w* zI6Uehi1!72|NcGHYb+zAr?(di8=DF`fcv*-K-i$!4H;0Kl$Di5t=bsl|JzudP(gr5 zRGgHAc$mC|88)DVSl{!$o#Gv-#+O{NUHY}FzPEEg-CmN~Sdips{`Z{2Cii_jLPA2R zkEPx;VAci@2-H6~xOR2;V{Ty~;@_>Yx}S>%?o&q#-hre5kNBtw`2_|optj)PQcneZYI)y+KJwI)?UTJU6(o)jVAp+{&-yNWj zZ@1{z=Dq#>yBW0Z#Ez1k%|srI`T6))HL)Ah8AFihCY_yx&^Qt|G&&+O}R zb^n}ShPDe_tg&u_Z7v9TE=+$_R+O+^alWH=uPAf*^@g>8^l*sn;r3YR_Y?h&#g71P zT*6Tq@$l0~DiM*Doz+LN(l(+Q!cheLk#;b#6y+Sy!CO3Um3s5B>426Mt*w%rA+Gk00F#0uI5Y(FH2|gR zpoSBM;7r%QJ=!VUzS}|G*)ObWNt^klCg)PqKgjg4WDu+_y>jjPa4b_56ELJ znbjJitbxGLGrgjp^(Q~bz~>1;9Dd(7nrpfs9_Jt?azwJyz~$#28l8hdd&ec?tWy)V zl#U)h4H`+^HGLPmJ^xBxUBHfAw*gGTL!7Cay|e&-T6J>9@MaI|dq;W^p{$LFBa}>+^gL zS?035I<}Nd0+HvfJ}0OO)TJLoe_c5=-ys$;Z0l<|@(N{rs!LY{2A^76@8{J@Bd$&s z_{v_$5rhqLfKadpVj9CnuDqBY-0+5YbzC>{@EeX_U=jS3ejoeN&jG*ba4%f_E$JyC zEGb!8eFnW!8i8_f8&L8wnQUed@gLzRe*Rs`jqv=~;8YWpY)V9)Rd#e2XsawNN_c04 z7Y&*xbl#t~V#}GkVA3dN)m?(%*x9~)!%+lz-p~E~`Li)wp}b(iT1YGB!{7Q7-T?16 z(ID-8lli^OTn0$grdO)to5Q3tQu(LD{Y_qsO^u|@INa@k*?~ekZy|3Ynt|=(gm~k=$NV z(AGwrX$cvWWW~%pKf@A7a=xZx68Nx~j;BBZBp{@+PtQ#17)$&5wxaZ>vwbPMSTb~T z|1!R?DAW4tCW^dN3O*!y@2kM_xLjltW^Gei^3{=aD+;Lb==kVk`G|sgBB-S>WX3}% zU?J+Znl#Mlm$zGMI*>D9kncm{#xwTTMsw41Y^HJ|Bg4vJU+a=^X!6I8(lf5fMf1ES z-Pzh$BVR@LuPwDOK)&FPcIh1p@?Y?P`n4`1h%583KQJ@+_ zNL}PFP^7R&^+y@$i|Pu3*Cylu(1w0sl#-JnV&_CO@HtEs4V99fDYUKYXt`29pCCP#NRVaL zc&6$|0c*FAl#p{Y~i zC>kf4dg+pW(C2AA(Ha@vyL+m=1rqQ-;0evU3*)jim6~KTB1wM<>{(Zi&``Amzi|hU z>q>SBPJ4Z!93uxfRWVI37D;R2oB3nNZM)xK=%;#vSEJO`R(3I6bshC(W|F$>gsMjG zjOO}dAe`@>qI1s6S6WAgd-Qd^yW!eP6o3T6a3B z;c{|%THMx9z&if%rU?-{`y+7fh3+XfYf~cS49z;ZYd!N3rKZ5#HOEa+(J~Yjvmgd= z@)tMoYuotXILE&_jGhJ46=LSVq->JNFilj03zO7UCS{c!$$Xn<^Efi{_#B^$V}}j) z)3&gMbblrn_oWOUqA#ABl9PAkp5{NL{!m)u3%d_Ox=`P|15sha6ns2{({`)(UO&E| z#Yt43w?OT&aqOqy6^;{C7V(jQi80vsOch0il%|#$;EMK|$Hi$%v^J@ucGsyrYvHg6 z0Z72=`JT+2Pmuj*bZ^vM2DAd|jjDI7J3Js>$n#}~4^<><-7%~>O&eww{#U|ee$8=d zoSv?$QUs^`r3JM7&R%^STJ4XoT$eM3?jhy6pWnX9X?w6;&N(G*&+<)$yBb6_--tIZ z(|&)}_w>tI$xe49V$`D6YKCq&TPS05pT~8$1Mzsy4J(l<+^x35FBYCCg~?+1gKO&L z?whUeI>XS&F5)(lFi#-6AiMaFt;yv~;&oUOhVgx-FLLxKRZCv{-k@59dRN%Vb&nu< zOzNb)jNf(%iqCrI~HwX&=Z1^LApl}emn;28=KS};j-Wc93ptgKz?4>#C8(uK;5 zT3dxN&FKnifnQHNPdh|F(ZO!G-->7w35n!1%yB532|*aq>N!EDsG8O<_W;i2ElW6^ zP-l?fQ8wQ#Z3%f@@}3muh^FpF-#bj4EHP6*I5g%Z0HTBOV59*^RPUq*dad!wAd4;U z{p5MS`gZ%UsD`GNN_vWtR0T((a6{9f-G|mg2aigh6-i^P zVy=SsC{(O<%{OThadv~(+t2{~`Tg|%RrPfRT*~2Lqlc9cVuPdQA+qIx@0*im-@x_A zKg|Z#8PL{gBm@aLHF$RK*7JHk7e_ur?;ah&CVO(~oJ3)$;GJAB%PZuMU3};NwQ8}G zkvefI;+3A}+r=dEjJT2-fSLiep*&d|n}|<$;g)i_~gn8h;VQ ziJEHhqZvXU10q~&62i`2QqoAn%*xa|GC+b%Z-+$-@KiPQ#WbCnOju@}>sou6umAGV zxTOg2d*Rixwz~O2S|)+ri1$>nv&JYDGf9iNCYP$|7i zM@hTjs%(?FR=w%b%~5ixF9Z;s8xB7$1##a}6q<3oef8~^wA z8Csv+PWyaLGG=cYR-TxLUM+6uRdBdh^ENiRQ!p-PbtQ0H@*O6Nx=6j29H@MkwbUKx zpFIL9e`$a+CM0#V_@)MaNEyGnbB)^a`J^nUP^Rz$Rim)FaT)eni+{^FV_KjAq z;gNv4#;LIME8a$$jJ-r~^qVeaFLMP-A3s7Scm^YAmA4%V5gsAws> zY73#cC!&Joo`t|@Kp1FrW4j>yQG;(sXVcP~D`P97h_4Z780muYh6$b@mz*V@_p|iV z3GqaA@BBq+)^++aik6%{yCRQiV$u}J<6KoLKT6G&_fTl^%XmY6ir*`+?kh=#>~}v7 zOvgn=AYE7Td{UMPYI>3(a-8;`?V0Y<#fmu49r}1bL$CJlhuZI-ZqD0pwBUL zf$aUC%;8pZfpMaZ0XrXm7!;reqns>#Jvl+80#T(bMxYGBKo@+s3sQR{pX$D(SurV5 z@zMr|^}p!6h~Sq6eT$8zBnPI7xih<6l?Vt~kOTW}Ld=A#E8HN|rr{_^wEUbACpR*0-k8cTRutye zemJuJvGZem$e#QHq|lSJA&tEYO?V)CNOs>xcj;!xj;rH{ApNl|R?J+SmzQ~#K#YPV zo;lDoPDQRfG?4H<^cyWg=w>Ph1v4( zh||ESJ*YTGRzfNU2$0o?$40da4W2F^3N;aQCa=}#=N5;+Q%T*pe4 zHwq!mE*yf^__hiC-PXzz22L4Sh2B>1C!)bzl$YOwIfPZbN~1M0syAX(gwIlBOii zcuiFKKY1Ihj3RXbNKRQgy6JgsNO?#(DDhEDBAp|&al3|^X3Gs;OTa<2MxBqWD*+(~NL8;YqP z;CQo+odoFnG~GnRYg*{rw^EbKjkcxhhnSrn3* zJ>u-FT#!6y{bY)>bbSn8c*v~5ql>UZNjJO{1a zXsq~O4V0aI9w;sD=ZPxb@UbI`6NZhf1Ch{t&fWuSNz9ow}PbQ^&m$ylHD)T13m5enak=S=sXQ zU?b+k2bLA|oH)Kbjpmxy*jdcnTzHb0+nz+)md5v{FZ)X!@|$`T^cC?!PK9rlJi11B z19tK(Z1lZ%vRv9%DvglgRCUE5vMe;EVlM>Awr*lVhO_t+dHo(pIhUb1*Oq?YK9G$< zI%@2R`Hn*^!C1)b!j0K0A=3xfskaM`skswhpLPu_+JqC+o-PoQ=`tHhb7a7o*eUgu z7L%D@4utojuF8%TtiY4|?_2xhc-kAy$O2~daqWh`Rm`S$7C+vj=a&dcu%n*VDWbrR> zx8*LGUEcu_&ukcagJ2C9ZkZ*qR6z=}B@nG|y33Kw@)*dP%wl<47Hzla{7ldia$hs; z%B(=a^Alk<#?EYe0a9Vmnys1KGH3TCh3dzZOOH_Sw<7|E*Q zejywMG<$@h0?v?a6PEerRopB|sA{PV`lSK3(CKHP;WnBf-BuaHr$|;EvnE)6imyhq z56AggRP;vY;&)e@St%`6gU$&WIr)^DP8W1R<&|D$wz!hF5U$be_0E8y#^9oOof3r$ zx9dj|ncru+(VlBZ@;Z&TmAo#0Cl>w#9jOxr?xt`a7B&Q(+=?E zP0MDGK-i!Quv-<#F0QA>d@r}gEf6Dam^e5&u4wGY+q%SDm-^b;P6bluQ3kb1{HPGq z>>ypPYuM0{O1`|X#2c;q>*{h4uyJY9pTiOr#5L$U9{p|@YIn*}vvT~|I!utMi#FAD zw3NIc$RSPE1--%8m^h-M?>Uk?FoQ!SF^O;$XbN#)8ws!kuuDZYRc@5DY{+1F zj$>}T2tO!vqX4xAMUJ7gq@bouBQ4UdCc!ie<%ABH4@NZe5hD+ab6}XYxK5#!s1Ojr z(_oPimZ26`7PI>875l63lQW7#Bup zueNY{o~6RIPC96PZe!FeUFK=ybYPp-)~31CI$NPwSXu7L_YY4$+9MAk2OG;*RR&-P z#r`>#8iWPBa|e)2u0Q&i6N5Kg7?P&sM%(~+u1NPAh<}4W@&889eL3MyMOy{02?-j9 zegY>0spEg?vS2bsj^N#C7y;6_+b>##wT_@Wpp#LZom0whN(|`m{>`EE4JIPwRS$5v zH>r)wmw&HRLW#^-5jBTERMpkZx55BC42p~#;v_`6RDJ=3-oAA>q-`ll z&WoUJh9dlXqU(%>0ka__jZD~OO9_*bV3Xz?v9f8%<3nZD+uG{d%1|wyYGm1!eo;O_ zK{H23Wh*OsU{ENK#u#bj0%+ecNlCxM7_~oFS9{UIvAcQBv0=a$q9x68O->5_rWgDw ztl-9{KY5c!goi6rQ}DwshV8}~Kh^;iVuCX~MxI=lA!I8#xe7vl@qGlEIy8_-*W|W~ zHCt(j-TK@Gm>!{!>sPq|-Z2UXMv|Y>iG=c?T_20E6+A@~s2)o^eKXWs@ZQ-u(hfBP z|GVk$b;dgamOGm2+X6BH^J9%m|1e&w4M>gM&{H|q1T`C;1S4I6c5Q9V$=#hBN(rt? zzHpru!UX)iv90*P*g(}#lM|L!Ux`73sMn#UIwbptWO>Sj$i7CuFCRvz`E*XE)*)(a zEYjNQn+E{I)O(Kc?oKyMJ8n=Nd2Q_!%(wM*bzw$gyW8d7WVG%0`T5sq`D1U7K9;q? zvLD6Pb(B}gr`(Jeuz2b7qZ+u0(j8jCYdjoUmXkb;< z_-d_+{C>#LXM&U57nkz3^wd0ye} zxhhH!3AMrj-nPWJxVLsZH)EnZB#1#lLDmiqespJ=wWWi> zroobugo3*JO&G7cfbhToz@81HraC$v->Clg*=a90J}r=Qr3x_6+ZI$eP40y35E10n z=SEL}5>1%uOm_B2*g{!h8tJ=xq+C#%x?K8FJ4)u3;M6&4ARL=LO+o57Xe&2hOd>^2 zPA+O-3d$0^yr(x>^XGwG-4wg#+CiQy9K|LpPpiMTLi;nd8o=IUaFA=`SiL zZwt}P@upsHBZeN0fBa4ZNnYI|361|2Ibs`zLz< zSREru+E7+*5Y@*Nv*}i}U#Z!Xz)&>@rqMFA&}DbMYaU=R7_?iRGmn}|D(t&?>C=I+ zIv7~5#ei^xcLQc`EXaFlwHNd2>+#Uh(I+M+*)v9Zw=jP-W)tOl)6fcH{I^U@ZeJ_u z!27xKP?^atv%T7xZilJnT2V)0UOqna?t6hNWd#MmtKg1>g|&Ndkco9CVnNO&5U^aS zhi;jk>P$jL=2&sJFg7OY>DgdHTNjVn8=l65zTnQd z3?bnzuoVccbIc=vM7&@L35n44vHdn$!0b5mb?>m;J)qgiSK-*`lYhjYc!azZX((A^ zYAQi~?YEwu5Zl>GfS$CmBbc3G{ 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 zcmb5VbyOTr&^C&@yK5i>m*5sWArRbyF76V17fo;pPJ#u3g~eT$#e;_gw_Q9ewgg-J z%P+esf2g7*iUtQ@7HF2XlNt@|6S-KUX}J}XjT$$ zRFw>atd0tBfktZU511To7UPiG0}s@XvH7Ne#^cn{fx1X&rbatll|3ebmgCCMPJ1B*8SW(3E2B!XV-G9zSH?)Vot{! z>t{W^u!#oDcvX(H*Uu>ar=YFJ1HSpc&rih%r9^1X|NC|G|G(D~s*e|vgHv48g@T#Ngv9Uu7SUbBW+%FyW3!1Jk}#7`a1ruyGVkr*v(F8*lp zebR7K#tXjk8BgvEjm$^Yv;JFrbu1<4HX$FP4W368|2#VuTJuZm%e=HtZleTU6J?Wb zxhLhw&8DC&pMNH|?db3;Aaw(6+3whA&q=;1aGNU5I>UD&r%0@#&m)>u{ctfE<5K45 zh_#jC1S25Lp)q`6bp;+8v`008I)DCbu4P=nd}rWlr56xyf>cViJJ9>ZFF6`ep49zj(L6MEi^gvMCGN91GG~8vwLGi-*&oMJi|Z)^dIrb? z9_jU>hqyII*lo&e45E@g=x|x7zNu-z0Q}acm2d8IXKlKC(3;*oOX6S*B7pIs=rXD5 z>ad>@OiA{~re|{Zx0aR}E9Nw2#fRG+wU`Z-7FglF6twnDQxzYSWBN7!gfo=Bv(?>X zpQXDa%97ORNXnv(6jt|dU~Q8DKL+H;xhy!?FtHw~*0f6Qcg{a$JZLldK6G(9KmLnY zj-5t;!Ja~%DD7r#qELT?Qh1+VBBh=NEo=O<59`o2M@H`<8ylnIRU4(&Xs?*|;)S)r z1OAPEW2l^oVBCPo)L880zeBnE0E^oeNdhmKYk;!qR~D=B#(GI1;vXU#L96D>*r&ON zh*(+>_2Nu6K60M`X;?n6B1xxHtvek2w~9<^@K{YL>kDYIgAs0G{uwK$Mk(n1LV$2s z0)n|xhk&#%+A|GL#s;$L$e91=dDr=ycB@~^e@A{kC7!sit(}MY$05UVcTM6#B=!{* zisd|*6ed=G9qfrlGU~BA8;q1sk$|dUgvS?|v*@F0%GAt?BDxzQa6cO_DlPk#8XppngC+ApZo{ZhTS3bR%vSV^JNKq7W z^-!NI4l#6mzCk_m+FcG89{Q4xeEQVqbTK;r&&`boHtf4}wbwiL+>E)(=+r;YQ;O3s zWEEag1zKRj68N>e@u7QNuD|T+$3;G(ur{tElxNLk=F`7|;f!SLz2W!Bzssi8D}hXh zvr|7%LGq)+d^hbfRz}_z$N>!ze|gf9ryKr&^crn%g%p{<0#s%r2{su{u)PAZ@ zMCVQZ5Oizm{!`wT^0l#gUEit$DckoVuLfyDj?JO)z27_weXqg#3bO} zaLn=|UZPqLKP}{>0*3O_P{GUQOuyDpD+G}F*)MoaX`Mt6F1-8GfIBGA$?d4JmZJoGWNvtrGl4Z0vef{u&O>$BDGyg|9- zJA9)aR^U7FAsMM2)Td&VNs`AurQ7-vHAn)jGkM0*yN3bP;pBQoCFCC8*Ckl}z)Nl8 zj%)2kk!I}%chj@Pg_T&Q1${0^^fMOV9ZP5!6~gesJ=U0%hNMh0qQK0FC}mAc3UExZ#Joikac*6bZTflrd7~- z@7eE9CGVoW+?c!tWL*Ktt5Czg6TF=?uQTgX>p_Lrj4Q*JU7IA(;8cDairdDcs)A$= z$gKoM;QPKY9895F31DE8hDI z!09J2>%-39SV>SIr;e%=wYOfF66s(pm^C1#6|7df$F1B)1JpURj6M^39?T!V6xFKEadFnggJ~J zX>@a+Bo!#(c)YRr`MX!wOQFa)+6WD`ZKcytc9+UOktg(qH%UYOIdTL!AV-Mrv|+!~ zp?~|f9&Ij_7~cD{Q$pmMl>Xt#xo#2RQwNt z{MUbtwSo`cP5AkK+LMf7Th8vKAXL0zX!ucRDsu@?%>;8%Y}3d9R)k1xmVa6Z-zUc7 zX(@7esb>0$7X&AmEw&Ot)C!4KX8{_#-jzR}pk^f}1D5~7e5>)uXrZt3_ke%tqXVL~ z^L6#DVXMn359OmRd|{eU%rvZB&3E3eMFzqKWO0zBkqpm;9eF?E^>+JFmP4*yuHIcL zd34seK5vcVkqBjlG{hF2g$oZkB0c&an5_ZFxQ{klDAK#Ti$FXWtdzBvQxA1hejqIP zZTK*^rQvPR%xn19#HFhlHh57ThV1w^S%m@W_Irk%(8H5D=dr2?k;7Z>Mo#3(K?M5Y zBD;0NZ4k&D{a-7F4vgS^br|hB-XIfT#Hn5ecg(}QcUXNH2hSKPiQcgLs#XpYu;esw z^+H47l?s<}?N$-xT_`_R5!Q)H!`IKcIk7IaeJE!)Iu#tE(Rw?v;b2wbkNG@N1Fn;;tpov9O1atkNf(8YsF1cW>lSN1l|VbGgN3!JVwB)6 zTZ;2-P2x9P01c)f09B6%AzEFx8Tog*J(4;HWv{z>W7!j;xHrv?!Ya9o7MbN^r0$f- ztLKaG8n;_X;RNC`lCGCaQ`mV+O^RbF9%~IPc>eQ)iD7pkjJ#zN6Pnjh&`H*-`o>~U z*#^0{88K@COmAcX$b`Eo_zt1I+tA~i880_DpF#SNPpxe(|FC|I=`mv?ZErg++-j!I zez5A^RW>RPjwknGJyv)kQHzQmtu@Na;wX&&oM>3ZooVQT*0}PK{o5?Dj+Gpf;O+DW z1{PT?YxHtCt|b;fnp)`aU*(ro$*-L+2>!+V={C!CQN$gWeEv;;QpTB2Wi^{RSJI99 za8IgF$XkqNafJlp;c&XR*^JiY^lvK%Dj>y3Jd8Qe5>6ds{lG8#xI1-k^NPbV!p`~! z)Idl66ABg7&}VvmeN8879|s(oCD3xPMtl$axuE4%1Q5Ra4xB+ta`+Xpr+WDb>WS7p z+^D|j7T#I_&RXj-Za6Zs8l&w*M>#faEw*m>Ed{czJdciiP_5OvxgL%S$$X zZUXCip}aN>1Knz{B0Zt;?H0I_Kl3h9$?iYOiUpq#CENEU}0Pc~CS6nQCiI zg7JR#gX2ut^S(AwMtVD@O_AiaQaWf#wMl7vZK`^+j3f4v)X(uh-%n|}`o45&eA07B zvLe-;;wvf`87F$sa8FTkR;pEq63CBC&b#+HL3jrpYpZM?^8o)=7aFkqBmBK{jb&p# z!E$Xi`mMQL=E^#q!D1bx<#Mp4oQ_MG<&niM3+E* zh~plA6CL|;b42pr)+L*;FxJ5A><8)Wl4GNd#eA+2K1ITz5~2C2FUcnFrNAq!fan0u z7jBZqNJ9?|6(lodCdY_!>vwc(aV}{QE|Rwrxb=)vJcB=3xv)@;SDQvBQmQ-Ub_1=i zR>4+)GJI6z-2KlOo}GNeRObgTS(*5ZOU+pk#osqGec;Jfnqw$UH&Z32gTbkrQ5*iNwGg|MU1@9>Vo#Kb< z1&>OZCQ?WSE3~TK)vP39m6WxIAQehv$n;ue+lv! zXCIt0`0(pY->dZ(bC`LpOSGpj#>^4Ppu*;|=A@SUPx{Bnr4Lx7+Mh+O`4Jf5q>N14 z0Z}pL&+aaH%9BBqdCHAGv(AWmw27Z0}7q{?Av^p{xVDiU}vrWjU?$sSL=w=(~e> zvbURayLFs#b`{a?uFcq@C@U}+ye&8B%Y{T!gi>H03!>H3p0x7m}Vep z>c;LAYj)W(1{Vdk_EX&bogfI}I| zLd%Arc@Zqav&BVlK?5GdY39RWrBqH7NZPbhnk?0GT&+b)H-7iu15;+;`Q-IzP@gn| zLac*46UyY@g2zw0&o`yh3bQ}eTkgl;_nL7de21Z7ori%I;MaFxPz2%b~l&GHMHktVPbr)Yi00;Rx7v=+xk>B1*?Q-Q5H#agV^=$-&sPG0zHhq=>*!G?O1x{)$UY|~vS=XUo=tV1; z9CQ!3f&uYpLE6I-Q-z_aHB$Yxz4qPXQ)#`ac8c_;_icU>Uz1=^l4sB>Nug)V_C?d; z;*~$%^v`2I!C;W?mXJohMZDK>wzOB}d(ZQ0Od-}dh`phnKn>rb!TnPC6u>2jwW5CO;ynR(eK4@cNZnBN=VMcQDC}qy96UrEpNwy$D-WJw9el$dQ8Q%OYU6SJ$~1;j)`zP`uAg@F5zkwqJTK25QcY zTJ4ig#JlcvJ~ZZp{)@$S2nP*EL?$omZAgmSKDTm^#6#THMAY4I5;a|hyiOTx!Z{nu zVik7BglPqcZFsfUwP(+@HpBBAkppU11_c(Mdv44o-qR$1Kg^2g9u?FrAEaTk8LPqZ z^9#P#p-@g8yo<1=mm4AovZHXBG$-333uXJ#7Ew9^bA#{U-Hcynbnw%c+dQgD{Q8v;@p6+-+4@<`OE^fbCf5Xh3UPhkpDSQ zM>Di;pjVg6j!Qgbs>=Q)OJeLE)_??G^zc>=tHigYwav9 z9bwsfZX?7o;~UyR`d)#l#tRI^AHY$Fo-1>Grcvj33A((BjBsm6+7xYRK|H>@i;UbC zdnJNv$=&d1W3$5Enu-N$YZbB2z@6x24gxd*Yp|^^?_EfoLw!?D78hk^YB3<94Aq!a z$2j@F{FOh!LJs4X<8jOHOBYA-CjuGy(OGVI>ifqY z8r=ytp(Ou=99}qM@)7T|?XnHD0BYUp7>use=>7!I1k=U8B zgk{rPPRo~UNg0bdnQi2#42MHHvRqq(!E_UxZ{4(G3Lz+<%JMRGXhCZ{2VQiP8}D zQqWq8W2A&0_>}ixdFohwT9C|!C%I3jW1*H;0Oh9knkVARhEB|PEUyk@f=zexk{zvh z`U2N#0lwDS%_w*AfSQ8DPZkDCd(HZK1_&DdX7Rb;a5AR7YBep(ywx`R9~Lxr9oB`v zTO&mqkhOfL>#eQsMFNuz|HNA8ZM4o;SmK5U`Ra2>gbMJU z;@)!C4aEI1CHHB0fK?^`?v&`@tf}^)UFVNZhJwrV!1nUr2`1~eF8en(K~-mR)2}*y z<+2uLyDYBZSfhgj2S%U2jpsP_87>KgDcg|aO3Is7ZK9Qx%eXxn+hdgw*%v4V(d2Et zRb3mhCCX2V_|4|u#*OE>#WE7}F{DFD&nsF80cfzj!!%_!OT64Fudk{)GDQ!ld(1@N zvGl%_WrJ!qkHB?dCX>PQ|0FKJdI$XIf6h&7CX#X_<~nK!x=bK3MX(-PvFAi1)%XL* zKP#Fy5-`ge3)~uWq&$_UC{641X$#RdI`3zTc$D#x4a_GH;|+qeU48kK1@q5>xDBsC zrb!N>FHk)_2`Ne+A!NV;eiUy_u8<+^WIzp4I{#Yz9N?8wcWvlYrlk&~|M||}=#Mw` zqMTl4q|n;kqEnc#dNs+gAK$&2OpP|2@0-yreKATJM;xdpFw@%i-W>Zzy)x0$#|+K7 zuwTXtgvR1+d)pM2Y*Q3@Rqr=DH&iQZ_Ai=uR3f!pkf0ab0f37<5ETkDZ7hI=Gscxw^^@YVS&*3}xj{@x?T+vlnJ&@=Hk5n%R(v3K_l^vnTDSEfL8bhRrKw z4v>YRV;pf9DO>@n4JL2Gb~M$A|Q6=6wXx`%rxYN8=G9p=^4kdW=_KQG7p>TZDds z|IzDugf`MB3=OV`b10sCN8j;ML>Y$blds4<;>b|;%FW$JuEqk|KEq@UKsMo31UH~E zTlPPv3*45eDu!YKWu=@%rkGWM0+C*>s(38sl=1cYM-4Y&0Ys3sL=?$Yf<|k1tH9Ta zsEU*RZ6gSWMR9W;e0&cs7&K02ejJgZs1s)l{jEP}5>b~GSH~k+nR9DKKO>Ia0XP*C zK9E0>vr&7pX3>Pv?|;g=jy7z_)jO&h-1;y(&vci?l2OaD$Ne*a(?zKbg?5~*yq*`X z<9@?;dXIgrM3Z->1u|$b=Y^DMwpXv5Ll?{RfT$Rn%4tDGfSU6}hzV}q2>CE{ zYv-HY+MO}W3uZ??RKoRutvBy)#bXV=86h!p*drd4ijhC+1XAfuw37bfTk2a?4`Q3F zHCbU{V4RYj=bKL3Z8PNx5waeJ64ejd(1q1}+gdAJYi@~hRv8UwO*01Lvk5Tydw@~- zAn#sZq+zQQ#i?aRoK!#|u$txkwNgmph7@6o5j41fRXrx_`>0k?b+i}td^PFdo=4;F_pwo76SyKuGw=eSb|zGbZk$(qGFwnLcgo+FQYnLD6$f zt_M6K$6vDPbM-tHp4)cyt{y2T_yK@#1zWO0X2GB+MSqp4Q;>`FZK3T-r|8In3MI@sAkH=f#yuOKv~#@vUf=bs?cFsn(Mk(>iXN&2+7QefmfOl~;w$MB*0TvkG<*5NYEFLQw}mSDRvtC(!^F zZMfD_Ss~^vk_2xg|5wmQho+mR^!i~wva7Mb!l~7sXa7ce^P^Aw>?sZ?72E7pj~33& zrsSC$xMtLdM=OR_i` z8Gbo;HwJTrntTB>#(8nfo@uJ3zdmgVn;P>$r(<;uPI>x7{Q&@rp9tO+LY-c+?w_?q zW%OhI&eXsiDa9T7Xd6C1;84HA6uaGnOt|7eQ>Ne4TG@nlnA5G`+AS4CQbjO7D;f0> zYli{8K+<)6lN~Aacv{(=_tXlI^l%WPZ%I&|o_=?>`ijXeJW(3L3c`9UwIlQcK9Zg> zgC?KgVgZ~Vq^O1cbY>gw~&-;dUQC(4YQR=n`hKrq2f8bGA7t&KF#4Ou+iL|;j^+3g+@ zzjhiiHlZo0Hw+6BEtoKkxdx~YfR4pB$#v|OMNAxcT4g%fLIMSOP4CM_-5T`8bWG58 zLrHBC0g4iKZ~f%eaTP*mbo{l6^rB< zoQQ>-r*P{8DzqiFyqsbi{!Knx2S@{sCYXULoYh3t5g@X?)BPm7(qH0GO+ZZu*DWd|7*`tN8wFE47 zQRY}M8MYMAi4juf%T`XqNk?L&I9CW#z8=3F!E0mN{9B?c$!E}cy;a%_)0%`K1}wAi zJrlHdr-2FKy!)p&x-1QopHdelSo1kz4-H7yw^zub?x-Zdu(T^j0x1klTMD9aV&JV8hycMl zM%cfVe0jvFtK`PDt|J->l;uFy@2073il~FP8Vtnh%+PvPHPEdcrd;3X)tcse<6){g z+@0^wjWNO4v~;SJuZsbdCO_Z(wE47C#*N77NkiFAO0y@EzIK$nFb*{x#@GEtvDtG08|a<(PRSsN$$uSEH< zrjj&;y?`@DR7eg32*D-=TesUOpu@8gW{<2Tlxvw{;puX80avV9*O)2akF|<4YU=o6 zz9^)_cGx!ZhIEdt2~~+=YQP4LsAX-LS}>+$+xOWT@K`OSMfa;KkaqkgKs_xGL{`k{ zPm8_0-p3`kyHgI#@$)K99-b;)ngqKASb&7F%HqY|SF1>UiK)#SH#-N766BFUc)x*I z^k)#9?O#;*;6RS`$G6A%Nx#O7Ggy0)90*aJC;V!DEA+E_p8$#DUZ%TQNmauV&52H@ z<`~ui0{^5Tegzv%U1UZ>G`pzz=QdkFT>h1>KOq@adimBr6$nioJcjW63Zl&t<;k** zld2F5nMdOq(!Ds_#R<+vP84tWD3L8@@dTO6YcGQ4Ud4;N&kdHQV?i#8yHq&ScJ~is zb|(KC)L+PoC~M1Z@}YYrM722%S!J}A5p(vMAB;>FL~%+7fAfYZ5)d5 zWm`bTyLjPHPrS_7-?y6u-{g5_vMgF{LjA(&P+d!dfW ziyFA(Hegf$Xox9j8hy;zRF$f}Fj*%IU{1j|+-uw8crlLzb$a~~+>UE}HsQ3;Ao#V! z%*VV4QC*Dy-e>9bPi|ICEo_ZFUwa9bIUAu{L!=O1kpKU8bjE^a<2E%o8W?mtT; zYmc$_m?J(waohP`()GdCOn^I>0$)OU-o}4VVz#WaZwDNjwRhU6Fkzj86Y$8Lcy0Io zuv?u(kE7UEj8~=J2SGVjHGbIs<3v7YXuR8>PmC`@nz_#kW;;(8(0y7pRWrBPweL3( zT(mHGfWpnbW}022VyH$;jKe~xSVUsYZkZ#5bo{L@XdL6_O3d=yfPt z)0pRid()@dgY3*|FGNk}zJ%+D{JNL6B5h)>K|CE#yD3LnEMDc^tOZ^?Vk(Gf`VZsV z9JE0nyWSsP(Xw@0kq&3uGXuYT1(Q)xl!c}UJ@SY604PdQcz;a6s zdG^H-nk7pE-yy%!F$p9#68zWW2|*vC!;P2|awuEOA0SUNz3Vc0ncL(nMzJHlY+Mvu zke6R?)2ij)8u&51aG7SoB@+jzF@4IF_VOtwMH|EGMtClHy5_B~iWjrbkz>zQa+F%p zL;2aOwY$QDpstG8wrDkHP3)<`mp>bSS#2I0I>(wl^f|%iQqO%_ie+4JSh@np4h1_Y zyxe*JtiDVS(d0$B{>cb6pHvGyg%IixXS-a`M!m}hOb)*i2{$|YAaaln9}h46=5`%e z-Ax_z_qP(A@L!=IPah6M=6iRF{XiiMYsW$graZdXEC_qh{0u84$IIz}d&{qizC6_E zGa}xLWD%j_KNj}ZZ{`}3JwC5%AOGP-9+{mQrI8*czZ$%$6W;6Ts$Z35MQ|E>kVksq zx_Us1H+x>c5Psj0H!CLN1YcQBYAoTv8sfIA=Cc+tHPZrz9}uO?WpWB~G5g75J_(md zfaVPPKcgKr!}T#O{gUzenGqIb^-WsP*Sg#TmV{3}y@7v?n6@d|jDLi!@mze>Y8}FY z$XDOjno2qH96nDTX{}Ul{yEwDB<6#H{}ePwrO*QH;fN)&D1doZU}CO!$e=piR9ME(**Bw`NMr}@~Ed%CX+F`eVq6Iu<2%VRN-&AGeTFfAWw9+|0s5) zkWxaN|HyYg>Z)pv_%%sqIXJ;sp??y8+KYbC;?5Y|gWg$zD@z$Fbn+B%>+|3%36!x_ zx<*EyZl>PJa6Sou#Y>&f&(3abk7hW#xUgr8{!haq&IM-al&BKTW;a%+ky&D-d{o>U zNkDx8^WkC4e&N8||JZ*jr`D|aA^+PTBXne+en`r#dCXc8Dv3c!f1YwK!(sh|8O3OR z5F)vQ)Zu>>viF_titTG7n;JM2PEzi98i)N8s{dEpo;?;EYa7@uzRD(c4B zzwqV!52uO$j|_6yJf*|pDZSeN0LOXp5=CQgNRY?(L^u3TkB6SFkv&xTbWiesQPeYi zT*M2c0H0ivKZ%IxO9kDawQ9OdY9@&;q5lEc{@=-*JP~Bc^uzNSgw~Tf%s;x|p_K@p zZj(~zhDtbAM@8|=M=}x`CgsIp{s~4}wCQX7N@-KCOVj@aWE++jN(bDR{%=a{6FV^> zdMp3nNQfdZUtcfZK%fL-e&*4gbV9k4<<^=aD0|D#!tyI6f}7BRv`Edk$;V83-s60r zH~V%|aQ_WHv9sssfYzS#q11f;gM>nPm+>-Cz7%Vu<^ILHA>4xi&K9L6ZHrwhV%GH{ zd7q#l3+@yo;2L&JlhWWE<_YQaE6nun#+{z2KQ656O?2FnG*0pm3$5vHQyBS5d_%oY zo8oZ$?%dRx^Bx1qEPKU$so?S`(dLx{{6z{LmXB%C+i`By_X_^`jNgB!COEHL8!o-Esa z3=p2@vXZWLD+w6;nU|}ADgCsvj!}{ zRSmFZD}>t*y%5{C6ftkYnUa)}Rt^spq5>^3zY>ixem*+DTKIhLJe#Da(kk@6^;vP+ zz2cvf72<`Fe!vFJp~6hu)>4?aFL7U3;$!Rq{A@-%XjFi5WC`^(JMfSN2Zp1n-5E&? zw|O6W)btH1^q<|B1VRJvSEVLGrb+W?57jS^eJPPUD?#)yr-4;V`7jl?8RI_5O!U+Z zZ3uzJ9u`n~&@*x9ipZWA(S`#tck46hS}Wh8{`+8z`~A>gl?EXj#A@i>Btyd_SfJeS zQU^2DeMP5OJp#tu#HiV{x1JUZ6BI`7ygF$17TtYk>48_Pe$0>Btz{&vz&-&yc*T%8 z69X@H>%mcVwqG#v?t;ca)b&!w9w>1AxYaFcx2d;==@0gm5z+(sh-LDQKuLwxD_?dm z<8|R$%7Xm6r__VM9{e`I2AzaHb)@eD@R%Y2`^(6=@IdQQEX}63PO@di8YX=F8**Hr zA-7%v=Ya`Bd_^FtZa(`GJULLu(h%eSHFv-cZ=JxzHm4^=OT$saBVhg>3pl`iPrd~@ zSTwDF1PkhHHE@M`pMShuMkK<=-|t1IK3w6dGKu5(udHtQ0V9p`c~%k!d$=mS((?Y} zKihvhjyORS0d)2BW6`c&N&)H6uB-u{8=FiQ?-xuP1Z+HHcr_2;!T;MawD^LBd%ZEU7dWol4PP1fIY1?K(YG!y`s;bTQI>` z&HD#O)X1Itjfllr70FtfRmr|K^oOmYzOh3}`Je(*KNF}4wifaEC4L|)@JdY$5b_%x z>o!Kj89apFQfP&4&2n_4Y2Tc2ya#8L*vG%i4#@101W^IiX0O6eRR;BD0?%$uFQw7` z+k!a!OOK&I?4~FeVUAY&E!`bGz2V6#aZ*S{!=0@SFoI>O zF{f>7!=Ym6;qC+-bCDL~R=vLIPpJfBp9dW4@8zxgz8TRG4XP?lzYwS9Z~*;M0mt@& zNHx~;ZPXc#;@#U)<}<*>KBVq6)6uf0yO6HT3J{S6N6_{mvPKZUKep(C<=@@s<;d>; zA$k6Zd+VNBRNQ=_mSTSgT63P^B`I2`qwSS>t19gLr%cd7<{fUf<5(&7U3}OJfUnld zysvhtX}?EAU9Y=|GB3>2G2E)|tM3a$*4B?T!C`>F32W~g1Rc=tJBN2~ZH=>g&h5V= zuTS>2)Zul(^o*%g#ub$nL8QZtSFhHN54XI~foC=+)#VFrQ=wjRF)qUjWyOV&qntrQ zoUGaxqq+A#`H;HkIZAU?*3>qWBIx=!b+FZ_AEHK!erpRHA>fF*^e{PpDxpxU;{!*# zS{fkNozZyaPKzFO=i_$*)Xl){L0(p;;=K~?a0t(Ql+fcX^=Y64Uy%gjMDs>ec53A` z_zOdgSKtGR)ePi9wCxpnpH4=JW@IzRx&q1GD|dk*yFL5urr$HqX2${(tzqdNIzE)T z1%Jp}m6rqjY9&5QLgj3%sMsb?78VEeJm3MbNFwKatERn}=JN_^I56|6*FQZf^Xg1ZqgB&bJC`K zJfff?$+h|M z8cs7MF0B$CJAgwA>_}2tM#cfphng<8eSiwhXy)GoKHO8(?S%Hf5_NhmtB7BQ2n#&0 zVtf!TZo^R)H?}cxu|~J^S6nY7Xk&5&oeCT@wL5ZQf$QeNcyC?4<(-VI=VanondIsX z-tp-3N7N~ui~rH1Y%xO9CCwthS`pH-@_St<;~^fccn>kC@TD`fKCm@OrUIjlt>jC% zW_lhAh1axxkM$}e0X(g&FXK>%l44#wO)}~knqd339 zXMf71y$QY5VGfeyAUZYc1*YzrZyQNb#!j^SpKwI}4eNs;kyvJ)OJKz;+Ud zL$DbW)>H7d9EG#3m@Ll>bcehn#*m`^Hh-V{?Z^0b)ASsXw;N|0FB#ZI5KV$;is}6j zOevT9m5B!@o`H1!lUpH6g0ts|3eU*X0OE#kCeQBZZ2nGU9lWC=>0*i*88Df++JS>H zcyTRy_B@wsqICGZpTs&RK~h-hAge!Q2@i}d7x>3o6*=MB2aqgYh3 zi)cCz$PXIGECTqDK;Q`mQFyR;V+vmpCeHm|=>Nn_A6RCeL)&(UxQW~~*d94{Ude7G zElPSvVL)$$sN|_6-JlEhy)1A1=iRs1UU0;@ccD-4(#+VbC4XW`2tGfT)t)sC_F#EO zJl6G;RumN&tn&9Gq?_=jf4_jA~?TnqfeSSF50FtZC;G45@p&VGMPO ze%~sS7LL7TC=)oi8SygAyqXEAY9eQH8-D%CCM@Y#ybfmZ$4Rfq7jnm~bJZrnTiryV zw+jHaad%eF16)a(md_oJ+%6?`j2tC%T$yhSok-&3A9FO8%l+ODkxke;txd+5WhVoHT~z+ z9fmk8?!=TA%I~^=bx)aH72`mN$Is#8u;^l<&K6J)exjV;%;$1!SO$`T_>PGW-Q+TD z;Lxu(-&XSQ#)IiI_U!x%a_iJ?nle&Rj0tPjH+Ezb5!Vjl82l+m%2iEeaYE5^q|vh= zu5VQfZCFMmkeeGr-K-aXfa~?uCg}D@kED*|OEtoB>aE~cjpp2aIZD*AMi-Ct);tK+ z44kMu`p+J^oN3EP-Bt!tbA2^Z*4omy;V@~W5!_f{OV1hGP#iEZfgbR)(;hp_KcdpZ z8eN~9OM-!qJYGPP93+x-D4I7rRts9xT4Dda4XAu!W3&TkNA(x~2ccGE*Ux$SUz+ ze?o))SEr4e{`aH@*YRe!MJ!$FQm#WCwkJsS%m2jfH(zdWP`rA}r;&%S)3M&Ww}TQ$ z`D6!#gnus!y7grl|K8s2&v3ObFw*Fo5q~4sZ7rq~X1jQZhc5TX{4-5A$FAD2 zu#D3DCI_UrOis^@#FHz03HmkXgbp-Q{IEa6o$c~VRK_EKm1SeDCZxJ8E`>!n%EVC~ zRTbgF0=y3E%(N+>j@UlYn~tjc-HJB(L1Wy{E%$-GT85Kem>Z;i*R z<7PH%5zI2dY#w{eJC3YF(@rzCOqmnyF<+_`*NL1*`;K1C5LGAbZ45Whn6K&NMDBR} zm~odFzQJpBc=A3NVgt=AI-8xI$m7fNz=zz1fUvsG%da@7mmTQ ztp`7*R+%Qsk=Hey0cN2JUlsl?+eiv@3u+j!Z6DJCzer~?uuivr!L?Rt-@Z50&v1}O zNdLG%OfA$WEd;j(Si9&IordB3m@Q^wNdGvv7|@*9M7!$Au(rGgfrQvtL^VN;_^FxE(Dus zeAYSa@TKL~m$HG{mX;XS^abmXP0X3vze3T|;uee7W1#aRKDeyMS5Xa<=4q<~gM#3Y zHkYrBg7>*=Kiyz%2XOH0bB@XG`~k`EZUbC$n5g!$m{3zTf`4j&4vlCR#rrvA5?t_f zmPr6f@c*{DNR4!GtiPT}C|ET79#Ph*jSjmv{e})m6Fe$h{1I38+Mniv5wjR$u8wZj z_ABE3)T=}32OjoTQk_^UPFB5V(41b!`hALaO4vAFozmB)B_svmN* ze4t0ZRZaT6rmy+r&?#HNPo$02v?!t$(mOisTUNT3I&FWJVsxW5)A%iin}&c;T)4&5 zfdS_v@K!xsBH)Q^;bv;#y4rk)14*fRgbF7JFfelknLsXZ`^PL3=l*!aV->-#fu2h9Oq}0`nO-y8lUo^Uo zlc9=w@RsL3Hu+{4YhMo`8Pl*v#wqI0(+xj5w2Y;v`13Acay}~11sq192HIwP-Gr*x zY22KqVkKFZ4T6!DRWbKY1IeJYi*RxFKS%Uyb+A89A>Z}0=?=6U=p?j)8CTL%M+F>b zGou73PofN7eOdihd2dRPE&ph;^TnZUQYB_JEa=Q_vxhlo?j9vrnN-}Mo;;fCgBw1) z#CCTvm-SPMy)EPQnqeSRQjm@Gz;TG(_iaiLFiixNO*T+b3Hs4k znbm38<(#!MRFes~#t;Jb)(Ut!&=nXJo{V4ROv81m3IEi-nxyD``i^$C&Gtv6S1Jf^)vot|v99?a4uZ#;3- zN&-0)PbC8HO%0E3ZW<5oPgNgxI+pdi=GEcQHpxs*p0+e6h~d7!*0RO{fQLu1E466a z^k1322vzNEH~LZcrqnbydab=pwb`JQSO`VpH`mc%SIo0hZoo?XK;RvmQxht~c1 z{*-9)jVeyI+|A4Pjk87tSs(V4FtetG{eAdYE_zG^t%lkdg*+WdfZ(>)ExUju)Wj^m z{m=nJ|ErLQnna5qG)SVv+V3K73WBU;_B2QgC($!r_i@1uLAtZY`(mY!$_Ub8N{|MX5oCJ`U;?9g&Q!kh4yT-0Xm8d|pzjYKpML zb@1WC)gZ05JpRp&l8C?VbY*C28LDZ%6#=`>s2nBOd^YZ$S`(xD68oRe`gsa{z^y)iv2 zQanE2xR-aE@Y~GOy%J~_yG@_23q6pAv?97A>!@2Cc5E-WLdif-q^hhjqv-BhBzpKQ ze!Tii&^pv4EAH;{>2KHKeeW`sSK+=I@3=xi?G2dT4l*sIvfQu~F00!eoN@rWsr)W_ zb*fi7qf9!*bqjWL%@`3%V(@`hl7xj|gvsxELchjgQ4XQ`{?QB%vCUn>kl_SRNkOos zxf=%dnfPzTJ8qX|_PM>GkPuou zL`p?kLTYKGOHgEKrBmrtRHRE}L2v;VSdcR41$N1mr4|raYWZID_5Jw%et+MYxie>G z&OP^>=XrvdcGonP)3xdKHhPjvUhWz>%W=Ri5HFi)2tBX1)O$7b!8Iu?3pfoj49u+%((KGN zyRp&)C5(y_-dE1sZmU~vjon&6xNGA0J@0thJAal@8=8uAcXlm^JED;7(bq0`-TR8L zSOlK*fl~JLNaa&Q^7l-MXrG-~(wyqV8=P-tASD9xIs+l6W@h^zEf(jgXo&%Opp6BSXIl zbmyv<%RA@X*|=c#EtQv^(pA*$BlpomLa3A21`qC%XlG=O!?UsJ#H@0tf#uCDIS(Qv zGFc*O^Z%#31r`M!Uc^*z_=>!xv+|K9LCObp^13){<$s$y9=>yt6??^X8TR&$vCSan z4hfVCEYm|)rdg3q0E*2#*H=wn2Qo29@KvD3RfzV42J;azz4BI}<0Q0af*Ys?e+^#2>Ne$EXzYrdHo|F?LSGM4}VDEQl z39qSH1Ljmq&5t38{!-zL^->FDihUGvuwmgs0(GVF?rMPez_{RiOj&6DuwBIgj#o2p zX%Mp0uVQ$xm71bl%gnrr6JU`(MKcj ziI_`m{Fs)5auzkp%6H;H(G>%)uv0(J8QA%u41pgZuSQ&jn8PY5L+c-}Nqf$SQ9com zuGQCRn{y(8>O>3M<%Z!9c?z`J(au zuVUs|$!$8MDG%dG)y}OhHGW_`h!4OAL!0pOqAchNytmdPAPqweLrvy)+wvQ5(3 z;Y#W-r>u@a<)d5gwo942{>I);zkt#>Q(OasT!f%<16z-OUzrDxR|ug;woEi5n8v)!;RK&e zQpHTn?I&}rNPk?q8tq^E5DOc5-O}>4wklhWFA^ ziNRZodyF@CET81QD@1WaXq^G-l4PG&x{{s*_@z`So;rB@ zuqQBZvEybV-vEV>uhwt3ZR!BM1(YiK)^US)4F6jJLa3wajr;t{r%kVVck%3rs-fpN z9U4Wye{MsSJHq+--ZPDoH`LWy6l8#>)33t!^~I5SL$>BGYqpXK7DC8bTC^>47W%bw z%mRgWW&XMgUPQ>DG6))%C2k;72fbP}8aQyl;Pmn7cLP+W1iEwKaT1`{2zqt6L{}>u}?`wS#ttw3+MH@}8t4yOk+xY{|Oo zYtq-}AS?*1?vR95J-KDX~0{&jkkuyX^BnoZ(JZ`&B|; z#5?A9KKx#)w=J~_oP7Y4kTPn61#o7c`lZ^Fn8nQOh6B#(=L-!^Fs723i-l%`SCH(9DOt;@bodFfl>NA8$T2&kYt=h44 zmV{MIG&yZaV$gU_-N|K+@?ayMspX}HK37ArP&O?scviQ)G66fNh+X1sB zwYaLQ6jo*~m=}CfrCN0RWKw@nCT~6HT|=51SzENGGAWzX5iE6h`*z3mSJ17{V8rL3 zjk_duhnl&H?c#3?+?8AIv6VJe&zL)UEExR8PlO*t#pC2%6z7rSR8I;ExxEWnQYEi7 zoQX9()>El(HVq1Dire7Gv|BNlYjB6URFFxIGK23OOkufQ*aE3}jj*c;Nd|a_ST*D+f7Y5fOtdBUYyk~J%sBrYky^cU+XmBzfye(qY*avO^vEWc zk&6Q`=>z~E^E#{~fC9Q$B=gU0W=)YQP=Y#JVS7xkz=5N+OAC0I(C@!(1)e*ze8T!B zior!w&DazO-z z0mwU6-P|VeC_IUrGz@47V)<`Nztrf>gS%D%)Z5QY(m>ziWc@jTvi7bP;86bo8Z8!W zkum}RxSOx>7ysP##n~NF*|Qm^A3i?^{=M4gA;bUF4gLyNgns#`9lrl{lpO@dl6+Ly z8LwelcJ)C?vDD#M0$C7`oQ{>RnfJ=@?P2lGzURV&VbZ@n1c2ch0~`z5Bvf>28YRmS z6kZtVbTHL6Wyq<-ZJ?^c8UFz-RjAoB9b)I|Dh%%S$Tt$wO&T@hj9)QOO`bfAz9s*| zsmFRcpxa|&fV`=b{MC{LV)BGpwyND8ZR8~~ffFdz_tS}=c6c#HSH%;|c`b+?@2YCW zNqjUnJ}(d!mfBKc;k~J{9((E|TYsq`>%=DUQEG6GQa~wo-fKni<(kv0^QfO#0;;;! zbKzm`@(#4SKF1Q5YHrM=FSw}X{9~Lx74!m}v)(6MX{ZUrM~~bggeKE7`pHEn=<+;t zhTtAgl0mCQg2D;2Pu-Z>9y~y#e204&nFi7secuFV#?{>$kLI@3>@)Co|CK#yo zy5IWX(cDRQbn~(U*==IUZcuD!h<50-VQ?N37tlvAP*1(f6H+OAB4Asy>Xq1%?6w5h>~^%6Fzg-0jh zumRI_D!mX(Kvzm5AXMTgX(F{(E&!i*H@~!R|af-B2EQV-)Fg|iD6n2Sj#Iajj@vza>t_h856A6s zpCOvaCdIc#&FI7a2acgDvKu1Ly17@@R9OeYk90LRty16kq-r!TGkDh~_mpmKbT_7l z!+%P-c07E;0yf}Bh7fUSBcF)+Aj#np`WDUvP#yZ6nL%8!47BW-)dS$CeOI(^FMy@P zFZALz=g4EhM(^{VXvTx>s}>(MZK`HpifygZS=`?xJa{h`G54;LX#w`tp? ze|U?CPsg~Q`Zar_inrFPZf0D;VD-}@VCuM4EQqeT{rr;K#-p7N>dhYNSBX1=xDs&; zzv%6wgGHNLod%B^1JS;oZ>z%$3IOFu>Gv16l>C;c; zU3953dRttx_L%9k?O0uLIYD5umay5Omual__8M(*3b`bd1*y4J?}A=C;E>EZshH-C zKX`?Yuk<28?l}VC_=nEsRjZ}YI|1R0<2Hv>(}I)oxYX|MY}Ke0e6Awjk*&>m8M$NS z)x_JIUvuPPl<&QQCuCO4s?I-e7ii?|)Q`22+5PTApKBiZ49DzyFwet{YkDIU3F}4F zJ9%BBx$7kGxVsY9M*!BXUtUpXYv6m%-;hp%ll)Zr#CXe*e&2Sp`?peqVcthdRWY>v z#v#c_;$>3Hb?z+t0BgdE+s{!SrwMlygk(lsDw29IN_#l30Iu^Dx6?VA$r4>A&qKXL zXaXZ)*5)M68Lza*KH8a_Pw7+nc{Qm{%DZC_sr70$!e>&BOP<-Fy_t^UcI>}uneQ-= z0B{Jzi&Vf=+AF0vCLg~CI#=V&z$g5|B6#o|BaalDmQ`+7SRo0hkfbVCm%OO}Gi|mK zKTd}1B}jdBPZ<+B3wy&sryU}@7ZM&xuC;iV5Oq1TKr|joF}%y<^*lS-^uFO%#Ge|h36bwaW`ABP)wd?gJVC4i$pQkXpl_%r0Z)M3 zyMjytkaMIcG3RT5>A!FHNl4tHjrw+kMO3X76HWXH)vNAU#xcj)vX&gM-ZsQJ;!tG;nes&BpX>2K;Qm8 zNw!8=@HE?pEorrfROGr78O<)bywQ!Q7SnQ%K-W}g;muR?q8sbmm%V|sVe?!Q!WZEM znLq4L>NGcj(Bn8#wSW{w(78p|3cAf}G^qe7hOqf(%qd%`y;XX|s8On;iM1f0zGK9G znf*I5KV_!6%22`8d@?(_EG(rq_W&vs09H=GS?ULRS575Y_oF-PX9dJ<+W=1TK;%by zocl}D5Kpf*^5vDiB@Do9cLp)?DU=yx0x68Yz7Aep5CAjyah7~@D>Ick;wJA`IkJ{L zM}D^O_jA|mei2&fyBEK%Or5*arcJwA>JF!`H9Fj(ThG-7lTR;3s1O0Pno}^3OBjDu zmP$?_TJX_;=(sqOB`K0DJn7?4{Q>>VbHZT{esJM}gy%zcPr)=csL_(4k`-*&6N8U% z>2E$-66w!nycYFxN_NX)>y(}{pHF+ww3UhSkefe~9wCkFmv+@-s+h{SOdq%oQ2E8? zl_|xD5?>6lHHqt zzckL4{9?eNyIS(X`_EuQ8TkG-y8d$E$C{exFw5$>^ZlkvExnTTq?gpvL+c`{c zwv3b4wwoWtSkK;OD&1t{8=s|1-SlCPsEj!!3J183?Bgrnn7R_y*TA1;=k`Zc*k0TU zX1!{X!d*<;&8fd~xE~QI9-j1dKM}U8MiMvTdSGz@pk-!%ukZiHg*4i??-l|q%x)Xx zXX;7_t^8y-F_O~ccvK&dNSP%*^W;f_kbK@)r+MyzGN)LRphfON2v>PNYX=@O7$;VC zL(fh1JnfeBLr$8F2QV%m*~HmEu4O7$COQmN`1ze%o3Gy|4soa#qqr*^rPkwonc*6?!U{W|QQd1C{g7xN=~efDw)EI+ zGize;d?f|KzT?gK!WQ$jyeiEoy%f2G3#7D!;E#%E!}bB}1bk-7+n8tWebNLVkfxTISX=0cPS#-V6pr5&@^ zq^stE%S*(5{Zg%8KP6N})mlg#>PU2UCK%Gw_LJO{Q4q%a)_TLA{nq^6?GD z>IW%Xw>iPxE6UItY0U*wUyWHDrL%}@LTOd!U+eS3S8mN5c?Na6Nsbjir9CD*-Rze> z*%jb%d?03qGw-Li2KauLra5Xbo`AMWU*1obSEhv!GKZs!8d$9Wd9!PQxsOtOKJn|N zdfp7&^Pd-!AMUDpT1i(Y#XYH?an6+9T9=Nyg{GJI3yFUDb9SDY%@84XL=)s6@)Z$XTf8*w z3zu$dRU|XbTIp;91gAr7sZtyT(#=Nubaa0QUjpf24>1sW&@Z0NKLMG*WC;+zXaCEv zIrA?~aV(HOkAa@wNUQOrP(W$AtN5j52$S%j#P;pK9zRPz9Opv1hbNuLh6Cj)>(e2j zjDjr0zs~B+iZ8q)HxGz0x$vHN{8ikBd1zXHkMO`L9>(1FG3P6|DIyG;`5K$F0quGk-+f3}q6 z5!%k|@^U)DcRF($V(ZdTLWe-^;2$^2(3fxsWVHq7Lr#=e(`_Cy{JeYN&m&-vdw}5V z{_#!1vz+u_GqM_?y#Vz$MFWWweDnW1*M24F&tJK+KOH730Nah?af?kJe%&4F&G(-|=SGiprsU!MQWn5HxT*}(L}58_d^ z^@H&Oe>hQRLt|D;{`d6*EFpP6kOFLlsXSvoX$V^`vHZ2r^uy8*B+#QQH3DU2Y>9Eu-;!2G)9^Ld?)SzpLZ}_PPa(0zsB9Q3FHQU zN6*W*lGlNY|J#fA?s%s{2>nK5E6XdD9Ydr50%EJHw6p5T_2zGlr0yQu#IaXJ(E 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 050/972] 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 051/972] 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 052/972] 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 053/972] 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 054/972] 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 055/972] 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 056/972] 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 057/972] 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 058/972] 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 059/972] 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 060/972] 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 061/972] 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 062/972] 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 063/972] 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 064/972] 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 065/972] 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 066/972] 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 067/972] 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 068/972] 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 069/972] 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 070/972] 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 071/972] 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 072/972] 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 073/972] 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 074/972] 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 075/972] 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 076/972] 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 077/972] 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 078/972] 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 079/972] 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 080/972] 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 081/972] 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 082/972] 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 083/972] 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 084/972] 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 085/972] 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 086/972] 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 087/972] 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 088/972] 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 089/972] 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 090/972] 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 091/972] 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 092/972] 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 093/972] 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 094/972] 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 095/972] 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 096/972] 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 097/972] 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 098/972] 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 099/972] 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 100/972] 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 101/972] 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 102/972] 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 103/972] 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 104/972] 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 105/972] 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 106/972] 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 107/972] 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 108/972] 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 109/972] 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 110/972] 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 111/972] 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 112/972] 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 113/972] 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 114/972] 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 115/972] 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 116/972] 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 117/972] 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 118/972] 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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