int main()
{
diff --git a/docs/build/walkthrough-using-msbuild-to-create-a-visual-cpp-project.md b/docs/build/walkthrough-using-msbuild-to-create-a-visual-cpp-project.md
index 9543859eee..2e21028185 100644
--- a/docs/build/walkthrough-using-msbuild-to-create-a-visual-cpp-project.md
+++ b/docs/build/walkthrough-using-msbuild-to-create-a-visual-cpp-project.md
@@ -83,10 +83,10 @@ An MSBuild project file is an XML file that contains a project root element (`` element shown here. (Use `ToolsVersion="14.0"` if you're using Visual Studio 2015, `ToolsVersion="15.0"` if you're using Visual Studio 2017, or `ToolsVersion="16.0"` if you're using Visual Studio 2019.)
+1. Use a text editor to create a project file that is named *`myproject.vcxproj`*, and then add the root `` element shown here. (Use `ToolsVersion="14.0"` if you're using Visual Studio 2015, `ToolsVersion="15.0"` if you're using Visual Studio 2017, `ToolsVersion="16.0"` if you're using Visual Studio 2019, or `ToolsVersion="17.0"` if you're using Visual Studio 2022.)
```xml
-
+
```
@@ -113,12 +113,12 @@ An MSBuild project file is an XML file that contains a project root element (`
```
-1. Add a property group element (``) that specifies two project properties, `` and ``. (Use `v140` as the `` value if you're using Visual Studio 2015, `v141` if you're using Visual Studio 2017, or `v142` if you're using Visual Studio 2019.)
+1. Add a property group element (``) that specifies two project properties, `` and ``. (Use `v140` as the `` value if you're using Visual Studio 2015, `v141` if you're using Visual Studio 2017, `v142` if you're using Visual Studio 2019 or `v143` if you're using Visual Studio 2022.)
```xml
Application
- v142
+ v143
```
@@ -155,10 +155,10 @@ An MSBuild project file is an XML file that contains a project root element (`
+
Debug
diff --git a/docs/build/working-with-project-properties.md b/docs/build/working-with-project-properties.md
index 8cd9eae55a..3540aad87d 100644
--- a/docs/build/working-with-project-properties.md
+++ b/docs/build/working-with-project-properties.md
@@ -1,38 +1,39 @@
---
-title: "Set C++ compiler and build properties in Visual Studio"
+title: "Set C++ Compiler and Build Properties in Visual Studio"
description: "Use the Visual Studio IDE to change C++ compiler and linker options and other build settings."
-ms.date: "07/17/2019"
+ms.date: 03/19/2025
+ms.topic: concept-article
helpviewer_keywords: ["project properties [C++], modifying", "properties [C++]", "Visual C++ projects, properties", "projects [C++], properties"]
---
# Set compiler and build properties
-In the IDE, properties expose the information needed to build a project. This information includes the application name, extension (such as DLL, LIB, EXE), compiler options, linker options, debugger settings, custom build steps, and many other things. Typically, you use *property pages* to view and modify these properties. To access the property pages, choose **Project** > **_project-name_ Properties** from the main menu, or right-click on the project node in **Solution Explorer** and choose **Properties**.
+In the Visual Studio IDE, you can view and edit the properties needed to compile and build a project. This information includes the application name, extension (such as DLL, LIB, EXE), compiler options, linker options, debugger settings, and custom build steps.
+
+You can view and modify these properties by using *property pages*. To access the property pages, choose **Project** > **_project-name_ Properties** from the main menu, or right-click on the project node in **Solution Explorer** and choose **Properties**.
## Default properties
-When you create a project, the system assigns values for various properties. The defaults vary somewhat depending on the kind of project and what options you choose in the app wizard. For example, an ATL project has properties related to MIDL files, but these properties are absent in a basic console application. The default properties are shown in the General pane in the Property Pages:
+When you create a project, the system assigns values for various properties. The defaults vary somewhat depending on the kind of project and what options you choose in the app wizard. For example, an Active Template Library (ATL) project has properties related to Microsoft Interface Definition Language (MIDL) files, but these properties are absent in a basic console application. The default properties are shown in the Advanced pane in the **Property Pages** window:
-:::image type="complex" source="media/visual-c---project-defaults.png" alt-text="Screenshot of the Visual Studio project properties dialog.":::
-The General page is open. The Project Defaults section is highlighted, which includes Configuration Type set to Application (.exe), use of MFC set to Use standard Windows libraries, Character set is Unicode, Common Language Runtime Support is set to No Common Language Runtime Support, Whole Program optimization is set to No Whole Program Optimization, and Windows Store APP support is set to No.
-:::image-end:::
+:::image type="content" source="media/visual-c---project-defaults.png" alt-text="Screenshot of the Visual Studio project properties dialog box with the Advanced pane selected. Properties such as Use of MFC, Character Set, and so on are highlighted." lightbox="media/visual-c---project-defaults.png":::
-## Applying properties to build configurations and target platforms
+## Apply properties to build configurations and target platforms
Some properties, such as the application name, apply to all build variations and target platforms, whether it's a debug or release build. But most properties are configuration-dependent. To generate the correct code, the compiler has to know both the specific platform the program runs on and which specific compiler options to use. So when you set a property, it's important to pay attention to which configuration and platform the new value should apply to. Should it apply only to Debug Win32 builds, or should it also apply to Debug ARM64 and Debug x64? For example, the **Optimization** property, by default, is set to **Maximize Speed (/O2)** in a Release configuration, but is disabled in the Debug configuration.
-You can always see and change the configuration and platform a property value should apply to. The following illustration shows the property pages with the configuration and platform information controls at the top. When the **Optimization** property is set here, it only applies to Debug Win32 builds, the currently active configuration, as shown by the red arrows.
+You can always see and change the configuration and platform a property value should apply to. The following illustration shows the property pages with the configuration and platform information controls at the top. When the **Optimization** property is set here, it only applies to Debug x64 builds, the currently active configuration, as shown by the red arrows.
:::image type="complex" source="media/visual-c---property-pages-showing-active-configuration.png" alt-text="Screenshot of the Visual Studio Property Pages dialog.":::
-The page is open to C/C++, Optimization. The Optimization setting is set to Disabled (/Od), which is called out. An arrow calls out the relationship between the Configuration setting in the project property page, which is set to Active(Debug), and the setting in the Solution configuration dropdown on the toolbar, which is set to Debug. Another arrow calls out the relationship between the Platform setting in the project property page, which is set to Active(Win32), and the setting in the Solutions platform dropdown on the toolbar, which is set to x86.
+The page is open to C/C++, Optimization. The Optimization setting is set to Disabled (/Od), which is called out. An arrow calls out the relationship between the Configuration setting in the project property page, which is set to Active(Debug), and the setting in the Solution configuration dropdown on the toolbar, which is set to Debug. Another arrow calls out the relationship between the Platform setting in the project property page, which is set to Active(x64), and the setting in the Solutions platform dropdown on the toolbar, which is set to x64.
:::image-end:::
The following illustration shows the same project property page, but the configuration has been changed to Release. Note the different value for the Optimization property. Also note that the active configuration is still Debug. You can set properties for any configuration here; it doesn't have to be the active one.
-:::image type="content" source="media/visual-c---property-pages-showing-release-config.png" alt-text="Screenshot of the Visual Studio project Property Pages dialog. The Configuration dropdown is called out and is set to Release. The C/C++ > Optimization > Optimization setting is set to Maximize Speed (/O2).":::
+:::image type="content" source="media/visual-c---property-pages-showing-release-config.png" alt-text="Screenshot of the Visual Studio project Property Pages dialog. The Configuration dropdown is called out and is set to Release. The optimization setting is set to Maximize Speed slash O2.":::
## Target platforms
-*Target platform* refers to the kind of device and operating system that the executable will run on. You can build a project for more than one platform. The available target platforms for C++ projects depend on the kind of project. They include but aren't limited to Win32, x64, ARM, ARM64, Android, and iOS. The **x86** target platform that you might see in **Configuration Manager** is identical to **Win32** in native C++ projects. Win32 means 32-bit Windows and **x64** means 64-bit Windows. For more information about these two platforms, see [Running 32-bit applications](/windows/win32/WinProg64/running-32-bit-applications).
+*Target platform* refers to the kind of device and operating system that the executable runs on. You can build a project for more than one platform. The available target platforms for C++ projects depend on the kind of project. They include but aren't limited to Win32, x64, ARM, ARM64, Android, and iOS. The **x86** target platform that you might see in **Configuration Manager** is identical to **Win32** in native C++ projects. Win32 means 32-bit Windows and **x64** means 64-bit Windows. For more information about these two platforms, see [Running 32-bit applications](/windows/win32/WinProg64/running-32-bit-applications).
The **Any CPU** target platform value that you might see in **Configuration Manager** has no effect on native C++ projects. It's only relevant for C++/CLI and other .NET project types. For more information, see [`/CLRIMAGETYPE` (Specify Type of CLR Image)](reference/clrimagetype-specify-type-of-clr-image.md).
@@ -51,7 +52,7 @@ The **Property Pages** dialog box shows only the property pages that are relevan
## Directory and path values
-MSBuild supports the use of compile-time constants for certain string values, such as include directories and paths, called *macros*. A macro can refer to a value that's defined by Visual Studio or the MSBuild system, or to a user-defined value. Macros look like `$(macro-name)` or `%(item-macro-name)`. They're exposed in the property pages, where you can refer to and modify them by using the [Property Editor](#property_editor). Use macros instead of hard-coded values such as directory paths. Macros make it easier to share property settings between machines and between versions of Visual Studio. And, you can better ensure that your project settings participate correctly in [property inheritance](project-property-inheritance.md).
+MSBuild supports the use of compile-time constants for certain string values, such as include directories and paths, called *macros*. A macro can refer to a value that's defined by Visual Studio or the MSBuild system, or to a user-defined value. Macros look like `$(macro-name)` or `%(item-macro-name)`. They're exposed in the property pages, where you can refer to and modify them by using the [Property Editor](#property_editor). Use macros instead of hard-coded values such as directory paths. Macros make it easier to share property settings between machines and between versions of Visual Studio. You can also better ensure that your project settings participate correctly in [property inheritance](project-property-inheritance.md).
The following illustration shows the property pages for a Visual Studio C++ project. In the left pane, the **VC++ Directories** *rule* is selected, and the right pane lists the properties that are associated with that rule. The property values are often macros, such as `$(VC_SourcePath)`:
@@ -63,21 +64,21 @@ You can use the [Property Editor](#property_editor) to view the values of all av
### Predefined macros
-- **Global macros**:\
+- **Global macros**\
Global macros apply to all items in a project configuration. A global macro has the syntax `$(name)`. An example of a global macro is `$(VCInstallDir)`, which stores the root directory of your Visual Studio installation. A global macro corresponds to a `PropertyGroup` in MSBuild.
- **Item macros**\
- Item macros have the syntax `%(name)`. For a file, an item macro applies only to that file—for example, you can use `%(AdditionalIncludeDirectories)` to specify include directories that apply only to a particular file. This kind of item macro corresponds to an `ItemGroup` metadata in MSBuild. When used in the context of a project configuration, an item macro applies to all files of a certain type. For example, the C/C++ **Preprocessor Definitions** configuration property can take a `%(PreprocessorDefinitions)` item macro that applies to all .cpp files in the project. This kind of item macro corresponds to an `ItemDefinitionGroup` metadata in MSBuild. For more information, see [Item Definitions](/visualstudio/msbuild/item-definitions).
+ Item macros have the syntax `%(name)`. For a file, an item macro applies only to that file. For example, you can use `%(AdditionalIncludeDirectories)` to specify include directories that apply only to a particular file. This kind of item macro corresponds to an `ItemGroup` metadata in MSBuild. When used in the context of a project configuration, an item macro applies to all files of a certain type. For example, the C/C++ **Preprocessor Definitions** configuration property can take a `%(PreprocessorDefinitions)` item macro that applies to all .cpp files in the project. This kind of item macro corresponds to an `ItemDefinitionGroup` metadata in MSBuild. For more information, see [Item definitions](/visualstudio/msbuild/item-definitions).
### User-defined macros
-You can create *user-defined macros* to use as variables in project builds. For example, you could create a user-defined macro that provides a value to a custom build step or a custom build tool. A user-defined macro is a name/value pair. In a project file, use the `$(name)` notation to access the value.
+You can create *user-defined macros* to use as variables in project builds. For example, you could create a user-defined macro that provides a value to a custom build step or a custom build tool. A user-defined macro is a name-value pair. In a project file, use the `$(name)` notation to access the value.
A user-defined macro is stored in a property sheet. If your project doesn't already contain a property sheet, you can create one by following the steps under [Share or reuse Visual Studio project settings](create-reusable-property-configurations.md).
#### To create a user-defined macro
-1. Open the **Property Manager** window. (On the menu bar, choose **View** > **Property Manager** or **View** > **Other Windows** > **Property Manager**.) Open the shortcut menu for a property sheet (its name ends in *`.user`*) and then choose **Properties**. The **Property Pages** dialog box for that property sheet opens.
+1. Open the **Property Manager** window. On the menu bar, select **View** > **Other Windows** > **Property Manager**. Open the shortcut menu for a property sheet (its name ends in *`.user`*) and then choose **Properties**. The **Property Pages** dialog box for that property sheet opens.
1. In the left pane of the dialog box, select **User Macros**. In the right pane, choose the **Add Macro** button to open the **Add User Macro** dialog box.
@@ -99,20 +100,17 @@ The property editor for Include Directories is open. The evaluated value is disp
## Add an include directory to the set of default directories
-When you add an include directory to a project, it's important not to override all the default directories. The correct way to add a directory is to append the new path, for example "`C:\MyNewIncludeDir\`", and then to Append the **`$(IncludePath)`** macro to the property value.
+When you add an include directory to a project, it's important not to override all the default directories. The correct way to add a directory is to append the new path, for example `C:\MyNewIncludeDir\`, and then to append the `$(IncludePath)` macro to the property value.
## Quickly browse and search all properties
The **All Options** property page (under the **Configuration Properties** > **C/C++** node in the **Property Pages** dialog box) provides a quick way to browse and search the properties that are available in the current context. It has a special search box and a simple syntax to help you filter results:
-No prefix:\
-Search in property names only (case-insensitive substring).
+- No prefix: Search in property names only (case-insensitive substring).
-'`/`' or '`-`':\
-Search only in compiler switches (case-insensitive prefix)
+- '`/`' or '`-`': Search only in compiler switches (case-insensitive prefix).
-`v`:\
-Search only in values (case-insensitive substring).
+- `v`: Search only in values (case-insensitive substring).
## Set environment variables for a build
@@ -124,19 +122,14 @@ In the left pane of the project's **Property Pages** dialog box, expand **Config
In the right pane, modify the **Environment** or **Merge Environment** project settings and then choose the **OK** button.
-## In this section
-
-[Share or reuse Visual Studio project settings](create-reusable-property-configurations.md)\
-How to create a *`.props`* file with custom build settings that can be shared or reused.
-
-[Project property inheritance](project-property-inheritance.md)\
-Describes the order of evaluation for the *`.props`*, *`.targets`*, *`.vcxproj`* files, and environment variables in the build process.
+## Articles in this section
-[Modify properties and targets without changing the project file](modify-project-properties-without-changing-project-file.md)\
-How to create temporary build settings without having to modify a project file.
+- [Share or reuse Visual Studio project settings](create-reusable-property-configurations.md)
+- [Property inheritance in Visual Studio projects](project-property-inheritance.md)
+- [Modify C++ project properties and targets without changing the project file](modify-project-properties-without-changing-project-file.md)
## See also
-[Visual Studio Projects - C++](creating-and-managing-visual-cpp-projects.md)\
-[`.vcxproj` and `.props` file structure](reference/vcxproj-file-structure.md)\
-[Property page XML files](reference/property-page-xml-files.md)
+- [Visual Studio projects - C++](creating-and-managing-visual-cpp-projects.md)
+- [`.vcxproj` and `.props` file structure](reference/vcxproj-file-structure.md)
+- [Property Page XML rule files](reference/property-page-xml-files.md)
diff --git a/docs/build/x64-calling-convention.md b/docs/build/x64-calling-convention.md
index 54418166c4..bf4a575b47 100644
--- a/docs/build/x64-calling-convention.md
+++ b/docs/build/x64-calling-convention.md
@@ -1,21 +1,22 @@
---
-title: "x64 calling convention"
-description: "Learn about the details of the default x64 calling convention."
-ms.date: 05/17/2022
+title: "x64 Calling Convention"
+description: "Learn about the default x64 calling convention that one function uses to make calls into another function."
+ms.date: 03/19/2025
+ms.topic: concept-article
---
# x64 calling convention
-This section describes the standard processes and conventions that one function (the caller) uses to make calls into another function (the callee) in x64 code.
+This article describes the standard processes and conventions that one function (the caller) uses to make calls into another function (the callee) in x64 code.
-For more information on the `__vectorcall` calling convention, see [__vectorcall](../cpp/vectorcall.md).
+For more information about the `__vectorcall` calling convention, see [__vectorcall](../cpp/vectorcall.md).
## Calling convention defaults
-The x64 Application Binary Interface (ABI) uses a four-register fast-call calling convention by default. Space is allocated on the call stack as a shadow store for callees to save those registers.
+The x64 Application Binary Interface (ABI) uses a four-register, fast-call calling convention by default. Space is allocated on the call stack as a shadow store for callees to save those registers.
There's a strict one-to-one correspondence between a function call's arguments and the registers used for those arguments. Any argument that doesn't fit in 8 bytes, or isn't 1, 2, 4, or 8 bytes, must be passed by reference. A single argument is never spread across multiple registers.
-The x87 register stack is unused. It may be used by the callee, but consider it volatile across function calls. All floating point operations are done using the 16 XMM registers.
+The x87 register stack is unused. It might be used by the callee, but consider it volatile across function calls. All floating point operations are done using the 16 XMM registers.
Integer arguments are passed in registers RCX, RDX, R8, and R9. Floating point arguments are passed in XMM0L, XMM1L, XMM2L, and XMM3L. 16-byte arguments are passed by reference. Parameter passing is described in detail in [Parameter passing](#parameter-passing). These registers, and RAX, R10, R11, XMM4, and XMM5, are considered *volatile*, or potentially changed by a callee on return. Register usage is documented in detail in [x64 register usage](x64-software-conventions.md#x64-register-usage) and [Caller/callee saved registers](#callercallee-saved-registers).
@@ -27,13 +28,13 @@ Most structures are aligned to their natural alignment. The primary exceptions a
## Unwindability
-Leaf functions are functions that don't change any non-volatile registers. A non-leaf function may change non-volatile RSP, for example, by calling a function. Or, it could change RSP by allocating additional stack space for local variables. To recover non-volatile registers when an exception is handled, non-leaf functions are annotated with static data. The data describes how to properly unwind the function at an arbitrary instruction. This data is stored as *pdata*, or procedure data, which in turn refers to *xdata*, the exception handling data. The xdata contains the unwinding information, and can point to additional pdata or an exception handler function.
+Leaf functions are functions that don't change any nonvolatile registers. A nonleaf function might change nonvolatile RSP, for example, by calling a function. Or, it could change RSP by allocating more stack space for local variables. To recover nonvolatile registers when an exception is handled, nonleaf functions are annotated with static data. The data describes how to properly unwind the function at an arbitrary instruction. This data is stored as *pdata*, or procedure data, which in turn refers to *xdata*, the exception handling data. The xdata contains the unwinding information, and can point to additional pdata or an exception handler function.
Prologs and epilogs are highly restricted so that they can be properly described in xdata. The stack pointer must remain 16-byte aligned in any region of code that isn't part of an epilog or prolog, except within leaf functions. Leaf functions can be unwound simply by simulating a return, so pdata and xdata aren't required. For details about the proper structure of function prologs and epilogs, see [x64 prolog and epilog](../build/prolog-and-epilog.md). For more information about exception handling, and the exception handling and unwinding of pdata and xdata, see [x64 exception handling](../build/exception-handling-x64.md).
## Parameter passing
-By default, the x64 calling convention passes the first four arguments to a function in registers. The registers used for these arguments depend on the position and type of the argument. Remaining arguments get pushed on the stack in right-to-left order.
+By default, the x64 calling convention passes the first four arguments to a function in registers. The registers used for these arguments depend on the position and type of the argument. Remaining arguments get pushed on the stack in right-to-left order. All arguments passed on the stack are 8-byte aligned.
Integer valued arguments in the leftmost four positions are passed in left-to-right order in RCX, RDX, R8, and R9, respectively. The fifth and higher arguments are passed on the stack as previously described. All integer arguments in registers are right-justified, so the callee can ignore the upper bits of the register and access only the portion of the register necessary.
@@ -92,7 +93,7 @@ If parameters are passed via varargs (for example, ellipsis arguments), then the
For functions not fully prototyped, the caller passes integer values as integers and floating-point values as double precision. For floating-point values only, both the integer register and the floating-point register contain the float value in case the callee expects the value in the integer registers.
-```cpp
+```c
func1();
func2() { // RCX = 2, RDX = XMM1 = 1.0, and R8 = 7
func1(2, 1.0, 7);
@@ -101,9 +102,9 @@ func2() { // RCX = 2, RDX = XMM1 = 1.0, and R8 = 7
## Return values
-A scalar return value that can fit into 64 bits, including the **`__m64`** type, is returned through RAX. Non-scalar types including floats, doubles, and vector types such as [`__m128`](../cpp/m128.md), [`__m128i`](../cpp/m128i.md), [`__m128d`](../cpp/m128d.md) are returned in XMM0. The state of unused bits in the value returned in RAX or XMM0 is undefined.
+A scalar return value that can fit into 64 bits, including the `__m64` type, is returned through RAX. Nonscalar types including floats, doubles, and vector types such as [`__m128`](../cpp/m128.md), [`__m128i`](../cpp/m128i.md), [`__m128d`](../cpp/m128d.md) are returned in XMM0. The state of unused bits in the value returned in RAX or XMM0 is undefined.
-User-defined types can be returned by value from global functions and static member functions. To return a user-defined type by value in RAX, it must have a length of 1, 2, 4, 8, 16, 32, or 64 bits. It must also have no user-defined constructor, destructor, or copy assignment operator. It can have no private or protected non-static data members, and no non-static data members of reference type. It can't have base classes or virtual functions. And, it can only have data members that also meet these requirements. (This definition is essentially the same as a C++03 POD type. Because the definition has changed in the C++11 standard, we don't recommend using `std::is_pod` for this test.) Otherwise, the caller must allocate memory for the return value and pass a pointer to it as the first argument. The remaining arguments are then shifted one argument to the right. The same pointer must be returned by the callee in RAX.
+User-defined types can be returned by value from global functions and static member functions. To return a user-defined type by value in RAX, it must have a length of 1, 2, 4, 8, 16, 32, or 64 bits. It must also have no user-defined constructor, destructor, or copy assignment operator. It can have no private or protected nonstatic data members, and no nonstatic data members of reference type. It can't have base classes or virtual functions. And, it can only have data members that also meet these requirements. This definition is essentially the same as a C++03 POD type. Because the definition has changed in the C++11 standard, we don't recommend using `std::is_pod` for this test. Otherwise, the caller must allocate memory for the return value and pass a pointer to it as the first argument. The remaining arguments are then shifted one argument to the right. The same pointer must be returned by the callee in RAX.
These examples show how parameters and return values are passed for functions with the specified declarations:
@@ -168,7 +169,7 @@ The x87 FPU control word register gets set using the following standard values a
| Register\[bits] | Setting |
|-|-|
-| FPCSR\[0:6] | Exception masks all 1's (all exceptions masked) |
+| FPCSR\[0:6] | Exception masks all 1s (all exceptions masked) |
| FPCSR\[7] | Reserved - 0 |
| FPCSR\[8:9] | Precision Control - 10B (double precision) |
| FPCSR\[10:11] | Rounding control - 0 (round to nearest) |
@@ -176,7 +177,7 @@ The x87 FPU control word register gets set using the following standard values a
A callee that modifies any of the fields within FPCSR must restore them before returning to its caller. Furthermore, a caller that has modified any of these fields must restore them to their standard values before invoking a callee, unless by agreement the callee expects the modified values.
-There are two exceptions to the rules about the non-volatility of the control flags:
+There are two exceptions to the rules about the nonvolatility of the control flags:
- In functions where the documented purpose of the given function is to modify the nonvolatile FPCSR flags.
@@ -191,13 +192,13 @@ The nonvolatile portion is set to the following standard values at the start of
| Register\[bits] | Setting |
|-|-|
| MXCSR\[6] | Denormals are zeros - 0 |
-| MXCSR\[7:12] | Exception masks all 1's (all exceptions masked) |
+| MXCSR\[7:12] | Exception masks all 1s (all exceptions masked) |
| MXCSR\[13:14] | Rounding control - 0 (round to nearest) |
| MXCSR\[15] | Flush to zero for masked underflow - 0 (off) |
A callee that modifies any of the nonvolatile fields within MXCSR must restore them before returning to its caller. Furthermore, a caller that has modified any of these fields must restore them to their standard values before invoking a callee, unless by agreement the callee expects the modified values.
-There are two exceptions to the rules about the non-volatility of the control flags:
+There are two exceptions to the rules about the nonvolatility of the control flags:
- In functions where the documented purpose of the given function is to modify the nonvolatile MXCSR flags.
@@ -207,10 +208,10 @@ Make no assumptions about the MXCSR register's volatile portion state across a f
## setjmp/longjmp
-When you include setjmpex.h or setjmp.h, all calls to [`setjmp`](../c-runtime-library/reference/setjmp.md) or [`longjmp`](../c-runtime-library/reference/longjmp.md) result in an unwind that invokes destructors and **`__finally`** calls. This behavior differs from x86, where including setjmp.h results in **`__finally`** clauses and destructors not being invoked.
+When you include `setjmpex.h` or `setjmp.h`, all calls to [`setjmp`](../c-runtime-library/reference/setjmp.md) or [`longjmp`](../c-runtime-library/reference/longjmp.md) result in an unwind that invokes destructors and `__finally` calls. This behavior differs from x86, where including `setjmp.h` results in `__finally` clauses and destructors not being invoked.
-A call to `setjmp` preserves the current stack pointer, non-volatile registers, and MXCSR registers. Calls to `longjmp` return to the most recent `setjmp` call site and resets the stack pointer, non-volatile registers, and MXCSR registers, back to the state as preserved by the most recent `setjmp` call.
+A call to `setjmp` preserves the current stack pointer, nonvolatile registers, and MXCSR registers. Calls to `longjmp` return to the most recent `setjmp` call site and resets the stack pointer, nonvolatile registers, and MXCSR registers, back to the state as preserved by the most recent `setjmp` call.
## See also
-[x64 software conventions](../build/x64-software-conventions.md)
+- [Overview of x64 ABI conventions](../build/x64-software-conventions.md)
diff --git a/docs/build/x64-software-conventions.md b/docs/build/x64-software-conventions.md
index 256fbdb581..7f8229a531 100644
--- a/docs/build/x64-software-conventions.md
+++ b/docs/build/x64-software-conventions.md
@@ -1,8 +1,9 @@
---
description: "Learn more about: x64 ABI conventions"
title: "x64 ABI conventions"
-ms.date: 04/21/2022
+ms.date: 03/28/2025
helpviewer_keywords: ["x64 coding conventions", "x64 abi", "Visual C++, x64 calling conventions"]
+ms.topic: concept-article
---
# Overview of x64 ABI conventions
@@ -11,10 +12,11 @@ This topic describes the basic application binary interface (ABI) for x64, the 6
## x64 calling conventions
Two important differences between x86 and x64 are:
+
- 64-bit addressing capability
- Sixteen 64-bit registers for general use.
-Given the expanded register set, x64 uses the [__fastcall](../cpp/fastcall.md) calling convention and a RISC-based exception-handling model.
+Given the expanded register set, x64 uses the [`__fastcall`](../cpp/fastcall.md) calling convention and a RISC-based exception-handling model.
The **`__fastcall`** convention uses registers for the first four arguments, and the stack frame to pass more arguments. For details on the x64 calling convention, including register usage, stack parameters, return values, and stack unwinding, see [x64 calling convention](x64-calling-convention.md).
@@ -116,7 +118,7 @@ _declspec(align(2)) struct {
}
```
-
+:::image type="content" source="../build/media/vcamd_conv_ex_1_block.png" alt-text="Diagram showing the structure layout for example 1. The diagram shows 2 bytes of memory. Member a, a short, occupies bytes 0 through 1.":::
#### Example 2
@@ -130,7 +132,9 @@ _declspec(align(8)) struct {
}
```
-
+:::image type="complex" source="../build/media/vcamd_conv_ex_2_block.png" alt-text="Diagram showing the structure layout for example 2.":::
+The diagram shows 24 bytes of memory. Member a, an int, occupies bytes 0 through 3. The diagram shows padding for bytes 4 through 7. Member b, a double, occupies bytes 8 through 15. Member c, a short, occupies bytes 16 through 17. Bytes 18 through 23 are unused.
+:::image-end:::
#### Example 3
@@ -145,7 +149,9 @@ _declspec(align(4)) struct {
}
```
-
+:::image type="complex" source="../build/media/vcamd_conv_ex_3_block.png" alt-text="Diagram showing the structure layout for example 3.":::
+The diagram shows 12 bytes of memory. Member a, a char, occupies byte 0. Byte 1 is padding. Member b, a short, occupies bytes 2 through 4. Member c, a char, occupies byte 4. Bytes 5 through 7 are padding. Member d, an int, occupies bytes 8 through 11.
+:::image-end:::
#### Example 4
@@ -159,7 +165,9 @@ _declspec(align(8)) union {
}
```
-
+:::image type="complex" source="../build/media/vcamd_conv_ex_4_block.png" alt-text="Diagram showing the union layout for example 4.":::
+The diagram shows 8 bytes of memory. Member p, a char, occupies byte 0. Member s, a short, occupies bytes 0 through 1. Member l, a long, occupies bytes 0 through 3. Bytes 4 through 7 are padding.
+:::image-end:::
### Bitfields
@@ -211,7 +219,7 @@ On function exit and on function entry to C Runtime Library calls and Windows sy
## Stack usage
-For details on stack allocation, alignment, function types and stack frames on x64, see [x64 stack usage](stack-usage.md).
+For details on stack allocation, alignment, function types, and stack frames on x64, see [x64 stack usage](stack-usage.md).
## Prolog and epilog
diff --git a/docs/c-language/c-comments.md b/docs/c-language/c-comments.md
index aaa1c15a1e..bae1313137 100644
--- a/docs/c-language/c-comments.md
+++ b/docs/c-language/c-comments.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: C Comments"
title: "C Comments"
-ms.date: "06/25/2018"
+description: "Learn more about: C Comments"
+ms.date: 06/25/2018
helpviewer_keywords: ["code comments, C code", "comments, documenting code", "comments, C code", "/* */ comment delimiters", "comments"]
-ms.assetid: 0f5f2825-e673-49e7-8669-94e2f5294989
---
# C Comments
@@ -57,7 +56,7 @@ The Microsoft compiler also supports single-line comments preceded by two forwar
// This is a valid comment
```
-Comments beginning with two forward slashes (**`//`**) are terminated by the next newline character that isn't preceded by an escape character. In the next example, the newline character is preceded by a backslash (**`\`**), creating an "escape sequence." This escape sequence causes the compiler to treat the next line as part of the previous line. (For more information, see [Escape Sequences](../c-language/escape-sequences.md).)
+Comments beginning with two forward slashes (**`//`**) are terminated by the next newline character that isn't preceded by an escape character. In the next example, the newline character is preceded by a backslash (**`\`**), creating an "escape sequence." This escape sequence causes the compiler to treat the next line as part of the previous line. For more information, see [Escape Sequences](../c-language/escape-sequences.md).
```C
// my comment \
diff --git a/docs/c-language/c-primary-expressions.md b/docs/c-language/c-primary-expressions.md
index 1b57eecbf0..b2939192a2 100644
--- a/docs/c-language/c-primary-expressions.md
+++ b/docs/c-language/c-primary-expressions.md
@@ -23,5 +23,5 @@ Primary expressions are the building blocks of more complex expressions. They ma
## See also
-[Generic selection](generic-selection.md)
+[Generic selection](generic-selection.md)\
[Operands and Expressions](../c-language/operands-and-expressions.md)
diff --git a/docs/c-language/demotion-of-integers.md b/docs/c-language/demotion-of-integers.md
index f64f4104f9..5cc14b1695 100644
--- a/docs/c-language/demotion-of-integers.md
+++ b/docs/c-language/demotion-of-integers.md
@@ -25,7 +25,7 @@ char y = (char)0x1234;
assigns the value 0x34 to `y`.
-When **`signed`** variables are converted to **`unsigned`** and vice-versa, the bit patterns remain the same. For example, casting -2 (0xFE) to an **`unsigned`** value yields 254 (also 0xFE).
+When **`signed`** variables are converted to **`unsigned`** and vice-versa, the bit patterns remain the same. For example, casting -2 (0xFFFFFFFE) to an **`unsigned int`** value yields 4294967294 (also 0xFFFFFFFE).
## See also
diff --git a/docs/c-language/extern-storage-class-specifier.md b/docs/c-language/extern-storage-class-specifier.md
index cfcf2a0c38..fc53268609 100644
--- a/docs/c-language/extern-storage-class-specifier.md
+++ b/docs/c-language/extern-storage-class-specifier.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: extern Storage-Class Specifier"
title: "extern Storage-Class Specifier"
+description: "Learn more about: extern Storage-Class Specifier"
ms.date: "07/10/2018"
helpviewer_keywords: ["extern keyword [C]", "storage class specifiers, extern", "extern keyword [C], storage class specifier", "external linkage, storage-class specifiers", "external linkage, extern modifier"]
-ms.assetid: 6e16d927-291f-49e4-986c-9d91a482a441
---
# extern Storage-Class Specifier
@@ -14,12 +13,11 @@ A variable declared with the **`extern`** storage-class specifier is a reference
This example illustrates internal- and external-level declarations:
```c
-
// Source1.c
int i = 1;
-// Source2. c
+// Source2.c
#include
diff --git a/docs/c-language/initializing-scalar-types.md b/docs/c-language/initializing-scalar-types.md
index 77c5673825..bcd7ca93c1 100644
--- a/docs/c-language/initializing-scalar-types.md
+++ b/docs/c-language/initializing-scalar-types.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Initializing Scalar Types"
title: "Initializing Scalar Types"
-ms.date: "11/04/2016"
+description: "Learn more about: Initializing Scalar Types"
+ms.date: 11/04/2016
helpviewer_keywords: ["initializing scalar types", "register variables", "initialization, scalar types", "initializing variables, scalar types", "scalar types", "static variables, initializing", "automatic storage class, initializing scalar types", "automatic storage class", "types [C], initializing"]
-ms.assetid: 73c516f5-c3ad-4d56-ab3b-f2a82b621104
---
# Initializing Scalar Types
@@ -38,7 +37,7 @@ You can initialize variables of any type, as long as you obey the following rule
- Variables declared with the **`auto`** or **`register`** storage-class specifier are initialized each time execution control passes to the block in which they're declared. If you omit an initializer from the declaration of an **`auto`** or **`register`** variable, the initial value of the variable is undefined. For automatic and register values, the initializer isn't restricted to being a constant; it can be any expression involving previously defined values, even function calls.
-- The initial values for external variable declarations and for all **`static`** variables, whether external or internal, must be constant expressions. (For more information, see [Constant Expressions](../c-language/c-constant-expressions.md).) Since the address of any externally declared or static variable is constant, it can be used to initialize an internally declared **`static`** pointer variable. However, the address of an **`auto`** variable can't be used as a static initializer because it may be different for each execution of the block. You can use either constant or variable values to initialize **`auto`** and **`register`** variables.
+- The initial values for external variable declarations and for all **`static`** variables, whether external or internal, must be constant expressions. For more information, see [Constant Expressions](../c-language/c-constant-expressions.md). Since the address of any externally declared or static variable is constant, it can be used to initialize an internally declared **`static`** pointer variable. However, the address of an **`auto`** variable can't be used as a static initializer because it may be different for each execution of the block. You can use either constant or variable values to initialize **`auto`** and **`register`** variables.
- If the declaration of an identifier has block scope, and the identifier has external linkage, the declaration can't have an initialization.
diff --git a/docs/c-language/l-value-and-r-value-expressions.md b/docs/c-language/l-value-and-r-value-expressions.md
index cca7a68bf2..5a646ce54d 100644
--- a/docs/c-language/l-value-and-r-value-expressions.md
+++ b/docs/c-language/l-value-and-r-value-expressions.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: L-Value and R-Value Expressions"
title: "L-Value and R-Value Expressions"
-ms.date: "11/04/2016"
+description: "Learn more about: L-Value and R-Value Expressions"
+ms.date: 11/04/2016
helpviewer_keywords: ["L-values", "member-selection expressions", "R-value expressions", "subscript expressions"]
-ms.assetid: b790303e-ec6f-4d0d-bc55-df42da267172
---
# L-Value and R-Value Expressions
@@ -31,7 +30,7 @@ The term "r-value" is sometimes used to describe the value of an expression and
**Microsoft Specific**
-Microsoft C includes an extension to the ANSI C standard that allows casts of l-values to be used as l-values, as long as the size of the object isn't lengthened through the cast. (For more information, see [Type-Cast Conversions](../c-language/type-cast-conversions.md).) The following example illustrates this feature:
+Microsoft C includes an extension to the ANSI C standard that allows casts of l-values to be used as l-values, as long as the size of the object isn't lengthened through the cast. For more information, see [Type-Cast Conversions](../c-language/type-cast-conversions.md). The following example illustrates this feature:
```
char *p ;
diff --git a/docs/c-language/parameters.md b/docs/c-language/parameters.md
index cc504bb490..f2eb26888e 100644
--- a/docs/c-language/parameters.md
+++ b/docs/c-language/parameters.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Parameters"
title: "Parameters"
-ms.date: "11/04/2016"
+description: "Learn more about: Parameters"
+ms.date: 11/04/2016
helpviewer_keywords: ["arguments [C++], function", "function parameters", "parameters [C++]", "function arguments, vs. parameters", "parameters [C++], function", "functions [C], parameters", "function parameters, syntax", "ellipsis (...), parameters", "... ellipsis"]
-ms.assetid: 8f2b8026-78b5-4e21-86a3-bf0f91f05689
---
# Parameters
@@ -50,7 +49,7 @@ void new( double x, double y, double z )
}
```
-If at least one parameter occurs in the parameter list, the list can end with a comma followed by three periods (**`, ...`**). This construction, called the "ellipsis notation," indicates a variable number of arguments to the function. (For more information, see [Calls with a Variable Number of Arguments](../c-language/calls-with-a-variable-number-of-arguments.md).) However, a call to the function must have at least as many arguments as there are parameters before the last comma.
+If at least one parameter occurs in the parameter list, the list can end with a comma followed by three periods (**`, ...`**). This construction, called the "ellipsis notation," indicates a variable number of arguments to the function. For more information, see [Calls with a Variable Number of Arguments](../c-language/calls-with-a-variable-number-of-arguments.md). However, a call to the function must have at least as many arguments as there are parameters before the last comma.
If no arguments are to be passed to the function, the list of parameters is replaced by the keyword **`void`**. This use of **`void`** is distinct from its use as a type specifier.
diff --git a/docs/c-language/scope-and-visibility.md b/docs/c-language/scope-and-visibility.md
index 72e07ffd0f..8f61550b6c 100644
--- a/docs/c-language/scope-and-visibility.md
+++ b/docs/c-language/scope-and-visibility.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Scope and Visibility"
title: "Scope and Visibility"
-ms.date: "11/04/2016"
+description: "Learn more about: Scope and Visibility"
+ms.date: 11/04/2016
helpviewer_keywords: ["scope, levels", "visibility", "file scope [C++]"]
-ms.assetid: a019eb7c-66ed-46a7-bc9f-89a963930a56
---
# Scope and Visibility
@@ -15,7 +14,7 @@ All identifiers except labels have their scope determined by the level at which
The declarator or type specifier for an identifier with file scope appears outside any block or list of parameters and is accessible from any place in the translation unit after its declaration. Identifier names with file scope are often called "global" or "external." The scope of a global identifier begins at the point of its definition or declaration and terminates at the end of the translation unit.
**Function scope**\
-A label is the only kind of identifier that has function scope. A label is declared implicitly by its use in a statement. Label names must be unique within a function. (For more information about labels and label names, see [The goto and Labeled Statements](../c-language/goto-and-labeled-statements-c.md).)
+A label is the only kind of identifier that has function scope. A label is declared implicitly by its use in a statement. Label names must be unique within a function. For more information about labels and label names, see [The goto and Labeled Statements](../c-language/goto-and-labeled-statements-c.md).
**Block scope**\
The declarator or type specifier for an identifier with block scope appears inside a block or within the list of formal parameter declarations in a function definition. It is visible only from the point of its declaration or definition to the end of the block containing its declaration or definition. Its scope is limited to that block and to any blocks nested in that block and ends at the curly brace that closes the associated block. Such identifiers are sometimes called "local variables."
diff --git a/docs/c-language/static-assert-c.md b/docs/c-language/static-assert-c.md
index dc8ab22981..99455cab88 100644
--- a/docs/c-language/static-assert-c.md
+++ b/docs/c-language/static-assert-c.md
@@ -42,7 +42,7 @@ In C, when you don't include ``, the Microsoft compiler treats **`stat
In the following example, **`static_assert`** and **`_Static_assert`** are used to verify how many elements are in an enum and that integers are 32 bits wide.
```C
-// requires /std:c11 or higher
+// requires /std:c11 or later
#include
enum Items
@@ -78,5 +78,5 @@ Windows SDK 10.0.20348.0 (version 2104) or later. For more information on instal
## See also
[`_STATIC_ASSERT` Macro](../c-runtime-library/reference/static-assert-macro.md)\
-[`assert` macro and `_assert` and `_wassert` functions](../c-runtime-library/reference/assert-macro-assert-wassert.md)
+[`assert` macro and `_assert` and `_wassert` functions](../c-runtime-library/reference/assert-macro-assert-wassert.md)\
[`/std` (Specify language standard version)](../build/reference/std-specify-language-standard-version.md)
diff --git a/docs/c-language/toc.yml b/docs/c-language/toc.yml
index cfd26f82ed..13334cd6b4 100644
--- a/docs/c-language/toc.yml
+++ b/docs/c-language/toc.yml
@@ -444,7 +444,7 @@ items:
- name: Inline assembler (C)
href: ../c-language/inline-assembler-c.md
- name: _Noreturn (C)
- href: ../c-language/noreturn.md
+ href: ../c-language/noreturn.md
- name: DLL import and export functions
items:
- name: DLL import and export functions
diff --git a/docs/c-language/typedef-declarations.md b/docs/c-language/typedef-declarations.md
index 019f17fbdf..b503212b6c 100644
--- a/docs/c-language/typedef-declarations.md
+++ b/docs/c-language/typedef-declarations.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Typedef Declarations"
title: "Typedef Declarations"
-ms.date: "11/04/2016"
+description: "Learn more about: Typedef Declarations"
+ms.date: 11/04/2016
helpviewer_keywords: ["declarations, typedef", "typedef declarations", "types [C], declarations"]
-ms.assetid: e92a3b82-9269-4bc6-834a-6f431ccac83e
---
# Typedef Declarations
@@ -43,7 +42,7 @@ A typedef declaration is interpreted in the same way as a variable or function d
A typedef declaration doesn't create new types. It creates synonyms for existing types, or names for types that could be specified in other ways. When a typedef name is used as a type specifier, it can be combined with certain type specifiers, but not others. Acceptable modifiers include **`const`** and **`volatile`**.
-Typedef names share the name space with ordinary identifiers. (For more information, see [Name Spaces](../c-language/name-spaces.md).) Therefore, a program can have a typedef name and a local-scope identifier by the same name. For example:
+Typedef names share the name space with ordinary identifiers. For more information, see [Name Spaces](../c-language/name-spaces.md). Therefore, a program can have a typedef name and a local-scope identifier by the same name. For example:
```C
typedef char FlagType;
diff --git a/docs/c-runtime-library/acmdln-tcmdln-wcmdln.md b/docs/c-runtime-library/acmdln-tcmdln-wcmdln.md
index 4d60eaa7af..45d1630a09 100644
--- a/docs/c-runtime-library/acmdln-tcmdln-wcmdln.md
+++ b/docs/c-runtime-library/acmdln-tcmdln-wcmdln.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _acmdln, _tcmdln, _wcmdln"
title: "_acmdln, _tcmdln, _wcmdln"
-ms.date: "11/04/2016"
+description: "Learn more about: _acmdln, _tcmdln, _wcmdln"
+ms.date: 11/04/2016
api_name: ["_wcmdln", "_acmdln"]
api_location: ["msvcrt.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_acmdln", "_wcmdln", "_tcmdln"]
helpviewer_keywords: ["_wcmdln global variable", "wcmdln global variable", "_acmdln global variable", "_tcmdln global variable", "tcmdln global variable", "acmdln global variable"]
-ms.assetid: 4fc0a6a0-3f93-420a-a19f-5276061ba539
---
# `_acmdln`, `_tcmdln`, `_wcmdln`
@@ -24,6 +23,7 @@ wchar_t * _wcmdln;
#define _tcmdln _wcmdln
#else
#define _tcmdln _acmdln
+#endif
```
## Remarks
@@ -32,4 +32,4 @@ These CRT internal variables store the complete command line. They're exposed in
## See also
-[Global variables](./global-variables.md)
+[Global variables](global-variables.md)
diff --git a/docs/c-runtime-library/ansi-c-compliance.md b/docs/c-runtime-library/ansi-c-compliance.md
index e9aad2a085..67c65fbd7c 100644
--- a/docs/c-runtime-library/ansi-c-compliance.md
+++ b/docs/c-runtime-library/ansi-c-compliance.md
@@ -2,7 +2,7 @@
title: "ANSI C Conformance"
description: "An overview of Microsoft C runtime naming conventions for ANSI C conformance."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["underscores, leading", "compatibility [C++], ANSI C", "conformance with ANSI C", "conventions [C++], Microsoft extensions", "underscores", "naming conventions [C++], Microsoft library", "ANSI [C++], C standard", "Microsoft extensions naming conventions"]
ms.assetid: 6be271bf-eecf-491a-a928-0ee2dd60e3b9
---
diff --git a/docs/c-runtime-library/backward-compatibility.md b/docs/c-runtime-library/backward-compatibility.md
index 16e0a796c7..c96ccb6778 100644
--- a/docs/c-runtime-library/backward-compatibility.md
+++ b/docs/c-runtime-library/backward-compatibility.md
@@ -2,7 +2,7 @@
title: "Backward Compatibility"
description: "How to use the Microsoft OLDNAMES.LIB library to map function names for backwards compatibility."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["CRT, compatibility", "backward compatibility, C run-time libraries", "compatibility, C run-time libraries", "backward compatibility"]
ms.assetid: cc3175cf-97fd-492f-b329-5791aea63090
---
diff --git a/docs/c-runtime-library/buffer-manipulation.md b/docs/c-runtime-library/buffer-manipulation.md
index 21c4336737..7fce41ba6c 100644
--- a/docs/c-runtime-library/buffer-manipulation.md
+++ b/docs/c-runtime-library/buffer-manipulation.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Buffer manipulation"
title: "Buffer manipulation"
-ms.date: "04/04/2018"
+description: "Learn more about: Buffer manipulation"
+ms.date: 04/04/2018
helpviewer_keywords: ["buffers, manipulation routines", "buffers"]
-ms.assetid: 164f4860-ce66-412c-8291-396fbd70f03e
---
# Buffer manipulation
@@ -13,17 +12,17 @@ Use these routines to work with areas of memory on a byte-by-byte basis.
| Routine | Use |
|---|---|
-| [`_memccpy`](./reference/memccpy.md) | Copy characters from one buffer to another until given character or given number of characters has been copied |
-| [`memchr`, `wmemchr`](./reference/memchr-wmemchr.md) | Return pointer to first occurrence, within specified number of characters, of given character in buffer |
-| [`memcmp`, `wmemcmp`](./reference/memcmp-wmemcmp.md) | Compare specified number of characters from two buffers |
-| [`memcpy`, `wmemcpy`](./reference/memcpy-wmemcpy.md), [`memcpy_s`, `wmemcpy_s`](./reference/memcpy-s-wmemcpy-s.md) | Copy specified number of characters from one buffer to another |
-| [`_memicmp`, `_memicmp_l`](./reference/memicmp-memicmp-l.md) | Compare specified number of characters from two buffers without regard to case |
-| [`memmove`, `wmemmove`](./reference/memmove-wmemmove.md),[`memmove_s`, `wmemmove_s`](./reference/memmove-s-wmemmove-s.md) | Copy specified number of characters from one buffer to another |
-| [`memset`, `wmemset`](./reference/memset-wmemset.md) | Use given character to initialize specified number of bytes in the buffer |
-| [`_swab`](./reference/swab.md) | Swap bytes of data and store them at specified location |
+| [`_memccpy`](reference/memccpy.md) | Copy characters from one buffer to another until given character or given number of characters has been copied |
+| [`memchr`, `wmemchr`](reference/memchr-wmemchr.md) | Return pointer to first occurrence, within specified number of characters, of given character in buffer |
+| [`memcmp`, `wmemcmp`](reference/memcmp-wmemcmp.md) | Compare specified number of characters from two buffers |
+| [`memcpy`, `wmemcpy`](reference/memcpy-wmemcpy.md), [`memcpy_s`, `wmemcpy_s`](reference/memcpy-s-wmemcpy-s.md) | Copy specified number of characters from one buffer to another |
+| [`_memicmp`, `_memicmp_l`](reference/memicmp-memicmp-l.md) | Compare specified number of characters from two buffers without regard to case |
+| [`memmove`, `wmemmove`](reference/memmove-wmemmove.md), [`memmove_s`, `wmemmove_s`](reference/memmove-s-wmemmove-s.md) | Copy specified number of characters from one buffer to another |
+| [`memset`, `wmemset`](reference/memset-wmemset.md) | Use given character to initialize specified number of bytes in the buffer |
+| [`_swab`](reference/swab.md) | Swap bytes of data and store them at specified location |
When the source and target areas overlap, only `memmove` is guaranteed to copy the full source properly.
## See also
-[Universal C runtime routines by category](./run-time-routines-by-category.md)
+[Universal C runtime routines by category](run-time-routines-by-category.md)
diff --git a/docs/c-runtime-library/byte-and-wide-streams.md b/docs/c-runtime-library/byte-and-wide-streams.md
index 8ef801bf6c..bc5ab7e6fb 100644
--- a/docs/c-runtime-library/byte-and-wide-streams.md
+++ b/docs/c-runtime-library/byte-and-wide-streams.md
@@ -2,7 +2,7 @@
title: "Byte and Wide Streams"
description: "An overview of byte streams in the Microsoft C runtime library."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["byte streams", "wide streams"]
---
# Byte and wide streams
diff --git a/docs/c-runtime-library/code-pages.md b/docs/c-runtime-library/code-pages.md
index e61fe0e5ee..25a6e84f5d 100644
--- a/docs/c-runtime-library/code-pages.md
+++ b/docs/c-runtime-library/code-pages.md
@@ -1,10 +1,9 @@
---
title: "Code Pages"
description: "A description of code page support in the Microsoft C runtime."
-ms.topic: "conceptual"
-ms.date: "11/04/2016"
+ms.date: 11/04/2016
+ms.topic: "concept-article"
helpviewer_keywords: ["character sets [C++], code pages", "ANSI [C++], code pages", "system-default code page", "multibyte code pages [C++]", "localization [C++], code pages", "code pages [C++], types of", "locale code pages [C++]"]
-ms.assetid: 4a26fc42-185a-4add-98bf-a7b314ae6186
---
# Code pages
@@ -22,7 +21,7 @@ The Microsoft runtime library uses the following types of code pages:
also sets the locale to the system-default ANSI code page.
-- Locale code page. The behavior of several run-time routines is dependent on the current locale setting, which includes the locale code page. (For more information, see [Locale](./locale.md).) By default, all locale-dependent routines in the Microsoft run-time library use the code page that corresponds to the "C" locale. At run time, you can change or query the locale code page in use with a call to [`setlocale`](./reference/setlocale-wsetlocale.md).
+- Locale code page. The behavior of several run-time routines is dependent on the current locale setting, which includes the locale code page. For more information, see [Locale](./locale.md). By default, all locale-dependent routines in the Microsoft run-time library use the code page that corresponds to the "C" locale. At run time, you can change or query the locale code page in use with a call to [`setlocale`](./reference/setlocale-wsetlocale.md).
- Multibyte code page. The behavior of most of the multibyte-character routines in the run-time library depends on the current multibyte code page setting. By default, these routines use the system-default ANSI code page. At run-time you can query and change the multibyte code page with [`_getmbcp`](./reference/getmbcp.md) and [`_setmbcp`](./reference/setmbcp.md), respectively.
diff --git a/docs/c-runtime-library/compatibility.md b/docs/c-runtime-library/compatibility.md
index 45f753bf02..0b56d4e3d8 100644
--- a/docs/c-runtime-library/compatibility.md
+++ b/docs/c-runtime-library/compatibility.md
@@ -2,7 +2,7 @@
title: "Compatibility"
description: "Describes the compatibility of the Microsoft Universal C runtime library (UCRT) with the Standard C library, POSIX, the Safe CRT, and Store apps."
ms.date: 1/19/2022
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["CRT, compatibility", "compatibility, C runtime libraries", "compatibility"]
ms.assetid: 346709cb-edda-4909-9a19-3d253eddb6b7
---
diff --git a/docs/c-runtime-library/controlling-streams.md b/docs/c-runtime-library/controlling-streams.md
index 7bdf6321eb..43c00a11a4 100644
--- a/docs/c-runtime-library/controlling-streams.md
+++ b/docs/c-runtime-library/controlling-streams.md
@@ -2,7 +2,7 @@
title: "Controlling Streams"
description: "An overview of working with streams in the Microsoft C runtime library."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["streams, controlling", "controlling streams", "streams"]
ms.assetid: 267e9013-9afc-45f6-91e3-ca093230d9d9
---
diff --git a/docs/c-runtime-library/crt-debug-heap-details.md b/docs/c-runtime-library/crt-debug-heap-details.md
index ffef146716..5a0d180c7d 100644
--- a/docs/c-runtime-library/crt-debug-heap-details.md
+++ b/docs/c-runtime-library/crt-debug-heap-details.md
@@ -102,14 +102,11 @@ typedef struct _CrtMemBlockHeader
The `no_mans_land` buffers on either side of the user data area of the block are currently 4 bytes in size, and are filled with a known byte value used by the debug heap routines to verify that the limits of the user's memory block haven't been overwritten. The debug heap also fills new memory blocks with a known value. If you elect to keep freed blocks in the heap's linked list, these freed blocks are also filled with a known value. Currently, the actual byte values used are as follows:
-`no_mans_land` (0xFD)\
-The "no_mans_land" buffers on either side of the memory used by an application are currently filled with 0xFD.
-
-Freed blocks (0xDD)\
-The freed blocks kept unused in the debug heap's linked list when the `_CRTDBG_DELAY_FREE_MEM_DF` flag is set are currently filled with 0xDD.
-
-New objects (0xCD)\
-New objects are filled with 0xCD when they're allocated.
+|Code |Description |
+|---------|---------|
+|`no_mans_land` (0xFD) | The "no_mans_land" buffers on either side of the memory used by an application are currently filled with 0xFD. |
+|Freed blocks (0xDD) | The freed blocks kept unused in the debug heap's linked list when the `_CRTDBG_DELAY_FREE_MEM_DF` flag is set are currently filled with 0xDD. |
+|New objects (0xCD) | New objects are filled with 0xCD when they're allocated.|
## Types of blocks on the debug heap
@@ -170,7 +167,7 @@ All calls to heap functions such as `malloc`, `free`, `calloc`, `realloc`, `new`
### To use the debug heap
-- Link the debug build of your application with a debug version of the C runtime library.
+Link the debug build of your application with a debug version of the C runtime library.
### To change one or more `_crtDbgFlag` bit fields and create a new state for the flag
@@ -275,9 +272,9 @@ Knowing the source file name and line number of an assert or reporting macro is
### Unique allocation request numbers and `_crtBreakAlloc`
-There's a simple way to identify the specific heap allocation call that went bad. It takes advantage of the unique allocation request number associated with each block in the debug heap. When information about a block is reported by one of the dump functions, this allocation request number is enclosed in braces (for example, "{36}").
+There's a simple way to identify the specific heap allocation call that went bad. It takes advantage of the unique allocation request number associated with each block in the debug heap. When information about a block is reported by one of the dump functions, this allocation request number is enclosed in braces. For example, `{36}`.
-Once you know the allocation request number of an improperly allocated block, you can pass this number to [`_CrtSetBreakAlloc`](./reference/crtsetbreakalloc.md) to create a breakpoint. Execution will break just before allocating the block, and you can backtrack to determine what routine was responsible for the bad call. To avoid recompiling, you can accomplish the same thing in the debugger by setting `_crtBreakAlloc` to the allocation request number you're interested in.
+Once you know the allocation request number of an improperly allocated block, you can pass this number to [`_CrtSetBreakAlloc`](./reference/crtsetbreakalloc.md) to create a breakpoint. Execution will break just before allocating the block and you can backtrack to determine what routine was responsible for the bad call. To avoid recompiling, you can accomplish the same thing in the debugger by setting `_crtBreakAlloc` to the allocation request number you're interested in.
### Creating debug versions of your allocation routines
diff --git a/docs/c-runtime-library/crt-debugging-techniques.md b/docs/c-runtime-library/crt-debugging-techniques.md
index a2379c0484..323c0d36b9 100644
--- a/docs/c-runtime-library/crt-debugging-techniques.md
+++ b/docs/c-runtime-library/crt-debugging-techniques.md
@@ -18,7 +18,7 @@ When you debug a program that uses the C run-time library, these debugging techn
The C runtime (CRT) library provides extensive debugging support. To use one of the CRT debug libraries, you must link with [`/DEBUG`](/cpp/build/reference/debug-generate-debug-info) and compile with [`/MDd`, `/MTd`, or `/LDd`](../build/reference/md-mt-ld-use-run-time-library.md).
-The main definitions and macros for CRT debugging can be found in the`` header file.
+The main definitions and macros for CRT debugging can be found in the `` header file.
The functions in the CRT debug libraries are compiled with debug information ([/Z7, /Zd, /Zi, /ZI (Debug Information Format)](../build/reference/z7-zi-zi-debug-information-format.md)) and without optimization. Some functions contain assertions to verify parameters that are passed to them, and source code is provided. With this source code, you can step into CRT functions to confirm that the functions are working as you expect and check for bad parameters or memory states. (Some CRT technology is proprietary and doesn't provide source code for exception handling, floating point, and a few other routines.)
@@ -26,7 +26,7 @@ For more information on the various run-time libraries you can use, see [C Run-T
## Macros for reporting
-For debugging, you can use the `_RPTn` and `_RPTFn` macros, defined in``, to replace the use of `printf` statements. You don't need to enclose them in `#ifdef` directives, because they automatically disappear in your release build when `_DEBUG` isn't defined.
+For debugging, you can use the `_RPTn` and `_RPTFn` macros, defined in ``, to replace the use of `printf` statements. You don't need to enclose them in `#ifdef` directives, because they automatically disappear in your release build when `_DEBUG` isn't defined.
| Macro | Description |
|---|---|
@@ -81,7 +81,7 @@ You can write several kinds of custom debug hook functions that allow you to ins
### Client block hook functions
-If you want to validate or report the contents of the data stored in `_CLIENT_BLOCK` blocks, you can write a function specifically for this purpose. The function that you write must have a prototype similar to the following, as defined in``:
+If you want to validate or report the contents of the data stored in `_CLIENT_BLOCK` blocks, you can write a function specifically for this purpose. The function that you write must have a prototype similar to the following, as defined in ``:
```cpp
void YourClientDump(void *, size_t)
@@ -91,7 +91,7 @@ In other words, your hook function should accept a `void` pointer to the beginni
Once you've installed your hook function using [_CrtSetDumpClient](./reference/crtsetdumpclient.md), it will be called every time a `_CLIENT_BLOCK` block is dumped. You can then use [_CrtReportBlockType](./reference/crtreportblocktype.md) to get information on the type or subtype of dumped blocks.
-The pointer to your function that you pass to `_CrtSetDumpClient` is of type `_CRT_DUMP_CLIENT`, as defined in``:
+The pointer to your function that you pass to `_CrtSetDumpClient` is of type `_CRT_DUMP_CLIENT`, as defined in ``:
```cpp
typedef void (__cdecl *_CRT_DUMP_CLIENT)
@@ -113,7 +113,7 @@ int YourAllocHook(int nAllocType, void *pvData,
const unsigned char * szFileName, int nLine )
```
-The pointer that you pass to [`_CrtSetAllocHook`](./reference/crtsetallochook.md) is of type `_CRT_ALLOC_HOOK`, as defined in``:
+The pointer that you pass to [`_CrtSetAllocHook`](./reference/crtsetallochook.md) is of type `_CRT_ALLOC_HOOK`, as defined in ``:
```cpp
typedef int (__cdecl * _CRT_ALLOC_HOOK)
@@ -169,5 +169,5 @@ If the hook handles the message in question completely, so that no further repor
## See also
-- [Debugging Native Code](/visualstudio/debugger/debugging-native-code.md)
-- [Debugger Security](/visualstudio/debugger/debugger-security.md)
+- [Debugging Native Code](/visualstudio/debugger/debugging-native-code)
+- [Debugger Security](/visualstudio/debugger/debugger-security)
diff --git a/docs/c-runtime-library/crt-initialization.md b/docs/c-runtime-library/crt-initialization.md
index b2971c1be1..be30e01238 100644
--- a/docs/c-runtime-library/crt-initialization.md
+++ b/docs/c-runtime-library/crt-initialization.md
@@ -1,7 +1,7 @@
---
title: "CRT Initialization"
description: "Describes how the CRT initializes global state in native code."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: 08/02/2021
helpviewer_keywords: ["CRT initialization [C++]"]
---
diff --git a/docs/c-runtime-library/data-alignment.md b/docs/c-runtime-library/data-alignment.md
index e9c8d32d66..97b03773fb 100644
--- a/docs/c-runtime-library/data-alignment.md
+++ b/docs/c-runtime-library/data-alignment.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Data Alignment"
title: "Data Alignment"
-ms.date: "11/04/2016"
+description: "Learn more about: Data Alignment"
+ms.date: 11/04/2016
f1_keywords: ["data.alignment"]
helpviewer_keywords: ["data alignment [C++]"]
-ms.assetid: 35ac3d2d-a4b3-421b-954f-b7372b1f18e1
---
# Data alignment
@@ -14,7 +13,7 @@ The following C run-time functions support data alignment.
| Routine | Use |
|---|---|
-| [`_aligned_free`](./reference/aligned-free.md) | Frees a block of memory that was allocated with [`_aligned_malloc`](./reference/aligned-malloc.md)or [`_aligned_offset_malloc`](./reference/aligned-offset-malloc.md). |
+| [`_aligned_free`](./reference/aligned-free.md) | Frees a block of memory that was allocated with [`_aligned_malloc`](./reference/aligned-malloc.md) or [`_aligned_offset_malloc`](./reference/aligned-offset-malloc.md). |
| [`_aligned_free_dbg`](./reference/aligned-free-dbg.md) | Frees a block of memory that was allocated with [`_aligned_malloc`](./reference/aligned-malloc.md) or [`_aligned_offset_malloc`](./reference/aligned-offset-malloc.md) (debug only). |
| [`_aligned_malloc`](./reference/aligned-malloc.md) | Allocates memory on a specified alignment boundary. |
| [`_aligned_malloc_dbg`](./reference/aligned-malloc-dbg.md) | Allocates memory on a specified alignment boundary with extra space for a debugging header and overwrite buffers (debug version only). |
diff --git a/docs/c-runtime-library/direction-flag.md b/docs/c-runtime-library/direction-flag.md
index 1acd9cfb5f..f3e62b0e4a 100644
--- a/docs/c-runtime-library/direction-flag.md
+++ b/docs/c-runtime-library/direction-flag.md
@@ -2,7 +2,7 @@
title: "Direction Flag"
description: "Describes the effect of the CPU direction flag on Microsoft C runtime functions."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["direction flag"]
ms.assetid: 0836b4af-dbbb-4ab8-a4b2-156f2e2099e2
---
diff --git a/docs/c-runtime-library/file-handling.md b/docs/c-runtime-library/file-handling.md
index 9ff1cf7924..661f7a0fb3 100644
--- a/docs/c-runtime-library/file-handling.md
+++ b/docs/c-runtime-library/file-handling.md
@@ -1,16 +1,15 @@
---
-description: "Learn more about: File Handling"
title: "File Handling"
-ms.date: "11/04/2016"
+description: "Learn more about: File Handling"
+ms.date: 11/04/2016
f1_keywords: ["c.files"]
helpviewer_keywords: ["files [C++], handling", "files [C++], opening", "files [C++], manipulating"]
-ms.assetid: 48119e2e-e94f-4602-b08b-b72440f731d8
---
# File handling
Use these routines to create, delete, and manipulate files and to set and check file-access permissions.
-The C run-time libraries have a 512 limit for the number of files that can be open at any one time. Attempting to open more than the maximum number of file descriptors or file streams causes program failure. Use [`_setmaxstdio`](./reference/setmaxstdio.md) to change this number.
+The C run-time libraries have a 512 limit for the number of files that can be open at any one time. Attempting to open more than the maximum number of file descriptors or file streams causes program failure. Use [`_setmaxstdio`](reference/setmaxstdio.md) to change this number.
## File-handling routines (file descriptor)
@@ -18,14 +17,14 @@ These routines operate on files designated by a file descriptor.
| Routine | Use |
|---|---|
-| [`_chsize`](./reference/chsize.md),[`_chsize_s`](./reference/chsize-s.md) | Change file size |
-| [`_filelength`, `_filelengthi64`](./reference/filelength-filelengthi64.md) | Get file length |
-| [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](./reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) | Get file-status information on descriptor |
-| [`_get_osfhandle`](./reference/get-osfhandle.md) | Return operating-system file handle associated with existing C run-time file descriptor |
-| [`_isatty`](./reference/isatty.md) | Check for character device |
-| [`_locking`](./reference/locking.md) | Lock areas of file |
-| [`_open_osfhandle`](./reference/open-osfhandle.md) | Associate C run-time file descriptor with existing operating-system file handle |
-| [`_setmode`](./reference/setmode.md) | Set file-translation mode |
+| [`_chsize`](reference/chsize.md), [`_chsize_s`](reference/chsize-s.md) | Change file size |
+| [`_filelength`, `_filelengthi64`](reference/filelength-filelengthi64.md) | Get file length |
+| [`_fstat`, `_fstat32`, `_fstat64`, `_fstati64`, `_fstat32i64`, `_fstat64i32`](reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md) | Get file-status information on descriptor |
+| [`_get_osfhandle`](reference/get-osfhandle.md) | Return operating-system file handle associated with existing C run-time file descriptor |
+| [`_isatty`](reference/isatty.md) | Check for character device |
+| [`_locking`](reference/locking.md) | Lock areas of file |
+| [`_open_osfhandle`](reference/open-osfhandle.md) | Associate C run-time file descriptor with existing operating-system file handle |
+| [`_setmode`](reference/setmode.md) | Set file-translation mode |
## File-Handling Routines (Path or Filename)
@@ -33,17 +32,17 @@ These routines operate on files specified by a path or filename.
| Routine | Use |
|---|---|
-| [`_access`, `_waccess`](./reference/access-waccess.md), [`_access_s`, `_waccess_s`](./reference/access-s-waccess-s.md) | Check file-permission setting |
-| [`_chmod`, `_wchmod`](./reference/chmod-wchmod.md) | Change file-permission setting |
-| [`_fullpath`, `_wfullpath`](./reference/fullpath-wfullpath.md) | Expand a relative path to its absolute path name |
-| [`_makepath`, `_wmakepath`](./reference/makepath-wmakepath.md), [`_makepath_s`, `_wmakepath_s`](./reference/makepath-s-wmakepath-s.md) | Merge path components into single, full path |
-| [`_mktemp`, `_wmktemp`](./reference/mktemp-wmktemp.md), [`_mktemp_s`, `_wmktemp_s`](./reference/mktemp-s-wmktemp-s.md) | Create unique filename |
-| [`remove`, `_wremove`](./reference/remove-wremove.md) | Delete file |
-| [`rename`, `_wrename`](./reference/rename-wrename.md) | Rename file |
-| [`_splitpath`, `_wsplitpath`](./reference/splitpath-wsplitpath.md), [`_splitpath_s`, `_wsplitpath_s`](./reference/splitpath-s-wsplitpath-s.md) | Parse path into components |
-| [`_stat`, `_stat64`, `_stati64`, `_wstat`, `_wstat64`, `_wstati64`](./reference/stat-functions.md) | Get file-status information on named file |
-| [`_umask`](./reference/umask.md), [`_umask_s`](./reference/umask-s.md) | Set default permission mask for new files created by program |
-| [`_unlink`, `_wunlink`](./reference/unlink-wunlink.md) | Delete file |
+| [`_access`, `_waccess`](reference/access-waccess.md), [`_access_s`, `_waccess_s`](reference/access-s-waccess-s.md) | Check file-permission setting |
+| [`_chmod`, `_wchmod`](reference/chmod-wchmod.md) | Change file-permission setting |
+| [`_fullpath`, `_wfullpath`](reference/fullpath-wfullpath.md) | Expand a relative path to its absolute path name |
+| [`_makepath`, `_wmakepath`](reference/makepath-wmakepath.md), [`_makepath_s`, `_wmakepath_s`](reference/makepath-s-wmakepath-s.md) | Merge path components into single, full path |
+| [`_mktemp`, `_wmktemp`](reference/mktemp-wmktemp.md), [`_mktemp_s`, `_wmktemp_s`](reference/mktemp-s-wmktemp-s.md) | Create unique filename |
+| [`remove`, `_wremove`](reference/remove-wremove.md) | Delete file |
+| [`rename`, `_wrename`](reference/rename-wrename.md) | Rename file |
+| [`_splitpath`, `_wsplitpath`](reference/splitpath-wsplitpath.md), [`_splitpath_s`, `_wsplitpath_s`](reference/splitpath-s-wsplitpath-s.md) | Parse path into components |
+| [`_stat`, `_stat64`, `_stati64`, `_wstat`, `_wstat64`, `_wstati64`](reference/stat-functions.md) | Get file-status information on named file |
+| [`_umask`](reference/umask.md), [`_umask_s`](reference/umask-s.md) | Set default permission mask for new files created by program |
+| [`_unlink`, `_wunlink`](reference/unlink-wunlink.md) | Delete file |
## File-Handling Routines (Open File)
@@ -51,32 +50,30 @@ These routines open files.
| Routine | Use |
|---|---|
-| [`fopen`, `_wfopen`](./reference/fopen-wfopen.md), [`fopen_s`, `_wfopen_s`](./reference/fopen-s-wfopen-s.md) | Opens a file and returns a pointer to the open file. |
-| [`_fsopen`, `_wfsopen`](./reference/fsopen-wfsopen.md) | Open a stream with file sharing and returns a pointer to the open file. |
-| [`_open`, `_wopen`](./reference/open-wopen.md) | Opens a file and returns a file descriptor to the opened file. |
-| [`_sopen`, `_wsopen`](./reference/sopen-wsopen.md), [`_sopen_s`, `_wsopen_s`](./reference/sopen-s-wsopen-s.md) | Open a file with file sharing and returns a file descriptor to the open file. |
-| [`_pipe`](./reference/pipe.md) | Creates a pipe for reading and writing. |
-| [`freopen`, `_wfreopen`](./reference/freopen-wfreopen.md), [`freopen_s`, `_wfreopen_s`](./reference/freopen-s-wfreopen-s.md) | Reassign a file pointer. |
+| [`fopen`, `_wfopen`](reference/fopen-wfopen.md), [`fopen_s`, `_wfopen_s`](reference/fopen-s-wfopen-s.md) | Opens a file and returns a pointer to the open file. |
+| [`_fsopen`, `_wfsopen`](reference/fsopen-wfsopen.md) | Open a stream with file sharing and returns a pointer to the open file. |
+| [`_open`, `_wopen`](reference/open-wopen.md) | Opens a file and returns a file descriptor to the opened file. |
+| [`_sopen`, `_wsopen`](reference/sopen-wsopen.md), [`_sopen_s`, `_wsopen_s`](reference/sopen-s-wsopen-s.md) | Open a file with file sharing and returns a file descriptor to the open file. |
+| [`_pipe`](reference/pipe.md) | Creates a pipe for reading and writing. |
+| [`freopen`, `_wfreopen`](reference/freopen-wfreopen.md), [`freopen_s`, `_wfreopen_s`](reference/freopen-s-wfreopen-s.md) | Reassign a file pointer. |
These routines provide a way to change the representation of the file between a `FILE` structure, a file descriptor, and a Win32 file handle.
| Routine | Use |
|---|---|
-| [`_fdopen`, `_wfdopen`](./reference/fdopen-wfdopen.md) | Associates a stream with a file that was previously opened for low-level I/O and returns a pointer to the open stream. |
-| [`_fileno`](./reference/fileno.md) | Gets the file descriptor associated with a stream. |
-| [`_get_osfhandle`](./reference/get-osfhandle.md) | Return operating-system file handle associated with existing C run-time file descriptor |
-| [`_open_osfhandle`](./reference/open-osfhandle.md) | Associates C run-time file descriptor with an existing operating-system file handle. |
+| [`_fdopen`, `_wfdopen`](reference/fdopen-wfdopen.md) | Associates a stream with a file that was previously opened for low-level I/O and returns a pointer to the open stream. |
+| [`_fileno`](reference/fileno.md) | Gets the file descriptor associated with a stream. |
+| [`_get_osfhandle`](reference/get-osfhandle.md) | Return operating-system file handle associated with existing C run-time file descriptor |
+| [`_open_osfhandle`](reference/open-osfhandle.md) | Associates C run-time file descriptor with an existing operating-system file handle. |
The following Win32 functions also open files and pipes:
- [`CreateFile`](/windows/win32/api/fileapi/nf-fileapi-createfilew)
-
- [`CreatePipe`](/windows/win32/api/namedpipeapi/nf-namedpipeapi-createpipe)
-
- [`CreateNamedPipe`](/windows/win32/api/winbase/nf-winbase-createnamedpipea)
## See also
-[Universal C runtime routines by category](./run-time-routines-by-category.md)\
-[Directory control](./directory-control.md)\
-[System calls](./system-calls.md)
+[Universal C runtime routines by category](run-time-routines-by-category.md)\
+[Directory control](directory-control.md)\
+[System calls](system-calls.md)
diff --git a/docs/c-runtime-library/files-and-streams.md b/docs/c-runtime-library/files-and-streams.md
index 16b6697be7..99c256fc55 100644
--- a/docs/c-runtime-library/files-and-streams.md
+++ b/docs/c-runtime-library/files-and-streams.md
@@ -2,7 +2,7 @@
title: "Files and Streams"
description: "An overview of files and streams in the Microsoft C runtime library."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["files [C++]", "streams"]
ms.assetid: f61e712b-eac9-4c28-bb18-97c3786ef387
---
diff --git a/docs/c-runtime-library/find-memory-leaks-using-the-crt-library.md b/docs/c-runtime-library/find-memory-leaks-using-the-crt-library.md
index dea101aead..1e78d27ce5 100644
--- a/docs/c-runtime-library/find-memory-leaks-using-the-crt-library.md
+++ b/docs/c-runtime-library/find-memory-leaks-using-the-crt-library.md
@@ -2,7 +2,7 @@
title: Find memory leaks with the CRT library
description: Learn how the C/C++ debugger and C Run-time Library (CRT) can help find memory leaks. The techniques include memory-leak reports and comparing memory snapshots.
ms.date: 02/03/2023
-helpviewer_keywords:
+helpviewer_keywords:
- breakpoints, on memory allocation
- _CrtMemState
- _CrtMemCheckpoint
@@ -165,7 +165,7 @@ struct Pod {
int x;
};
-void main() {
+int main() {
Pod* pPod = DBG_NEW Pod;
pPod = DBG_NEW Pod; // Oops, leaked the original pPod!
delete pPod;
@@ -216,7 +216,7 @@ You can use the allocation number to set a breakpoint on the memory allocation.
After you set a breakpoint on a memory-allocation number, continue to debug. Make sure to run under the same conditions, so the memory-allocation number doesn't change. When your program breaks at the specified memory allocation, use the **Call Stack** window and other debugger windows to determine the conditions under which the memory was allocated. Then, you can continue execution to observe what happens to the object and determine why it isn't correctly deallocated.
-Setting a data breakpoint on the object might also be helpful. For more information, see [Using breakpoints](/visualstudio/debugger/using-breakpoints.md).
+Setting a data breakpoint on the object might also be helpful. For more information, see [Using breakpoints](/visualstudio/debugger/using-breakpoints).
You can also set memory-allocation breakpoints in code. You can set:
@@ -241,7 +241,7 @@ _CrtMemCheckpoint( &s1 );
The `_CrtMemCheckpoint` function fills in the structure with a snapshot of the current memory state.
-To output the contents of a `_CrtMemState` structure, pass the structure to the `_ CrtMemDumpStatistics` function:
+To output the contents of a `_CrtMemState` structure, pass the structure to the `_CrtMemDumpStatistics` function:
```cpp
_CrtMemDumpStatistics( &s1 );
@@ -281,5 +281,5 @@ One technique for finding memory leaks begins by placing `_CrtMemCheckpoint` cal
## See also
- [CRT debug heap details](./crt-debug-heap-details.md)
-- [Debugger security](/visualstudio/debugger/debugger-security.md)
-- [Debugging native code](/visualstudio/debugger/debugging-native-code.md)
+- [Debugger security](/visualstudio/debugger/debugger-security)
+- [Debugging native code](/visualstudio/debugger/debugging-native-code)
diff --git a/docs/c-runtime-library/floating-point-support.md b/docs/c-runtime-library/floating-point-support.md
index 69a51ce7ce..7f4ac7bc98 100644
--- a/docs/c-runtime-library/floating-point-support.md
+++ b/docs/c-runtime-library/floating-point-support.md
@@ -11,7 +11,9 @@ The Universal C Runtime library (UCRT) provides many integral and floating-point
For ISO C Standard 11 (C11) and later, the `` header, in addition to including `` and ``, provides macros that invoke a corresponding math function based on the types of the parameters. See [Type-generic math](tgmath.md) for details.
-Many of the floating point math library functions have different implementations for different CPU architectures. For example, the 32-bit x86 CRT may have a different implementation than the 64-bit x64 CRT. In addition, some of the functions may have multiple implementations for a given CPU architecture. The most efficient implementation is selected dynamically at run-time depending on the instruction sets supported by the CPU. For example, in the 32-bit x86 CRT, some functions have both an x87 implementation and an SSE2 implementation. When running on a CPU that supports SSE2, the faster SSE2 implementation is used. When running on a CPU that doesn't support SSE2, the slower x87 implementation is used. Because different implementations of the math library functions may use different CPU instructions and different algorithms to produce their results, the functions may produce different results across CPUs. In most cases, the results are within +/-1 ULP of the correctly rounded result, but the actual results may vary across CPUs.
+Many of the floating-point math library functions have different implementations for different CPU architectures. For example, the 32-bit x86 CRT may have a different implementation than the 64-bit x64 CRT. In addition, some of the functions may have multiple implementations for a given CPU architecture. The most efficient implementation is selected dynamically at run-time depending on the instruction sets supported by the CPU. For example, in the 32-bit x86 CRT, some functions have both an x87 implementation and an SSE2 implementation. When running on a CPU that supports SSE2, the faster SSE2 implementation is used. When running on a CPU that doesn't support SSE2, the slower x87 implementation is used. Because different implementations of the math library functions may use different CPU instructions and different algorithms to produce their results, the functions may produce different results across CPUs. In most cases, the results are within +/-1 ULP of the correctly rounded result, but the actual results may vary across CPUs.
+
+Newer versions of the UCRT might improve the precision and accuracy of the floating-point math library functions. Since the UCRT is part of the Windows operating system, you might get different results for these functions on different operating system versions or between debug and release builds. Although it is not recommended, you can statically link to the UCRT to guarantee consistent results if you need these functions will produce identical results everywhere.
Previous 16-bit versions of Microsoft C/C++ and Microsoft Visual C++ supported the **`long double`** type as an 80-bit precision floating-point data type. In later versions of Visual C++, the **`long double`** data type is a 64-bit precision floating-point data type identical to the **`double`** type. The compiler treats **`long double`** and **`double`** as distinct types, but the **`long double`** functions are identical to their **`double`** counterparts. The CRT provides **`long double`** versions of the math functions for ISO C99 source code compatibility, but note that the binary representation may differ from other compilers.
@@ -79,7 +81,7 @@ Previous 16-bit versions of Microsoft C/C++ and Microsoft Visual C++ supported t
| [`imaxabs`](./reference/imaxabs.md) | Computes the absolute value of an integer type |
| [`imaxdiv`](./reference/imaxdiv.md) | Computes the quotient and the remainder of two integer values |
| [`isfinite`, `_finite`, `_finitef`](./reference/finite-finitef.md) | Determines whether a value is finite |
-| [`isgreater`, `isgreaterequal`, `isless`, `islessequal`, `islessgreater`, `isunordered`](./reference/floating-point-ordering.md) | Compare the order of two floating point values |
+| [`isgreater`, `isgreaterequal`, `isless`, `islessequal`, `islessgreater`, `isunordered`](./reference/floating-point-ordering.md) | Compare the order of two floating-point values |
| [`isinf`](./reference/isinf.md) | Determines whether a floating-point value is infinite |
| [`isnan`, `_isnan`, `_isnanf`](./reference/isnan-isnan-isnanf.md) | Tests a floating-point value for NaN |
| [`isnormal`](./reference/isnormal.md) | Tests whether a floating-point value is both finite and not subnormal |
diff --git a/docs/c-runtime-library/global-state.md b/docs/c-runtime-library/global-state.md
index b1d216c39c..9a8a36b10d 100644
--- a/docs/c-runtime-library/global-state.md
+++ b/docs/c-runtime-library/global-state.md
@@ -1,7 +1,7 @@
---
title: "Global state in the CRT"
description: "Describes how shared global state is handled in the Microsoft Universal C Runtime."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "10/02/2020"
helpviewer_keywords: ["CRT global state"]
---
diff --git a/docs/c-runtime-library/heapset.md b/docs/c-runtime-library/heapset.md
index 98b435fbb4..71dcd09725 100644
--- a/docs/c-runtime-library/heapset.md
+++ b/docs/c-runtime-library/heapset.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _heapset"
title: "_heapset"
+description: "Learn more about: _heapset"
ms.date: "11/04/2016"
api_name: ["_heapset"]
api_location: ["msvcr90.dll", "msvcr80.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcrt.dll", "msvcr120.dll", "msvcr100.dll"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_heapset", "heapset"]
helpviewer_keywords: ["checking heap", "heapset function", "heaps, checking", "debugging [CRT], heap-related problems", "_heapset function"]
-ms.assetid: 9667eeb0-55bc-4c19-af5f-d1fd0a142b3c
---
# `_heapset`
@@ -47,7 +46,7 @@ In addition, if an error occurs, **`_heapset`** sets `errno` to `ENOSYS`.
The **`_heapset`** function shows free memory locations or nodes that have been unintentionally overwritten.
-**`_heapset`** checks for minimal consistency on the heap and then sets each byte of the heap's free entries to the `fill` value. This known value shows which memory locations of the heap contain free nodes and which contain data that were unintentionally written to freed memory. If the operating system doesn't support **`_heapset`**(for example, Windows 98), the function returns `_HEAPOK` and sets `errno` to `ENOSYS`.
+**`_heapset`** checks for minimal consistency on the heap and then sets each byte of the heap's free entries to the `fill` value. This known value shows which memory locations of the heap contain free nodes and which contain data that were unintentionally written to freed memory. If the operating system doesn't support **`_heapset`** (for example, Windows 98), the function returns `_HEAPOK` and sets `errno` to `ENOSYS`.
## Requirements
diff --git a/docs/c-runtime-library/internationalization.md b/docs/c-runtime-library/internationalization.md
index e66a9a923f..93d47d0e91 100644
--- a/docs/c-runtime-library/internationalization.md
+++ b/docs/c-runtime-library/internationalization.md
@@ -2,7 +2,7 @@
title: "Internationalization"
ms.date: "09/29/2020"
description: "A description of Microsoft runtime library support for writing apps for international markets."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["localization, routines for", "locale-dependent routines", "internationalization routines", "international applications, run-time routines for"]
ms.assetid: ee536a04-3558-4729-8e10-6dabcde055fd
---
diff --git a/docs/c-runtime-library/is-isw-routines.md b/docs/c-runtime-library/is-isw-routines.md
index ed95473112..84eb09729b 100644
--- a/docs/c-runtime-library/is-isw-routines.md
+++ b/docs/c-runtime-library/is-isw-routines.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: is, isw Routines"
title: "is, isw Routines"
+description: "Learn more about: is, isw Routines"
ms.date: 01/11/2022
helpviewer_keywords: ["is routines", "isw routines"]
---
@@ -15,7 +15,7 @@ helpviewer_keywords: ["is routines", "isw routines"]
[`iscntrl`, `iswcntrl`, `_iscntrl_l`, `_iswcntrl_l`](./reference/iscntrl-iswcntrl-iscntrl-l-iswcntrl-l.md)\
[`iscsym`, `iscsymf`, `__iscsym`, `__iswcsym`, `__iscsymf`, `__iswcsymf`, `_iscsym_l`, `_iswcsym_l`, `_iscsymf_l`, `_iswcsymf_l`](./reference/iscsym-functions.md)\
[`_isctype`, `iswctype`, `_isctype_l`, `_iswctype_l`](./reference/isctype-iswctype-isctype-l-iswctype-l.md)\
- [`isdigit`, `iswdigit`, `_isdigit_l`, `_iswdigit_l`](./reference/isdigit-iswdigit-isdigit-l-iswdigit-l.md)
+ [`isdigit`, `iswdigit`, `_isdigit_l`, `_iswdigit_l`](./reference/isdigit-iswdigit-isdigit-l-iswdigit-l.md)\
[`isgraph`, `iswgraph`, `_isgraph_l`, `_iswgraph_l`](./reference/isgraph-iswgraph-isgraph-l-iswgraph-l.md)\
[`isleadbyte`, `_isleadbyte_l`](./reference/isleadbyte-isleadbyte-l.md)\
[`islower`, `iswlower`, `_islower_l`, `_iswlower_l`](./reference/islower-iswlower-islower-l-iswlower-l.md)\
@@ -126,7 +126,6 @@ Character has property specified by the `desc` argument. For each valid value of
| `_LOWER` | `iswlower(c)` |
| `_ALPHA | _BLANK | _DIGIT | _PUNCT` | `iswprint(c)` |
| `_PUNCT` | `iswpunct(c)` |
-| `_BLANK` | `iswblank(c)` |
| `_SPACE` | `iswspace(c)` |
| `_UPPER` | `iswupper(c)` |
| `_HEX` | `iswxdigit(c)` |
diff --git a/docs/c-runtime-library/ismbc-routines.md b/docs/c-runtime-library/ismbc-routines.md
index b941bbcf3c..7c7a33362c 100644
--- a/docs/c-runtime-library/ismbc-routines.md
+++ b/docs/c-runtime-library/ismbc-routines.md
@@ -1,41 +1,40 @@
---
-description: "Learn more about: _ismbc Routines"
title: "_ismbc Routines"
+description: "Learn more about: _ismbc Routines"
ms.date: "11/04/2016"
helpviewer_keywords: ["ismbc routines", "_ismbc routines"]
-ms.assetid: b8995391-7857-4ac3-9a1e-de946eb4464d
---
# `_ismbc` routines
Each `_ismbc` routine tests a given multibyte character `c` for a particular condition.
-- [`_ismbcalnum`, `_ismbcalnum_l`, `_ismbcalpha`, `_ismbcalpha_l`, `_ismbcdigit`, `_ismbcdigit_l`](./reference/ismbcalnum-functions.md)\
-- [`_ismbcl0`, `_ismbcl0_l`, `_ismbcl1`, `_ismbcl1_l`, `_ismbcl2`, `_ismbcl2_l`](./reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md)\
-- [`_ismbcgraph`, `_ismbcgraph_l`, `_ismbcprint`, `_ismbcprint_l`, `_ismbcpunct`, `_ismbcpunct_l`, `_ismbcblank`, `_ismbcblank_l`, `_ismbcspace`, `_ismbcspace_l`](./reference/ismbcgraph-functions.md)\
-- [`_ismbclegal`, `_ismbclegal_l`, `_ismbcsymbol`, `_ismbcsymbol_l`](./reference/ismbclegal-ismbclegal-l-ismbcsymbol-ismbcsymbol-l.md)\
-- [`_ismbchira`, `_ismbchira_l`, `_ismbckata`, `_ismbckata_l`](./reference/ismbchira-ismbchira-l-ismbckata-ismbckata-l.md)\
-- [`_ismbclower`, `_ismbclower_l`, `_ismbcupper`, `_ismbcupper_l`](./reference/ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md)
+- [`_ismbcalnum`, `_ismbcalnum_l`, `_ismbcalpha`, `_ismbcalpha_l`, `_ismbcdigit`, `_ismbcdigit_l`](reference/ismbcalnum-functions.md)
+- [`_ismbcl0`, `_ismbcl0_l`, `_ismbcl1`, `_ismbcl1_l`, `_ismbcl2`, `_ismbcl2_l`](reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md)
+- [`_ismbcgraph`, `_ismbcgraph_l`, `_ismbcprint`, `_ismbcprint_l`, `_ismbcpunct`, `_ismbcpunct_l`, `_ismbcblank`, `_ismbcblank_l`, `_ismbcspace`, `_ismbcspace_l`](reference/ismbcgraph-functions.md)
+- [`_ismbclegal`, `_ismbclegal_l`, `_ismbcsymbol`, `_ismbcsymbol_l`](reference/ismbclegal-ismbclegal-l-ismbcsymbol-ismbcsymbol-l.md)
+- [`_ismbchira`, `_ismbchira_l`, `_ismbckata`, `_ismbckata_l`](reference/ismbchira-ismbchira-l-ismbckata-ismbckata-l.md)
+- [`_ismbclower`, `_ismbclower_l`, `_ismbcupper`, `_ismbcupper_l`](reference/ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md)
## Remarks
-The test result of each `_ismbc` routine depends on the multibyte code page in effect. Multibyte code pages have single-byte alphabetic characters. By default, the multibyte code page is set to the system-default ANSI code page obtained from the operating system at program startup. You can query or change the multibyte code page in use with [`_getmbcp`](./reference/getmbcp.md) or [`_setmbcp`](./reference/setmbcp.md), respectively.
+The test result of each `_ismbc` routine depends on the multibyte code page in effect. Multibyte code pages have single-byte alphabetic characters. By default, the multibyte code page is set to the system-default ANSI code page obtained from the operating system at program startup. You can query or change the multibyte code page in use with [`_getmbcp`](reference/getmbcp.md) or [`_setmbcp`](reference/setmbcp.md), respectively.
-The output value is affected by the `LC_CTYPE` category setting of the locale. For more information, see [`setlocale`](./reference/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.
+The output value is affected by the `LC_CTYPE` category setting of the locale. For more information, see [`setlocale`](reference/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.
| Routine | Test condition | Code page 932 example |
|---|---|---|
-| [`_ismbcalnum`, `_ismbcalnum_l`](./reference/ismbcalnum-functions.md) | Alphanumeric | Returns nonzero if and only if `c` is a single-byte representation of an ASCII English letter: See examples for `_ismbcdigit` and `_ismbcalpha`. |
-| [`_ismbcalpha`, `_ismbcalpha_l`](./reference/ismbcalnum-functions.md) | Alphabetic | Returns nonzero if and only if `c` is a single-byte representation of an ASCII English letter: See examples for `_ismbcupper` and `_ismbclower`; or a katakana letter: 0xA6<=`c`<=0xDF. |
-| [`_ismbcdigit`, `_ismbcdigit_l`](./reference/ismbcalnum-functions.md) | Digit | Returns nonzero if and only if `c` is a single-byte representation of an ASCII digit: 0x30<=`c`<=0x39. |
-| [`_ismbcgraph`, `_ismbcgraph_l`](./reference/ismbcgraph-functions.md) | Graphic | Returns nonzero if and only if `c` is a single-byte representation of any ASCII or katakana printable character except a white space ( ). See examples for `_ismbcdigit`, `_ismbcalpha`, and `_ismbcpunct`. |
-| [`_ismbclegal`, `_ismbclegal_l`](./reference/ismbclegal-ismbclegal-l-ismbcsymbol-ismbcsymbol-l.md) | Valid multibyte character | Returns nonzero if and only if the first byte of `c` is within ranges 0x81 - 0x9F or 0xE0 - 0xFC, while the second byte is within ranges 0x40 - 0x7E or 0x80 - FC. |
-| [`_ismbclower`, `_ismbclower_l`](./reference/ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | Lowercase alphabetic | Returns nonzero if and only if `c` is a single-byte representation of an ASCII lowercase English letter: 0x61<=`c`<=0x7A. |
-| [`_ismbcprint`, `_ismbcprint_l`](./reference/ismbcgraph-functions.md) | Printable | Returns nonzero if and only if `c` is a single-byte representation of any ASCII or katakana printable character including a white space ( ): See examples for `_ismbcspace`, `_ismbcdigit`, `_ismbcalpha`, and `_ismbcpunct`. |
-| [`_ismbcpunct`, `_ismbcpunct_l`](./reference/ismbcgraph-functions.md) | Punctuation | Returns nonzero if and only if `c` is a single-byte representation of any ASCII or katakana punctuation character. |
-| [`_ismbcblank`, `_ismbcblank_l`](./reference/ismbcgraph-functions.md) | Space or horizontal tab | Returns nonzero if and only if `c` is a single-byte representation of a space character or a horizontal tab character: `c`=0x20 or `c`=0x09. |
-| [`_ismbcspace`, `_ismbcspace_l`](./reference/ismbcgraph-functions.md) | Whitespace | Returns nonzero if and only if `c` is a white space character: `c`=0x20 or 0x09<=`c`<=0x0D. |
-| [`_ismbcsymbol`, `_ismbcsymbol_l`](./reference/ismbclegal-ismbclegal-l-ismbcsymbol-ismbcsymbol-l.md) | Multibyte symbol | Returns nonzero if and only if 0x8141<=`c`<=0x81AC. |
-| [`_ismbcupper`, `_ismbcupper_l`](./reference/ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | Uppercase alphabetic | Returns nonzero if and only if `c` is a single-byte representation of an ASCII uppercase English letter: 0x41<=`c`<=0x5A. |
+| [`_ismbcalnum`, `_ismbcalnum_l`](reference/ismbcalnum-functions.md) | Alphanumeric | Returns nonzero if and only if `c` is a single-byte representation of an ASCII English letter: See examples for `_ismbcdigit` and `_ismbcalpha`. |
+| [`_ismbcalpha`, `_ismbcalpha_l`](reference/ismbcalnum-functions.md) | Alphabetic | Returns nonzero if and only if `c` is a single-byte representation of an ASCII English letter: See examples for `_ismbcupper` and `_ismbclower`; or a katakana letter: 0xA6<=`c`<=0xDF. |
+| [`_ismbcdigit`, `_ismbcdigit_l`](reference/ismbcalnum-functions.md) | Digit | Returns nonzero if and only if `c` is a single-byte representation of an ASCII digit: 0x30<=`c`<=0x39. |
+| [`_ismbcgraph`, `_ismbcgraph_l`](reference/ismbcgraph-functions.md) | Graphic | Returns nonzero if and only if `c` is a single-byte representation of any ASCII or katakana printable character except a white space ( ). See examples for `_ismbcdigit`, `_ismbcalpha`, and `_ismbcpunct`. |
+| [`_ismbclegal`, `_ismbclegal_l`](reference/ismbclegal-ismbclegal-l-ismbcsymbol-ismbcsymbol-l.md) | Valid multibyte character | Returns nonzero if and only if the first byte of `c` is within ranges 0x81 - 0x9F or 0xE0 - 0xFC, while the second byte is within ranges 0x40 - 0x7E or 0x80 - FC. |
+| [`_ismbclower`, `_ismbclower_l`](reference/ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | Lowercase alphabetic | Returns nonzero if and only if `c` is a single-byte representation of an ASCII lowercase English letter: 0x61<=`c`<=0x7A. |
+| [`_ismbcprint`, `_ismbcprint_l`](reference/ismbcgraph-functions.md) | Printable | Returns nonzero if and only if `c` is a single-byte representation of any ASCII or katakana printable character including a white space ( ): See examples for `_ismbcspace`, `_ismbcdigit`, `_ismbcalpha`, and `_ismbcpunct`. |
+| [`_ismbcpunct`, `_ismbcpunct_l`](reference/ismbcgraph-functions.md) | Punctuation | Returns nonzero if and only if `c` is a single-byte representation of any ASCII or katakana punctuation character. |
+| [`_ismbcblank`, `_ismbcblank_l`](reference/ismbcgraph-functions.md) | Space or horizontal tab | Returns nonzero if and only if `c` is a single-byte representation of a space character or a horizontal tab character: `c`=0x20 or `c`=0x09. |
+| [`_ismbcspace`, `_ismbcspace_l`](reference/ismbcgraph-functions.md) | Whitespace | Returns nonzero if and only if `c` is a white space character: `c`=0x20 or 0x09<=`c`<=0x0D. |
+| [`_ismbcsymbol`, `_ismbcsymbol_l`](reference/ismbclegal-ismbclegal-l-ismbcsymbol-ismbcsymbol-l.md) | Multibyte symbol | Returns nonzero if and only if 0x8141<=`c`<=0x81AC. |
+| [`_ismbcupper`, `_ismbcupper_l`](reference/ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | Uppercase alphabetic | Returns nonzero if and only if `c` is a single-byte representation of an ASCII uppercase English letter: 0x41<=`c`<=0x5A. |
**Code Page 932 Specific**
@@ -43,18 +42,18 @@ The following routines are specific to code page 932.
| Routine | Test condition (code page 932 only) |
|---|---|
-| [`_ismbchira`, `_ismbchira_l`](./reference/ismbchira-ismbchira-l-ismbckata-ismbckata-l.md) | Double-byte Hiragana: 0x829F<=`c`<=0x82F1. |
-| [`_ismbckata`, `_ismbckata_l`](./reference/ismbchira-ismbchira-l-ismbckata-ismbckata-l.md) | Double-byte katakana: 0x8340<=`c`<=0x8396. |
-| [`_ismbcl0`, `_ismbcl0_l`](./reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md) | JIS non-Kanji: 0x8140<=`c`<=0x889E. |
-| [`_ismbcl1`, `_ismbcl1_l`](./reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md) | JIS level-1: 0x889F<=`c`<=0x9872. |
-| [`_ismbcl2`, `_ismbcl2_l`](./reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md) | JIS level-2: 0x989F<=`c`<=0xEA9E. |
+| [`_ismbchira`, `_ismbchira_l`](reference/ismbchira-ismbchira-l-ismbckata-ismbckata-l.md) | Double-byte Hiragana: 0x829F<=`c`<=0x82F1. |
+| [`_ismbckata`, `_ismbckata_l`](reference/ismbchira-ismbchira-l-ismbckata-ismbckata-l.md) | Double-byte katakana: 0x8340<=`c`<=0x8396. |
+| [`_ismbcl0`, `_ismbcl0_l`](reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md) | JIS non-Kanji: 0x8140<=`c`<=0x889E. |
+| [`_ismbcl1`, `_ismbcl1_l`](reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md) | JIS level-1: 0x889F<=`c`<=0x9872. |
+| [`_ismbcl2`, `_ismbcl2_l`](reference/ismbcl0-ismbcl0-l-ismbcl1-ismbcl1-l-ismbcl2-ismbcl2-l.md) | JIS level-2: 0x989F<=`c`<=0xEA9E. |
-`_ismbcl0`, `_ismbcl1`, and `_ismbcl2` check that the specified value `c` matches the test conditions described in the preceding table, but don't check that `c` is a valid multibyte character. If the lower byte is in the ranges 0x00 - 0x3F, 0x7F, or 0xFD - 0xFF, these functions return a nonzero value, indicating that the character satisfies the test condition. Use [`_ismbbtrail`, `_ismbbtrail_l`](./reference/ismbbtrail-ismbbtrail-l.md) to test whether the multibyte character is defined.
+`_ismbcl0`, `_ismbcl1`, and `_ismbcl2` check that the specified value `c` matches the test conditions described in the preceding table, but don't check that `c` is a valid multibyte character. If the lower byte is in the ranges 0x00 - 0x3F, 0x7F, or 0xFD - 0xFF, these functions return a nonzero value, indicating that the character satisfies the test condition. Use [`_ismbbtrail`, `_ismbbtrail_l`](reference/ismbbtrail-ismbbtrail-l.md) to test whether the multibyte character is defined.
**END Code Page 932 Specific**
## See also
-[Character classification](./character-classification.md)\
-[`is`, `isw` routines](./is-isw-routines.md)\
-[`_ismbb` routines](./ismbb-routines.md)
+[Character classification](character-classification.md)\
+[`is`, `isw` routines](is-isw-routines.md)\
+[`_ismbb` routines](ismbb-routines.md)
diff --git a/docs/c-runtime-library/language-strings.md b/docs/c-runtime-library/language-strings.md
index c68c721c29..99b9af3a15 100644
--- a/docs/c-runtime-library/language-strings.md
+++ b/docs/c-runtime-library/language-strings.md
@@ -6,7 +6,7 @@ helpviewer_keywords: ["language strings"]
---
# Language strings
-The [`setlocale`](./reference/setlocale-wsetlocale.md) and [`_create_locale`](./reference/create-locale-wcreate-locale.md) functions can use the Windows NLS API supported languages on operating systems that don't use the Unicode code page. For a list of supported languages by operating system version, see [Appendix A: Product Behavior](/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c) in \[MS-LCID]: Windows Language Code Identifier (LCID) Reference. The language string can be any of the values in the **Language** and **Language tag** columns of the list of supported languages. For example code that enumerates available locale names and related values, see [NLS: Name-based APIs Sample](/windows/win32/intl/nls--name-based-apis-sample).
+The [`setlocale`](reference/setlocale-wsetlocale.md) and [`_create_locale`](reference/create-locale-wcreate-locale.md) functions can use the Windows NLS API supported languages on operating systems that don't use the Unicode code page. For a list of supported languages by operating system version, see [Appendix A: Product Behavior](/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c) in \[MS-LCID]: Windows Language Code Identifier (LCID) Reference. The language string can be any of the values in the **Language** and **Language tag** columns of the list of supported languages. For example code that enumerates available locale names and related values, see [NLS: Name-based APIs Sample](/windows/win32/intl/nls--name-based-apis-sample).
## Supported language strings
@@ -82,7 +82,7 @@ The Microsoft C run-time library implementation also supports these language str
## See also
-- [Locale names, Languages, and Country/Region strings](./locale-names-languages-and-country-region-strings.md)\
-- [Country/Region strings](./country-region-strings.md)\
-- [`setlocale`, `_wsetlocale`](./reference/setlocale-wsetlocale.md)\
-- [`_create_locale`, `_wcreate_locale`](./reference/create-locale-wcreate-locale.md)
+- [Locale names, Languages, and Country/Region strings](locale-names-languages-and-country-region-strings.md)
+- [Country/Region strings](country-region-strings.md)
+- [`setlocale`, `_wsetlocale`](reference/setlocale-wsetlocale.md)
+- [`_create_locale`, `_wcreate_locale`](reference/create-locale-wcreate-locale.md)
diff --git a/docs/c-runtime-library/link-options.md b/docs/c-runtime-library/link-options.md
index 33a73b92de..7f27f9a178 100644
--- a/docs/c-runtime-library/link-options.md
+++ b/docs/c-runtime-library/link-options.md
@@ -1,27 +1,26 @@
---
-description: "Learn more about: Link Options"
-title: "Link Options"
+title: "Link options"
+description: "Learn more about: Link options"
ms.date: "11/04/2016"
helpviewer_keywords: ["nothrownew.obj", "newmode.obj", "noenv.obj", "psetargv.obj", "legacy_stdio_float_rounding.obj", "loosefpmath.obj", "smallheap.obj", "fp10.obj", "nochkclr.obj", "chkstk.obj", "pcommode.obj", "pnoenv.obj", "link options [C++]", "invalidcontinue.obj", "pnothrownew.obj", "pwsetargv.obj", "pinvalidcontinue.obj", "wsetargv.obj", "binmode.obj", "setargv.obj", "noarg.obj", "pnewmode.obj", "commode.obj", "pthreadlocale.obj", "pbinmode.obj", "threadlocale.obj", "pnoarg.obj"]
-ms.assetid: 05b5a77b-9dd1-494b-ae46-314598c770bb
---
# Link options
-The CRT lib directory includes several small object files that enable specific CRT features without any code change. These object files are called "link options" since you only have to add them to the linker command line to use them.
+The CRT lib directory includes several small object files that enable specific CRT features without code changes. These object files are called "link options" because you only have to add them to the linker command line to use them. To do this from Visual Studio, in the Solution Explorer right-click your project and choose **Properties**. Under **Configuration Properties**, choose **Linker** > **Input** > **Additional Dependencies** and specify the additional items to add to the link command line.
-CLR pure mode versions of these objects are deprecated in Visual Studio 2015 and unsupported in Visual Studio 2017. Use the regular versions for native and /clr code.
+CLR pure mode versions of these objects are deprecated in Visual Studio 2015 and unsupported in Visual Studio 2017. Use the regular versions for native and [`/clr`](../build/reference/clr-common-language-runtime-compilation.md) code.
| Native and /clr | Pure mode | Description |
|---|---|---|
-| `binmode.obj` | `pbinmode.obj` | Sets the default file-translation mode to binary. See [`_fmode`](./fmode.md). |
+| `binmode.obj` | `pbinmode.obj` | Sets the default file-translation mode to binary. See [`_fmode`](fmode.md). |
| `chkstk.obj` | n/a | Provides stack-checking and alloca support when not using the CRT. |
-| `commode.obj` | `pcommode.obj` | Sets the global commit flag to "commit". See [`fopen`, `_wfopen`](./reference/fopen-wfopen.md) and [`fopen_s`, `_wfopen_s`](./reference/fopen-s-wfopen-s.md). |
-| exe_initialize_mta.lib | n/a | Initializes the MTA apartment during EXE startup, which allows the use of COM objects in global smart pointers. Because this option leaks an MTA apartment reference during shutdown, don't use it for DLLs. Linking to this file is equivalent to including `combase.h` and defining `_EXE_INITIALIZE_MTA`. Using this link option adds [onecore.lib](/windows/win32/apiindex/windows-umbrella-libraries) to the default library list. If this effect is undesirable (such as using onecore_apiset.lib or other umbrella library), use [/NODEFAULTLIB](../build/reference/nodefaultlib-ignore-libraries.md) to override this behavior and provide an alternative. |
-| `fp10.obj` | n/a | Changes the default precision control to 64 bits. See [Math and floating-point support](./floating-point-support.md). |
+| `commode.obj` | `pcommode.obj` | Sets the global commit flag to "commit". See [`fopen`, `_wfopen`](reference/fopen-wfopen.md) and [`fopen_s`, `_wfopen_s`](reference/fopen-s-wfopen-s.md). |
+| `exe_initialize_mta.lib` | n/a | Initializes the MTA apartment during EXE startup, which allows the use of COM objects in global smart pointers. Because this option leaks an MTA apartment reference during shutdown, don't use it for DLLs. Linking to this file is equivalent to including `combase.h` and defining `_EXE_INITIALIZE_MTA`. Using this link option adds [`onecore.lib`](/windows/win32/apiindex/windows-umbrella-libraries) to the default library list. If this effect is undesirable (such as using onecore_apiset.lib or other umbrella library), use [`/NODEFAULTLIB`](../build/reference/nodefaultlib-ignore-libraries.md) to override this behavior and provide an alternative. |
+| `fp10.obj` | n/a | Changes the default precision control to 64 bits. See [Math and floating-point support](floating-point-support.md). |
| `invalidcontinue.obj` | `pinvalidcontinue.obj` | Sets a default invalid parameter handler that does nothing, meaning that invalid parameters passed to CRT functions will just set errno and return an error result. |
-| `legacy_stdio_float_rounding.obj` | n/a | The printing of floating-point values (for example, when using [`printf`](./reference/printf-printf-l-wprintf-wprintf-l.md)) with the Windows 10 19041 Universal C Runtime has been fixed. It now properly rounds exactly representable floating-point numbers, and respects the floating-point rounding requested by [`fesetround`](./reference/fegetround-fesetround2.md). This behavior update is available in Visual Studio 2019 version 16.2 and later. Legacy behavior is used in earlier versions of Visual Studio, or by providing this link option. |
+| `legacy_stdio_float_rounding.obj` | n/a | The printing of floating-point values (for example, when using [`printf`](reference/printf-printf-l-wprintf-wprintf-l.md)) with the Windows 10 19041 Universal C Runtime has been fixed. It now properly rounds exactly representable floating-point numbers, and respects the floating-point rounding requested by [`fesetround`](reference/fegetround-fesetround2.md). This behavior update is available in Visual Studio 2019 version 16.2 and later. Legacy behavior is used in earlier versions of Visual Studio, or by providing this link option. |
| `loosefpmath.obj` | n/a | Ensures that floating point code tolerates denormal values. |
-| `newmode.obj` | `pnewmode.obj` | Causes [`malloc`](./reference/malloc.md) to call the new handler on failure. See [`_set_new_mode`](./reference/set-new-mode.md), [`_set_new_handler`](./reference/set-new-handler.md), [`calloc`](./reference/calloc.md), and [`realloc`](./reference/realloc.md). |
+| `newmode.obj` | `pnewmode.obj` | Causes [`malloc`](reference/malloc.md) to call the new handler on failure. See [`_set_new_mode`](reference/set-new-mode.md), [`_set_new_handler`](reference/set-new-handler.md), [`calloc`](reference/calloc.md), and [`realloc`](reference/realloc.md). |
| `noarg.obj` | `pnoarg.obj` | Disables all processing of argc and argv. |
| `nochkclr.obj` | n/a | Does nothing. Remove from your project. |
| `noenv.obj` | `pnoenv.obj` | Disables the creation of a cached environment for the CRT. |
@@ -32,4 +31,4 @@ CLR pure mode versions of these objects are deprecated in Visual Studio 2015 and
## See also
-- [C runtime (CRT) and C++ Standard Library (STL) `.lib` files](./crt-library-features.md)
+- [C runtime (CRT) and C++ Standard Library (STL) `.lib` files](crt-library-features.md)
diff --git a/docs/c-runtime-library/locale-names-languages-and-country-region-strings.md b/docs/c-runtime-library/locale-names-languages-and-country-region-strings.md
index dd2fae03a4..ae687afb43 100644
--- a/docs/c-runtime-library/locale-names-languages-and-country-region-strings.md
+++ b/docs/c-runtime-library/locale-names-languages-and-country-region-strings.md
@@ -1,7 +1,7 @@
---
title: "Locale Names, Languages, and Country-Region Strings"
description: "An overview of using Microsoft Universal CRT locale, language, and country and region strings."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "12/10/2018"
helpviewer_keywords: ["country/region strings", "localization, locale", "locales", "setlocale function", "language strings"]
ms.assetid: a0e5a0c5-5602-4da0-b65f-de3d6c8530a2
diff --git a/docs/c-runtime-library/locale.md b/docs/c-runtime-library/locale.md
index f7ced3c342..5801ca774e 100644
--- a/docs/c-runtime-library/locale.md
+++ b/docs/c-runtime-library/locale.md
@@ -1,63 +1,63 @@
---
-description: "Learn more about: Locale"
title: "Locale"
-ms.date: "04/11/2018"
+description: "Learn more about: Locale"
+ms.date: 04/11/2018
f1_keywords: ["c.international"]
helpviewer_keywords: ["localization, locale", "country/region information", "language information routines", "setlocale function", "locale routines"]
---
# Locale
-*Locale* refers to country/region and language settings that you can use to customize your program. Some locale-dependent categories include the display formats for dates and monetary values. For more information, see [Locale categories](./locale-categories.md).
+*Locale* refers to country/region and language settings that you can use to customize your program. Some locale-dependent categories include the display formats for dates and monetary values. For more information, see [Locale categories](locale-categories.md).
-Use the [`setlocale`](./reference/setlocale-wsetlocale.md) function to change or query some or all of the current program or thread locale information while using functions without the **`_l`** suffix. The functions with the **`_l`** suffix will use the locale parameter passed in for their locale information during the execution of that specific function only. To create a locale for use with a function with a **`_l`** suffix, use [`_create_locale`](./reference/create-locale-wcreate-locale.md). To free this locale, use [`_free_locale`](./reference/free-locale.md). To get the current locale, use [`_get_current_locale`](./reference/get-current-locale.md).
+Use the [`setlocale`](reference/setlocale-wsetlocale.md) function to change or query some or all of the current program or thread locale information while using functions without the **`_l`** suffix. The functions with the **`_l`** suffix will use the locale parameter passed in for their locale information during the execution of that specific function only. To create a locale for use with a function with a **`_l`** suffix, use [`_create_locale`](reference/create-locale-wcreate-locale.md). To free this locale, use [`_free_locale`](reference/free-locale.md). To get the current locale, use [`_get_current_locale`](reference/get-current-locale.md).
-Use [`_configthreadlocale`](./reference/configthreadlocale.md) to control whether each thread has its own locale, or all threads in a program share the same locale. For more information, see [Locales and code pages](../text/locales-and-code-pages.md).
+Use [`_configthreadlocale`](reference/configthreadlocale.md) to control whether each thread has its own locale, or all threads in a program share the same locale. For more information, see [Locales and code pages](../text/locales-and-code-pages.md).
-More secure versions of the functions in the following table are available, indicated by the **`_s`** ("secure") suffix. For more information, see [Security features in the CRT](./security-features-in-the-crt.md).
+More secure versions of the functions in the following table are available, indicated by the **`_s`** ("secure") suffix. For more information, see [Security features in the CRT](security-features-in-the-crt.md).
## Locale-dependent routines
| Routine | Use | **`setlocale`** category setting dependence |
|---|---|---|
-| [`atof`, `_atof_l`, `_wtof`, `_wtof_l`](./reference/atof-atof-l-wtof-wtof-l.md) | Convert character to floating-point value | `LC_NUMERIC` |
-| [`atoi`, `_atoi_l`, `_wtoi`, `_wtoi_l`](./reference/atoi-atoi-l-wtoi-wtoi-l.md) | Convert character to integer value | `LC_NUMERIC` |
-| [`_atoi64`, `_atoi64_l`, `_wtoi64`, `_wtoi64_l`](./reference/atoi64-atoi64-l-wtoi64-wtoi64-l.md) | Convert character to 64-bit integer value | `LC_NUMERIC` |
-| [`atol`, `_atol_l`, `_wtol`, `_wtol_l`](./reference/atol-atol-l-wtol-wtol-l.md) | Convert character to long value | `LC_NUMERIC` |
-| [`_atodbl`, `_atodbl_l`, `_atoldbl`, `_atoldbl_l`, `_atoflt`, `_atoflt_l`](./reference/atodbl-atodbl-l-atoldbl-atoldbl-l-atoflt-atoflt-l.md) | Convert character to double-long value | `LC_NUMERIC` |
-| [`is`, `isw` routines](./is-isw-routines.md) | Test given integer for particular condition. | `LC_CTYPE` |
-| [`isleadbyte`, `_isleadbyte_l`](./reference/isleadbyte-isleadbyte-l.md) | Test for lead byte | `LC_CTYPE` |
-| [`localeconv`](./reference/localeconv.md) | Read appropriate values for formatting numeric quantities | `LC_MONETARY, LC_NUMERIC` |
-| [`MB_CUR_MAX`](./mb-cur-max.md) | Maximum length in bytes of any multibyte character in current locale (macro defined in `STDLIB.H`) | `LC_CTYPE` |
-| [`_mbccpy`, `_mbccpy_l`](./reference/mbccpy-mbccpy-l.md),[`_mbccpy_s`, `_mbccpy_s_l`](./reference/mbccpy-s-mbccpy-s-l.md) | Copy one multibyte character | `LC_CTYPE` |
-| [`_mbclen`, `mblen`, `_mblen_l`](./reference/mbclen-mblen-mblen-l.md) | Validate and return number of bytes in multibyte character | `LC_CTYPE` |
-| [`strlen`, `wcslen`, `_mbslen`, `_mbslen_l`, `_mbstrlen`, `_mbstrlen_l`](./reference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l.md) | For multibyte-character strings: validate each character in string; return string length | `LC_CTYPE` |
-| [`mbstowcs`, `_mbstowcs_l`](./reference/mbstowcs-mbstowcs-l.md),[`mbstowcs_s`, `_mbstowcs_s_l`](./reference/mbstowcs-s-mbstowcs-s-l.md) | Convert sequence of multibyte characters to corresponding sequence of wide characters | `LC_CTYPE` |
-| [`mbtowc`, `_mbtowc_l`](./reference/mbtowc-mbtowc-l.md) | Convert multibyte character to corresponding wide character | `LC_CTYPE` |
-| [`printf`](./reference/printf-printf-l-wprintf-wprintf-l.md) functions | Write formatted output | `LC_NUMERIC` (determines radix character output) |
-| [`scanf`](./reference/scanf-scanf-l-wscanf-wscanf-l.md) functions | Read formatted input | `LC_NUMERIC` (determines radix character recognition) |
-| [`setlocale`, `_wsetlocale`](./reference/setlocale-wsetlocale.md) | Select locale for program | Not applicable |
-| [`strcoll`, `wcscoll`, `_mbscoll`, `_strcoll_l`, `_wcscoll_l`, `_mbscoll_l`](./reference/strcoll-wcscoll-mbscoll-strcoll-l-wcscoll-l-mbscoll-l.md) | Compare characters of two strings | `LC_COLLATE` |
-| [`_stricmp`, `_wcsicmp`, `_mbsicmp`, `_stricmp_l`, `_wcsicmp_l`, `_mbsicmp_l`](./reference/stricmp-wcsicmp-mbsicmp-stricmp-l-wcsicmp-l-mbsicmp-l.md) | Compare two strings without regard to case | `LC_CTYPE` |
-| [`_stricoll`, `_wcsicoll`, `_mbsicoll`, `_stricoll_l`, `_wcsicoll_l`, `_mbsicoll_l`](./reference/stricoll-wcsicoll-mbsicoll-stricoll-l-wcsicoll-l-mbsicoll-l.md) | Compare characters of two strings (case insensitive) | `LC_COLLATE` |
-| [`_strncoll`, `_wcsncoll`, `_mbsncoll`, `_strncoll_l`, `_wcsncoll_l`, `_mbsncoll_l`](./reference/strncoll-wcsncoll-mbsncoll-strncoll-l-wcsncoll-l-mbsncoll-l.md) | Compare first **`n`** characters of two strings | `LC_COLLATE` |
-| [`_strnicmp`, `_wcsnicmp`, `_mbsnicmp`, `_strnicmp_l`, `_wcsnicmp_l`, `_mbsnicmp_l`](./reference/strnicmp-wcsnicmp-mbsnicmp-strnicmp-l-wcsnicmp-l-mbsnicmp-l.md) | Compare characters of two strings without regard to case. | `LC_CTYPE` |
-| [`_strnicoll`, `_wcsnicoll`, `_mbsnicoll`, `_strnicoll_l`, `_wcsnicoll_l`, `_mbsnicoll_l`](./reference/strnicoll-wcsnicoll-mbsnicoll-strnicoll-l-wcsnicoll-l-mbsnicoll-l.md) | Compare first **`n`** characters of two strings (case insensitive) | `LC_COLLATE` |
-| [`strftime`, `wcsftime`, `_strftime_l`, `_wcsftime_l`](./reference/strftime-wcsftime-strftime-l-wcsftime-l.md) | Format date and time value according to supplied **`format`** argument | `LC_TIME` |
-| [`_strlwr`, `_wcslwr`, `_mbslwr`, `_strlwr_l`, `_wcslwr_l`, `_mbslwr_l`](./reference/strlwr-wcslwr-mbslwr-strlwr-l-wcslwr-l-mbslwr-l.md),[`_strlwr_s`, `_strlwr_s_l`, `_mbslwr_s`, `_mbslwr_s_l`, `_wcslwr_s`, `_wcslwr_s_l`](./reference/strlwr-s-strlwr-s-l-mbslwr-s-mbslwr-s-l-wcslwr-s-wcslwr-s-l.md) | Convert, in place, each uppercase letter in given string to lowercase | `LC_CTYPE` |
-| [`strtod`, `_strtod_l`, `wcstod`, `_wcstod_l`](./reference/strtod-strtod-l-wcstod-wcstod-l.md) | Convert character string to **`double`** value | `LC_NUMERIC` (determines radix character recognition) |
-| [`strtol`, `wcstol`, `_strtol_l`, `_wcstol_l`](./reference/strtol-wcstol-strtol-l-wcstol-l.md) | Convert character string to **`long`** value | `LC_NUMERIC` (determines radix character recognition) |
-| [`strtoul`, `_strtoul_l`, `wcstoul`, `_wcstoul_l`](./reference/strtoul-strtoul-l-wcstoul-wcstoul-l.md) | Convert character string to unsigned long value | `LC_NUMERIC` (determines radix character recognition) |
-| [`_strupr`, `_strupr_l`, `_mbsupr`, `_mbsupr_l`, `_wcsupr_l`, `_wcsupr`](./reference/strupr-strupr-l-mbsupr-mbsupr-l-wcsupr-l-wcsupr.md),[`_strupr_s`, `_strupr_s_l`, `_mbsupr_s`, `_mbsupr_s_l`, `_wcsupr_s`, `_wcsupr_s_l`](./reference/strupr-s-strupr-s-l-mbsupr-s-mbsupr-s-l-wcsupr-s-wcsupr-s-l.md) | Convert, in place, each lowercase letter in string to uppercase | `LC_CTYPE` |
-| [`strxfrm`, `wcsxfrm`, `_strxfrm_l`, `_wcsxfrm_l`](./reference/strxfrm-wcsxfrm-strxfrm-l-wcsxfrm-l.md) | Transform string into collated form according to locale | `LC_COLLATE` |
-| [`tolower`, `_tolower`, `towlower`, `_tolower_l`, `_towlower_l`](./reference/tolower-tolower-towlower-tolower-l-towlower-l.md),[`_mbctolower`, `_mbctolower_l`, `_mbctoupper`, `_mbctoupper_l`](./reference/mbctolower-mbctolower-l-mbctoupper-mbctoupper-l.md) | Convert given character to corresponding lowercase character | `LC_CTYPE` |
-| [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](./reference/toupper-toupper-towupper-toupper-l-towupper-l.md),[`_mbctolower`, `_mbctolower_l`, `_mbctoupper`, `_mbctoupper_l`](./reference/mbctolower-mbctolower-l-mbctoupper-mbctoupper-l.md) | Convert given character to corresponding uppercase letter | `LC_CTYPE` |
-| [`wcstombs`, `_wcstombs_l`](./reference/wcstombs-wcstombs-l.md),[`wcstombs_s`, `_wcstombs_s_l`](./reference/wcstombs-s-wcstombs-s-l.md) | Convert sequence of wide characters to corresponding sequence of multibyte characters | `LC_CTYPE` |
-| [`wctomb`, `_wctomb_l`](./reference/wctomb-wctomb-l.md),[`wctomb_s`, `_wctomb_s_l`](./reference/wctomb-s-wctomb-s-l.md) | Convert wide character to corresponding multibyte character | `LC_CTYPE` |
+| [`atof`, `_atof_l`, `_wtof`, `_wtof_l`](reference/atof-atof-l-wtof-wtof-l.md) | Convert character to floating-point value | `LC_NUMERIC` |
+| [`atoi`, `_atoi_l`, `_wtoi`, `_wtoi_l`](reference/atoi-atoi-l-wtoi-wtoi-l.md) | Convert character to integer value | `LC_NUMERIC` |
+| [`_atoi64`, `_atoi64_l`, `_wtoi64`, `_wtoi64_l`](reference/atoi64-atoi64-l-wtoi64-wtoi64-l.md) | Convert character to 64-bit integer value | `LC_NUMERIC` |
+| [`atol`, `_atol_l`, `_wtol`, `_wtol_l`](reference/atol-atol-l-wtol-wtol-l.md) | Convert character to long value | `LC_NUMERIC` |
+| [`_atodbl`, `_atodbl_l`, `_atoldbl`, `_atoldbl_l`, `_atoflt`, `_atoflt_l`](reference/atodbl-atodbl-l-atoldbl-atoldbl-l-atoflt-atoflt-l.md) | Convert character to double-long value | `LC_NUMERIC` |
+| [`is`, `isw` routines](is-isw-routines.md) | Test given integer for particular condition. | `LC_CTYPE` |
+| [`isleadbyte`, `_isleadbyte_l`](reference/isleadbyte-isleadbyte-l.md) | Test for lead byte | `LC_CTYPE` |
+| [`localeconv`](reference/localeconv.md) | Read appropriate values for formatting numeric quantities | `LC_MONETARY, LC_NUMERIC` |
+| [`MB_CUR_MAX`](mb-cur-max.md) | Maximum length in bytes of any multibyte character in current locale (macro defined in `STDLIB.H`) | `LC_CTYPE` |
+| [`_mbccpy`, `_mbccpy_l`](reference/mbccpy-mbccpy-l.md), [`_mbccpy_s`, `_mbccpy_s_l`](reference/mbccpy-s-mbccpy-s-l.md) | Copy one multibyte character | `LC_CTYPE` |
+| [`_mbclen`, `mblen`, `_mblen_l`](reference/mbclen-mblen-mblen-l.md) | Validate and return number of bytes in multibyte character | `LC_CTYPE` |
+| [`strlen`, `wcslen`, `_mbslen`, `_mbslen_l`, `_mbstrlen`, `_mbstrlen_l`](reference/strlen-wcslen-mbslen-mbslen-l-mbstrlen-mbstrlen-l.md) | For multibyte-character strings: validate each character in string; return string length | `LC_CTYPE` |
+| [`mbstowcs`, `_mbstowcs_l`](reference/mbstowcs-mbstowcs-l.md), [`mbstowcs_s`, `_mbstowcs_s_l`](reference/mbstowcs-s-mbstowcs-s-l.md) | Convert sequence of multibyte characters to corresponding sequence of wide characters | `LC_CTYPE` |
+| [`mbtowc`, `_mbtowc_l`](reference/mbtowc-mbtowc-l.md) | Convert multibyte character to corresponding wide character | `LC_CTYPE` |
+| [`printf`](reference/printf-printf-l-wprintf-wprintf-l.md) functions | Write formatted output | `LC_NUMERIC` (determines radix character output) |
+| [`scanf`](reference/scanf-scanf-l-wscanf-wscanf-l.md) functions | Read formatted input | `LC_NUMERIC` (determines radix character recognition) |
+| [`setlocale`, `_wsetlocale`](reference/setlocale-wsetlocale.md) | Select locale for program | Not applicable |
+| [`strcoll`, `wcscoll`, `_mbscoll`, `_strcoll_l`, `_wcscoll_l`, `_mbscoll_l`](reference/strcoll-wcscoll-mbscoll-strcoll-l-wcscoll-l-mbscoll-l.md) | Compare characters of two strings | `LC_COLLATE` |
+| [`_stricmp`, `_wcsicmp`, `_mbsicmp`, `_stricmp_l`, `_wcsicmp_l`, `_mbsicmp_l`](reference/stricmp-wcsicmp-mbsicmp-stricmp-l-wcsicmp-l-mbsicmp-l.md) | Compare two strings without regard to case | `LC_CTYPE` |
+| [`_stricoll`, `_wcsicoll`, `_mbsicoll`, `_stricoll_l`, `_wcsicoll_l`, `_mbsicoll_l`](reference/stricoll-wcsicoll-mbsicoll-stricoll-l-wcsicoll-l-mbsicoll-l.md) | Compare characters of two strings (case insensitive) | `LC_COLLATE` |
+| [`_strncoll`, `_wcsncoll`, `_mbsncoll`, `_strncoll_l`, `_wcsncoll_l`, `_mbsncoll_l`](reference/strncoll-wcsncoll-mbsncoll-strncoll-l-wcsncoll-l-mbsncoll-l.md) | Compare first **`n`** characters of two strings | `LC_COLLATE` |
+| [`_strnicmp`, `_wcsnicmp`, `_mbsnicmp`, `_strnicmp_l`, `_wcsnicmp_l`, `_mbsnicmp_l`](reference/strnicmp-wcsnicmp-mbsnicmp-strnicmp-l-wcsnicmp-l-mbsnicmp-l.md) | Compare characters of two strings without regard to case. | `LC_CTYPE` |
+| [`_strnicoll`, `_wcsnicoll`, `_mbsnicoll`, `_strnicoll_l`, `_wcsnicoll_l`, `_mbsnicoll_l`](reference/strnicoll-wcsnicoll-mbsnicoll-strnicoll-l-wcsnicoll-l-mbsnicoll-l.md) | Compare first **`n`** characters of two strings (case insensitive) | `LC_COLLATE` |
+| [`strftime`, `wcsftime`, `_strftime_l`, `_wcsftime_l`](reference/strftime-wcsftime-strftime-l-wcsftime-l.md) | Format date and time value according to supplied **`format`** argument | `LC_TIME` |
+| [`_strlwr`, `_wcslwr`, `_mbslwr`, `_strlwr_l`, `_wcslwr_l`, `_mbslwr_l`](reference/strlwr-wcslwr-mbslwr-strlwr-l-wcslwr-l-mbslwr-l.md), [`_strlwr_s`, `_strlwr_s_l`, `_mbslwr_s`, `_mbslwr_s_l`, `_wcslwr_s`, `_wcslwr_s_l`](reference/strlwr-s-strlwr-s-l-mbslwr-s-mbslwr-s-l-wcslwr-s-wcslwr-s-l.md) | Convert, in place, each uppercase letter in given string to lowercase | `LC_CTYPE` |
+| [`strtod`, `_strtod_l`, `wcstod`, `_wcstod_l`](reference/strtod-strtod-l-wcstod-wcstod-l.md) | Convert character string to **`double`** value | `LC_NUMERIC` (determines radix character recognition) |
+| [`strtol`, `wcstol`, `_strtol_l`, `_wcstol_l`](reference/strtol-wcstol-strtol-l-wcstol-l.md) | Convert character string to **`long`** value | `LC_NUMERIC` (determines radix character recognition) |
+| [`strtoul`, `_strtoul_l`, `wcstoul`, `_wcstoul_l`](reference/strtoul-strtoul-l-wcstoul-wcstoul-l.md) | Convert character string to unsigned long value | `LC_NUMERIC` (determines radix character recognition) |
+| [`_strupr`, `_strupr_l`, `_mbsupr`, `_mbsupr_l`, `_wcsupr_l`, `_wcsupr`](reference/strupr-strupr-l-mbsupr-mbsupr-l-wcsupr-l-wcsupr.md), [`_strupr_s`, `_strupr_s_l`, `_mbsupr_s`, `_mbsupr_s_l`, `_wcsupr_s`, `_wcsupr_s_l`](reference/strupr-s-strupr-s-l-mbsupr-s-mbsupr-s-l-wcsupr-s-wcsupr-s-l.md) | Convert, in place, each lowercase letter in string to uppercase | `LC_CTYPE` |
+| [`strxfrm`, `wcsxfrm`, `_strxfrm_l`, `_wcsxfrm_l`](reference/strxfrm-wcsxfrm-strxfrm-l-wcsxfrm-l.md) | Transform string into collated form according to locale | `LC_COLLATE` |
+| [`tolower`, `_tolower`, `towlower`, `_tolower_l`, `_towlower_l`](reference/tolower-tolower-towlower-tolower-l-towlower-l.md), [`_mbctolower`, `_mbctolower_l`, `_mbctoupper`, `_mbctoupper_l`](reference/mbctolower-mbctolower-l-mbctoupper-mbctoupper-l.md) | Convert given character to corresponding lowercase character | `LC_CTYPE` |
+| [`toupper`, `_toupper`, `towupper`, `_toupper_l`, `_towupper_l`](reference/toupper-toupper-towupper-toupper-l-towupper-l.md), [`_mbctolower`, `_mbctolower_l`, `_mbctoupper`, `_mbctoupper_l`](reference/mbctolower-mbctolower-l-mbctoupper-mbctoupper-l.md) | Convert given character to corresponding uppercase letter | `LC_CTYPE` |
+| [`wcstombs`, `_wcstombs_l`](reference/wcstombs-wcstombs-l.md), [`wcstombs_s`, `_wcstombs_s_l`](reference/wcstombs-s-wcstombs-s-l.md) | Convert sequence of wide characters to corresponding sequence of multibyte characters | `LC_CTYPE` |
+| [`wctomb`, `_wctomb_l`](reference/wctomb-wctomb-l.md), [`wctomb_s`, `_wctomb_s_l`](reference/wctomb-s-wctomb-s-l.md) | Convert wide character to corresponding multibyte character | `LC_CTYPE` |
> [!NOTE]
-> For multibyte routines, the multibyte code page must be equivalent to the locale set with [`setlocale`](./reference/setlocale-wsetlocale.md). [`_setmbcp`](./reference/setmbcp.md), with an argument of `_MB_CP_LOCALE` makes the multibyte code page the same as the **`setlocale`** code page.
+> For multibyte routines, the multibyte code page must be equivalent to the locale set with [`setlocale`](reference/setlocale-wsetlocale.md). [`_setmbcp`](reference/setmbcp.md), with an argument of `_MB_CP_LOCALE` makes the multibyte code page the same as the **`setlocale`** code page.
## See also
-[Internationalization](./internationalization.md)\
-[Universal C runtime routines by category](./run-time-routines-by-category.md)
+[Internationalization](internationalization.md)\
+[Universal C runtime routines by category](run-time-routines-by-category.md)
diff --git a/docs/c-runtime-library/lock.md b/docs/c-runtime-library/lock.md
index e9f4e94fa0..19562f13ef 100644
--- a/docs/c-runtime-library/lock.md
+++ b/docs/c-runtime-library/lock.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _lock"
title: "_lock"
-ms.date: "11/04/2016"
+description: "Learn more about: _lock"
+ms.date: 11/04/2016
api_name: ["_lock"]
api_location: ["msvcr110_clr0400.dll", "msvcr120.dll", "msvcr100.dll", "msvcr90.dll", "msvcr80.dll", "msvcr110.dll", "msvcrt.dll", "msvcr120_clr0400.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_lock"]
helpviewer_keywords: ["lock function", "_lock function"]
-ms.assetid: 29f77c37-30de-4b3d-91b6-030216e645a6
---
# `_lock`
@@ -20,7 +19,7 @@ Acquires a multi-thread lock.
## Syntax
```cpp
-void __cdecl _lock
+void __cdecl _lock(
int locknum
);
```
diff --git a/docs/c-runtime-library/multithreaded-libraries-performance.md b/docs/c-runtime-library/multithreaded-libraries-performance.md
index 12d78d352f..d1f3cc0346 100644
--- a/docs/c-runtime-library/multithreaded-libraries-performance.md
+++ b/docs/c-runtime-library/multithreaded-libraries-performance.md
@@ -2,7 +2,7 @@
title: "Multithreaded Libraries Performance"
description: "An overview of how to get the most performance from the Microsoft C runtime multithreaded libraries."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["threading [C++], performance", "libraries, multithreaded", "performance, multithreading", "multithreaded libraries"]
ms.assetid: faa5d808-087c-463d-8f0d-8c478d137296
---
diff --git a/docs/c-runtime-library/parameter-validation.md b/docs/c-runtime-library/parameter-validation.md
index a2d188ec7e..f63a50cc02 100644
--- a/docs/c-runtime-library/parameter-validation.md
+++ b/docs/c-runtime-library/parameter-validation.md
@@ -2,7 +2,7 @@
title: "Parameter Validation"
description: "A description of parameter validation in the Microsoft C runtime library."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["parameters, validation"]
ms.assetid: 019dd5f0-dc61-4d2e-b4e9-b66409ddf1f2
---
diff --git a/docs/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries.md b/docs/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries.md
index 9aac11ab8d..6dc1fb53c4 100644
--- a/docs/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries.md
+++ b/docs/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries.md
@@ -2,7 +2,7 @@
title: "Potential Errors Passing CRT Objects Across DLL Boundaries"
description: "An overview of potential problems you may come across when passing Microsoft C runtime objects across a dynamic link library (DLL) boundary."
ms.date: 06/29/2022
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["DLL conflicts [C++]"]
ms.assetid: c217ffd2-5d9a-4678-a1df-62a637a96460
---
diff --git a/docs/c-runtime-library/recommendations-for-choosing-between-functions-and-macros.md b/docs/c-runtime-library/recommendations-for-choosing-between-functions-and-macros.md
index 1971598d3b..57ed7d86d0 100644
--- a/docs/c-runtime-library/recommendations-for-choosing-between-functions-and-macros.md
+++ b/docs/c-runtime-library/recommendations-for-choosing-between-functions-and-macros.md
@@ -2,7 +2,7 @@
title: "Recommendations for Choosing Between Functions and Macros"
description: "Explains the differences between using macros vs functions in the Microsoft C runtime library (CRT)"
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords: ["c.functions"]
helpviewer_keywords: ["functions [CRT], vs. macros", "macros, vs. functions"]
ms.assetid: 18a633d6-cf1c-470c-a649-fa7677473e2b
diff --git a/docs/c-runtime-library/reference/abort.md b/docs/c-runtime-library/reference/abort.md
index 991f464049..436a39de91 100644
--- a/docs/c-runtime-library/reference/abort.md
+++ b/docs/c-runtime-library/reference/abort.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: abort"
title: "abort"
+description: "Learn more about: abort"
ms.date: 07/07/2022
api_name: ["abort", "_o_abort"]
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-runtime-l1-1-0.dll"]
@@ -14,7 +14,7 @@ helpviewer_keywords: ["aborting current process", "abort function", "processes,
Aborts the current process and returns an error code.
> [!NOTE]
-> Do not use this method to shut down a Microsoft Store app or Universal Windows Platform (UWP) app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/legal/windows/agreements/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
+> Do not use this method to shut down a Microsoft Store app or Universal Windows Platform (UWP) app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/windows/apps/publish/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
## Syntax
@@ -71,8 +71,8 @@ The following program tries to open a file and aborts if the attempt fails.
// the abort function by attempting to open a file
// and aborts if the attempt fails.
-#include
-#include
+#include
+#include
int main( void )
{
diff --git a/docs/c-runtime-library/reference/access-waccess.md b/docs/c-runtime-library/reference/access-waccess.md
index 87fadbc2ba..87cf212ca0 100644
--- a/docs/c-runtime-library/reference/access-waccess.md
+++ b/docs/c-runtime-library/reference/access-waccess.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _access, _waccess"
title: "_access, _waccess"
+description: "Learn more about: _access, _waccess"
ms.date: "4/2/2020"
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"]
@@ -90,9 +90,9 @@ The following example uses **`_access`** to check the file named *`crt_ACCESS.C`
// This example uses _access to check the file named
// crt_ACCESS.C to see if it exists and if writing is allowed.
-#include
-#include
-#include
+#include
+#include
+#include
int main( void )
{
diff --git a/docs/c-runtime-library/reference/acos-acosf-acosl.md b/docs/c-runtime-library/reference/acos-acosf-acosl.md
index 5296418f6b..b570c16c00 100644
--- a/docs/c-runtime-library/reference/acos-acosf-acosl.md
+++ b/docs/c-runtime-library/reference/acos-acosf-acosl.md
@@ -1,7 +1,7 @@
---
title: "acos, acosf, acosl"
description: "API reference for acos, acosf, and acosl; which calculate the arccosine of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["acosf", "acos", "acosl", "_o_acos", "_o_acosf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the arccosine.
double acos( double x );
float acosf( float x );
long double acosl( long double x );
-#define acos(X) // Requires C11 or higher
+#define acos(X) // Requires C11 or later
float acos( float x ); // C++ only
long double acos( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/acosh-acoshf-acoshl.md b/docs/c-runtime-library/reference/acosh-acoshf-acoshl.md
index eae18abea8..18d9c23aa1 100644
--- a/docs/c-runtime-library/reference/acosh-acoshf-acoshl.md
+++ b/docs/c-runtime-library/reference/acosh-acoshf-acoshl.md
@@ -1,14 +1,13 @@
---
title: "acosh, acoshf, acoshl"
description: "API reference for acosh, acoshf, and acoshl; which calculate the inverse hyperbolic cosine of a floating-point value."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["acoshf", "acosh", "acoshl", "_o_acosh", "_o_acoshf", "_o_acoshl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["acosh", "acoshf", "acoshl", "math/acosh", "math/acoshf", "math/acoshl"]
helpviewer_keywords: ["acoshf function", "acosh function", "acoshl function"]
-ms.assetid: 6985c4d7-9e2a-44ce-9a9b-5a43015f15f7
---
# `acosh`, `acoshf`, `acoshl`
@@ -20,7 +19,7 @@ Calculates the inverse hyperbolic cosine.
double acosh( double x );
float acoshf( float x );
long double acoshl( long double x );
-#define acosh(X) // Requires C11 or higher
+#define acosh(X) // Requires C11 or later
float acosh( float x ); // C++ only
long double acosh( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/and.md b/docs/c-runtime-library/reference/and.md
index 2a5a4412c1..efa2cca286 100644
--- a/docs/c-runtime-library/reference/and.md
+++ b/docs/c-runtime-library/reference/and.md
@@ -1,13 +1,12 @@
---
-description: "Learn more about: and"
title: "and"
+description: "Learn more about: and"
ms.date: "11/04/2016"
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/and", "and", "std.and", "std::and"]
helpviewer_keywords: ["and macro"]
-ms.assetid: 2644ab57-8e1b-48f0-9021-cafe3e26bdc4
---
# `and`
@@ -16,7 +15,6 @@ An alternative to the && operator.
## Syntax
```C
-
#define and &&
```
diff --git a/docs/c-runtime-library/reference/asctime-s-wasctime-s.md b/docs/c-runtime-library/reference/asctime-s-wasctime-s.md
index c7762a0c8f..99d3ffe89b 100644
--- a/docs/c-runtime-library/reference/asctime-s-wasctime-s.md
+++ b/docs/c-runtime-library/reference/asctime-s-wasctime-s.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: asctime_s, _wasctime_s"
title: "asctime_s, _wasctime_s"
-ms.date: "4/2/2020"
+description: "Learn more about: asctime_s, _wasctime_s"
+ms.date: 4/2/2020
api_name: ["_wasctime_s", "asctime_s", "_o__wasctime_s", "_o_asctime_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-time-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["asctime_s", "_wasctime_s", "_tasctime_s"]
helpviewer_keywords: ["tasctime_s function", "_tasctime_s function", "time structure conversion", "wasctime_s function", "time, converting", "_wasctime_s function", "asctime_s function"]
-ms.assetid: 17ad9b2b-a459-465d-976a-42822897688a
---
# `asctime_s`, `_wasctime_s`
@@ -24,7 +23,7 @@ errno_t asctime_s(
);
errno_t _wasctime_s(
wchar_t* buffer,
- size_t numberOfElements
+ size_t numberOfElements,
const struct tm *tmSource
);
template
diff --git a/docs/c-runtime-library/reference/asin-asinf-asinl.md b/docs/c-runtime-library/reference/asin-asinf-asinl.md
index 9fbe4cda49..0e7495e47a 100644
--- a/docs/c-runtime-library/reference/asin-asinf-asinl.md
+++ b/docs/c-runtime-library/reference/asin-asinf-asinl.md
@@ -1,7 +1,7 @@
---
title: "asin, asinf, asinl"
description: "API reference for asin, asinf, and asinl; which calculate the arcsine of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["asinf", "asinl", "asin", "_o_asin", "_o_asinf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the arcsine.
double asin( double x );
float asinf ( float x );
long double asinl( long double x );
-#define asin(X) // Requires C11 or higher
+#define asin(X) // Requires C11 or later
float asin( float x ); // C++ only
long double asin( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/asinh-asinhf-asinhl.md b/docs/c-runtime-library/reference/asinh-asinhf-asinhl.md
index 1c9480aac2..8501e27ac0 100644
--- a/docs/c-runtime-library/reference/asinh-asinhf-asinhl.md
+++ b/docs/c-runtime-library/reference/asinh-asinhf-asinhl.md
@@ -1,14 +1,13 @@
---
title: "asinh, asinhf, asinhl"
description: "API reference for asinh, asinhf, and asinhl; which calculate the inverse hyperbolic sine of a floating-point value."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["asinh", "asinhf", "asinhl", "_o_asinh", "_o_asinhf", "_o_asinhl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["asinhf", "asinhl", "asinh"]
helpviewer_keywords: ["asinh function", "asinhl function", "asinhf function"]
-ms.assetid: 4488babe-1a7e-44ca-8b7b-c2db0a70084f
---
# `asinh`, `asinhf`, `asinhl`
@@ -20,7 +19,7 @@ Calculates the inverse hyperbolic sine.
double asinh( double x );
float asinhf( float x );
long double asinhl( long double x );
-#define asinh(X) // Requires C11 or higher
+#define asinh(X) // Requires C11 or later
float asinh( float x ); // C++ only
long double asinh( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/atan-atanf-atanl-atan2-atan2f-atan2l.md b/docs/c-runtime-library/reference/atan-atanf-atanl-atan2-atan2f-atan2l.md
index 12dab5d047..91fc052f9a 100644
--- a/docs/c-runtime-library/reference/atan-atanf-atanl-atan2-atan2f-atan2l.md
+++ b/docs/c-runtime-library/reference/atan-atanf-atanl-atan2-atan2f-atan2l.md
@@ -1,7 +1,7 @@
---
title: "atan, atanf, atanl, atan2, atan2f, atan2l"
description: "API reference for atan, atanf, atanl, atan2, atan2f, and atan2l; which calculate the arctangent of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["atan2f", "atan2l", "atan2", "atanf", "atan", "atanl", "_o_atan", "_o_atan2", "_o_atan2f", "_o_atanf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the arctangent of **`x`** (**`atan`**, **`atanf`**, and **`atanl`**)
double atan( double x );
float atanf( float x );
long double atanl( long double x );
-#define atan(X) // Requires C11 or higher
+#define atan(X) // Requires C11 or later
float atan( float x ); // C++ only
long double atan( long double x ); // C++ only
@@ -27,7 +27,7 @@ long double atan( long double x ); // C++ only
double atan2( double y, double x );
float atan2f( float y, float x );
long double atan2l( long double y, long double x );
-#define atan2(Y, X) // Requires C11 or higher
+#define atan2(Y, X) // Requires C11 or later
float atan2( float y, float x ); // C++ only
long double atan2( long double y, long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/atanh-atanhf-atanhl.md b/docs/c-runtime-library/reference/atanh-atanhf-atanhl.md
index 02b797f39a..02ebb06caf 100644
--- a/docs/c-runtime-library/reference/atanh-atanhf-atanhl.md
+++ b/docs/c-runtime-library/reference/atanh-atanhf-atanhl.md
@@ -1,14 +1,13 @@
---
title: "atanh, atanhf, atanhl"
description: "API reference for atanh, atanhf, and atanhl; which calculate the inverse hyperbolic tangent of a floating-point value."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["atanhl", "atanhf", "atanh", "_o_atanh", "_o_atanhf", "_o_atanhl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["atanhl", "atanhf", "atanh"]
-helpviewer_keywords: ["atanhf function", "atanhl function", "atanh funciton"]
-ms.assetid: 83a43b5b-2580-4461-854f-dc84236d9f32
+helpviewer_keywords: ["atanhf function", "atanhl function", "atanh function"]
---
# `atanh`, `atanhf`, `atanhl`
@@ -20,7 +19,7 @@ Calculates the inverse hyperbolic tangent.
double atanh( double x );
float atanhf( float x );
long double atanhl( long double x );
-#define atanh(X) // Requires C11 or higher
+#define atanh(X) // Requires C11 or later
float atanh( float x ); // C++ only
long double atanh( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/bitand.md b/docs/c-runtime-library/reference/bitand.md
index cc4b84b0bd..0701824a21 100644
--- a/docs/c-runtime-library/reference/bitand.md
+++ b/docs/c-runtime-library/reference/bitand.md
@@ -1,13 +1,12 @@
---
-description: "Learn more about: bitand"
title: "bitand"
+description: "Learn more about: bitand"
ms.date: "11/04/2016"
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: ["std::bitand", "std.bitand", "ISO646/bitand", "bitand"]
helpviewer_keywords: ["bitand function"]
-ms.assetid: 279cf9b5-fac1-49de-b329-f1a31b3481fe
---
# `bitand`
@@ -16,7 +15,6 @@ An alternative to the & operator.
## Syntax
```C
-
#define bitand &
```
diff --git a/docs/c-runtime-library/reference/bitor.md b/docs/c-runtime-library/reference/bitor.md
index 4451365a0e..8f2aaf236d 100644
--- a/docs/c-runtime-library/reference/bitor.md
+++ b/docs/c-runtime-library/reference/bitor.md
@@ -1,13 +1,12 @@
---
-description: "Learn more about: bitor"
title: "bitor"
+description: "Learn more about: bitor"
ms.date: "11/04/2016"
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/bitor", "bitor", "std.bitor", "std::bitor"]
helpviewer_keywords: ["bitor function"]
-ms.assetid: 3c0a3711-9c74-41f2-b400-2f7797da30d1
---
# `bitor`
@@ -16,7 +15,6 @@ An alternative to the `|` operator.
## Syntax
```C
-
#define bitor |
```
diff --git a/docs/c-runtime-library/reference/calloc-dbg.md b/docs/c-runtime-library/reference/calloc-dbg.md
index bde434d3d8..fbff456b61 100644
--- a/docs/c-runtime-library/reference/calloc-dbg.md
+++ b/docs/c-runtime-library/reference/calloc-dbg.md
@@ -99,7 +99,7 @@ int main( void )
else
printf( "Problem allocating memory\n" );
- / _free_dbg must be called to free CLIENT type blocks
+ // _free_dbg must be called to free CLIENT type blocks
free( bufferN );
_free_dbg( bufferC, _CLIENT_BLOCK );
}
diff --git a/docs/c-runtime-library/reference/carg-cargf-cargl.md b/docs/c-runtime-library/reference/carg-cargf-cargl.md
index 0635b71a2e..867def0277 100644
--- a/docs/c-runtime-library/reference/carg-cargf-cargl.md
+++ b/docs/c-runtime-library/reference/carg-cargf-cargl.md
@@ -1,14 +1,13 @@
---
title: "carg, cargf, cargl"
description: "API reference for carg, cargf, and cargl; which retrieve the argument of a complex number, with a branch cut along the negative real axis."
-ms.date: "9/2/2020"
+ms.date: 9/2/2020
api_name: ["carg", "cargf", "cargl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["carg", "cargf", "cargl", "complex/carg", "complex/cargf", "complex/cargl"]
helpviewer_keywords: ["carg function", "cargf function", "cargl function"]
-ms.assetid: 610d6a93-b929-46ab-a966-b77db0b804be
---
# `carg`, `cargf`, `cargl`
@@ -32,7 +31,7 @@ float cargf(
long double cargl(
_Lcomplex z
);
-#define carg(X) // Requires C11 or higher
+#define carg(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/cbrt-cbrtf-cbrtl.md b/docs/c-runtime-library/reference/cbrt-cbrtf-cbrtl.md
index 930c3fcaad..0ec75d6762 100644
--- a/docs/c-runtime-library/reference/cbrt-cbrtf-cbrtl.md
+++ b/docs/c-runtime-library/reference/cbrt-cbrtf-cbrtl.md
@@ -1,14 +1,13 @@
---
title: "cbrt, cbrtf, cbrtl"
description: "API reference for cbrt, cbrtf, and cbrtl; which calculate a cube root"
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["cbrt", "cbrtf", "cbrtl", "_o_cbrt", "_o_cbrtf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["cbrtl", "cbrt", "cbrtf"]
helpviewer_keywords: ["cbrtl function", "cbrtf function", "cbrt function"]
-ms.assetid: ab51d916-3db2-4beb-b46a-28b4062cd33f
---
# `cbrt`, `cbrtf`, `cbrtl`
@@ -32,7 +31,7 @@ float cbrtf(
long double cbrtl(
long double x
);
-#define cbrt(X) // Requires C11 or higher
+#define cbrt(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/ceil-ceilf-ceill.md b/docs/c-runtime-library/reference/ceil-ceilf-ceill.md
index 0b4598a254..c1e0fc6cfb 100644
--- a/docs/c-runtime-library/reference/ceil-ceilf-ceill.md
+++ b/docs/c-runtime-library/reference/ceil-ceilf-ceill.md
@@ -1,14 +1,13 @@
---
title: "ceil, ceilf, ceill"
description: "API ref for calculating the ceiling of a value with ceil()."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["ceilf", "ceil", "ceill", "_o_ceil", "_o_ceilf"]
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", "ntdll.dll", "api-ms-win-crt-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["ceil", "ceilf", "ceill"]
helpviewer_keywords: ["calculating value ceilings", "ceill function", "ceil function", "ceilf function"]
-ms.assetid: f4e5acab-5c8f-4b10-9ae2-9561e6453718
---
# `ceil`, `ceilf`, `ceill`
@@ -32,7 +31,7 @@ float ceilf(
long double ceill(
long double x
);
-#define ceil(X) // Requires C11 or higher
+#define ceil(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/cgets-s-cgetws-s.md b/docs/c-runtime-library/reference/cgets-s-cgetws-s.md
index 8709404d4c..82de69ea28 100644
--- a/docs/c-runtime-library/reference/cgets-s-cgetws-s.md
+++ b/docs/c-runtime-library/reference/cgets-s-cgetws-s.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _cgets_s, _cgetws_s"
title: "_cgets_s, _cgetws_s"
+description: "Learn more about: _cgets_s, _cgetws_s"
ms.date: "4/2/2020"
api_name: ["_cgetws_s", "_cgets_s", "_o__cgets_s", "_o__cgetws_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-conio-l1-1-0.dll"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_cgets_s", "cgets_s", "cgetws_s", "_cgetws_s"]
helpviewer_keywords: ["strings [C++], getting from console", "console, getting strings from", "_cgets_s function", "cget_s function", "_cgetws_s function", "cgetws_s function"]
-ms.assetid: 38b74897-afe6-4dd9-a43f-36a3c0d72c5c
---
# `_cgets_s`, `_cgetws_s`
@@ -26,7 +25,7 @@ errno_t _cgets_s(
size_t *pSizeRead
);
errno_t _cgetws_s(
- wchar_t *buffer
+ wchar_t *buffer,
size_t numberOfElements,
size_t *pSizeRead
);
diff --git a/docs/c-runtime-library/reference/cimag-cimagf-cimagl.md b/docs/c-runtime-library/reference/cimag-cimagf-cimagl.md
index dfcdd2f381..2f896bd509 100644
--- a/docs/c-runtime-library/reference/cimag-cimagf-cimagl.md
+++ b/docs/c-runtime-library/reference/cimag-cimagf-cimagl.md
@@ -1,14 +1,13 @@
---
title: "cimag, cimagf, cimagl"
description: "API reference for cimag, cimagf, and cimagl; which retrieve the imaginary part of a complex number."
-ms.date: "9/2/2020"
+ms.date: 9/2/2020
api_name: ["cimag", "cimagf", "cimagl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["cimagf", "cimagl", "complex/cimag", "complex/cimagf", "complex/cimagl", "cimag"]
helpviewer_keywords: ["cimag function", "cimagf function", "cimagl function"]
-ms.assetid: 0d8836f5-d61d-44cd-8731-6f75cb776def
---
# `cimag`, `cimagf`, `cimagl`
@@ -20,7 +19,7 @@ Retrieves the imaginary part of a complex number.
double cimag( _Dcomplex z );
float cimagf( _Fcomplex z );
long double cimagl( _Lcomplex z );
-#define cimag(X) // Requires C11 or higher
+#define cimag(X) // Requires C11 or later
float cimag( _Fcomplex z ); // C++ only
long double cimag( _Lcomplex z ); // C++ only
diff --git a/docs/c-runtime-library/reference/conj-conjf-conjl.md b/docs/c-runtime-library/reference/conj-conjf-conjl.md
index 60b5e95ad9..fbf227b3e4 100644
--- a/docs/c-runtime-library/reference/conj-conjf-conjl.md
+++ b/docs/c-runtime-library/reference/conj-conjf-conjl.md
@@ -1,14 +1,13 @@
---
title: "conj, conjf, conjl"
description: "API reference for conj, conjf, and conjl; which retrieve the complex conjugate of a complex number."
-ms.date: "9/2/2020"
+ms.date: 9/2/2020
api_name: ["conj", "conjf", "conjl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["conj", "conjf", "conjl", "complex/conj", "complex/conjf", "complex/conjl"]
helpviewer_keywords: ["conj function", "conjf function", "conjl function"]
-ms.assetid: 792fccfa-19c6-4890-99f9-a3b89effccd6
---
# `conj`, `conjf`, `conjl`
@@ -32,7 +31,7 @@ _Fcomplex conjf(
_Lcomplex conjl(
_Lcomplex z
);
-#define conj(X) // Requires C11 or higher
+#define conj(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/controlfp-s.md b/docs/c-runtime-library/reference/controlfp-s.md
index d955dfb42e..8de3df8b7c 100644
--- a/docs/c-runtime-library/reference/controlfp-s.md
+++ b/docs/c-runtime-library/reference/controlfp-s.md
@@ -1,7 +1,7 @@
---
description: "Learn more about: _controlfp_s"
title: "_controlfp_s"
-ms.date: "4/2/2020"
+ms.date: 03/27/2025
api_name: ["_controlfp_s", "_o__controlfp_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-runtime-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -75,16 +75,23 @@ _controlfp_s(¤t_word, _DN_FLUSH, _MCW_DN);
// and x64 processors with SSE2 support. Ignored on other x86 platforms.
```
-On ARM platforms, the **`_controlfp_s`** function applies to the FPSCR register. On x64 architectures, only the SSE2 control word that's stored in the MXCSR register is affected. On Intel (x86) platforms, **`_controlfp_s`** affects the control words for both the x87 and the SSE2, if present. It's possible for the two control words to be inconsistent with each other (because of a previous call to [`__control87_2`](control87-controlfp-control87-2.md), for example); if there's an inconsistency between the two control words, **`_controlfp_s`** sets the `EM_AMBIGUOUS` flag in *`currentControl`*. It's a warning that the returned control word might not represent the state of both floating-point control words accurately.
+This function is ignored when you use [`/clr` (Common Language Runtime Compilation)](../../build/reference/clr-common-language-runtime-compilation.md) to compile because the common language runtime (CLR) only supports the default floating-point precision.
-On the ARM and x64 architectures, changing the infinity mode or the floating-point precision isn't supported. If the precision control mask is used on the x64 platform, the function raises an assertion and the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md).
+On x64, only the SSE2 control word stored in the MXCSR register is affected. Changing the infinity mode or the floating-point precision isn't supported. If the precision control mask is used on the x64 platform, the function raises an assertion and the invalid parameter handler is invoked as described in [Parameter validation](../parameter-validation.md).
-If the mask isn't set correctly, this function generates an invalid parameter exception, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, this function returns `EINVAL` and sets `errno` to `EINVAL`.
+On x86, **`_controlfp_s`** affects the control words for both the x87 and the SSE2, if present. It's possible for the two control words to be inconsistent with each other (because of a previous call to [`__control87_2`](control87-controlfp-control87-2.md), for example); if there's an inconsistency between the two control words, **`_controlfp_s`** sets the `EM_AMBIGUOUS` flag in *`currentControl`*. It's a warning that the returned control word might not represent the state of both floating-point control words accurately.
-This function is ignored when you use [`/clr` (Common Language Runtime Compilation)](../../build/reference/clr-common-language-runtime-compilation.md) to compile because the common language runtime (CLR) only supports the default floating-point precision.
+If the mask isn't set correctly, this function generates an invalid parameter exception, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, this function returns `EINVAL` and sets `errno` to `EINVAL`.
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).
+### Arm platforms
+
+- Changing the infinity mode or the floating-point precision isn't supported. If the precision control mask is used on the x64 platform, the function raises an assertion and the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md).
+- On ARM32 (discontinued), Windows doesn't support FP exceptions.
+- On ARM64, unmasking the whole `_MCW_EM` or any bits from it (`_EM_INEXACT`, `_EM_UNDERFLOW`, `_EM_OVERFLOW`, `_EM_ZERODIVIDE`, and `_EM_INVALID`) correctly change the FPCR register. Floating point exceptions raised by standard math functions, like Invalid operation from `std::acos`, are exempt from this behavior and can be ignored or raised properly depending on the FPCR register. For more information, see [Overview of ARM32 ABI Conventions](../../build/overview-of-arm-abi-conventions.md#floating-point-exceptions).
+- On ARM64EC, Windows catches processor floating-point exceptions and disables them in the FPCR register. This ensures consistent behavior across different processor variants.
+
### Mask constants and values
For the `_MCW_EM` mask, clearing it sets the exception, which allows the hardware exception; setting it hides the exception. If a `_EM_UNDERFLOW` or `_EM_OVERFLOW` occurs, no hardware exception is thrown until the next floating-point instruction is executed. To generate a hardware exception immediately after `_EM_UNDERFLOW` or `_EM_OVERFLOW`, call the `FWAIT MASM` instruction.
diff --git a/docs/c-runtime-library/reference/copysign-copysignf-copysignl-copysign-copysignf-copysignl.md b/docs/c-runtime-library/reference/copysign-copysignf-copysignl-copysign-copysignf-copysignl.md
index 8d979ab1f3..225fd4e100 100644
--- a/docs/c-runtime-library/reference/copysign-copysignf-copysignl-copysign-copysignf-copysignl.md
+++ b/docs/c-runtime-library/reference/copysign-copysignf-copysignl-copysign-copysignf-copysignl.md
@@ -1,14 +1,13 @@
---
title: "copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl"
description: "API ref for returning a value that has the magnitude of one argument and the sign of another using copysign()"
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["copysignf", "copysignl", "_copysignl", "_copysign", "_copysignf", "copysign"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_copysignl", "copysign", "copysignf", "_copysign", "copysignl", "_copysignf"]
helpviewer_keywords: ["copysignl function", "_copysignl function", "copysign function", "_copysignf function", "_copysign function", "copysignf function"]
-ms.assetid: 009216d6-72a2-402d-aa6c-91d924b2c9e4
---
# `copysign`, `copysignf`, `copysignl`, `_copysign`, `_copysignf`, `_copysignl`
@@ -45,7 +44,7 @@ long double _copysignl(
long double x,
long double y
);
-#define copysign(X, Y) // Requires C11 or higher
+#define copysign(X, Y) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/cos-cosf-cosl.md b/docs/c-runtime-library/reference/cos-cosf-cosl.md
index 5e31e2aa7e..ab58605fd6 100644
--- a/docs/c-runtime-library/reference/cos-cosf-cosl.md
+++ b/docs/c-runtime-library/reference/cos-cosf-cosl.md
@@ -1,14 +1,13 @@
---
title: "cos, cosf, cosl"
description: "API reference for cos, cosf, and cosl; which calculate the cosine value of a floating-point number."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["cos", "cosf", "cosl", "_o_cos", "_o_cosf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["cos", "cosf", "cosl"]
helpviewer_keywords: ["cosines", "cosl function", "calculating cosine", "cosf function", "cos function", "trigonometric functions", "cosines, calculating"]
-ms.assetid: ae90435e-6b68-4a47-a81f-be87d5c08f16
---
# `cos`, `cosf`, `cosl`
@@ -20,7 +19,7 @@ Calculates the cosine.
double cos( double x );
float cosf( float x );
long double cosl( long double x );
-#define cos(X) // Requires C11 or higher
+#define cos(X) // Requires C11 or later
float cos( float x ); // C++ only
long double cos( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/cosh-coshf-coshl.md b/docs/c-runtime-library/reference/cosh-coshf-coshl.md
index cddafd7d1b..f02e9ed491 100644
--- a/docs/c-runtime-library/reference/cosh-coshf-coshl.md
+++ b/docs/c-runtime-library/reference/cosh-coshf-coshl.md
@@ -1,7 +1,7 @@
---
title: "cosh, coshf, coshl"
description: "API reference for cosh, coshf, and coshl; which calculate the hyperbolic cosine of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["cosh", "coshf", "coshl", "_o_cosh", "_o_coshf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the hyperbolic cosine.
double cosh( double x );
float coshf( float x );
long double coshl( long double x );
-#define cosh(X) // Requires C11 or higher
+#define cosh(X) // Requires C11 or later
float cosh( float x ); // C++ only
long double cosh( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/cprintf-cprintf-l-cwprintf-cwprintf-l.md b/docs/c-runtime-library/reference/cprintf-cprintf-l-cwprintf-cwprintf-l.md
index 55418b0ad2..8dfe11ae63 100644
--- a/docs/c-runtime-library/reference/cprintf-cprintf-l-cwprintf-cwprintf-l.md
+++ b/docs/c-runtime-library/reference/cprintf-cprintf-l-cwprintf-cwprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _cprintf, _cprintf_l, _cwprintf, _cwprintf_l"
title: "_cprintf, _cprintf_l, _cwprintf, _cwprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _cprintf, _cprintf_l, _cwprintf, _cwprintf_l"
+ms.date: 3/9/2021
api_name: ["_cwprintf_l", "_cprintf_l", "_cwprintf", "_cprintf"]
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"]
@@ -85,7 +85,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_cprintf.c
-// compile with: /c
// This program displays some variables to the console.
#include
diff --git a/docs/c-runtime-library/reference/cprintf-s-cprintf-s-l-cwprintf-s-cwprintf-s-l.md b/docs/c-runtime-library/reference/cprintf-s-cprintf-s-l-cwprintf-s-cwprintf-s-l.md
index cab723ba69..3dc9149a34 100644
--- a/docs/c-runtime-library/reference/cprintf-s-cprintf-s-l-cwprintf-s-cwprintf-s-l.md
+++ b/docs/c-runtime-library/reference/cprintf-s-cprintf-s-l-cwprintf-s-cwprintf-s-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _cprintf_s, _cprintf_s_l, _cwprintf_s, _cwprintf_s_l"
title: "_cprintf_s, _cprintf_s_l, _cwprintf_s, _cwprintf_s_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _cprintf_s, _cprintf_s_l, _cwprintf_s, _cwprintf_s_l"
+ms.date: 3/9/2021
api_name: ["_cwprintf_s_l", "_cprintf_s_l", "_cprintf_s", "_cwprintf_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_type: ["DLLExport"]
@@ -65,7 +65,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!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).
+> 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 [`_cprintf`, `_cprintf_l`, `_cwprintf`, `_cwprintf_l`](cprintf-cprintf-l-cwprintf-cwprintf-l.md)), these functions validate their parameters and invoke the invalid parameter handler, as described in [Parameter validation](../parameter-validation.md), if *`format`* is a null pointer. These functions differ from the non-secure versions in that the format string itself is also validated. If there are any unknown or badly formed formatting specifiers, these functions invoke the invalid parameter handler. In all cases, If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`.
@@ -93,7 +93,6 @@ All versions of the [C run-time libraries](../crt-library-features.md).
```C
// crt_cprintf_s.c
-// compile with: /c
// This program displays some variables to the console.
#include
diff --git a/docs/c-runtime-library/reference/cproj-cprojf-cprojl.md b/docs/c-runtime-library/reference/cproj-cprojf-cprojl.md
index 39bd6ca7d8..99f512c15e 100644
--- a/docs/c-runtime-library/reference/cproj-cprojf-cprojl.md
+++ b/docs/c-runtime-library/reference/cproj-cprojf-cprojl.md
@@ -1,14 +1,13 @@
---
title: "cproj, cprojf, cprojl"
description: "API reference for cproj, cprojf, and cprojl; which retrieve the projection of a complex number on the Reimann sphere."
-ms.date: "9/2/2020"
+ms.date: 9/2/2020
api_name: ["cproj", "cprojf", "cprojl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["cproj", "cprojf", "cprojl", "complex/cproj", "complex/cprojf", "complex/cprojl"]
helpviewer_keywords: ["cproj function", "cprojf function", "cprojl function"]
-ms.assetid: 32b49623-13bf-4cae-802e-7912d75030fe
---
# `cproj`, `cprojf`, `cprojl`
@@ -32,7 +31,7 @@ _Fcomplex cprojf(
_Lcomplex cprojl(
_Lcomplex z
);
-#define cproj(X) // Requires C11 or higher
+#define cproj(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/creal-crealf-creall.md b/docs/c-runtime-library/reference/creal-crealf-creall.md
index 40a36d933e..82f3159c8d 100644
--- a/docs/c-runtime-library/reference/creal-crealf-creall.md
+++ b/docs/c-runtime-library/reference/creal-crealf-creall.md
@@ -1,14 +1,13 @@
---
title: "creal, crealf, creall"
description: "API reference for creal, crealf, creall; which retrieve the real part of a complex number."
-ms.date: "9/2/2020"
+ms.date: 9/2/2020
api_name: ["creal", "crealf", "creall"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["creal", "crealf", "creall", "complex/creal", "complex/crealf", "complex/creall"]
helpviewer_keywords: ["creal function", "crealf function", "creall function"]
-ms.assetid: fa3ac62f-7aa3-4238-a71f-d6b00cd0c7c8
---
# `creal`, `crealf`, `creall`
@@ -20,7 +19,7 @@ Retrieves the real part of a complex number.
double creal( _Dcomplex z );
float crealf( _Fcomplex z );
long double creall( _Lcomplex z );
-#define creal(X) // Requires C11 or higher
+#define creal(X) // Requires C11 or later
float creal( _Fcomplex z ); // C++ only
long double creal( _Lcomplex z ); // C++ only
diff --git a/docs/c-runtime-library/reference/crtcheckmemory.md b/docs/c-runtime-library/reference/crtcheckmemory.md
index de0f6e98ce..5c9ca5d58e 100644
--- a/docs/c-runtime-library/reference/crtcheckmemory.md
+++ b/docs/c-runtime-library/reference/crtcheckmemory.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _CrtCheckMemory"
title: "_CrtCheckMemory"
+description: "Learn more about: _CrtCheckMemory"
ms.date: "11/04/2016"
api_name: ["_CrtCheckMemory"]
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: ["CrtCheckMemory", "_CrtCheckMemory"]
helpviewer_keywords: ["_CrtCheckMemory function", "CrtCheckMemory function"]
-ms.assetid: 457cc72e-60fd-4177-ab5c-6ae26a420765
---
# `_CrtCheckMemory`
@@ -17,7 +16,6 @@ Confirms the integrity of the memory blocks allocated in the debug heap (debug v
## Syntax
```C
-
int _CrtCheckMemory( void );
```
diff --git a/docs/c-runtime-library/reference/crtdumpmemoryleaks.md b/docs/c-runtime-library/reference/crtdumpmemoryleaks.md
index 5e934bfd26..28291b7a9c 100644
--- a/docs/c-runtime-library/reference/crtdumpmemoryleaks.md
+++ b/docs/c-runtime-library/reference/crtdumpmemoryleaks.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _CrtDumpMemoryLeaks"
title: "_CrtDumpMemoryLeaks"
+description: "Learn more about: _CrtDumpMemoryLeaks"
ms.date: "11/04/2016"
api_name: ["_CrtDumpMemoryLeaks"]
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"]
@@ -16,7 +16,6 @@ Dumps all the memory blocks in the debug heap when a memory leak has occurred (d
## Syntax
```C
-
int _CrtDumpMemoryLeaks( void );
```
diff --git a/docs/c-runtime-library/reference/crtreportblocktype.md b/docs/c-runtime-library/reference/crtreportblocktype.md
index 48220ad606..e9c58f7c24 100644
--- a/docs/c-runtime-library/reference/crtreportblocktype.md
+++ b/docs/c-runtime-library/reference/crtreportblocktype.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _CrtReportBlockType"
title: "_CrtReportBlockType"
-ms.date: "11/04/2016"
+description: "Learn more about: _CrtReportBlockType"
+ms.date: 11/04/2016
api_name: ["_CrtReportBlockType"]
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: ["_CrtReportBlockType", "CrtReportBlockType"]
helpviewer_keywords: ["CrtReportBlockType function", "BLOCK_SUBTYPE macro", "_CrtReportBlockType function", "_BLOCK_TYPE macro", "_BLOCK_SUBTYPE macro", "BLOCK_TYPE macro"]
-ms.assetid: 0f4b9da7-bebb-4956-9541-b2581640ec6b
---
# `_CrtReportBlockType`
@@ -19,7 +18,7 @@ Returns the block type/subtype associated with a given debug heap block pointer.
```C
int _CrtReportBlockType(
const void * pBlock
-};
+);
```
### Parameters
diff --git a/docs/c-runtime-library/reference/crtsetdebugfillthreshold.md b/docs/c-runtime-library/reference/crtsetdebugfillthreshold.md
index bd91d7fa57..143cbd3f21 100644
--- a/docs/c-runtime-library/reference/crtsetdebugfillthreshold.md
+++ b/docs/c-runtime-library/reference/crtsetdebugfillthreshold.md
@@ -1,14 +1,13 @@
---
title: "_CrtSetDebugFillThreshold"
description: "Use the _CrtSetDebugFillThreshold function to set the maximum amount of buffer to fill in secure CRT functions."
-ms.date: "10/31/2019"
+ms.date: 04/10/2025
api_name: ["_CrtSetDebugFillThreshold"]
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: ["_CrtSetDebugFillThreshold", "CrtSetDebugFillThreshold"]
helpviewer_keywords: ["debug, buffer-filling behavior", "CrtSetDebugFillThreshold function", "_CrtSetDebugFillThreshold function", "buffer-filling behavior", "0xFE"]
-ms.assetid: 6cb360e8-56ae-4248-b17f-e28aee3e0ed7
---
# `_CrtSetDebugFillThreshold`
@@ -38,58 +37,36 @@ The default threshold is `SIZE_T_MAX`.
Here's a list of the affected functions:
- [`asctime_s`, `_wasctime_s`](asctime-s-wasctime-s.md)
-
- [`_cgets_s`, `_cgetws_s`](cgets-s-cgetws-s.md)
-
- [`ctime_s`, `_ctime32_s`, `_ctime64_s`, `_wctime_s`, `_wctime32_s`, `_wctime64_s`](ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md)
-
- [`_ecvt_s`](ecvt-s.md)
-
- [`_fcvt_s`](fcvt-s.md)
-
- [`_gcvt_s`](gcvt-s.md)
-
- [`_itoa_s`, `_ltoa_s`, `_ultoa_s`, `_i64toa_s`, `_ui64toa_s`, `_itow_s`, `_ltow_s`, `_ultow_s`, `_i64tow_s`, `_ui64tow_s`](itoa-s-itow-s.md)
-
- [`_makepath_s`, `_wmakepath_s`](makepath-s-wmakepath-s.md)
-
- [`_mbsnbcat_s`, `_mbsnbcat_s_l`](mbsnbcat-s-mbsnbcat-s-l.md)
-
- [`_mbsnbcpy_s`, `_mbsnbcpy_s_l`](mbsnbcpy-s-mbsnbcpy-s-l.md)
-
- [`_mbsnbset_s`, `_mbsnbset_s_l`](mbsnbset-s-mbsnbset-s-l.md)
-
- [`_mktemp_s`, `_wmktemp_s`](makepath-s-wmakepath-s.md)
-
- [`_splitpath_s`, `_wsplitpath_s`](splitpath-s-wsplitpath-s.md)
-
- [`strcat_s`, `wcscat_s`, `_mbscat_s`](strcat-s-wcscat-s-mbscat-s.md)
-
- [`strcpy_s`, `wcscpy_s`, `_mbscpy_s`](strcpy-s-wcscpy-s-mbscpy-s.md)
-
- [`_strdate_s`, `_wstrdate_s`](strdate-s-wstrdate-s.md)
-
- [`strerror_s`, `_strerror_s`, `_wcserror_s`, `__wcserror_s`](strerror-s-strerror-s-wcserror-s-wcserror-s.md)
-
- [`_strlwr_s`, `_strlwr_s_l`, `_mbslwr_s`, `_mbslwr_s_l`, `_wcslwr_s`, `_wcslwr_s_l`](strlwr-s-strlwr-s-l-mbslwr-s-mbslwr-s-l-wcslwr-s-wcslwr-s-l.md)
-
- [`strncat_s`, `_strncat_s_l`, `wcsncat_s`, `_wcsncat_s_l`, `_mbsncat_s`, `_mbsncat_s_l`](strncat-s-strncat-s-l-wcsncat-s-wcsncat-s-l-mbsncat-s-mbsncat-s-l.md)
-
- [`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.md)
-
- [`_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.md)
-
- [`_strset_s`, `_strset_s_l`, `_wcsset_s`, `_wcsset_s_l`, `_mbsset_s`, `_mbsset_s_l`](strset-s-strset-s-l-wcsset-s-wcsset-s-l-mbsset-s-mbsset-s-l.md)
-
- [`_strtime_s`, `_wstrtime_s`](strtime-s-wstrtime-s.md)
-
- [`_strupr_s`, `_strupr_s_l`, `_mbsupr_s`, `_mbsupr_s_l`, `_wcsupr_s`, `_wcsupr_s_l`](strupr-s-strupr-s-l-mbsupr-s-mbsupr-s-l-wcsupr-s-wcsupr-s-l.md)
-
+- [`vsnprintf_s`, `_vsnprintf_s`, `_vsnprintf_s_l`, `_vsnwprintf_s`, `_vsnwprintf_s_l`](vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md)
+
## Requirements
| Routine | Required header |
|---|---|
-| **`_CrtSetDebugFillThreshold`** | \ |
+| **`_CrtSetDebugFillThreshold`** | `` |
This function is Microsoft-specific. For more compatibility information, see [Compatibility](../compatibility.md).
diff --git a/docs/c-runtime-library/reference/cscanf-s-cscanf-s-l-cwscanf-s-cwscanf-s-l.md b/docs/c-runtime-library/reference/cscanf-s-cscanf-s-l-cwscanf-s-cwscanf-s-l.md
index 87dac808b6..7ca544e88b 100644
--- a/docs/c-runtime-library/reference/cscanf-s-cscanf-s-l-cwscanf-s-cwscanf-s-l.md
+++ b/docs/c-runtime-library/reference/cscanf-s-cscanf-s-l-cwscanf-s-cwscanf-s-l.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _cscanf_s, _cscanf_s_l, _cwscanf_s, _cwscanf_s_l"
title: "_cscanf_s, _cscanf_s_l, _cwscanf_s, _cwscanf_s_l"
-ms.date: "11/04/2016"
+description: "Learn more about: _cscanf_s, _cscanf_s_l, _cwscanf_s, _cwscanf_s_l"
+ms.date: 11/04/2016
api_name: ["_cwscanf_s_l", "_cwscanf_s", "_cscanf_s", "_cscanf_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: ["cscanf_s", "cscanf_s_l", "cwscanf_s", "_cwscanf_s", "_tcscanf_s", "_cscanf_s", "_cwscanf_s_l", "_cscanf_s_l", "cwscanf_s_l", "_tcscanf_s_l", "tcscanf_s", "tcscanf_s_l"]
helpviewer_keywords: ["cscanf_s function", "_cwscanf_s_l function", "tcscanf_s function", "console [C++], reading from", "_cscanf_s function", "data [C++], reading from the console", "cwscanf_s function", "_tcscanf_s_l function", "_cscanf_s_l function", "cscanf_s_l function", "cwscanf_s_l function", "reading data [C++], from the console", "_cwscanf_s function", "_tcscanf_s function", "tcscanf_s_l function"]
-ms.assetid: 9ccab74d-916f-42a6-93d8-920525efdf4b
---
# `_cscanf_s`, `_cscanf_s_l`, `_cwscanf_s`, `_cwscanf_s_l`
@@ -92,7 +91,6 @@ All versions of the [C run-time libraries](../crt-library-features.md).
```C
// crt_cscanf_s.c
-// compile with: /c
/* This program prompts for a string
* and uses _cscanf_s to read in the response.
* Then _cscanf_s returns the number of items
diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md
index efbd48aaa0..fcf23eb2ce 100644
--- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md
+++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s"
title: "ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s"
-ms.date: "4/2/2020"
+description: "Learn more about: ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s"
+ms.date: 4/2/2020
api_name: ["_ctime64_s", "_wctime32_s", "ctime_s", "_wctime64_s", "_ctime32_s", "_wctime_s", "_o__ctime32_s", "_o__ctime64_s", "_o__wctime32_s", "_o__wctime64_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-time-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["ctime64_s", "_ctime32_s", "_tctime32_s", "_ctime64_s", "_wctime_s", "_tctime_s", "_tctime64_s", "ctime_s", "ctime32_s"]
helpviewer_keywords: ["_wctime32_s function", "ctime64_s function", "_tctime64_s function", "_wctime_s function", "tctime_s function", "_wctime64_s function", "ctime_s function", "ctime32_s function", "_ctime64_s function", "tctime64_s function", "wctime64_s function", "wctime_s function", "_tctime_s function", "tctime32_s function", "wctime32_s function", "time, converting", "_ctime32_s function", "_tctime32_s function"]
-ms.assetid: 36ac419a-8000-4389-9fd8-d78b747a009b
---
# `ctime_s`, `_ctime32_s`, `_ctime64_s`, `_wctime_s`, `_wctime32_s`, `_wctime64_s`
@@ -30,8 +29,8 @@ errno_t _ctime32_s(
errno_t _ctime64_s(
char* buffer,
size_t numberOfElements,
- const __time64_t *sourceTime )
-;
+ const __time64_t *sourceTime
+);
errno_t _wctime_s(
wchar_t* buffer,
size_t numberOfElements,
diff --git a/docs/c-runtime-library/reference/cwait.md b/docs/c-runtime-library/reference/cwait.md
index aeaaad8adc..4f2d069a7c 100644
--- a/docs/c-runtime-library/reference/cwait.md
+++ b/docs/c-runtime-library/reference/cwait.md
@@ -1,14 +1,13 @@
---
title: "_cwait"
description: "API reference for the Microsoft Visual C runtime `_cwait()` function."
-ms.date: "10/23/2020"
+ms.date: 10/23/2020
api_name: ["_cwait", "_o__cwait"]
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-process-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_cwait"]
helpviewer_keywords: ["cwait function", "_cwait function"]
-ms.assetid: d9b596b5-45f4-4e03-9896-3f383cb922b8
---
# `_cwait`
@@ -73,7 +72,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_cwait.c
-// compile with: /c
// This program launches several processes and waits
// for a specified process to finish.
diff --git a/docs/c-runtime-library/reference/cxxthrowexception.md b/docs/c-runtime-library/reference/cxxthrowexception.md
index 1bad3b4dd0..2a2a3b87b6 100644
--- a/docs/c-runtime-library/reference/cxxthrowexception.md
+++ b/docs/c-runtime-library/reference/cxxthrowexception.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _CxxThrowException"
title: "_CxxThrowException"
+description: "Learn more about: _CxxThrowException"
ms.date: "11/04/2016"
api_name: ["_CxxThrowException"]
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: ["CxxThrowException", "_CxxThrowException"]
helpviewer_keywords: ["_CxxThrowException function", "CxxThrowException function"]
-ms.assetid: 0b90bef5-b7d2-46e0-88e2-59e531e01a4d
---
# `_CxxThrowException`
@@ -18,7 +17,7 @@ Builds the exception record and calls the runtime environment to start processin
```C
extern "C" void __stdcall _CxxThrowException(
- void* pExceptionObject
+ void* pExceptionObject,
_ThrowInfo* pThrowInfo
);
```
diff --git a/docs/c-runtime-library/reference/dupenv-s-dbg-wdupenv-s-dbg.md b/docs/c-runtime-library/reference/dupenv-s-dbg-wdupenv-s-dbg.md
index cfc0b250e2..047aba34af 100644
--- a/docs/c-runtime-library/reference/dupenv-s-dbg-wdupenv-s-dbg.md
+++ b/docs/c-runtime-library/reference/dupenv-s-dbg-wdupenv-s-dbg.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _dupenv_s_dbg, _wdupenv_s_dbg"
title: "_dupenv_s_dbg, _wdupenv_s_dbg"
+description: "Learn more about: _dupenv_s_dbg, _wdupenv_s_dbg"
ms.date: "11/04/2016"
api_name: ["_dupenv_s_dbg", "_wdupenv_s_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: ["_tdupenv_s_dbg", "_dupenv_s_dbg", "_wdupenv_s_dbg"]
helpviewer_keywords: ["_tdupenv_s_dbg function", "dupenv_s_dbg function", "_wdupenv_s_dbg function", "environment variables", "tdupenv_s_dbg function", "wdupenv_s_dbg function", "_dupenv_s_dbg function"]
-ms.assetid: e3d81148-e24e-46d0-a21d-fd87b5e6256c
---
# `_dupenv_s_dbg`, `_wdupenv_s_dbg`
@@ -88,7 +87,7 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_dupenv_s_dbg.c
-#include
+#include
#include
int main( void )
diff --git a/docs/c-runtime-library/reference/dupenv-s-wdupenv-s.md b/docs/c-runtime-library/reference/dupenv-s-wdupenv-s.md
index e0d4242db2..da9fb11032 100644
--- a/docs/c-runtime-library/reference/dupenv-s-wdupenv-s.md
+++ b/docs/c-runtime-library/reference/dupenv-s-wdupenv-s.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _dupenv_s, _wdupenv_s"
title: "_dupenv_s, _wdupenv_s"
+description: "Learn more about: _dupenv_s, _wdupenv_s"
ms.date: "4/2/2020"
api_name: ["_dupenv_s", "_wdupenv_s", "_o__dupenv_s", "_o__wdupenv_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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["tdupenv_s", "_dupenv_s", "wdupenv_s", "dupenv_s", "_tdupenv_s", "_wdupenv_s"]
helpviewer_keywords: ["_dupenv_s function", "_tdupenv_s function", "_wdupenv_s function", "environment variables", "wdupenv_s function", "dupenv_s function", "tdupenv_s function"]
-ms.assetid: b729ecc2-a31d-4ccf-92a7-5accedb8f8c8
---
# `_dupenv_s`, `_wdupenv_s`
@@ -89,7 +88,7 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_dupenv_s.c
-#include
+#include
int main( void )
{
diff --git a/docs/c-runtime-library/reference/erf-erff-erfl-erfc-erfcf-erfcl.md b/docs/c-runtime-library/reference/erf-erff-erfl-erfc-erfcf-erfcl.md
index ebc5633b22..84e447fee5 100644
--- a/docs/c-runtime-library/reference/erf-erff-erfl-erfc-erfcf-erfcl.md
+++ b/docs/c-runtime-library/reference/erf-erff-erfl-erfc-erfcf-erfcl.md
@@ -1,14 +1,13 @@
---
title: "erf, erff, erfl, erfc, erfcf, erfcl"
description: "API reference for erf, erff, erfl, erfc, erfcf, and erfcl; which computes the error function or the complementary error function of a value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["erff", "erfl", "erf", "erfc", "erfcf", "erfcl", "_o_erf", "_o_erfc", "_o_erfcf", "_o_erfcl", "_o_erff", "_o_erfl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["erfl", "erf", "erff", "erfc", "erfcf", "erfcl"]
helpviewer_keywords: ["erfl function", "erff function", "erf function", "erfcl function", "erfcf function", "erfc function"]
-ms.assetid: 144d90d3-e437-41c2-a659-cd57596023b5
---
# `erf`, `erff`, `erfl`, `erfc`, `erfcf`, `erfcl`
@@ -47,8 +46,8 @@ float erfcf(
long double erfcl(
long double x
);
-#define erf(X) // Requires C11 or higher
-#define erfc(X) // Requires C11 or higher
+#define erf(X) // Requires C11 or later
+#define erfc(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/exit-exit-exit.md b/docs/c-runtime-library/reference/exit-exit-exit.md
index 1ad98c4dc5..bcec154714 100644
--- a/docs/c-runtime-library/reference/exit-exit-exit.md
+++ b/docs/c-runtime-library/reference/exit-exit-exit.md
@@ -14,7 +14,7 @@ helpviewer_keywords: ["exit function", "_exit function", "processes, terminating
Terminates the calling process. The **`exit`** function terminates it after cleanup; **`_exit`** and **`_Exit`** terminate it immediately.
> [!NOTE]
-> Do not use this method to shut down a Universal Windows Platform (UWP) app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/legal/windows/agreements/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle). For more information about UWP apps, see [Universal Windows Platform documentation](https://developer.microsoft.com/windows/apps).
+> Do not use this method to shut down a Universal Windows Platform (UWP) app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/windows/apps/publish/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle). For more information about UWP apps, see [Universal Windows Platform documentation](https://developer.microsoft.com/windows/apps).
## Syntax
diff --git a/docs/c-runtime-library/reference/exp-expf.md b/docs/c-runtime-library/reference/exp-expf.md
index ca4498aea0..b79dcacd4c 100644
--- a/docs/c-runtime-library/reference/exp-expf.md
+++ b/docs/c-runtime-library/reference/exp-expf.md
@@ -1,7 +1,7 @@
---
title: "exp, expf, expl"
description: "API reference for exp, expf, and expl; which calculate the exponential."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["expf", "expl", "exp", "_o_exp", "_o_expf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -31,7 +31,7 @@ float expf(
long double expl(
long double x
);
-#define exp(z) // Requires C11 or higher
+#define exp(z) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/exp2-exp2f-exp2l.md b/docs/c-runtime-library/reference/exp2-exp2f-exp2l.md
index b2d84ff608..472d0cd5ce 100644
--- a/docs/c-runtime-library/reference/exp2-exp2f-exp2l.md
+++ b/docs/c-runtime-library/reference/exp2-exp2f-exp2l.md
@@ -1,14 +1,13 @@
---
title: "exp2, exp2f, exp2l"
description: "API ref for exp2(), exp2f(), and exp2l() which compute 2 raised to the specified value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["exp2", "exp2f", "exp2l", "_o_exp2", "_o_exp2f", "_o_exp2l"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["exp2", "math/exp2", "exp2f", "math/exp2f", "exp2l", "math/exp2l"]
helpviewer_keywords: ["exp2 function", "exp2f function", "exp2l function"]
-ms.assetid: 526e3e10-201a-4610-a886-533f44ece344
---
# `exp2`, `exp2f`, `exp2l`
@@ -36,7 +35,7 @@ float exp2f(
long double exp2l(
long double x
);
-#define exp2(X) // Requires C11 or higher
+#define exp2(X) // Requires C11 or later
```
### Parameters
@@ -79,5 +78,5 @@ For more compatibility information, see [Compatibility](../compatibility.md).
## See also
[Alphabetical function reference](crt-alphabetical-function-reference.md)\
-[`exp`, `expf`, `expl`](exp-expf.md)
+[`exp`, `expf`, `expl`](exp-expf.md)\
[`log2`, `log2f`, `log2l`](log2-log2f-log2l.md)
diff --git a/docs/c-runtime-library/reference/expm1-expm1f-expm1l.md b/docs/c-runtime-library/reference/expm1-expm1f-expm1l.md
index 838790997c..7afd9844a3 100644
--- a/docs/c-runtime-library/reference/expm1-expm1f-expm1l.md
+++ b/docs/c-runtime-library/reference/expm1-expm1f-expm1l.md
@@ -1,14 +1,13 @@
---
title: "expm1, expm1f, expm1l"
description: "API reference for expm1, expm1f, and expm1; which compute the base-e exponential of a value, minus one."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["expm1l", "expm1", "expm1f"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["expm1l", "expm1", "expm1f"]
helpviewer_keywords: ["expm1f function", "expm1l function", "expm1 function"]
-ms.assetid: 2a4dd2d9-370c-42b0-9067-0625efa272e0
---
# `expm1`, `expm1f`, `expm1l`
@@ -32,7 +31,7 @@ float expm1f(
long double expm1l(
long double x
);
-#define expm1(X) // Requires C11 or higher
+#define expm1(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fabs-fabsf-fabsl.md b/docs/c-runtime-library/reference/fabs-fabsf-fabsl.md
index 99d52e6c87..541221d8f9 100644
--- a/docs/c-runtime-library/reference/fabs-fabsf-fabsl.md
+++ b/docs/c-runtime-library/reference/fabs-fabsf-fabsl.md
@@ -1,12 +1,12 @@
---
title: "fabs, fabsf, fabsl"
description: "API reference for fabs, fabsf, and fabsl; which calculate the absolute value of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["fabsf", "fabs", "fabsl", "_o_fabs", "_o_fabsf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
-f1_keywords: ["fabs", "fabsf", "fabsl", "math\fabs", "math\fabsf", "math\fabsl"]
+f1_keywords: ["fabs", "fabsf", "fabsl", "math/fabs", "math/fabsf", "math/fabsl"]
helpviewer_keywords: ["absolute values", "fabsf function", "calculating absolute values", "fabs function", "fabsl function"]
---
# `fabs`, `fabsf`, `fabsl`
@@ -32,7 +32,7 @@ long double fabsl(
long double x
);
-#define fabs(X) // Requires C11 or higher
+#define fabs(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fdim-fdimf-fdiml.md b/docs/c-runtime-library/reference/fdim-fdimf-fdiml.md
index 89145b12af..7b408b2432 100644
--- a/docs/c-runtime-library/reference/fdim-fdimf-fdiml.md
+++ b/docs/c-runtime-library/reference/fdim-fdimf-fdiml.md
@@ -1,7 +1,7 @@
---
title: "fdim, fdimf, fdiml"
description: "API reference for fdim, fdimf, and fdiml; which determines the positive difference between two values."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["fdim", "fdimf", "fdiml"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -41,7 +41,7 @@ long double fdiml(
long double y
);
-#define fdim(X) // Requires C11 or higher
+#define fdim(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/floating-point-ordering.md b/docs/c-runtime-library/reference/floating-point-ordering.md
index ece44b97be..acdf45961d 100644
--- a/docs/c-runtime-library/reference/floating-point-ordering.md
+++ b/docs/c-runtime-library/reference/floating-point-ordering.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered"
title: "isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered"
+description: "Learn more about: isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered"
ms.date: "01/31/2019"
f1_keywords: ["isgreater", "math/isgreater", "isgreaterequal", "math/isgreaterequal", "isless", "math/isless", "islessequal", "math/islessequal", "islessgreater", "math/islessgreater", "isunordered", "math/isunordered"]
helpviewer_keywords: ["isgreater function", "isgreaterequal function", "isless function", "islessequal function", "islessgreater function", "isunordered function"]
@@ -43,7 +43,7 @@ int isunordered(
); /* C-only macro */
```
-```C++
+```cpp
template
inline bool isgreater(
FloatingType1 x,
diff --git a/docs/c-runtime-library/reference/floor-floorf-floorl.md b/docs/c-runtime-library/reference/floor-floorf-floorl.md
index fda6807505..6c5ae98469 100644
--- a/docs/c-runtime-library/reference/floor-floorf-floorl.md
+++ b/docs/c-runtime-library/reference/floor-floorf-floorl.md
@@ -1,14 +1,13 @@
---
title: "floor, floorf, floorl"
description: "API reference for floor, floorf, and floorl; which calculates the floor of a value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["floorf", "floorl", "floor", "_o_floor", "_o_floorf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["floor", "floorl", "_floorl", "floorf"]
helpviewer_keywords: ["floor function", "floorf function", "calculating floors of values", "floorl function"]
-ms.assetid: e9955f70-d659-414f-8050-132e13c8ff36
---
# `floor`, `floorf`, `floorl`
@@ -32,7 +31,7 @@ float floorf(
long double floorl(
long double x
);
-#define floor(X) // Requires C11 or higher
+#define floor(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fma-fmaf-fmal.md b/docs/c-runtime-library/reference/fma-fmaf-fmal.md
index 5c1d6f5f4b..07f439ce48 100644
--- a/docs/c-runtime-library/reference/fma-fmaf-fmal.md
+++ b/docs/c-runtime-library/reference/fma-fmaf-fmal.md
@@ -1,14 +1,13 @@
---
title: "fma, fmaf, fmal"
description: "API reference for fma, fmaf, and fmal; which multiplies two values together, adds a third value, and then rounds the result, while only losing a small amount of precision due to intermediary rounding."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["fma", "fmaf", "fmal", "_o_fma", "_o_fmaf", "_o_fmal"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["fma", "fmaf", "fmal", "math/fma", "math/fmaf", "math/fmal"]
helpviewer_keywords: ["fma function", "fmaf function", "fmal function"]
-ms.assetid: 584a6037-da1e-4e86-9f0c-97aae86de0c0
---
# `fma`, `fmaf`, `fmal`
@@ -47,7 +46,7 @@ long double fmal(
long double z
);
-#define fma(X, Y, Z) // Requires C11 or higher
+#define fma(X, Y, Z) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fmax-fmaxf-fmaxl.md b/docs/c-runtime-library/reference/fmax-fmaxf-fmaxl.md
index ccd942f672..eac6d8411b 100644
--- a/docs/c-runtime-library/reference/fmax-fmaxf-fmaxl.md
+++ b/docs/c-runtime-library/reference/fmax-fmaxf-fmaxl.md
@@ -1,14 +1,13 @@
---
title: "fmax, fmaxf, fmaxl"
description: "API reference for fmax, fmaxf, and fmaxl; which determines the larger of two numeric values."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["fmax", "fmaxf", "fmaxl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["fmax", "fmaxf", "fmaxl", "math/fmax", "math/fmaxf", "math/fmaxl"]
helpviewer_keywords: ["fmax function", "fmaxf function", "fmaxl function"]
-ms.assetid: a773ccf7-495e-4a9a-8c6d-dfb53e341e35
---
# `fmax`, `fmaxf`, `fmaxl`
@@ -42,7 +41,7 @@ long double fmaxl(
long double y
);
-#define fmax(X, Y) // Requires C11 or higher
+#define fmax(X, Y) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fmin-fminf-fminl.md b/docs/c-runtime-library/reference/fmin-fminf-fminl.md
index e1b2093567..d3cfee38cf 100644
--- a/docs/c-runtime-library/reference/fmin-fminf-fminl.md
+++ b/docs/c-runtime-library/reference/fmin-fminf-fminl.md
@@ -1,14 +1,13 @@
---
title: "fmin, fminf, fminl"
description: "API reference for fmin, fminf, and fminl; which determines the smaller of two values."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["fmin", "fminf", "fminl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["fmin", "fminf", "fminl", "math/fmin", "math/fminf", "math/fminl"]
helpviewer_keywords: ["fmin function", "fminf function", "fminl function"]
-ms.assetid: 1916dfb5-99c1-4b0d-aefb-513525c3f2ac
---
# `fmin`, `fminf`, `fminl`
@@ -42,7 +41,7 @@ long double fminl(
long double y
);
-#define fmin(x) // Requires C11 or higher
+#define fmin(x) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fmod-fmodf.md b/docs/c-runtime-library/reference/fmod-fmodf.md
index ecf39a5c28..5bd8fd5c8a 100644
--- a/docs/c-runtime-library/reference/fmod-fmodf.md
+++ b/docs/c-runtime-library/reference/fmod-fmodf.md
@@ -1,7 +1,7 @@
---
title: "fmod, fmodf, fmodl"
description: "API reference for fmod, fmodf, and fmodl; which calculates the floating-point remainder."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["fmod", "fmodf", "fmodl", "_o_fmod", "_o_fmodf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -37,7 +37,7 @@ long double fmodl(
long double y
);
-#define fmod(X, Y) // Requires C11 or higher
+#define fmod(X, Y) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/fopen-s-wfopen-s.md b/docs/c-runtime-library/reference/fopen-s-wfopen-s.md
index 1efd939eec..6964db2b65 100644
--- a/docs/c-runtime-library/reference/fopen-s-wfopen-s.md
+++ b/docs/c-runtime-library/reference/fopen-s-wfopen-s.md
@@ -153,6 +153,7 @@ Valid characters for the *`mode`* string used in **`fopen_s`** and [`_fdopen`](f
| **`t`** | `_O_TEXT` (translated) |
| **`c`** | None |
| **`n`** | None |
+| **`N`** | `_O_NOINHERIT` |
| **`D`** | `_O_TEMPORARY` |
| **`R`** | `_O_RANDOM` |
| **`S`** | `_O_SEQUENTIAL` |
@@ -166,7 +167,7 @@ The **`c`**, **`n`**, **`R`**, **`S`**, **`t`**, **`T`**, and **`D`** *`mode`* o
If you're using **`rb`** mode, memory mapped Win32 files might also be an option if you don't need to port your code, you expect to read much of the file, or you don't care about network performance.
Regarding `T` and `D`:
-- `T` avoids writing the file to disk as long as memory pressure doesn't require it. For more information, see `FILE_ATTRIBUTE_TEMPORARY` in [File attribute constants](/windows/win32/fileio/file-attribute-constants), and also this blog post [It's only temporary](https://learn.microsoft.com/archive/blogs/larryosterman/its-only-temporary).
+- `T` avoids writing the file to disk as long as memory pressure doesn't require it. For more information, see `FILE_ATTRIBUTE_TEMPORARY` in [File attribute constants](/windows/win32/fileio/file-attribute-constants), and also this blog post [It's only temporary](/archive/blogs/larryosterman/its-only-temporary).
- `D` specifies a regular file that is written to disk. The difference is that it's automatically deleted when it's closed.
You can combine `TD` to get both semantics.
diff --git a/docs/c-runtime-library/reference/fopen-wfopen.md b/docs/c-runtime-library/reference/fopen-wfopen.md
index 3756a268d0..22d44f2421 100644
--- a/docs/c-runtime-library/reference/fopen-wfopen.md
+++ b/docs/c-runtime-library/reference/fopen-wfopen.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: fopen, _wfopen"
title: "fopen, _wfopen"
+description: "Learn more about: fopen, _wfopen"
ms.date: 04/27/2023
api_name: ["_wfopen", "fopen", "_o__wfopen", "_o_fopen"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
@@ -136,7 +136,7 @@ Valid characters for the *`mode`* string that is used in **`fopen`** and **`_fdo
| Characters in *`mode`* string | Equivalent *`oflag`* value for `_open`/`_sopen` |
|--|--|
| **`a`** | `_O_WRONLY | _O_APPEND` (usually `_O_WRONLY | _O_CREAT | _O_APPEND`) |
-| **`a+`** | `_O_RDWR | _O_APPEND` (usually `_O_RDWR | _O_APPEND | _O_CREAT` ) |
+| **`a+`** | `_O_RDWR | _O_APPEND` (usually `_O_RDWR | _O_APPEND | _O_CREAT`) |
| **`r`** | `_O_RDONLY` |
| **`r+`** | `_O_RDWR` |
| **`w`** | `_O_WRONLY` (usually `_O_WRONLY | _O_CREAT | _O_TRUNC`) |
@@ -146,6 +146,7 @@ Valid characters for the *`mode`* string that is used in **`fopen`** and **`_fdo
| **`x`** | `_O_EXCL` |
| **`c`** | None |
| **`n`** | None |
+| **`N`** | `_O_NOINHERIT` |
| **`S`** | `_O_SEQUENTIAL` |
| **`R`** | `_O_RANDOM` |
| **`T`** | `_O_SHORTLIVED` |
@@ -157,7 +158,7 @@ Valid characters for the *`mode`* string that is used in **`fopen`** and **`_fdo
If you're using **`rb`** mode, you don't have to port your code, and if you expect to read most of a large file or aren't concerned about network performance, you might also consider whether to use memory mapped Win32 files as an option.
Regarding `T` and `D`:
-- `T` avoids writing the file to disk as long as memory pressure doesn't require it. For more information, see `FILE_ATTRIBUTE_TEMPORARY` in [File attribute constants](/windows/win32/fileio/file-attribute-constants), and also this blog post [It's only temporary](https://learn.microsoft.com/archive/blogs/larryosterman/its-only-temporary).
+- `T` avoids writing the file to disk as long as memory pressure doesn't require it. For more information, see `FILE_ATTRIBUTE_TEMPORARY` in [File attribute constants](/windows/win32/fileio/file-attribute-constants), and also this blog post [It's only temporary](/archive/blogs/larryosterman/its-only-temporary).
- `D` specifies a regular file that is written to disk. The difference is that it's automatically deleted when it's closed.
You can combine `TD` to get both semantics.
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 2d972d963a..19afc35f93 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,7 +1,7 @@
---
-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"
+description: "Learn more about: fprintf, _fprintf_l, fwprintf, _ftprintf, _ftprintf_l"
+ms.date: 3/9/2021
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"]
@@ -73,7 +73,7 @@ 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).
+> 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 function mappings
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 8ed284f343..67e942623e 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,7 +1,7 @@
---
-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"
+description: "Learn more about: _fprintf_p, _fprintf_p_l, _ftprintf_p, _ftprintf_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"]
@@ -71,7 +71,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!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).
+> 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 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`.
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 225ec4abc7..4d8fe4b93e 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,7 +1,7 @@
---
-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"
+description: "Learn more about: 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", "_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"]
@@ -71,7 +71,7 @@ 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).
+> 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/frexp.md b/docs/c-runtime-library/reference/frexp.md
index fa601e5e41..faf5d4404b 100644
--- a/docs/c-runtime-library/reference/frexp.md
+++ b/docs/c-runtime-library/reference/frexp.md
@@ -1,14 +1,13 @@
---
title: "frexp, frexpf, frexpl"
description: "API reference for frexp, frexpf, and frexpl; which gets the mantissa and exponent of a floating-point number."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["frexp", "_o_frexp"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["frexp", "_frexpl"]
helpviewer_keywords: ["_frexpl function", "mantissas, floating-point variables", "frexpl function", "exponent, floating-point numbers", "frexp function", "floating-point functions, mantissa and exponent"]
-ms.assetid: 9b020f2e-3967-45ec-a6a8-d467a071aa55
---
# `frexp`, `frexpf`, `frexpl`
@@ -29,7 +28,7 @@ long double frexpl(
long double x,
int * expptr
);
-#define frexpl(X, INT_PTR) // Requires C11 or higher
+#define frexpl(X, INT_PTR) // Requires C11 or later
```
```cpp
diff --git a/docs/c-runtime-library/reference/fsopen-wfsopen.md b/docs/c-runtime-library/reference/fsopen-wfsopen.md
index 8f558b4def..5f2c003e22 100644
--- a/docs/c-runtime-library/reference/fsopen-wfsopen.md
+++ b/docs/c-runtime-library/reference/fsopen-wfsopen.md
@@ -76,7 +76,7 @@ When a file is opened with the **"`a`"** or **"`a+`"** access type, all write op
If **`t`** or **`b`** isn't given in *`mode`*, the translation mode is defined by the default-mode variable **`_fmode`**. If **`t`** or **`b`** is prefixed to the argument, the function fails and returns `NULL`. For a discussion of text and binary modes, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md).
Regarding `T` and `D`:
-- `T` avoids writing the file to disk as long as memory pressure doesn't require it. For more information, see `FILE_ATTRIBUTE_TEMPORARY` in [File attribute constants](/windows/win32/fileio/file-attribute-constants), and also this blog post [It's only temporary](https://learn.microsoft.com/archive/blogs/larryosterman/its-only-temporary).
+- `T` avoids writing the file to disk as long as memory pressure doesn't require it. For more information, see `FILE_ATTRIBUTE_TEMPORARY` in [File attribute constants](/windows/win32/fileio/file-attribute-constants), and also this blog post [It's only temporary](/archive/blogs/larryosterman/its-only-temporary).
- `D` specifies a regular file that is written to disk. The difference is that it's automatically deleted when it's closed.
You can combine `TD` to get both semantics.
diff --git a/docs/c-runtime-library/reference/fwide.md b/docs/c-runtime-library/reference/fwide.md
index f21511e106..71113cfe48 100644
--- a/docs/c-runtime-library/reference/fwide.md
+++ b/docs/c-runtime-library/reference/fwide.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: fwide"
title: "fwide"
-ms.date: "11/04/2016"
+description: "Learn more about: fwide"
+ms.date: 11/04/2016
api_name: ["fwide"]
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: ["fwide"]
helpviewer_keywords: ["fwide function"]
-ms.assetid: a4641f5b-d74f-4946-95d5-53a64610d28d
---
# `fwide`
@@ -19,7 +18,7 @@ Unimplemented.
```C
int fwide(
FILE *stream,
- int mode;
+ int mode
);
```
diff --git a/docs/c-runtime-library/reference/get-printf-count-output.md b/docs/c-runtime-library/reference/get-printf-count-output.md
index dfa9d74278..14046943fa 100644
--- a/docs/c-runtime-library/reference/get-printf-count-output.md
+++ b/docs/c-runtime-library/reference/get-printf-count-output.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _get_printf_count_output"
title: "_get_printf_count_output"
-ms.date: "3/9/2021"
+description: "Learn more about: _get_printf_count_output"
+ms.date: 3/9/2021
api_name: ["_get_printf_count_output"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -28,7 +28,7 @@ Non-zero if **`%n`** is supported; 0 if **`%n`** isn't supported.
If **`%n`** isn't supported (the default), any **`%n`** found in the format string of one of the `printf` functions invokes the invalid parameter handler, as described in [Parameter validation](../parameter-validation.md). If **`%n`** support is enabled (see [`_set_printf_count_output`](set-printf-count-output.md)), then **`%n`** behaves as described in [Format specification syntax: `printf` and `wprintf` functions](../format-specification-syntax-printf-and-wprintf-functions.md).
> [!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).
+> 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).
## Requirements
diff --git a/docs/c-runtime-library/reference/get-purecall-handler-set-purecall-handler.md b/docs/c-runtime-library/reference/get-purecall-handler-set-purecall-handler.md
index 4f49114531..22aa485c22 100644
--- a/docs/c-runtime-library/reference/get-purecall-handler-set-purecall-handler.md
+++ b/docs/c-runtime-library/reference/get-purecall-handler-set-purecall-handler.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _get_purecall_handler, _set_purecall_handler"
title: "_get_purecall_handler, _set_purecall_handler"
-ms.date: "1/14/2021"
+description: "Learn more about: _get_purecall_handler, _set_purecall_handler"
+ms.date: 1/14/2021
api_name: ["_set_purecall_handler", "_set_purecall_handler_m", "_get_purecall_handler"]
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: ["_set_purecall_handler", "_set_purecall_handler_m", "set_purecall_handler_m", "set_purecall_handler", "stdlib/_set_purecall_handler", "stdlib/_get_purecall_handler", "_get_purecall_handler"]
helpviewer_keywords: ["_set_purecall_handler function", "set_purecall_handler function", "purecall_handler", "set_purecall_handler_m function", "_purecall_handler", "_set_purecall_handler_m function", "_get_purecall_handler function"]
-ms.assetid: 2759b878-8afa-4129-86e7-72afc2153d9c
---
# `_get_purecall_handler`, `_set_purecall_handler`
@@ -64,7 +63,7 @@ class CDerived;
class CBase
{
public:
- CBase(CDerived *derived): m_pDerived(derived) {};
+ CBase(CDerived *derived): m_pDerived(derived) {}
~CBase();
virtual void function(void) = 0;
@@ -74,8 +73,8 @@ public:
class CDerived : public CBase
{
public:
- CDerived() : CBase(this) {}; // C4355
- virtual void function(void) {};
+ CDerived() : CBase(this) {} // C4355
+ virtual void function(void) {}
};
CBase::~CBase()
diff --git a/docs/c-runtime-library/reference/getch-getwch.md b/docs/c-runtime-library/reference/getch-getwch.md
index 82d45dd775..08a4ff83ac 100644
--- a/docs/c-runtime-library/reference/getch-getwch.md
+++ b/docs/c-runtime-library/reference/getch-getwch.md
@@ -1,7 +1,7 @@
---
title: "_getch, _getwch"
description: "API reference for _getch and _getwch; which get a character from the console without echo."
-ms.date: "3/8/2023"
+ms.date: 3/8/2023
api_name: ["_getch", "_getwch", "_o__getch", "_o__getwch"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -54,7 +54,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_getch.c
-// compile with: /c
// This program reads characters from
// the keyboard until it receives a 'Y' or 'y'.
diff --git a/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md b/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md
index 61bf1a4ace..91400665f6 100644
--- a/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md
+++ b/docs/c-runtime-library/reference/getch-nolock-getwch-nolock.md
@@ -1,7 +1,7 @@
---
title: "_getch_nolock, _getwch_nolock"
description: "Learn more about: _getch_nolock, _getwch_nolock"
-ms.date: "4/2/2020"
+ms.date: 4/2/2020
api_name: ["_getwch_nolock", "_getch_nolock", "_o__getch_nolock", "_o__getwch_nolock"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -52,7 +52,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_getch_nolock.c
-// compile with: /c
// This program reads characters from
// the keyboard until it receives a 'Y' or 'y'.
diff --git a/docs/c-runtime-library/reference/getche-getwche.md b/docs/c-runtime-library/reference/getche-getwche.md
index 188c2ee2e7..6463db7893 100644
--- a/docs/c-runtime-library/reference/getche-getwche.md
+++ b/docs/c-runtime-library/reference/getche-getwche.md
@@ -1,14 +1,13 @@
---
title: "_getche, _getwche"
description: "API reference for _getche and _getwche; which get a character from the console with echo."
-ms.date: "4/2/2020"
+ms.date: 4/2/2020
api_name: ["_getwche", "_getche", "_o__getche", "_o__getwche"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["getwche", "_getche", "_getwche"]
helpviewer_keywords: ["characters, getting from console", "_getwche function", "getche function", "console, reading from", "getwche function", "_getche function"]
-ms.assetid: eac978a8-c43a-4130-938f-54f12e2a0fda
---
# `_getche`, `_getwche`
@@ -55,7 +54,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_getche.c
-// compile with: /c
// This program reads characters from
// the keyboard until it receives a 'Y' or 'y'.
diff --git a/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md b/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md
index c9c6b7ad6f..9165a4f7b2 100644
--- a/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md
+++ b/docs/c-runtime-library/reference/getche-nolock-getwche-nolock.md
@@ -1,7 +1,7 @@
---
title: "_getche_nolock, _getwche_nolock"
description: "Learn more about: _getche_nolock, _getwche_nolock"
-ms.date: "4/2/2020"
+ms.date: 4/2/2020
api_name: ["_getche_nolock", "_getwche_nolock", "_o__getche_nolock", "_o__getwche_nolock"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -52,7 +52,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_getche_nolock.c
-// compile with: /c
// This program reads characters from
// the keyboard until it receives a 'Y' or 'y'.
diff --git a/docs/c-runtime-library/reference/getdiskfree.md b/docs/c-runtime-library/reference/getdiskfree.md
index 9ddb84d87b..68fa48a070 100644
--- a/docs/c-runtime-library/reference/getdiskfree.md
+++ b/docs/c-runtime-library/reference/getdiskfree.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _getdiskfree"
title: "_getdiskfree"
+description: "Learn more about: _getdiskfree"
ms.date: 05/11/2022
api_name: ["_getdiskfree", "_o__getdiskfree"]
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"]
@@ -66,7 +66,7 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_getdiskfree.c
-// compile with: /c
+
#include
#include
#include
diff --git a/docs/c-runtime-library/reference/getdrive.md b/docs/c-runtime-library/reference/getdrive.md
index 571445fb63..743ae0d823 100644
--- a/docs/c-runtime-library/reference/getdrive.md
+++ b/docs/c-runtime-library/reference/getdrive.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _getdrive"
title: "_getdrive"
-ms.date: "4/2/2020"
+description: "Learn more about: _getdrive"
+ms.date: 4/2/2020
api_name: ["_getdrive", "_o__getdrive"]
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: ["_getdrive", "getdrive"]
helpviewer_keywords: ["current disk drive", "getdrive function", "disk drives", "_getdrive function"]
-ms.assetid: e40631a0-8f1a-4897-90ac-e1037ff30bca
---
# `_getdrive`
@@ -43,7 +42,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_getdrive.c
-// compile with: /c
// Illustrates drive functions including:
// _getdrive _chdrive _getdcwd
//
diff --git a/docs/c-runtime-library/reference/heapchk.md b/docs/c-runtime-library/reference/heapchk.md
index 589d119aef..4e77c83690 100644
--- a/docs/c-runtime-library/reference/heapchk.md
+++ b/docs/c-runtime-library/reference/heapchk.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _heapchk"
title: "_heapchk"
+description: "Learn more about: _heapchk"
ms.date: "4/2/2020"
api_name: ["_heapchk", "_o__heapchk"]
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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_heapchk", "heapchk"]
helpviewer_keywords: ["debugging [CRT], heap-related problems", "consistency checking of heaps", "heapchk function", "heaps, checking consistency", "_heapchk function"]
-ms.assetid: 859619a5-1e35-4f02-9e09-11d9fa266ec0
---
# `_heapchk`
@@ -36,7 +35,7 @@ In addition, if an error occurs, **`_heapchk`** sets `errno` to `ENOSYS`.
## Remarks
-The **`_heapchk`** function helps debug heap-related problems by checking for minimal consistency of the heap. If the operating system doesn't support **`_heapchk`**(for example, Windows 98), the function returns `_HEAPOK` and sets `errno` to `ENOSYS`.
+The **`_heapchk`** function helps debug heap-related problems by checking for minimal consistency of the heap. If the operating system doesn't support **`_heapchk`** (for example, Windows 98), the function returns `_HEAPOK` and sets `errno` to `ENOSYS`.
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/heapmin.md b/docs/c-runtime-library/reference/heapmin.md
index ffee2908c1..f5f5e5671a 100644
--- a/docs/c-runtime-library/reference/heapmin.md
+++ b/docs/c-runtime-library/reference/heapmin.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _heapmin"
title: "_heapmin"
+description: "Learn more about: _heapmin"
ms.date: "4/2/2020"
api_name: ["_heapmin", "_o__heapmin"]
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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_heapmin", "heapmin"]
helpviewer_keywords: ["heap memory", "minimizing heaps", "memory, releasing", "heaps, releasing unused memory", "_heapmin function", "heapmin function"]
-ms.assetid: c0bccdf6-2d14-4d7b-a7ff-d6a17bdb410f
---
# `_heapmin`
@@ -28,7 +27,7 @@ For more information about this and other return codes, see [`errno`, `_doserrno
## Remarks
-The **`_heapmin`** function minimizes the heap by releasing unused heap memory to the operating system. If the operating system doesn't support **`_heapmin`**(for example, Windows 98), the function returns -1 and sets `errno` to `ENOSYS`.
+The **`_heapmin`** function minimizes the heap by releasing unused heap memory to the operating system. If the operating system doesn't support **`_heapmin`** (for example, Windows 98), the function returns -1 and sets `errno` to `ENOSYS`.
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/hypot-hypotf-hypotl-hypot-hypotf-hypotl.md b/docs/c-runtime-library/reference/hypot-hypotf-hypotl-hypot-hypotf-hypotl.md
index d447ac7df1..93c84bd8b8 100644
--- a/docs/c-runtime-library/reference/hypot-hypotf-hypotl-hypot-hypotf-hypotl.md
+++ b/docs/c-runtime-library/reference/hypot-hypotf-hypotl-hypot-hypotf-hypotl.md
@@ -1,14 +1,13 @@
---
title: "hypot, hypotf, hypotl, _hypot, _hypotf, _hypotl"
description: "API reference for hypot, hypotf, hypotl, _hypot, _hypotf, and _hypotl; which calculate the hypotenuse."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["_hypotf", "hypot", "hypotf", "_hypot", "_hypotl", "hypotl", "_o__hypot", "_o__hypotf", "_o_hypot"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["hypotf", "hypotl", "_hypotl", "hypot", "_hypot", "_hypotf"]
helpviewer_keywords: ["hypotenuse calculation", "hypot function", "hypotf function", "triangles, calculating hypotenuse", "hypotl function", "calculating hypotenuses", "_hypot function"]
-ms.assetid: 6a13887f-bd53-43fc-9d77-5b42d6e49925
---
# `hypot`, `hypotf`, `hypotl`, `_hypot`, `_hypotf`, `_hypotl`
@@ -41,7 +40,7 @@ long double _hypotl(
long double x,
long double y
);
-#define hypotf(X, Y) // Requires C11 or higher
+#define hypotf(X, Y) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/ilogb-ilogbf-ilogbl2.md b/docs/c-runtime-library/reference/ilogb-ilogbf-ilogbl2.md
index b75d22d40b..c666ef5b99 100644
--- a/docs/c-runtime-library/reference/ilogb-ilogbf-ilogbl2.md
+++ b/docs/c-runtime-library/reference/ilogb-ilogbf-ilogbl2.md
@@ -1,14 +1,13 @@
---
title: "ilogb, ilogbf, ilogbl2"
description: "API reference for ilogb, ilogbf, and ilogbl2; which retrieve an integer that represents the unbiased base-2 exponent of the specified value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["ilogb", "ilogbf", "ilogbl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["ilogb", "ilogbf", "ilogbl", "math/ilogb", "math/ilogbf", "math/ilogbl"]
helpviewer_keywords: ["ilogb function", "ilogbf function", "ilogbl function"]
-ms.assetid: 9ef19d57-1caa-41d5-8233-2faad3562fcb
---
# `ilogb`, `ilogbf`, `ilogbl`
@@ -37,7 +36,7 @@ int ilogbl(
long double x
);
-#define ilogbl(X) // Requires C11 or higher
+#define ilogbl(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/islower-iswlower-islower-l-iswlower-l.md b/docs/c-runtime-library/reference/islower-iswlower-islower-l-iswlower-l.md
index 02dded213e..f95d12c979 100644
--- a/docs/c-runtime-library/reference/islower-iswlower-islower-l-iswlower-l.md
+++ b/docs/c-runtime-library/reference/islower-iswlower-islower-l-iswlower-l.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: islower, iswlower, _islower_l, _iswlower_l"
title: "islower, iswlower, _islower_l, _iswlower_l"
-ms.date: "4/2/2020"
+description: "Learn more about: islower, iswlower, _islower_l, _iswlower_l"
+ms.date: 4/2/2020
api_name: ["iswlower", "_islower_l", "islower", "_iswlower_l", "_o_islower", "_o_iswlower"]
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-string-l1-1-0.dll", "ntoskrnl.exe"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_istlower", "islower", "_ismbclower_l", "_liswlower_l", "_istlower_l", "_iswlower_l", "_islower _l", "_islower_l", "iswlower"]
helpviewer_keywords: ["_islower _l function", "_ismbclower_l function", "islower function", "_iswlower_l function", "_liswlower_l function", "_istlower_l function", "istlower function", "_istlower function", "iswlower function", "_islower_l function"]
-ms.assetid: fcc3b70a-2b47-45fd-944d-e5c1942e6457
---
# `islower`, `iswlower`, `_islower_l`, `_iswlower_l`
@@ -54,7 +53,7 @@ The behavior of **`islower`** and **`_islower_l`** is undefined if *`c`* isn't E
| TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined |
|---|---|---|---|
| `_istlower` | **`islower`** | [`_ismbclower`](ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | **`iswlower`** |
-| **`_istlower_l`** | `_islower _l` | [`_ismbclower_l`](ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | **`_liswlower_l`** |
+| **`_istlower_l`** | `_islower_l` | [`_ismbclower_l`](ismbclower-ismbclower-l-ismbcupper-ismbcupper-l.md) | **`_liswlower_l`** |
## Remarks
@@ -64,10 +63,10 @@ By default, this function's global state is scoped to the application. To change
| Routine | Required header |
|---|---|
-| **`islower`** | \ |
-| **`iswlower`** | \ or \ |
-| **`_islower_l`** | \ |
-| **`_swlower_l`** | \ or \ |
+| **`islower`** | `` |
+| **`iswlower`** | `` or `` |
+| **`_islower_l`** | `` |
+| **`_swlower_l`** | `` or `` |
For more compatibility information, see [Compatibility](../compatibility.md).
diff --git a/docs/c-runtime-library/reference/itoa-itow.md b/docs/c-runtime-library/reference/itoa-itow.md
index 48046135b6..1f03714208 100644
--- a/docs/c-runtime-library/reference/itoa-itow.md
+++ b/docs/c-runtime-library/reference/itoa-itow.md
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_itoa", "_ltoa", "_ultoa", "_i64toa", "_ui64toa", "_itow", "_ltow", "_ultow", "_i64tow", "_ui64tow", "itoa", "ltoa", "ultoa", "i64toa", "ui64toa", "itow", "ltow", "ultow", "i64tow", "ui64tow", "itot", "_itot", "ltot", "_ltot", "ultot", "_ultot", "i64tot", "_i64tot", "ui64tot", "_ui64tot", "_MAX_ITOSTR_BASE16_COUNT", "_MAX_ITOSTR_BASE10_COUNT", "_MAX_ITOSTR_BASE8_COUNT", "_MAX_ITOSTR_BASE2_COUNT", "_MAX_LTOSTR_BASE16_COUNT", "_MAX_LTOSTR_BASE10_COUNT", "_MAX_LTOSTR_BASE8_COUNT", "_MAX_LTOSTR_BASE2_COUNT", "_MAX_ULTOSTR_BASE16_COUNT", "_MAX_ULTOSTR_BASE10_COUNT", "_MAX_ULTOSTR_BASE8_COUNT", "_MAX_ULTOSTR_BASE2_COUNT", "_MAX_I64TOSTR_BASE16_COUNT", "_MAX_I64TOSTR_BASE10_COUNT", "_MAX_I64TOSTR_BASE8_COUNT", "_MAX_I64TOSTR_BASE2_COUNT", "_MAX_U64TOSTR_BASE16_COUNT", "_MAX_U64TOSTR_BASE10_COUNT", "_MAX_U64TOSTR_BASE8_COUNT", "_MAX_U64TOSTR_BASE2_COUNT"]
helpviewer_keywords: ["_itot function", "ui64toa function", "_ui64toa function", "converting integers", "itot function", "_i64tow function", "_i64toa function", "_itow function", "ui64tow function", "integers, converting", "itoa function", "_ui64tow function", "i64tow function", "itow function", "i64toa function", "converting numbers, to strings", "_itoa function"]
-ms.assetid: 46592a00-77bb-4e73-98c0-bf629d96cea6
---
# `itoa`, `_itoa`, `ltoa`, `_ltoa`, `ultoa`, `_ultoa`, `_i64toa`, `_ui64toa`, `_itow`, `_ltow`, `_ultow`, `_i64tow`, `_ui64tow`
@@ -137,7 +136,7 @@ This example uses a conversion count macro to define a buffer large enough to co
int main()
{
wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
- std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
+ std::wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}
```
diff --git a/docs/c-runtime-library/reference/itoa-s-itow-s.md b/docs/c-runtime-library/reference/itoa-s-itow-s.md
index bd52ce7408..8625968ea0 100644
--- a/docs/c-runtime-library/reference/itoa-s-itow-s.md
+++ b/docs/c-runtime-library/reference/itoa-s-itow-s.md
@@ -1,16 +1,15 @@
---
-description: "Learn more about: _itoa_s, _ltoa_s, _ultoa_s, _i64toa_s, _ui64toa_s, _itow_s, _ltow_s, _ultow_s, _i64tow_s, _ui64tow_s"
title: "_itoa_s, _itow_s functions"
-ms.date: "4/2/2020"
+description: "Learn more about: _itoa_s, _ltoa_s, _ultoa_s, _i64toa_s, _ui64toa_s, _itow_s, _ltow_s, _ultow_s, _i64tow_s, _ui64tow_s"
+ms.date: 4/2/2020
api_name: ["_itoa_s", "_ltoa_s", "_ultoa_s", "_i64toa_s", "_ui64toa_s", "_itow_s", "_ltow_s", "_ultow_s", "_i64tow_s", "_ui64tow_s", "_o__i64toa_s", "_o__i64tow_s", "_o__itoa_s", "_o__itow_s", "_o__ltoa_s", "_o__ltow_s", "_o__ui64toa_s", "_o__ui64tow_s", "_o__ultoa_s", "_o__ultow_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-convert-l1-1-0.dll", "ntoskrnl.exe"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_itoa_s", "_ltoa_s", "_ultoa_s", "_i64toa_s", "_ui64toa_s", "_itow_s", "_ltow_s", "_ultow_s", "_i64tow_s", "_ui64tow_s", "_itot_s", "_ltot_s", "_ultot_s", "_i64tot_s", "_ui64tot_s", "itoa_s", "ltoa_s", "ultoa_s", "i64toa_s", "ui64toa_s", "itow_s", "ltow_s", "ultow_s", "i64tow_s", "ui64tow_s", "itot_s", "ltot_s", "ultot_s", "i64tot_s", "ui64tot_s"]
helpviewer_keywords: ["_ui64toa_s function", "_itow_s function", "_i64tow_s function", "_itot_s function", "converting integers", "itow_s function", "i64toa_s function", "_ui64tow_s function", "integers, converting", "_i64tot_s function", "itoa_s function", "_itoa_s function", "ui64toa_s function", "i64tow_s function", "converting numbers, to strings", "_ui64tot_s function", "_i64toa_s function"]
-ms.assetid: eb746581-bff3-48b5-a973-bfc0a4478ecf
---
-# `_itoa_s`, `_ltoa_s`, `_ultoa_s`, `_i64toa_s`, `_ui64toa_s`, `_itow_s`, `_ltow_s`, `_ultow_s`, `_i64tow_s`, `_ui64tow_s`
+# `_itoa_s`, `_ltoa_s`, `_ultoa_s`, `_i64toa_s`, `_ui64toa_s`, `_itow_s`, `_ltow_s`, `_ultow_s`, `_i64tow_s`, `_ui64tow_s`
Converts an integer to a string. These functions are versions of the [`_itoa`, `_itow` functions](itoa-itow.md) with security enhancements as described in [Security features in the CRT](../security-features-in-the-crt.md).
diff --git a/docs/c-runtime-library/reference/kbhit.md b/docs/c-runtime-library/reference/kbhit.md
index e4f1f9cfb7..fe9bfbf45f 100644
--- a/docs/c-runtime-library/reference/kbhit.md
+++ b/docs/c-runtime-library/reference/kbhit.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _kbhit"
title: "_kbhit"
-ms.date: "4/2/2020"
+description: "Learn more about: _kbhit"
+ms.date: 4/2/2020
api_name: ["_kbhit", "_o__kbhit"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_kbhit", "conio/_kbhit"]
helpviewer_keywords: ["keyboard input", "user input, checking for keyboard", "kbhit function", "console", "console, checking", "keyboards, keyboard input", "_kbhit function", "keyboards, checking input"]
-ms.assetid: e82a1cc9-bbec-4150-b678-a7e433220fe4
---
# `_kbhit`
@@ -20,7 +19,6 @@ Checks the console for keyboard input.
## Syntax
```C
-
int _kbhit( void );
```
@@ -50,7 +48,6 @@ All versions of the [C run-time libraries](../crt-library-features.md).
```C
// crt_kbhit.c
-// compile with: /c
/* This program loops until the user
* presses a key. If _kbhit returns nonzero, a
* keystroke is waiting in the buffer. The program
diff --git a/docs/c-runtime-library/reference/ldexp.md b/docs/c-runtime-library/reference/ldexp.md
index 8cb4fae046..b5b2b0ac17 100644
--- a/docs/c-runtime-library/reference/ldexp.md
+++ b/docs/c-runtime-library/reference/ldexp.md
@@ -1,14 +1,13 @@
---
title: "ldexp, ldexpf, ldexpl"
description: "API reference for ldexp, ldexpf, and ldexpl; which multiplies a floating-point number by an integral power of two."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["ldexp", "ldexpf", "ldexpl", "_ldexpl", "_o_ldexp"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["ldexp", "ldexpf", "ldexpl", "_ldexpl"]
helpviewer_keywords: ["calculating real numbers", "computing real numbers", "mantissas, floating-point variables", "ldexp function", "ldexpf function", "ldexpl function", "exponent, floating-point numbers", "floating-point functions, mantissa and exponent"]
-ms.assetid: aa7f5310-3879-4f63-ae74-86a39fbdedfa
---
# `ldexp`, `ldexpf`, `ldexpl`
@@ -29,7 +28,7 @@ long double ldexpl(
long double x,
int exp
);
-#define ldexp(X, INT) // Requires C11 or higher
+#define ldexp(X, INT) // Requires C11 or later
float ldexp(
float x,
diff --git a/docs/c-runtime-library/reference/lgamma-lgammaf-lgammal.md b/docs/c-runtime-library/reference/lgamma-lgammaf-lgammal.md
index e23d3050a2..cd6eac9110 100644
--- a/docs/c-runtime-library/reference/lgamma-lgammaf-lgammal.md
+++ b/docs/c-runtime-library/reference/lgamma-lgammaf-lgammal.md
@@ -1,14 +1,13 @@
---
title: "lgamma, lgammaf, lgammal"
description: "API reference for lgamma, lgammaf, and lgammal; which determines the natural logarithm of the absolute value of the gamma function of the specified value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["lgamma", "lgammaf", "lgammal", "_o_lgamma", "_o_lgammaf", "_o_lgammal"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["lgamma", "lgammaf", "lgammal", "math/lgamma", "math/lgammaf", "math/lgammal"]
helpviewer_keywords: ["lgamma function", "lgammal function", "lgammaf function"]
-ms.assetid: 6e326c58-7077-481a-a329-c82ae56ae9e6
---
# `lgamma`, `lgammaf`, `lgammal`
@@ -20,7 +19,7 @@ Determines the natural logarithm of the absolute value of the gamma function of
double lgamma( double x );
float lgammaf( float x );
long double lgammal( long double x );
-#define lgammal(X) // Requires C11 or higher
+#define lgammal(X) // Requires C11 or later
float lgamma( float x ); //C++ only
long double lgamma( long double x ); //C++ only
diff --git a/docs/c-runtime-library/reference/log-logf-log10-log10f.md b/docs/c-runtime-library/reference/log-logf-log10-log10f.md
index 475f466870..ba904c50ab 100644
--- a/docs/c-runtime-library/reference/log-logf-log10-log10f.md
+++ b/docs/c-runtime-library/reference/log-logf-log10-log10f.md
@@ -1,7 +1,7 @@
---
title: "log, logf, logl, log10, log10f, log10l"
description: "API reference for log, logf, logl, log10, log10f, and log10l; which calculate logarithms."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["log10f", "logf", "log10", "log", "log10l", "logl", "_o_log", "_o_log10", "_o_log10f", "_o_logf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -22,8 +22,8 @@ long double logl(double x);
double log10(double x);
float log10f (float x);
long double log10l(double x);
-#define log(X) // Requires C11 or higher
-#define log10(X) // Requires C11 or higher
+#define log(X) // Requires C11 or later
+#define log10(X) // Requires C11 or later
float log(float x); // C++ only
long double log(long double x); // C++ only
@@ -122,9 +122,9 @@ Log base 2 of 65536.000000 is 16.000000
## See also
-[Math and floating-point support](../floating-point-support.md) \
-[`exp`, `expf`, `expl`](exp-expf.md) \
-[`_matherr`](matherr.md) \
-[`pow`, `powf`, `powl`](pow-powf-powl.md) \
-[`_CIlog`](../cilog.md) \
-[`_CIlog10`](../cilog10.md)\
+[Math and floating-point support](../floating-point-support.md)\
+[`exp`, `expf`, `expl`](exp-expf.md)\
+[`_matherr`](matherr.md)\
+[`pow`, `powf`, `powl`](pow-powf-powl.md)\
+[`_CIlog`](../cilog.md)\
+[`_CIlog10`](../cilog10.md)
diff --git a/docs/c-runtime-library/reference/log1p-log1pf-log1pl2.md b/docs/c-runtime-library/reference/log1p-log1pf-log1pl2.md
index 4b73bb4062..ae3103f60c 100644
--- a/docs/c-runtime-library/reference/log1p-log1pf-log1pl2.md
+++ b/docs/c-runtime-library/reference/log1p-log1pf-log1pl2.md
@@ -1,7 +1,7 @@
---
title: "log1p, log1pf, log1pl2"
description: "API reference for log1p, log1pf, log1pl2; which compute the natural logarithm of 1 plus the specified value."
-ms.date: "2/1/2023"
+ms.date: 2/1/2023
api_name: ["log1p", "log1pf", "log1pl", "_o_log1p", "_o_log1pf", "_o_log1pl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -20,7 +20,7 @@ double log1p(double x);
float log1pf(float x);
long double log1pl(long double x);
-#define log1p(X) // Requires C11 or higher
+#define log1p(X) // Requires C11 or later
float log1p(float x); //C++ only
long double log1p(long double x); //C++ only
diff --git a/docs/c-runtime-library/reference/log2-log2f-log2l.md b/docs/c-runtime-library/reference/log2-log2f-log2l.md
index 9a70db2e0c..329ca699d0 100644
--- a/docs/c-runtime-library/reference/log2-log2f-log2l.md
+++ b/docs/c-runtime-library/reference/log2-log2f-log2l.md
@@ -1,12 +1,11 @@
---
title: "log2, log2f, log2l"
description: "API reference for log2, log2f, and log2l; which determine the binary (base-2) logarithm of the specified value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["log2", "log2l", "log2f", "_o_log2", "_o_log2f", "_o_log2l"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
-ms.assetid: 94d11b38-70b7-4d3a-94ac-523153c92b2e
---
# `log2`, `log2f`, `log2l`
@@ -35,7 +34,7 @@ long double log2l(
long double x
);
-#define log2(X) // Requires C11 or higher
+#define log2(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/logb-logbf-logbl-logb-logbf.md b/docs/c-runtime-library/reference/logb-logbf-logbl-logb-logbf.md
index 30a4afeca7..cec043552f 100644
--- a/docs/c-runtime-library/reference/logb-logbf-logbl-logb-logbf.md
+++ b/docs/c-runtime-library/reference/logb-logbf-logbl-logb-logbf.md
@@ -1,7 +1,7 @@
---
title: "logb, logbf, logbl, _logb, _logbf"
description: "API reference for logb, logbf, logbl, _logb, and _logbf; which extract the exponent value of a floating-point argument."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["logb", "_logb", "_logbl", "logbf", "_logbf", "logbl", "_o__logb", "_o_logb", "_o_logbf", "_o_logbl", "_o__logbf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -37,7 +37,7 @@ double _logb(
float _logbf(
float x
);
-#define logb(X) // Requires C11 or higher
+#define logb(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/longjmp.md b/docs/c-runtime-library/reference/longjmp.md
index e94b1110c1..da78b65d11 100644
--- a/docs/c-runtime-library/reference/longjmp.md
+++ b/docs/c-runtime-library/reference/longjmp.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: longjmp"
title: "longjmp"
+description: "Learn more about: longjmp"
ms.date: "1/14/2021"
api_name: ["longjmp"]
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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["longjmp"]
helpviewer_keywords: ["restoring stack environment and execution locale", "longjmp function"]
-ms.assetid: 0e13670a-5130-45c1-ad69-6862505b7a2f
---
# `longjmp`
@@ -75,5 +74,5 @@ See the example for [`_fpreset`](fpreset.md).
## See also
-[Process and environment control](../process-and-environment-control.md)
+[Process and environment control](../process-and-environment-control.md)\
[`setjmp`](setjmp.md)
diff --git a/docs/c-runtime-library/reference/lrint-lrintf-lrintl-llrint-llrintf-llrintl.md b/docs/c-runtime-library/reference/lrint-lrintf-lrintl-llrint-llrintf-llrintl.md
index 9c9b491590..732c7abe85 100644
--- a/docs/c-runtime-library/reference/lrint-lrintf-lrintl-llrint-llrintf-llrintl.md
+++ b/docs/c-runtime-library/reference/lrint-lrintf-lrintl-llrint-llrintf-llrintl.md
@@ -1,14 +1,13 @@
---
title: "lrint, lrintf, lrintl, llrint, llrintf, llrintl"
description: "API reference for lrint(), lrintf(), lrintl(), llrint(), llrintf(), and llrintl(); which rounds the specified floating-point value to the nearest integral value, by using the current rounding mode and direction."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["lrint", "lrintl", "lrintf", "llrint", "llrintf", "llrintl", "_o_llrint", "_o_llrintf", "_o_llrintl", "_o_lrint", "_o_lrintf", "_o_lrintl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["lrint", "lrintf", "lrintl", "llrint", "llrintf", "llrintl", "math/lrint", "math/lrintf", "math/lrintl", "math/llrint", "math/llrintf", "math/llrintl"]
helpviewer_keywords: ["lrint function", "lrintf function", "lrintl function", "llrint function", "llrintf function", "llrintl function"]
-ms.assetid: 28ccd5b3-5e6f-434f-997d-a21d51b8ce7f
---
# `lrint`, `lrintf`, `lrintl`, `llrint`, `llrintf`, `llrintl`
@@ -57,7 +56,7 @@ long long int llrintl(
long double x
);
-#define lrint(X) // Requires C11 or higher
+#define lrint(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/lround-lroundf-lroundl-llround-llroundf-llroundl.md b/docs/c-runtime-library/reference/lround-lroundf-lroundl-llround-llroundf-llroundl.md
index 4233c51110..d9ff713ffd 100644
--- a/docs/c-runtime-library/reference/lround-lroundf-lroundl-llround-llroundf-llroundl.md
+++ b/docs/c-runtime-library/reference/lround-lroundf-lroundl-llround-llroundf-llroundl.md
@@ -1,14 +1,13 @@
---
title: "lround, lroundf, lroundl, llround, llroundf, llroundl"
description: "API reference for lround, lroundf, lroundl, llround, llroundf, and llroundl; which rounds a floating-point value to the nearest integer."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["llround", "llroundf", "llroundl", "lroundf", "lround", "lroundl", "_o_llround", "_o_llroundf", "_o_llroundl", "_o_lround", "_o_lroundf", "_o_lroundl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["lround", "lroundl", "llroundl", "llround", "lroundf", "llroundf"]
helpviewer_keywords: ["lround function", "llroundl function", "llround function", "lroundf function", "llroundf function", "lroundl function"]
-ms.assetid: cfb88a35-54c6-469f-85af-f7d695dcfdd8
---
# `lround`, `lroundf`, `lroundl`, `llround`, `llroundf`, `llroundl`
@@ -47,7 +46,7 @@ long long llroundf(
long long llroundl(
long double x
);
-#define lround(X) // Requires C11 or higher
+#define lround(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/malloca.md b/docs/c-runtime-library/reference/malloca.md
index 9953a91657..56b67ffeb9 100644
--- a/docs/c-runtime-library/reference/malloca.md
+++ b/docs/c-runtime-library/reference/malloca.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _malloca"
title: "_malloca"
-ms.date: "11/04/2016"
+description: "Learn more about: _malloca"
+ms.date: 11/04/2016
api_name: ["_malloca"]
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"]
@@ -38,7 +38,7 @@ If *`size`* is greater than `_ALLOCA_S_THRESHOLD`, then **`_malloca`** attempts
There are restrictions to explicitly calling **`_malloca`** in an exception handler (EH). EH routines that run on x86-class processors operate in their own memory frame: They perform their tasks in memory space that isn't based on the current location of the stack pointer of the enclosing function. The most common implementations include Windows NT structured exception handling (SEH) and C++ catch clause expressions. Therefore, explicitly calling **`_malloca`** in any of the following scenarios results in program failure during the return to the calling EH routine:
-- Windows SEH exception filter expression: **`__except`** (`_malloca ()` )
+- Windows SEH exception filter expression: **`__except`** (`_malloca ()`)
- Windows SEH final exception handler: **`__finally`** {`_malloca ()` }
diff --git a/docs/c-runtime-library/reference/mbrtowc.md b/docs/c-runtime-library/reference/mbrtowc.md
index b8634e50a7..7c64576e18 100644
--- a/docs/c-runtime-library/reference/mbrtowc.md
+++ b/docs/c-runtime-library/reference/mbrtowc.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: mbrtowc"
title: "mbrtowc"
-ms.date: "4/2/2020"
+description: "Learn more about: mbrtowc"
+ms.date: 4/2/2020
api_name: ["mbrtowc", "_o_mbrtowc"]
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-convert-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["mbrtowc"]
helpviewer_keywords: ["mbrtowc function"]
-ms.assetid: a1e87fcc-6de0-4ca1-bf26-508d28490286
---
# `mbrtowc`
@@ -100,7 +99,7 @@ int Sample(char* szIn, wchar_t* wcOut, int nMax)
szLocal = setlocale(LC_ALL, "French_Canada.1252");
if (!szLocal)
{
- printf("The fuction setlocale(LC_ALL, \"French_Canada.1252\") failed!\n");
+ printf("The function setlocale(LC_ALL, \"French_Canada.1252\") failed!\n");
return 1;
}
@@ -110,7 +109,7 @@ int Sample(char* szIn, wchar_t* wcOut, int nMax)
// from a previous call to setlocale.
if (_setmbcp(_MB_CP_SBCS) == -1)
{
- printf("The fuction _setmbcp(_MB_CP_SBCS) failed!");
+ printf("The function _setmbcp(_MB_CP_SBCS) failed!");
return 1;
}
diff --git a/docs/c-runtime-library/reference/mbsnbset-s-mbsnbset-s-l.md b/docs/c-runtime-library/reference/mbsnbset-s-mbsnbset-s-l.md
index 903e87992a..9fa6a973f5 100644
--- a/docs/c-runtime-library/reference/mbsnbset-s-mbsnbset-s-l.md
+++ b/docs/c-runtime-library/reference/mbsnbset-s-mbsnbset-s-l.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _mbsnbset_s, _mbsnbset_s_l"
title: "_mbsnbset_s, _mbsnbset_s_l"
-ms.date: "4/2/2020"
+description: "Learn more about: _mbsnbset_s, _mbsnbset_s_l"
+ms.date: 4/2/2020
api_name: ["_mbsnbset_s_l", "_mbsnbset_s", "_o__mbsnbset_s", "_o__mbsnbset_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_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["mbsnbset_s", "_mbsnbset_s_l", "_mbsnbset_s", "mbsnbset_s_l"]
helpviewer_keywords: ["tcsnset_s function", "mbsnbset_s function", "mbsnbset_s_l function", "_mbsnbset_s_l function", "_tcsnset_s_l function", "_mbsnbset_s function", "_tcsnset_s function", "tcsnset_s_l function"]
-ms.assetid: 811f92c9-cc31-4bbd-8017-2d1bfc6fb96f
---
# `_mbsnbset_s`, `_mbsnbset_s_l`
@@ -90,14 +89,14 @@ By default, this function's global state is scoped to the application. To change
| 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` |
+| `_tcsnset_s_l` | `_strnset_s_l` | **`_mbsnbset_s_l`** | `_wcsnset_s_l` |
## Requirements
| Routine | Required header |
|---|---|
-| **`_mbsnbset_s`** | \ |
-| **`_mbsnbset_s_l`** | \ |
+| **`_mbsnbset_s`** | `` |
+| **`_mbsnbset_s_l`** | `` |
For more compatibility information, see [Compatibility](../compatibility.md).
diff --git a/docs/c-runtime-library/reference/mkdir-wmkdir.md b/docs/c-runtime-library/reference/mkdir-wmkdir.md
index 43a9a54ba6..f01bf458e6 100644
--- a/docs/c-runtime-library/reference/mkdir-wmkdir.md
+++ b/docs/c-runtime-library/reference/mkdir-wmkdir.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _mkdir, _wmkdir"
title: "_mkdir, _wmkdir"
+description: "Learn more about: _mkdir, _wmkdir"
ms.date: "4/2/2020"
api_name: ["_wmkdir", "_mkdir", "_o__mkdir", "_o__wmkdir"]
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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_mkdir", "tmkdir", "_tmkdir", "wmkdir", "_wmkdir"]
helpviewer_keywords: ["_wmkdir function", "folders [C++], creating", "wmkdir function", "directories [C++], creating", "mkdir function", "tmkdir function", "_mkdir function", "_tmkdir function"]
-ms.assetid: 7f22d01d-63a5-4712-a6e7-d34878b2d840
---
# `_mkdir`, `_wmkdir`
@@ -17,7 +16,6 @@ Creates a new directory.
## Syntax
```C
-
int _mkdir(
const char *dirname
);
diff --git a/docs/c-runtime-library/reference/nearbyint-nearbyintf-nearbyintl1.md b/docs/c-runtime-library/reference/nearbyint-nearbyintf-nearbyintl1.md
index 17a159e822..e94c9df070 100644
--- a/docs/c-runtime-library/reference/nearbyint-nearbyintf-nearbyintl1.md
+++ b/docs/c-runtime-library/reference/nearbyint-nearbyintf-nearbyintl1.md
@@ -1,14 +1,13 @@
---
title: "nearbyint, nearbyintf, nearbyintl"
description: "API reference for nearbyint, nearbyintf, and nearbyintl; which rounds the specified floating-point value to an integer, and returns that value in a floating-point format."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["nearbyint", "nearbyintf", "nearbyintl", "_o_nearbyint", "_o_nearbyintf", "_o_nearbyintl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["nearbyint", "nearbyintf", "nearbyintl", "math/nearbyint", "math/narbyintf", "math/narbyintl"]
helpviewer_keywords: ["nearbyint function", "nearbyintf function", "nearbyintl function"]
-ms.assetid: dd39cb68-96b0-434b-820f-6ff2ea65584f
---
# `nearbyint`, `nearbyintf`, `nearbyintl`
@@ -20,7 +19,7 @@ Rounds the specified floating-point value to an integer, and returns that value
double nearbyint( double x );
float nearbyintf( float x );
long double nearbyintl( long double x );
-#define nearbyint( X ) // Requires C11 or higher
+#define nearbyint( X ) // Requires C11 or later
float nearbyint( float x ); //C++ only
long double nearbyint( long double x ); //C++ only
diff --git a/docs/c-runtime-library/reference/nextafter-functions.md b/docs/c-runtime-library/reference/nextafter-functions.md
index f4945d818e..e2b6758121 100644
--- a/docs/c-runtime-library/reference/nextafter-functions.md
+++ b/docs/c-runtime-library/reference/nextafter-functions.md
@@ -1,7 +1,7 @@
---
title: "nextafter, nextafterf, nextafterl, _nextafter, _nextafterf, nexttoward, nexttowardf, nexttowardl"
description: "API reference for nextafter, nextafterf, nextafterl, _nextafter, _nextafterf, nexttoward, nexttowardf, and nexttowardl; which return the next representable floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["nextafterf", "_nextafterf", "nextafter", "nextafterl", "_nextafter", "nexttoward", "nexttowardf", "nexttowardl", "_o__nextafter", "_o_nextafter", "_o_nextafterf", "_o_nextafterl", "_o_nexttoward", "_o_nexttowardf", "_o_nexttowardl", "_o__nextafterf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -23,13 +23,13 @@ long double nextafterl( long double x, long double y );
double _nextafter( double x, double y );
float _nextafterf( float x, float y ); /* x64 only */
-#define nextafter(X, Y) // Requires C11 or higher
+#define nextafter(X, Y) // Requires C11 or later
double nexttoward( double x, long double y );
float nexttowardf( float x, long double y );
long double nexttowardl( long double x, long double y );
-#define nexttoward(X, Y) // Requires C11 or higher
+#define nexttoward(X, Y) // Requires C11 or later
float nextafter( float x, float y ); /* C++ only, requires */
long double nextafter( long double x, long double y ); /* C++ only, requires */
diff --git a/docs/c-runtime-library/reference/not.md b/docs/c-runtime-library/reference/not.md
index 54b1235ef3..a878828337 100644
--- a/docs/c-runtime-library/reference/not.md
+++ b/docs/c-runtime-library/reference/not.md
@@ -1,13 +1,12 @@
---
-description: "Learn more about: not"
title: "not"
+description: "Learn more about: not"
ms.date: "11/04/2016"
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: ["std::not", "std.not", "ISO646/not", "not"]
helpviewer_keywords: ["not function"]
-ms.assetid: d2ddbd5c-33c0-4aff-8961-feac155b4ba1
---
# `not`
@@ -16,7 +15,6 @@ An alternative to the **`!`** operator.
## Syntax
```C
-
#define not !
```
diff --git a/docs/c-runtime-library/reference/open-wopen.md b/docs/c-runtime-library/reference/open-wopen.md
index 6b72d3b25f..13237079ca 100644
--- a/docs/c-runtime-library/reference/open-wopen.md
+++ b/docs/c-runtime-library/reference/open-wopen.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _open, _wopen"
title: "_open, _wopen"
+description: "Learn more about: _open, _wopen"
ms.date: 05/18/2022
api_name: ["_open", "_wopen"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["CORECRT_IO/_open", "CORECRT_WIO/_wopen", "TCHAR/_topen", "_open", "_wopen", "_topen"]
helpviewer_keywords: ["opening files, for file I/O", "topen function", "_open function", "_topen function", "_wopen function", "files [C++], opening", "wopen function", "open function"]
-ms.assetid: 13f6a0c3-d1aa-450d-a7aa-74abc91b163e
---
# `_open`, `_wopen`
@@ -79,7 +78,7 @@ The **`_open`** function opens the file specified by *`filename`* and prepares i
| `_O_RDONLY` | Opens a file for reading only. Can't be specified with `_O_RDWR` or `_O_WRONLY`. |
| `_O_RDWR` | Opens a file for both reading and writing. Can't be specified with `_O_RDONLY` or `_O_WRONLY`. |
| `_O_SEQUENTIAL` | Specifies that caching is optimized for, but not restricted to, sequential access from disk. |
-| `_O_TEXT` | Opens a file in ANSI text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) |
+| `_O_TEXT` | Opens a file in ANSI text (translated) mode. For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md). |
| `_O_TRUNC` | Opens a file and truncates it to zero length; the file must have write permission. Can't be specified with `_O_RDONLY`. `_O_TRUNC` used with `_O_CREAT` opens an existing file or creates a file. **Note:** The `_O_TRUNC` flag destroys the contents of the specified file. |
| `_O_WRONLY` | Opens a file for writing only. Can't be specified with `_O_RDONLY` or `_O_RDWR`. |
| `_O_U16TEXT` | Opens a file in Unicode UTF-16 mode. |
@@ -96,7 +95,7 @@ If **`_open`** is called with **`_O_WRONLY | _O_APPEND`** (append mode) and `_O_
When two or more manifest constants are used to form the *`oflag`* argument, the constants are combined with the bitwise-OR operator ( **`|`** ). For a discussion of binary and text modes, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md).
-The *`pmode`* argument is required only when `_O_CREAT` is specified. If the file already exists, *`pmode`* is ignored. Otherwise, *`pmode`* specifies the file permission settings, which are set when the new file is closed the first time. **`_open`** applies the current file-permission mask to *`pmode`* before the permissions are set. (For more information, see [`_umask`](umask.md).) *`pmode`* is an integer expression that contains one or both of the following manifest constants, which are defined in ``.
+The *`pmode`* argument is required only when `_O_CREAT` is specified. If the file already exists, *`pmode`* is ignored. Otherwise, *`pmode`* specifies the file permission settings, which are set when the new file is closed the first time. **`_open`** applies the current file-permission mask to *`pmode`* before the permissions are set. For more information, see [`_umask`](umask.md). *`pmode`* is an integer expression that contains one or both of the following manifest constants, which are defined in ``.
| *`pmode`* | Meaning |
|--|--|
diff --git a/docs/c-runtime-library/reference/or-eq.md b/docs/c-runtime-library/reference/or-eq.md
index f9861186e4..86d34f9fb7 100644
--- a/docs/c-runtime-library/reference/or-eq.md
+++ b/docs/c-runtime-library/reference/or-eq.md
@@ -1,13 +1,12 @@
---
-description: "Learn more about: or_eq"
title: "or_eq"
+description: "Learn more about: or_eq"
ms.date: "11/04/2016"
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: ["std::or_eq", "ISO646/or_eq", "or_eq", "std.or_eq"]
helpviewer_keywords: ["or_eq function"]
-ms.assetid: 1eb92464-ed58-40d8-a30e-f0a6aa2f4318
---
# `or_eq`
@@ -16,7 +15,6 @@ An alternative to the `|=` operator.
## Syntax
```C
-
#define or_eq |=
```
diff --git a/docs/c-runtime-library/reference/pow-powf-powl.md b/docs/c-runtime-library/reference/pow-powf-powl.md
index bedf5a9dcf..dbc3247460 100644
--- a/docs/c-runtime-library/reference/pow-powf-powl.md
+++ b/docs/c-runtime-library/reference/pow-powf-powl.md
@@ -1,14 +1,13 @@
---
title: "pow, powf, powl"
description: "API reference for pow, powf, and powl; which calculate exponents."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["powl", "pow", "powf", "_o_pow", "_o_powf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["powl", "pow", "_powl", "powf"]
helpviewer_keywords: ["exponential calculations", "powl function", "_powl function", "exponentiation", "powers, calculating", "calculating exponentials", "powf function", "pow function"]
-ms.assetid: e75c33ed-2e59-48b1-be40-81da917324f1
---
# `pow`, `powf`, `powl`
@@ -20,7 +19,7 @@ Calculates *`x`* raised to the power of *`y`*.
double pow( double x, double y );
float powf( float x, float y );
long double powl( long double x, long double y );
-define pow(X, Y) // Requires C11 or higher
+define pow(X, Y) // Requires C11 or later
double pow( double x, int y ); // C++ only
float pow( float x, float y ); // C++ only
diff --git a/docs/c-runtime-library/reference/raise.md b/docs/c-runtime-library/reference/raise.md
index 2b33716eae..e3fe3e05b6 100644
--- a/docs/c-runtime-library/reference/raise.md
+++ b/docs/c-runtime-library/reference/raise.md
@@ -14,7 +14,7 @@ helpviewer_keywords: ["signals, sending to executing programs", "raise function"
Sends a signal to the executing program.
> [!NOTE]
-> Do not use this method to shut down a Microsoft Store app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/legal/windows/agreements/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
+> Do not use this method to shut down a Microsoft Store app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/windows/apps/publish/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
## Syntax
diff --git a/docs/c-runtime-library/reference/recalloc.md b/docs/c-runtime-library/reference/recalloc.md
index 2e10f1ee09..09cd09dea3 100644
--- a/docs/c-runtime-library/reference/recalloc.md
+++ b/docs/c-runtime-library/reference/recalloc.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _recalloc"
title: "_recalloc"
+description: "Learn more about: _recalloc"
ms.date: "4/2/2020"
api_name: ["_recalloc", "_o__recalloc"]
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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_recalloc", "recalloc"]
helpviewer_keywords: ["_recalloc function", "recalloc function"]
-ms.assetid: 1db8305a-3f03-418c-8844-bf9149f63046
---
# `_recalloc`
@@ -18,7 +17,7 @@ A combination of `realloc` and `calloc`. Reallocates an array in memory and init
```C
void *_recalloc(
- void *memblock
+ void *memblock,
size_t num,
size_t size
);
diff --git a/docs/c-runtime-library/reference/remainder-remainderf-remainderl.md b/docs/c-runtime-library/reference/remainder-remainderf-remainderl.md
index 2d6f85d7ed..807e001cd3 100644
--- a/docs/c-runtime-library/reference/remainder-remainderf-remainderl.md
+++ b/docs/c-runtime-library/reference/remainder-remainderf-remainderl.md
@@ -1,14 +1,13 @@
---
title: "remainder, remainderf, remainderl"
description: "API reference for remainder, remainderf, and remainderl; which compute the remainder of the quotient of two floating-point values, rounded to the nearest integral value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["remainderl", "remainder", "remainderf", "_o_remainder", "_o_remainderf", "_o_remainderl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["remainderf", "remainder", "remainderl"]
helpviewer_keywords: ["remainderf", "remainderl", "remainder"]
-ms.assetid: 5f721fb3-8b78-4597-9bc0-ca9bcd1f1d0e
---
# `remainder`, `remainderf`, `remainderl`
@@ -20,7 +19,7 @@ Computes the remainder of the quotient of two floating-point values, rounded to
double remainder( double x, double y );
float remainderf( float x, float y );
long double remainderl( long double x, long double y );
-#define remainder(X, Y) // Requires C11 or higher
+#define remainder(X, Y) // Requires C11 or later
float remainder( float x, float y ); /* C++ only */
long double remainder( long double x, long double y ); /* C++ only */
diff --git a/docs/c-runtime-library/reference/remquo-remquof-remquol.md b/docs/c-runtime-library/reference/remquo-remquof-remquol.md
index 9aa9613702..d756c829f0 100644
--- a/docs/c-runtime-library/reference/remquo-remquof-remquol.md
+++ b/docs/c-runtime-library/reference/remquo-remquof-remquol.md
@@ -1,14 +1,13 @@
---
title: "remquo, remquof, remquol"
description: "API reference for remquo, remquof, and remquol, which compute the remainder of two integer values, and store the sign and approximate magnitude of the quotient."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["remquof", "remquo", "remquol", "_o_remquo", "_o_remquof", "_o_remquol"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["remquof", "remquol", "remquo"]
helpviewer_keywords: ["remquol function", "remquof function", "remquo function"]
-ms.assetid: a1d3cb8b-8027-4cd3-8deb-04eb17f299fc
---
# `remquo`, `remquof`, `remquol`
@@ -20,7 +19,7 @@ Computes the remainder of two integer values, and stores an integer value with t
double remquo( double numer, double denom, int* quo );
float remquof( float numer, float denom, int* quo );
long double remquol( long double numer, long double denom, int* quo );
-#define remquo(X, Y, INT_PTR) // Requires C11 or higher
+#define remquo(X, Y, INT_PTR) // Requires C11 or later
float remquo( float numer, float denom, int* quo ); /* C++ only */
long double remquo( long double numer, long double denom, int* quo ); /* C++ only */
@@ -43,7 +42,7 @@ A pointer to an integer to store a value that has the sign and approximate magni
## Remarks
-The **`remquo`** function calculates the floating-point remainder `f` of *`x`* / *`y`* such that *`x`* = `n` \* *`y`* + `f`*, where `n` is an integer, `f` has the same sign as *`x`*, and the absolute value of `f` is less than the absolute value of *`y`*.
+The **`remquo`** function calculates the floating-point remainder `f` of *`x`* / *`y`* such that *`x`* = `n` \* *`y`* + *`f`*, where `n` is an integer, `f` has the same sign as *`x`*, and the absolute value of `f` is less than the absolute value of *`y`*.
C++ allows overloading, so you can call overloads of **`remquo`** that take and return **`float`** or **`long double`** values. In a C program, unless you're using the \ macro to call this function, **`remquo`** always takes two **`double`** arguments and returns a **`double`**.
diff --git a/docs/c-runtime-library/reference/rint-rintf-rintl.md b/docs/c-runtime-library/reference/rint-rintf-rintl.md
index 9b129700c9..ac703cb135 100644
--- a/docs/c-runtime-library/reference/rint-rintf-rintl.md
+++ b/docs/c-runtime-library/reference/rint-rintf-rintl.md
@@ -1,14 +1,13 @@
---
title: "rint, rintf, rintl"
description: "API reference for rint, rintf, and rintl; which round a floating-point value to the nearest integer in floating-point format."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["rintf", "rintl", "rint", "_o_rint", "_o_rintf", "_o_rintl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["rintf", "rintl", "rint"]
helpviewer_keywords: ["rintf function", "rint function", "rintl function"]
-ms.assetid: 312ae3e6-278c-459a-9393-11b8f87d9184
---
# `rint`, `rintf`, `rintl`
@@ -20,7 +19,7 @@ Rounds a floating-point value to the nearest integer in floating-point format.
double rint( double x );
float rintf( float x );
long double rintl( long double x );
-#define rint(X) // Requires C11 or higher
+#define rint(X) // Requires C11 or later
float rint( float x ); // C++ only
long double rint( long double x ); // C++ only
diff --git a/docs/c-runtime-library/reference/rmtmp.md b/docs/c-runtime-library/reference/rmtmp.md
index 857dc4c035..7fac6abd1a 100644
--- a/docs/c-runtime-library/reference/rmtmp.md
+++ b/docs/c-runtime-library/reference/rmtmp.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _rmtmp"
title: "_rmtmp"
+description: "Learn more about: _rmtmp"
ms.date: "4/2/2020"
api_name: ["_rmtmp", "_o__rmtmp"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_rmtmp"]
helpviewer_keywords: ["removing temporary files", "_rmtmp function", "files [C++], temporary", "rmtmp function", "files [C++], removing", "temporary files [C++], removing"]
-ms.assetid: 7419501e-2587-4f2a-b469-0dca07f84736
---
# `_rmtmp`
@@ -17,7 +16,6 @@ Removes temporary files.
## Syntax
```C
-
int _rmtmp( void );
```
diff --git a/docs/c-runtime-library/reference/rotl-rotl64-rotr-rotr64.md b/docs/c-runtime-library/reference/rotl-rotl64-rotr-rotr64.md
index dfdbaae96f..c095e8cada 100644
--- a/docs/c-runtime-library/reference/rotl-rotl64-rotr-rotr64.md
+++ b/docs/c-runtime-library/reference/rotl-rotl64-rotr-rotr64.md
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_rotr64", "rotl64", "_rotl64", "rotr64", "rotr", "_rotr", "_rotl", "rotl"]
helpviewer_keywords: ["rotl64 function", "_rotl function", "rotr function", "rotr64 function", "_rotr function", "rotl function", "_rotl64 function", "rotating bits", "_rotr64 function", "bits, rotating"]
-ms.assetid: cfce439b-366f-4584-8ab1-d527b13fcfc6
---
# `_rotl`, `_rotl64`, `_rotr`, `_rotr64`
@@ -17,7 +16,6 @@ Rotates bits to the left (**`_rotl`**) or right (**`_rotr`**).
## Syntax
```C
-
unsigned int _rotl(
unsigned int value,
int shift
diff --git a/docs/c-runtime-library/reference/round-roundf-roundl.md b/docs/c-runtime-library/reference/round-roundf-roundl.md
index a5a0f37b5f..df753b8e60 100644
--- a/docs/c-runtime-library/reference/round-roundf-roundl.md
+++ b/docs/c-runtime-library/reference/round-roundf-roundl.md
@@ -1,14 +1,13 @@
---
title: "round, roundf, roundl"
description: "API reference for round, roundf, and roundl; which round a floating-point value to the nearest integer value."
-ms.date: "09/25/2020"
+ms.date: 09/25/2020
api_name: ["round", "roundl", "roundf", "_o_round", "_o_roundf", "_o_roundl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["roundf", "roundl", "round"]
helpviewer_keywords: ["roundl function", "round function", "roundf function"]
-ms.assetid: 6be90877-193c-4b80-a32b-c3eca33f9c6f
---
# `round`, `roundf`, `roundl`
@@ -32,7 +31,7 @@ float roundf(
long double roundl(
long double x
);
-#define round(X) // Requires C11 or higher
+#define round(X) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/rtc-numerrors.md b/docs/c-runtime-library/reference/rtc-numerrors.md
index d512c8f402..f2428d8e7a 100644
--- a/docs/c-runtime-library/reference/rtc-numerrors.md
+++ b/docs/c-runtime-library/reference/rtc-numerrors.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _RTC_NumErrors"
title: "_RTC_NumErrors"
+description: "Learn more about: _RTC_NumErrors"
ms.date: "11/04/2016"
api_name: ["_RTC_NumErrors"]
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: ["_RTC_NumErrors", "RTC_NumErrors"]
helpviewer_keywords: ["run-time errors", "_RTC_NumErrors function", "RTC_NumErrors function"]
-ms.assetid: 7e82adae-38e2-4f8b-bc0b-37bda8109fd1
---
# `_RTC_NumErrors`
@@ -17,7 +16,6 @@ Returns the total number of errors that can be detected by run-time error checks
## Syntax
```C
-
int _RTC_NumErrors( void );
```
diff --git a/docs/c-runtime-library/reference/scalbn-scalbnf-scalbnl-scalbln-scalblnf-scalblnl.md b/docs/c-runtime-library/reference/scalbn-scalbnf-scalbnl-scalbln-scalblnf-scalblnl.md
index 53eccc387b..e8633ee008 100644
--- a/docs/c-runtime-library/reference/scalbn-scalbnf-scalbnl-scalbln-scalblnf-scalblnl.md
+++ b/docs/c-runtime-library/reference/scalbn-scalbnf-scalbnl-scalbln-scalblnf-scalblnl.md
@@ -1,14 +1,13 @@
---
title: "scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl"
description: "API reference for scalbn, scalbnf, scalbnl, scalbln, scalblnf, and scalblnl; which multiplies a floating-point number by an integral power of `FLT_RADIX`."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["scalblnl", "scalbnl", "scalbnf", "scalblnf", "scalbn", "scalbln", "_o_scalbln", "_o_scalblnf", "_o_scalblnl", "_o_scalbn", "_o_scalbnf", "_o_scalbnl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["scalblnf", "scalbnl", "scalblnl", "scalbln", "scalbn", "scalbnf"]
helpviewer_keywords: ["scalbn function", "scalbln function", "scalblnl function", "scalbnl function", "scalbnf function", "scalblnf function"]
-ms.assetid: df2f1543-8e39-4af4-a5cf-29307e64807d
---
# `scalbn`, `scalbnf`, `scalbnl`, `scalbln`, `scalblnf`, `scalblnl`
@@ -38,7 +37,7 @@ long double scalbnl(
int exp
);
-#define scalbn(X, INT) // Requires C11 or higher
+#define scalbn(X, INT) // Requires C11 or later
double scalbln(
double x,
@@ -54,7 +53,7 @@ long double scalblnl(
long exp
);
-#define scalbln(X, LONG) // Requires C11 or higher
+#define scalbln(X, LONG) // Requires C11 or later
float scalbln(
float x,
diff --git a/docs/c-runtime-library/reference/scprintf-p-scprintf-p-l-scwprintf-p-scwprintf-p-l.md b/docs/c-runtime-library/reference/scprintf-p-scprintf-p-l-scwprintf-p-scwprintf-p-l.md
index 8456b644e9..8067e1ed05 100644
--- a/docs/c-runtime-library/reference/scprintf-p-scprintf-p-l-scwprintf-p-scwprintf-p-l.md
+++ b/docs/c-runtime-library/reference/scprintf-p-scprintf-p-l-scwprintf-p-scwprintf-p-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _scprintf_p, _scprintf_p_l, _scwprintf_p, _scwprintf_p_l"
title: "_scprintf_p, _scprintf_p_l, _scwprintf_p, _scwprintf_p_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _scprintf_p, _scprintf_p_l, _scwprintf_p, _scwprintf_p_l"
+ms.date: 3/9/2021
api_name: ["_scwprintf_p", "_scprintf_p_l", "_scwprintf_p_l", "_scprintf_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"]
@@ -66,7 +66,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!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).
+> 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
diff --git a/docs/c-runtime-library/reference/scprintf-scprintf-l-scwprintf-scwprintf-l.md b/docs/c-runtime-library/reference/scprintf-scprintf-l-scwprintf-scwprintf-l.md
index 49789f506d..0d2d23af0d 100644
--- a/docs/c-runtime-library/reference/scprintf-scprintf-l-scwprintf-scwprintf-l.md
+++ b/docs/c-runtime-library/reference/scprintf-scprintf-l-scwprintf-scwprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _scprintf, _scprintf_l, _scwprintf, _scwprintf_l"
title: "_scprintf, _scprintf_l, _scwprintf, _scwprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _scprintf, _scprintf_l, _scwprintf, _scwprintf_l"
+ms.date: 3/9/2021
api_name: ["_scprintf_l", "_scwprintf", "_scwprintf_l", "_scprintf"]
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"]
@@ -66,7 +66,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!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).
+> 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
diff --git a/docs/c-runtime-library/reference/set-abort-behavior.md b/docs/c-runtime-library/reference/set-abort-behavior.md
index 1abfb48f28..957edb7430 100644
--- a/docs/c-runtime-library/reference/set-abort-behavior.md
+++ b/docs/c-runtime-library/reference/set-abort-behavior.md
@@ -14,7 +14,7 @@ helpviewer_keywords: ["aborting programs", "_set_abort_behavior function", "set_
Specifies the action to be taken when a program is abnormally terminated.
> [!NOTE]
-> Do not use the [`abort`](abort.md) function to shut down a Microsoft Store app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/legal/windows/agreements/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
+> Do not use the [`abort`](abort.md) function to shut down a Microsoft Store app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/windows/apps/publish/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
## Syntax
diff --git a/docs/c-runtime-library/reference/set-error-mode.md b/docs/c-runtime-library/reference/set-error-mode.md
index cdbce0d93f..2876650091 100644
--- a/docs/c-runtime-library/reference/set-error-mode.md
+++ b/docs/c-runtime-library/reference/set-error-mode.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _set_error_mode"
title: "_set_error_mode"
-ms.date: "11/04/2016"
+description: "Learn more about: _set_error_mode"
+ms.date: 11/04/2016
api_name: ["_set_error_mode"]
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-runtime-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["set_error_mode", "_set_error_mode"]
helpviewer_keywords: ["_set_error_mode function", "set_error_mode function"]
-ms.assetid: f0807be5-73d1-4a32-a701-3c9bdd139c5c
---
# `_set_error_mode`
@@ -61,7 +60,7 @@ When it's used with an [`assert`](assert-macro-assert-wassert.md), **`_set_error
```C
// crt_set_error_mode.c
-// compile with: /c
+
#include
#include
diff --git a/docs/c-runtime-library/reference/signal.md b/docs/c-runtime-library/reference/signal.md
index a9c623188f..ad4bd650a1 100644
--- a/docs/c-runtime-library/reference/signal.md
+++ b/docs/c-runtime-library/reference/signal.md
@@ -14,7 +14,7 @@ helpviewer_keywords: ["signal function"]
Sets interrupt signal handling.
> [!IMPORTANT]
-> Do not use this method to shut down a Microsoft Store app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/legal/windows/agreements/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
+> Do not use this method to shut down a Microsoft Store app, except in testing or debugging scenarios. Programmatic or UI ways to close a Store app are not permitted according to the [Microsoft Store policies](/windows/apps/publish/store-policies). For more information, see [UWP app lifecycle](/windows/uwp/launch-resume/app-lifecycle).
## Syntax
diff --git a/docs/c-runtime-library/reference/sin-sinf-sinl.md b/docs/c-runtime-library/reference/sin-sinf-sinl.md
index 841be1e4a4..ae1f2d1e35 100644
--- a/docs/c-runtime-library/reference/sin-sinf-sinl.md
+++ b/docs/c-runtime-library/reference/sin-sinf-sinl.md
@@ -1,7 +1,7 @@
---
title: "sin, sinf, sinl"
description: "API reference for sin, sinf, and sinl; which calculate the sine of a floating-point value."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["sinl", "sinf", "sin", "_o_sin", "_o_sinf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the sine of a floating-point value.
double sin(double x);
float sinf(float x);
long double sinl(long double x);
-#define sin(x) // Requires C11 or higher
+#define sin(x) // Requires C11 or later
```
```cpp
diff --git a/docs/c-runtime-library/reference/sinh-sinhf-sinhl.md b/docs/c-runtime-library/reference/sinh-sinhf-sinhl.md
index 3a4456374e..161a0998f1 100644
--- a/docs/c-runtime-library/reference/sinh-sinhf-sinhl.md
+++ b/docs/c-runtime-library/reference/sinh-sinhf-sinhl.md
@@ -1,7 +1,7 @@
---
title: "sinh, sinhf, sinhl"
description: "API reference for calculating the hyperbolic sine of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["sinh", "sinhl", "sinhf", "sinhl", "_o_sinh", "_o_sinhf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the hyperbolic sine.
double sinh(double x);
float sinhf(float x);
long double sinhl(long double x);
-#define sinh(x) // Requires C11 or higher
+#define sinh(x) // Requires C11 or later
float sinh(float x); // C++ only
long double sinh(long double x); // C++ only
diff --git a/docs/c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md b/docs/c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md
index 548a9fccf6..9b0fce0a47 100644
--- a/docs/c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md
+++ b/docs/c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l"
title: "_snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l"
+description: "Learn more about: _snprintf_s, _snprintf_s_l, _snwprintf_s, _snwprintf_s_l"
ms.date: 06/27/2023
api_name: ["_snprintf_s", "_snprintf_s_l", "_snwprintf_s", "_snwprintf_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"]
@@ -126,7 +126,7 @@ For information about these and other error codes, see [`_doserrno`, `errno`, `_
> [!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).
+> 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).
**`_snwprintf_s`** is a wide-character version of **`_snprintf_s`**; the pointer arguments to **`_snwprintf_s`** are wide-character strings. Detection of encoding errors in **`_snwprintf_s`** might differ from that in **`_snprintf_s`**. **`_snwprintf_s`**, like **`swprintf_s`**, writes output to a string rather than to a destination of type **`FILE`**.
diff --git a/docs/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md b/docs/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md
index 6adfc17e2e..6043ec459e 100644
--- a/docs/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md
+++ b/docs/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md
@@ -120,7 +120,7 @@ See [Behavior summary](#behavior-summary) for details.
## Remarks
-Beginning with the UCRT in Visual Studio 2015 and Windows 10, **`snprintf`** is no longer identical to **`_snprintf`**. The **`snprintf`** behavior is now C99 standard conformant. The difference is that if you run out of buffer, `snprintf` null-terminates the end of the buffer and returns the number of characters that would have been required whereas `_snprintf` doesn't null-terminate the buffer and returns -1. Also, `snprintf()` includes one more character in the output because it doesn't null-terminate the buffer.
+Beginning with the UCRT in Visual Studio 2015 and Windows 10, **`snprintf`** is no longer identical to **`_snprintf`**. The **`snprintf`** behavior is now C99 standard conformant. The difference is that if you run out of buffer, `snprintf` null-terminates the end of the buffer and returns the number of characters that would have been required whereas `_snprintf` doesn't null-terminate the buffer and returns -1. Also, `_snprintf()` includes one more character in the output because it doesn't null-terminate the buffer.
- **`snprintf`** and the **`_snprintf`** family of functions format and store *`count`* or fewer characters in *`buffer`*.
- **`snprintf`** always stores a terminating `NULL` character, truncating the output if necessary.
diff --git a/docs/c-runtime-library/reference/sopen-s-wsopen-s.md b/docs/c-runtime-library/reference/sopen-s-wsopen-s.md
index 3b1480c69a..9be97bd769 100644
--- a/docs/c-runtime-library/reference/sopen-s-wsopen-s.md
+++ b/docs/c-runtime-library/reference/sopen-s-wsopen-s.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _sopen_s, _wsopen_s"
title: "_sopen_s, _wsopen_s"
+description: "Learn more about: _sopen_s, _wsopen_s"
ms.date: 05/18/2022
api_name: ["_sopen_s", "_wsopen_s", "_o__sopen_s", "_o__wsopen_s"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["CORECRT_IO/_sopen_s", "CORECRT_WIO/_wsopen_s", "TCHAR/_tsopen_s", "_sopen_s", "_wsopen_s", "_tsopen_s", "sopen_s", "wsopen_s"]
helpviewer_keywords: ["sopen_s function", "_wsopen_s function", "wsopen_s function", "opening files, for sharing", "files [C++], opening", "_sopen_s function", "files [C++], sharing"]
-ms.assetid: 059a0084-d08c-4973-9174-55e391b72aa2
---
# `_sopen_s`, `_wsopen_s`
@@ -29,7 +28,7 @@ errno_t _wsopen_s(
const wchar_t *filename,
int oflag,
int shflag,
- int pmode,
+ int pmode
);
```
@@ -95,7 +94,7 @@ The integer expression *`oflag`* is formed by combining one or more manifest con
| `_O_RDONLY` | Opens a file for reading only. Can't be specified with `_O_RDWR` or `_O_WRONLY`. |
| `_O_RDWR` | Opens a file for both reading and writing. Can't be specified with `_O_RDONLY` or `_O_WRONLY`. |
| `_O_SEQUENTIAL` | Specifies that caching is optimized for, but not restricted to, sequential access from disk. |
-| `_O_TEXT` | Opens a file in ANSI text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) |
+| `_O_TEXT` | Opens a file in ANSI text (translated) mode. For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md). |
| `_O_TRUNC` | Opens a file and truncates it to zero length; the file must have write permission. Can't be specified with `_O_RDONLY`. `_O_TRUNC` used with `_O_CREAT` opens an existing file or creates a file. **Note:** The `_O_TRUNC` flag destroys the contents of the specified file. |
| `_O_WRONLY` | Opens a file for writing only. Can't be specified with `_O_RDONLY` or `_O_RDWR`. |
| `_O_U16TEXT` | Opens a file in Unicode UTF-16 mode. |
diff --git a/docs/c-runtime-library/reference/sopen-wsopen.md b/docs/c-runtime-library/reference/sopen-wsopen.md
index c3e9b3a0aa..8d57455bb2 100644
--- a/docs/c-runtime-library/reference/sopen-wsopen.md
+++ b/docs/c-runtime-library/reference/sopen-wsopen.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _sopen, _wsopen"
title: "_sopen, _wsopen"
+description: "Learn more about: _sopen, _wsopen"
ms.date: 05/18/2022
api_name: ["_sopen", "_wsopen", "_o__sopen"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-stdio-l1-1-0.dll"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["CORECRT_IO/_sopen", "CORECRT_WIO/_wsopen", "TCHAR/_tsopen", "_sopen", "_wsopen", "_tsopen", "sopen", "wsopen"]
helpviewer_keywords: ["sopen function", "sharing files", "opening files, for sharing", "_sopen function", "wsopen function", "files [C++], opening", "files [C++], sharing", "_wsopen function"]
-ms.assetid: a9d4cccf-06e9-414d-96fa-453fca88cc1f
---
# `_sopen`, `_wsopen`
@@ -88,7 +87,7 @@ The integer expression *`oflag`* is formed by combining one or more of the follo
| `_O_RDONLY` | Opens a file for reading only. Can't be specified with `_O_RDWR` or `_O_WRONLY`. |
| `_O_RDWR` | Opens a file for both reading and writing. Can't be specified with `_O_RDONLY` or `_O_WRONLY`. |
| `_O_SEQUENTIAL` | Specifies that caching is optimized for, but not restricted to, sequential access from disk. |
-| `_O_TEXT` | Opens a file in ANSI text (translated) mode. (For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md).) |
+| `_O_TEXT` | Opens a file in ANSI text (translated) mode. For more information, see [Text and binary mode file I/O](../text-and-binary-mode-file-i-o.md) and [`fopen`](fopen-wfopen.md). |
| `_O_TRUNC` | Opens a file and truncates it to zero length; the file must have write permission. Can't be specified with `_O_RDONLY`. `_O_TRUNC` used with `_O_CREAT` opens an existing file or creates a file. **Note:** The `_O_TRUNC` flag destroys the contents of the specified file. |
| `_O_WRONLY` | Opens a file for writing only. Can't be specified with `_O_RDONLY` or `_O_RDWR`. |
| `_O_U16TEXT` | Opens a file in Unicode UTF-16 mode. |
diff --git a/docs/c-runtime-library/reference/splitpath-wsplitpath.md b/docs/c-runtime-library/reference/splitpath-wsplitpath.md
index 7f0a8c3122..f11ecc1e6d 100644
--- a/docs/c-runtime-library/reference/splitpath-wsplitpath.md
+++ b/docs/c-runtime-library/reference/splitpath-wsplitpath.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _splitpath, _wsplitpath"
title: "_splitpath, _wsplitpath"
+description: "Learn more about: _splitpath, _wsplitpath"
ms.date: 11/30/2023
api_name: ["_wsplitpath", "_splitpath", "_o__splitpath", "_o__wsplitpath"]
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"]
@@ -41,7 +41,7 @@ Full path.
Drive letter, followed by a colon (**:**). You can pass `NULL` for this parameter if you don't need the drive letter.
*`dir`*\
-Directory path, including trailing slash. Forward slashes ( `/` ), backslashes ( `\` ), or both may be used. Pass `NULL` for this parameter if you don't need the directory path.
+Directory path, including trailing slash. Forward slashes (`/`), backslashes (`\`), or both may be used. Pass `NULL` for this parameter if you don't need the directory path.
*`fname`*\
Base filename (no extension). Pass `NULL` for this parameter if you don't need the filename.
diff --git a/docs/c-runtime-library/reference/sprintf-p-sprintf-p-l-swprintf-p-swprintf-p-l.md b/docs/c-runtime-library/reference/sprintf-p-sprintf-p-l-swprintf-p-swprintf-p-l.md
index 030e72c577..2d9abe9944 100644
--- a/docs/c-runtime-library/reference/sprintf-p-sprintf-p-l-swprintf-p-swprintf-p-l.md
+++ b/docs/c-runtime-library/reference/sprintf-p-sprintf-p-l-swprintf-p-swprintf-p-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l"
title: "_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l"
+ms.date: 3/9/2021
api_name: ["_sprintf_p", "_swprintf_p_l", "_swprintf_p", "_sprintf_p_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"]
@@ -76,7 +76,7 @@ The **`_sprintf_p`** function formats and stores a series of characters and valu
**`_sprintf_p`** returns the number of bytes stored in *`buffer`*, not counting the terminating null character. **`_swprintf_p`** returns the number of wide characters stored in *`buffer`*, not counting the terminating null wide character. If *`buffer`* or *`format`* is a null pointer, or if the format string contains invalid formatting characters, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, these functions return -1 and set `errno` to `EINVAL`.
> [!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).
+> 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
diff --git a/docs/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l.md b/docs/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l.md
index 5e3ff04ff2..f78c0ea9df 100644
--- a/docs/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l.md
+++ b/docs/c-runtime-library/reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l"
title: "sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l"
-ms.date: "3/9/2021"
+description: "Learn more about: sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l"
+ms.date: 3/9/2021
api_name: ["_swprintf_s_l", "_sprintf_s_l", "swprintf_s", "sprintf_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", "ntoskrnl.exe"]
api_type: ["DLLExport"]
@@ -96,7 +96,7 @@ In C++, use of these functions is simplified by template overloads. The overload
There are versions of **`sprintf_s`** that offer more control over what happens if the buffer is too small. For more information, see [`_snprintf_s`, `_snprintf_s_l`, `_snwprintf_s`, `_snwprintf_s_l`](snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md).
> [!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).
+> 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
diff --git a/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md b/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md
index 960c47657c..f386fc7dfd 100644
--- a/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md
+++ b/docs/c-runtime-library/reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: sprintf, _sprintf_l, swprintf, _swprintf, _swprintf_l, __swprintf_l"
title: "sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: sprintf, _sprintf_l, swprintf, _swprintf, _swprintf_l, __swprintf_l"
+ms.date: 3/9/2021
api_name: ["__swprintf_l", "sprintf", "_sprintf_l", "_swprintf_l", "swprintf", "_swprintf"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ntdll.dll", "ucrtbase.dll", "ntoskrnl.exe"]
api_type: ["DLLExport"]
@@ -105,7 +105,7 @@ The **`sprintf`** function formats and stores a series of characters and values
> [!IMPORTANT]
> Using **`sprintf`**, there is no way to limit the number of characters written, which means that code using **`sprintf`** is susceptible to buffer overruns. Consider using the related function [`snprintf`](snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md), which specifies a maximum number of characters to write to *`buffer`*, or use [`_scprintf`](scprintf-scprintf-l-scwprintf-scwprintf-l.md) to determine how large a buffer is required. Also, ensure that *`format`* is not a user-defined string.
>
-> 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).
+> 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).
**`swprintf`** is a wide-character version of **`sprintf`**; the pointer arguments to **`swprintf`** are wide-character strings. Detection of encoding errors in **`swprintf`** may differ from **`sprintf`**. **`swprintf`** and **`fwprintf`** behave identically except **`swprintf`** writes output to a string rather than to a destination of type `FILE`, and **`swprintf`** requires the *`count`* parameter to specify the maximum number of characters to write. The versions of these functions with the **`_l`** suffix are identical except they use the locale parameter passed in instead of the current thread locale.
diff --git a/docs/c-runtime-library/reference/sqrt-sqrtf-sqrtl.md b/docs/c-runtime-library/reference/sqrt-sqrtf-sqrtl.md
index ef2221147e..2e1c685b8e 100644
--- a/docs/c-runtime-library/reference/sqrt-sqrtf-sqrtl.md
+++ b/docs/c-runtime-library/reference/sqrt-sqrtf-sqrtl.md
@@ -1,7 +1,7 @@
---
title: "sqrt, sqrtf, sqrtl"
description: "API reference for sqrt, sqrtf, and sqrtl; which calculate a square root of a floating point number."
-ms.date: "08/31/2020"
+ms.date: 08/31/2020
api_name: ["sqrtl", "sqrtf", "sqrt", "_o_sqrt", "_o_sqrtf"]
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-math-l1-1-0.dll", "ntoskrnl.exe"]
api_type: ["DLLExport"]
@@ -31,7 +31,7 @@ float sqrtf(
long double sqrtl(
long double x
);
-#define sqrt(x) // Requires C11 or higher
+#define sqrt(x) // Requires C11 or later
```
### Parameters
diff --git a/docs/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l.md b/docs/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l.md
index 9d253c5cf2..92cf4ff91e 100644
--- a/docs/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l.md
+++ b/docs/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: strftime, wcsftime, _strftime_l, _wcsftime_l"
title: "strftime, wcsftime, _strftime_l, _wcsftime_l"
-ms.date: "4/2/2020"
+description: "Learn more about: strftime, wcsftime, _strftime_l, _wcsftime_l"
+ms.date: 4/2/2020
api_name: ["strftime", "_wcsftime_l", "_strftime_l", "wcsftime", "_o__strftime_l", "_o__wcsftime_l", "_o_strftime", "_o_wcsftime"]
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-time-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_tcsftime", "strftime", "wcsftime", "_strftime_l", "_wcsftime_l"]
helpviewer_keywords: ["_strftime_l function", "strftime function", "tcsftime function", "_wcsftime_l function", "wcsftime function", "_tcsftime function", "time strings"]
-ms.assetid: 6330ff20-4729-4c4a-82af-932915d893ea
---
# `strftime`, `wcsftime`, `_strftime_l`, `_wcsftime_l`
@@ -84,7 +83,7 @@ By default, this function's global state is scoped to the application. To change
|---|---|---|---|
| **`_tcsftime`** | **`strftime`** | **`strftime`** | **`wcsftime`** |
-The *`format`* argument consists of one or more codes; as in **`printf`**, the formatting codes are preceded by a percent sign (**`%`**). Characters that don't begin with **`%`** are copied unchanged to *`strDest`*. The `LC_TIME` category of the current locale affects the output formatting of **`strftime`**. (For more information on `LC_TIME`, see [`setlocale`](setlocale-wsetlocale.md).) The **`strftime`** and **`wcsftime`** functions use the currently set locale. The **`_strftime_l`** and **`_wcsftime_l`** versions of these functions are identical except that they take the locale as a parameter and use that instead of the currently set locale. For more information, see [Locale](../locale.md).
+The *`format`* argument consists of one or more codes; as in **`printf`**, the formatting codes are preceded by a percent sign (**`%`**). Characters that don't begin with **`%`** are copied unchanged to *`strDest`*. The `LC_TIME` category of the current locale affects the output formatting of **`strftime`**. For more information on `LC_TIME`, see [`setlocale`](setlocale-wsetlocale.md). The **`strftime`** and **`wcsftime`** functions use the currently set locale. The **`_strftime_l`** and **`_wcsftime_l`** versions of these functions are identical except that they take the locale as a parameter and use that instead of the currently set locale. For more information, see [Locale](../locale.md).
The **`strftime`** functions support these formatting codes:
diff --git a/docs/c-runtime-library/reference/strncnt-wcsncnt-mbsnbcnt-mbsnbcnt-l-mbsnccnt-mbsnccnt-l.md b/docs/c-runtime-library/reference/strncnt-wcsncnt-mbsnbcnt-mbsnbcnt-l-mbsnccnt-mbsnccnt-l.md
index 4ca437d019..2c9cdcfed2 100644
--- a/docs/c-runtime-library/reference/strncnt-wcsncnt-mbsnbcnt-mbsnbcnt-l-mbsnccnt-mbsnccnt-l.md
+++ b/docs/c-runtime-library/reference/strncnt-wcsncnt-mbsnbcnt-mbsnbcnt-l-mbsnccnt-mbsnccnt-l.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: _strncnt, _wcsncnt, _mbsnbcnt, _mbsnbcnt_l, _mbsnccnt, _mbsnccnt_l"
title: "_strncnt, _wcsncnt, _mbsnbcnt, _mbsnbcnt_l, _mbsnccnt, _mbsnccnt_l"
+description: "Learn more about: _strncnt, _wcsncnt, _mbsnbcnt, _mbsnbcnt_l, _mbsnccnt, _mbsnccnt_l"
ms.date: "4/2/2020"
api_name: ["_mbsnbcnt_l", "_mbsnccnt", "_wcsncnt", "_strncnt", "_mbsnccnt_l", "_mbsnbcnt", "_o__mbsnbcnt", "_o__mbsnbcnt_l", "_o__mbsnccnt", "_o__mbsnccnt_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"]
@@ -8,7 +8,6 @@ api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["_mbsnbcnt", "wcsncnt", "_tcsnbcnt", "_mbsnccnt", "_ftcsnbcnt", "mbsnbcnt", "strncnt", "mbsnbcnt_l", "mbsnccnt_l", "mbsnccnt", "_strncnt", "_wcsncnt"]
helpviewer_keywords: ["_strncnt function", "_mbsnbcnt function", "_mbsnbcnt_l function", "_mbsnccnt_l function", "mbsnbcnt_l function", "mbsnbcnt function", "tcsnbcnt function", "mbsnccnt_l function", "strncnt function", "_tcsnbcnt function", "mbsnccnt function", "wcsncnt function", "_mbsnccnt function", "_wcsncnt function"]
-ms.assetid: 2a022e9e-a307-4acb-a66b-e56e5357f848
---
# `_strncnt`, `_wcsncnt`, `_mbsnbcnt`, `_mbsnbcnt_l`, `_mbsnccnt`, `_mbsnccnt_l`
@@ -105,8 +104,8 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_mbsnbcnt.c
-#include
-#include
+#include
+#include
int main( void )
{
diff --git a/docs/c-runtime-library/reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l.md b/docs/c-runtime-library/reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l.md
index 90ada77650..9c8d760c68 100644
--- a/docs/c-runtime-library/reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l.md
+++ b/docs/c-runtime-library/reference/strrchr-wcsrchr-mbsrchr-mbsrchr-l.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: strrchr, wcsrchr, _mbsrchr, _mbsrchr_l"
title: "strrchr, wcsrchr, _mbsrchr, _mbsrchr_l"
+description: "Learn more about: strrchr, wcsrchr, _mbsrchr, _mbsrchr_l"
ms.date: "4/2/2020"
api_name: ["strrchr", "wcsrchr", "_mbsrchr", "_mbsrchr_l", "_o__mbsrchr", "_o__mbsrchr_l"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ntdll.dll", "ucrtbase.dll", "api-ms-win-crt-multibyte-l1-1-0.dll", "ntoskrnl.exe"]
@@ -131,4 +131,4 @@ For an example of using **`strrchr`**, see [`strchr`](strchr-wcschr-mbschr-mbsch
[`strcspn`, `wcscspn`, `_mbscspn`, `_mbscspn_l`](strcspn-wcscspn-mbscspn-mbscspn-l.md)\
[`_strnicmp`, `_wcsnicmp`, `_mbsnicmp`, `_strnicmp_l`, `_wcsnicmp_l`, `_mbsnicmp_l`](strnicmp-wcsnicmp-mbsnicmp-strnicmp-l-wcsnicmp-l-mbsnicmp-l.md)\
[`strpbrk`, `wcspbrk`, `_mbspbrk`, `_mbspbrk_l`](strpbrk-wcspbrk-mbspbrk-mbspbrk-l.md)\
-[`strspn`, `wcsspn`, `_mbsspn`, `_mbsspn_l`](strspn-wcsspn-mbsspn-mbsspn-l.md)\
+[`strspn`, `wcsspn`, `_mbsspn`, `_mbsspn_l`](strspn-wcsspn-mbsspn-mbsspn-l.md)
diff --git a/docs/c-runtime-library/reference/strtoimax-strtoimax-l-wcstoimax-wcstoimax-l.md b/docs/c-runtime-library/reference/strtoimax-strtoimax-l-wcstoimax-wcstoimax-l.md
index c6bcf88b3f..288b4dcce8 100644
--- a/docs/c-runtime-library/reference/strtoimax-strtoimax-l-wcstoimax-wcstoimax-l.md
+++ b/docs/c-runtime-library/reference/strtoimax-strtoimax-l-wcstoimax-wcstoimax-l.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: strtoimax, _strtoimax_l, wcstoimax, _wcstoimax_l"
title: "strtoimax, _strtoimax_l, wcstoimax, _wcstoimax_l"
-ms.date: "11/04/2016"
+description: "Learn more about: strtoimax, _strtoimax_l, wcstoimax, _wcstoimax_l"
+ms.date: 11/04/2016
api_name: ["wcstoimax", "_wcstoimax_l", "_strtoimax_l", "strtoimax"]
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-convert-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["wcstoimax", "_tcstoimax", "strtoimax", "_wcstoimax_l", "_strtoimax_l", "_tcstoimax_l"]
-helpviewer_keywords: ["strtoimax funciton", "conversion functions", "_strtoimax_l function", "_wcstoimax_l function", "wcstoimax function"]
-ms.assetid: 4530d3dc-aaac-4a76-b7cf-29ae3c98d0ae
+helpviewer_keywords: ["strtoimax function", "conversion functions", "_strtoimax_l function", "_wcstoimax_l function", "wcstoimax function"]
---
# `strtoimax`, `_strtoimax_l`, `wcstoimax`, `_wcstoimax_l`
diff --git a/docs/c-runtime-library/reference/strtol-wcstol-strtol-l-wcstol-l.md b/docs/c-runtime-library/reference/strtol-wcstol-strtol-l-wcstol-l.md
index 4ae62a70e1..1b09754591 100644
--- a/docs/c-runtime-library/reference/strtol-wcstol-strtol-l-wcstol-l.md
+++ b/docs/c-runtime-library/reference/strtol-wcstol-strtol-l-wcstol-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: strtol, wcstol, _strtol_l, _wcstol_l"
title: "strtol, wcstol, _strtol_l, _wcstol_l"
-ms.date: "4/2/2020"
+description: "Learn more about: strtol, wcstol, _strtol_l, _wcstol_l"
+ms.date: 4/2/2020
api_name: ["strtol", "wcstol", "_strtol_l", "_wcstol_l", "_o__strtol_l", "_o__wcstol_l", "_o_strtol", "_o_wcstol"]
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-convert-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -65,7 +65,7 @@ Locale to use.
The **`strtol`**, **`wcstol`**, **`_strtol_l`**, and **`_wcstol_l`** functions convert *`string`* to a **`long`**. They stop reading *`string`* at the first character not recognized as part of a number. It may be the terminating-null character, or the first alphanumeric character greater than or equal to *`base`*.
-**`wcstol`** and **`_wcstol_l`** are wide-character versions of **`strtol`** and **`_strtol_l`**. Their *`string`* argument is a wide-character string. These functions behave identically to **`strtol`** and **`_strtol_l`** otherwise. The locale's `LC_NUMERIC` category setting determines recognition of the radix character (the fractional marker or decimal point) in *`string`*. The functions **`strtol`** and **`wcstol`** use the current locale. **`_strtol_l`** and **`_wcstol_l`** use the locale passed in instead. For more information, see [`setlocale`] and [Locale](../locale.md).
+**`wcstol`** and **`_wcstol_l`** are wide-character versions of **`strtol`** and **`_strtol_l`**. Their *`string`* argument is a wide-character string. These functions behave identically to **`strtol`** and **`_strtol_l`** otherwise. The locale's `LC_NUMERIC` category setting determines recognition of the radix character (the fractional marker or decimal point) in *`string`*. The functions **`strtol`** and **`wcstol`** use the current locale. **`_strtol_l`** and **`_wcstol_l`** use the locale passed in instead. For more information, see [`setlocale`](setlocale-wsetlocale.md) and [Locale](../locale.md).
When *`end_ptr`* is `NULL`, it's ignored. Otherwise, a pointer to the character that stopped the scan is stored at the location pointed to by *`end_ptr`*. No conversion is possible if no valid digits are found, or an invalid base is specified. The value of *`string`* is then stored at the location pointed to by *`end_ptr`*.
diff --git a/docs/c-runtime-library/reference/tan-tanf-tanl.md b/docs/c-runtime-library/reference/tan-tanf-tanl.md
index 815d0b95a9..58e1563bf1 100644
--- a/docs/c-runtime-library/reference/tan-tanf-tanl.md
+++ b/docs/c-runtime-library/reference/tan-tanf-tanl.md
@@ -1,14 +1,13 @@
---
title: "tan, tanf, tanl"
description: "API reference for tan, tanf, and tanl; which calculate the tangent of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["tan", "tanf", "tanl", "_o_tan", "_o_tanf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["CORECRT_MATH/tan", "CORECRT_MATH/tanf", "CORECRT_MATH/tanl", "tan", "tanf", "tanl"]
helpviewer_keywords: ["tanl function", "tan function", "calculating tangents", "tangent", "tanf function", "trigonometric functions"]
-ms.assetid: 36cc0ce8-9c80-4653-b354-ddb3b378b6bd
---
# `tan`, `tanf`, `tanl`
@@ -20,7 +19,7 @@ Calculates the tangent.
double tan( double x );
float tanf( float x );
long double tanl( long double x );
-#define tan(x) // Requires C11 or higher
+#define tan(x) // Requires C11 or later
```
```cpp
diff --git a/docs/c-runtime-library/reference/tanh-tanhf-tanhl.md b/docs/c-runtime-library/reference/tanh-tanhf-tanhl.md
index de71ee3178..069c1a809f 100644
--- a/docs/c-runtime-library/reference/tanh-tanhf-tanhl.md
+++ b/docs/c-runtime-library/reference/tanh-tanhf-tanhl.md
@@ -1,7 +1,7 @@
---
title: "tanh, tanhf, tanhl"
description: "API reference for tanh, tanhf, and tanhl; which calculate the hyperbolic tangent of a floating-point value."
-ms.date: "1/15/2021"
+ms.date: 1/15/2021
api_name: ["tanh", "tanhf", "tanhl", "_o_tanh", "_o_tanhf"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -19,7 +19,7 @@ Calculates the hyperbolic tangent.
double tanh( double x );
float tanhf( float x );
long double tanhl( long double x );
-#define tanh(x) // Requires C11 or higher
+#define tanh(x) // Requires C11 or later
```
```cpp
diff --git a/docs/c-runtime-library/reference/tgamma-tgammaf-tgammal.md b/docs/c-runtime-library/reference/tgamma-tgammaf-tgammal.md
index eb9595efd4..820761ba8b 100644
--- a/docs/c-runtime-library/reference/tgamma-tgammaf-tgammal.md
+++ b/docs/c-runtime-library/reference/tgamma-tgammaf-tgammal.md
@@ -1,14 +1,13 @@
---
title: "tgamma, tgammaf, tgammal"
description: "API reference for tgamma, tgammaf, and tgammal; which determine the gamma function of the specified value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["tgamma", "tgammaf", "tgammal", "_o_tgamma", "_o_tgammaf", "_o_tgammal"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["CORECRT_MATH/tgamma", "CORECRT_MATH/tgammaf", "CORECRT_MATH/tgammal", "tgamma", "tgammaf", "tgammal"]
helpviewer_keywords: ["tgamma function", "tgammaf function", "tgammal function"]
-ms.assetid: f1bd2681-8af2-48a9-919d-5358fd068acd
---
# `tgamma`, `tgammaf`, `tgammal`
@@ -29,7 +28,7 @@ long double tgammal(
long double x
);
-#define tgamma(X) // Requires C11 or higher
+#define tgamma(X) // Requires C11 or later
float tgamma(
float x
diff --git a/docs/c-runtime-library/reference/trunc-truncf-truncl.md b/docs/c-runtime-library/reference/trunc-truncf-truncl.md
index 19c7bc0414..1920550576 100644
--- a/docs/c-runtime-library/reference/trunc-truncf-truncl.md
+++ b/docs/c-runtime-library/reference/trunc-truncf-truncl.md
@@ -1,14 +1,13 @@
---
title: "trunc, truncf, truncl"
description: "API reference for trunc, truncf, truncl; which determine the nearest integer that is less than or equal to the specified floating-point value."
-ms.date: "9/1/2020"
+ms.date: 9/1/2020
api_name: ["trunc", "truncf", "truncl"]
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-math-l1-1-0.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["CORECRT_MATH/trunc", "CORECRT_MATH/truncf", "CORECRT_MATH/truncl", "math/trunc", "math/truncf", "math/truncl", "trunc", "truncf", "truncl"]
helpviewer_keywords: ["trunc function", "truncf function", "truncl function"]
-ms.assetid: de2038ac-ac0b-483e-870c-e8992dcd4fd0
---
# `trunc`, `truncf`, `truncl`
@@ -19,7 +18,7 @@ Determines the nearest integer that is less than or equal to the specified float
```C
double trunc( double x );
long double truncl( long double x );
-#define trunc(X) // Requires C11 or higher
+#define trunc(X) // Requires C11 or later
long double trunc( long double x ); //C++ only
float trunc( float x ); //C++ only
diff --git a/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md b/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md
index 5c15bfbf42..1564dabc49 100644
--- a/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md
+++ b/docs/c-runtime-library/reference/ungetch-ungetwch-ungetch-nolock-ungetwch-nolock.md
@@ -1,7 +1,7 @@
---
title: "_ungetch, _ungetwch, _ungetch_nolock, _ungetwch_nolock"
description: "Learn more about: _ungetch, _ungetwch, _ungetch_nolock, _ungetwch_nolock"
-ms.date: "4/2/2020"
+ms.date: 4/2/2020
api_name: ["_ungetch_nolock", "_ungetwch_nolock", "_ungetwch", "_ungetch", "_o__ungetch", "_o__ungetch_nolock", "_o__ungetwch", "_o__ungetwch_nolock"]
api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-conio-l1-1-0.dll"]
api_type: ["DLLExport"]
@@ -70,7 +70,6 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_ungetch.c
-// compile with: /c
// In this program, a white-space delimited
// token is read from the keyboard. When the program
// encounters a delimiter, it uses _ungetch to replace
diff --git a/docs/c-runtime-library/reference/vcprintf-p-vcprintf-p-l-vcwprintf-p-vcwprintf-p-l.md b/docs/c-runtime-library/reference/vcprintf-p-vcprintf-p-l-vcwprintf-p-vcwprintf-p-l.md
index 5a40fed9d7..9910375760 100644
--- a/docs/c-runtime-library/reference/vcprintf-p-vcprintf-p-l-vcwprintf-p-vcwprintf-p-l.md
+++ b/docs/c-runtime-library/reference/vcprintf-p-vcprintf-p-l-vcwprintf-p-vcwprintf-p-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _vcprintf_p, _vcprintf_p_l, _vcwprintf_p, _vcwprintf_p_l"
title: "_vcprintf_p, _vcprintf_p_l, _vcwprintf_p, _vcwprintf_p_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _vcprintf_p, _vcprintf_p_l, _vcwprintf_p, _vcwprintf_p_l"
+ms.date: 3/9/2021
api_name: ["_vcprintf_p", "_vcwprintf_p_l", "_vcprintf_p_l", "_vcwprintf_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"]
@@ -94,7 +94,7 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```C
// crt_vcprintf_p.c
-// compile with: /c
+
#include
#include
diff --git a/docs/c-runtime-library/reference/vcprintf-vcprintf-l-vcwprintf-vcwprintf-l.md b/docs/c-runtime-library/reference/vcprintf-vcprintf-l-vcwprintf-vcwprintf-l.md
index 48dc1f6a5f..0bffc074e8 100644
--- a/docs/c-runtime-library/reference/vcprintf-vcprintf-l-vcwprintf-vcwprintf-l.md
+++ b/docs/c-runtime-library/reference/vcprintf-vcprintf-l-vcwprintf-vcwprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _vcprintf, _vcprintf_l, _vcwprintf, _vcwprintf_l"
title: "_vcprintf, _vcprintf_l, _vcwprintf, _vcwprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _vcprintf, _vcprintf_l, _vcwprintf, _vcwprintf_l"
+ms.date: 3/9/2021
api_name: ["_vcwprintf", "_vcprintf_l", "_vcwprintf_l", "_vcprintf"]
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"]
@@ -65,7 +65,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
>
-> 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).
+> 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
@@ -89,7 +89,7 @@ For more compatibility information, see [Compatibility](../compatibility.md).
```cpp
// crt_vcprintf.cpp
-// compile with: /c
+
#include
#include
diff --git a/docs/c-runtime-library/reference/vfprintf-p-vfprintf-p-l-vfwprintf-p-vfwprintf-p-l.md b/docs/c-runtime-library/reference/vfprintf-p-vfprintf-p-l-vfwprintf-p-vfwprintf-p-l.md
index 0d8c50f0a3..1da2fe9b48 100644
--- a/docs/c-runtime-library/reference/vfprintf-p-vfprintf-p-l-vfwprintf-p-vfwprintf-p-l.md
+++ b/docs/c-runtime-library/reference/vfprintf-p-vfprintf-p-l-vfwprintf-p-vfwprintf-p-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l"
title: "_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l"
+ms.date: 3/9/2021
api_name: ["_vfprintf_p", "_vfwprintf_p", "_vfprintf_p_l", "_vfwprintf_p_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"]
@@ -70,7 +70,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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).
If either *`stream`* or *`format`* is a null pointer, or if the format string contains invalid formatting characters, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`.
diff --git a/docs/c-runtime-library/reference/vfprintf-s-vfprintf-s-l-vfwprintf-s-vfwprintf-s-l.md b/docs/c-runtime-library/reference/vfprintf-s-vfprintf-s-l-vfwprintf-s-vfwprintf-s-l.md
index ffb2bfde12..5b805440d0 100644
--- a/docs/c-runtime-library/reference/vfprintf-s-vfprintf-s-l-vfwprintf-s-vfwprintf-s-l.md
+++ b/docs/c-runtime-library/reference/vfprintf-s-vfprintf-s-l-vfwprintf-s-vfwprintf-s-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l"
title: "vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l"
-ms.date: "3/9/2021"
+description: "Learn more about: vfprintf_s, _vfprintf_s_l, vfwprintf_s, _vfwprintf_s_l"
+ms.date: 3/9/2021
api_name: ["vfwprintf_s", "_vfprintf_s_l", "vfprintf_s", "_vfwprintf_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"]
@@ -74,7 +74,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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
diff --git a/docs/c-runtime-library/reference/vfprintf-vfprintf-l-vfwprintf-vfwprintf-l.md b/docs/c-runtime-library/reference/vfprintf-vfprintf-l-vfwprintf-vfwprintf-l.md
index f4860772c9..3c06a9bf53 100644
--- a/docs/c-runtime-library/reference/vfprintf-vfprintf-l-vfwprintf-vfwprintf-l.md
+++ b/docs/c-runtime-library/reference/vfprintf-vfprintf-l-vfwprintf-vfwprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l"
title: "vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l"
+ms.date: 3/9/2021
api_name: ["_vfprintf_l", "vfprintf", "vfwprintf", "_vfwprintf_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"]
@@ -72,7 +72,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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
diff --git a/docs/c-runtime-library/reference/vprintf-p-vprintf-p-l-vwprintf-p-vwprintf-p-l.md b/docs/c-runtime-library/reference/vprintf-p-vprintf-p-l-vwprintf-p-vwprintf-p-l.md
index e3ea98113a..239ea8e1b5 100644
--- a/docs/c-runtime-library/reference/vprintf-p-vprintf-p-l-vwprintf-p-vwprintf-p-l.md
+++ b/docs/c-runtime-library/reference/vprintf-p-vprintf-p-l-vwprintf-p-vwprintf-p-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l"
title: "_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l"
+ms.date: 3/9/2021
api_name: ["_vwprintf_p", "_vprintf_p", "_vprintf_p_l", "_vwprintf_p_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"]
@@ -63,7 +63,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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).
If *`format`* is a null pointer, or if the format string contains invalid formatting characters, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`.
diff --git a/docs/c-runtime-library/reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md b/docs/c-runtime-library/reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md
index 9b7f90e5ef..b1a404e8fc 100644
--- a/docs/c-runtime-library/reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md
+++ b/docs/c-runtime-library/reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: vprintf_s, _vprintf_s_l, vwprintf_s, _vwprintf_s_l"
title: "vprintf_s, _vprintf_s_l, vwprintf_s, _vwprintf_s_l"
-ms.date: "3/9/2021"
+description: "Learn more about: vprintf_s, _vprintf_s_l, vwprintf_s, _vwprintf_s_l"
+ms.date: 3/9/2021
api_name: ["_vwprintf_s_l", "vwprintf_s", "_vprintf_s_l", "vprintf_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_type: ["DLLExport"]
@@ -67,7 +67,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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
diff --git a/docs/c-runtime-library/reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md b/docs/c-runtime-library/reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md
index 4575ef26d7..e91e6092ae 100644
--- a/docs/c-runtime-library/reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md
+++ b/docs/c-runtime-library/reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: vprintf, _vprintf_l, vwprintf, _vwprintf_l"
title: "vprintf, _vprintf_l, vwprintf, _vwprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: vprintf, _vprintf_l, vwprintf, _vwprintf_l"
+ms.date: 3/9/2021
api_name: ["vprintf", "_vwprintf_l", "_vprintf_l", "vwprintf"]
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"]
@@ -65,7 +65,7 @@ The versions of these functions with the `_l` suffix are identical except that t
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns). Invalid format strings are detected and result in an error.
-> 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).
+> 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
diff --git a/docs/c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md b/docs/c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md
index c2185baab2..388f6f46a2 100644
--- a/docs/c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md
+++ b/docs/c-runtime-library/reference/vscprintf-p-vscprintf-p-l-vscwprintf-p-vscwprintf-p-l.md
@@ -1,7 +1,7 @@
---
title: "_vscprintf_p, _vscprintf_p_l, _vscwprintf_p, _vscwprintf_p_l"
description: "Learn more about: _vscprintf_p, _vscprintf_p_l, _vscwprintf_p, _vscwprintf_p_l"
-ms.date: "10/21/2021"
+ms.date: 10/21/2021
api_name: ["_vscprintf_p_l", "_vscprintf_p", "_vscwprintf_p_l", "_vscwprintf_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"]
@@ -59,11 +59,14 @@ These functions differ from **`_vscprintf`** and **`_vscwprintf`** only in that
The versions of these functions with the **`_l`** suffix are identical except that they use the locale parameter passed in instead of the current thread locale.
+Return Value is the size of the formatted data. If the function takes a `char` buffer, the size is in bytes. If the function takes a `wchar_t` buffer, the size specifies the number of 16-bit words.
+Characters refer to `char` characters for functions that take a `char` buffer, and to `wchar_t` characters for functions that take a `wchar_t` buffer.
+
If *`format`* is a null pointer, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`.
> [!IMPORTANT]
> Ensure that if *`format`* is a user-defined string, it is null terminated and has the correct number and type of parameters. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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
diff --git a/docs/c-runtime-library/reference/vscprintf-vscprintf-l-vscwprintf-vscwprintf-l.md b/docs/c-runtime-library/reference/vscprintf-vscprintf-l-vscwprintf-vscwprintf-l.md
index 080aed3268..ac02613e06 100644
--- a/docs/c-runtime-library/reference/vscprintf-vscprintf-l-vscwprintf-vscwprintf-l.md
+++ b/docs/c-runtime-library/reference/vscprintf-vscprintf-l-vscwprintf-vscwprintf-l.md
@@ -59,6 +59,9 @@ If *`format`* is a null pointer, the invalid parameter handler is invoked, as de
## Remarks
+Return Value is the size of the formatted data. If the function takes a `char` buffer, the size is in bytes. If the function takes a `wchar_t` buffer, the size specifies the number of 16-bit words.
+Characters refer to `char` characters for functions that take a `char` buffer, and to `wchar_t` characters for functions that take a `wchar_t` buffer.
+
Each *`argument`* (if any) is converted according to the corresponding format specification in *`format`*. The format consists of ordinary characters and has the same form and function as the *`format`* argument for [`printf`](printf-printf-l-wprintf-wprintf-l.md).
> [!IMPORTANT]
diff --git a/docs/c-runtime-library/reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md b/docs/c-runtime-library/reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md
index 690566a0fc..341e63eaa5 100644
--- a/docs/c-runtime-library/reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md
+++ b/docs/c-runtime-library/reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l"
title: "vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l"
+description: "Learn more about: vsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, _vsnwprintf_s, _vsnwprintf_s_l"
ms.date: 06/27/2023
api_name: ["_vsnwprintf_s", "_vsnwprintf_s_l", "_vsnprintf_s", "vsnprintf_s", "_vsnprintf_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", "ntdll.dll", "ucrtbase.dll", "ntoskrnl.exe"]
@@ -105,12 +105,14 @@ See [Behavior summary](#behavior-summary) for details.
## Remarks
-**`vsnprintf_s`** is identical to **`_vsnprintf_s`** and is included for conformance to the ANSI standard. **`_vnsprintf`** is retained for backward compatibility.
+Each of these functions takes a pointer to an argument list, then formats and writes up to *`count`* characters of the given data to the memory pointed to by *`buffer`* and appends a terminating `NULL`.
-Each of these functions takes a pointer to an argument list, then formats and writes up to *`count`* characters of the given data to the memory pointed to by *`buffer`* and appends a terminating null.
+In debug builds, the remaining `sizeOfBuffer` bytes following the terminating `NULL` are filled with 'xFE' as described in [`_CrtSetDebugFillThreshold`](crtsetdebugfillthreshold.md).
The versions of these functions with the **`_l`** suffix are identical except that they use the locale parameter passed in instead of the current thread locale.
+**`vsnprintf_s`** is identical to **`_vsnprintf_s`** and is included for conformance to the ANSI standard. **`_vnsprintf`** is retained for backward compatibility.
+
### Behavior summary
For the following table:
@@ -127,6 +129,7 @@ For the following table:
| `buffer == NULL` and `sizeOfBuffer == 0` and `count == 0` | No data is written. | 0 | N/A | No |
| `buffer == NULL` and either `sizeOfBuffer != 0` or `count != 0` | If execution continues after invalid parameter handler executes, sets `errno` and returns a negative value.| -1 | `EINVAL` (22) | Yes |
| `buffer != NULL` and `sizeOfBuffer == 0` | No data is written. If execution continues after invalid parameter handler executes, sets `errno` and returns a negative value. | -1 | `EINVAL` (22) | Yes |
+| `buffer != NULL` and `sizeOfBuffer != 0` and `count == 0` | The buffer is `NULL` terminated. | -1 | N/A | No |
| `count == 0`| Doesn't write any data and returns the number of characters that would have been written, not including the terminating `NULL`. | The number of characters that would have been written not including the terminating `NULL`. | N/A | No |
| `count < 0` | Unsafe: the value is treated as unsigned, likely creating a large value that results in overwriting the memory that follows the buffer. | The number of characters written, not including the terminating `NULL`. | N/A | No |
| `count < sizeOfBuffer` and `len <= count` | All of the data is written and a terminating `NULL` is appended. | The number of characters written. | N/A | No |
@@ -141,10 +144,10 @@ For information about these and other error codes, see [`_doserrno`, `errno`, `_
> [!IMPORTANT]
> Ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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).
> [!NOTE]
-> To ensure that there is room for the terminating null, be sure that *`count`* is strictly less than the buffer length, or use `_TRUNCATE`.
+> To ensure that there is room for the terminating `NULL`, be sure that *`count`* is strictly less than the buffer length, or use `_TRUNCATE`.
In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically (eliminating the need to specify a size argument) and they can automatically replace older, non-secure functions with their newer, secure counterparts. For more information, see [Secure template overloads](../secure-template-overloads.md).
@@ -209,4 +212,4 @@ nSize: -1, buff: Hi there!
[`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](fprintf-fprintf-l-fwprintf-fwprintf-l.md)\
[`printf`, `_printf_l`, `wprintf`, `_wprintf_l`](printf-printf-l-wprintf-wprintf-l.md)\
[`sprintf`, `_sprintf_l`, `swprintf`, `_swprintf_l`, `__swprintf_l`](sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md)\
-[`va_arg`, `va_copy`, `va_end`, `va_start`](va-arg-va-copy-va-end-va-start.md)
\ No newline at end of file
+[`va_arg`, `va_copy`, `va_end`, `va_start`](va-arg-va-copy-va-end-va-start.md)
diff --git a/docs/c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md b/docs/c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md
index b4a5f31213..7a90fece02 100644
--- a/docs/c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md
+++ b/docs/c-runtime-library/reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md
@@ -129,7 +129,7 @@ Beginning with the UCRT in Visual Studio 2015 and Windows 10, **`vsnprintf`** is
> [!IMPORTANT]
> To prevent certain kinds of security risks, ensure that *`format`* isn't a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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).
> [!NOTE]
> To ensure that there's room for the terminating null when calling **`_vsnprintf`**, **`_vsnprintf_l`**, **`_vsnwprintf`** and **`_vsnwprintf_l`**, be sure that *`count`* is strictly less than the buffer length and initialize the buffer to null prior to calling the function.
@@ -155,7 +155,8 @@ For the following table:
| Encoding error during formatting | If processing string specifier `s`, `S`, or `Z`, format specification processing stops. | -1 | `EILSEQ` (42) | No |
| Encoding error during formatting | If processing character specifier `c` or `C`, the invalid character is skipped. The number of characters written isn't incremented for the skipped character, nor is any data written for it. Processing the format specification continues after skipping the specifier with the encoding error. | The number of characters written, not including the terminating `NULL`. | `EILSEQ` (42) | No |
| `buffer == NULL` and `count != 0` | If execution continues after invalid parameter handler executes, sets `errno` and returns a negative value.| -1 | `EINVAL` (22) | Yes |
-| `count == 0` | No data is written | The number of characters that would have been written, not including the terminating `NULL`. You can use this result to allocate sufficient buffer space for the string and a terminating `NULL`, and then call the function again to fill the buffer. | N/A | No |
+| `buffer == NULL` and `count == 0` | No data is written | The number of characters that would have been written, not including the terminating `NULL`. You can use this result to allocate sufficient buffer space for the string and a terminating `NULL`, and then call the function again to fill the buffer. | N/A | No |
+| `count == 0` | No data is written | -1 | `ERANGE` (34) | No |
| `count < 0`| Unsafe: the value is treated as unsigned, likely creating a large value that results in overwriting the memory that follows the buffer. | The number of characters written. | N/A | No |
| `count < sizeOfBuffer` and `len <= count` | All of the data is written and a terminating `NULL` is appended. | The number of characters written, not including the terminating `NULL`. | N/A | No |
| `count < sizeOfBuffer` and `len > count` | The first *`count-1`* characters are written followed by a null-terminator. | The number of characters that would have been written had `count` matched the number of characters to output, not including the null-terminator. | N/A | No |
diff --git a/docs/c-runtime-library/reference/vsprintf-p-vsprintf-p-l-vswprintf-p-vswprintf-p-l.md b/docs/c-runtime-library/reference/vsprintf-p-vsprintf-p-l-vswprintf-p-vswprintf-p-l.md
index a5ab73d417..7b74d3eb27 100644
--- a/docs/c-runtime-library/reference/vsprintf-p-vsprintf-p-l-vswprintf-p-vswprintf-p-l.md
+++ b/docs/c-runtime-library/reference/vsprintf-p-vsprintf-p-l-vswprintf-p-vswprintf-p-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: _vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l"
title: "_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l"
-ms.date: "3/9/2021"
+description: "Learn more about: _vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l"
+ms.date: 3/9/2021
api_name: ["_vsprintf_p", "_vswprintf_p", "_vsprintf_p_l", "_vswprintf_p_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"]
@@ -66,7 +66,9 @@ The locale to use.
## Return value
-**`_vsprintf_p`** and **`_vswprintf_p`** return the number of characters written, not including the terminating null character, or a negative value if an output error occurs.
+**`_vsprintf_p`** and **`_vswprintf_p`** return the number of characters written, not including the terminating `NULL` character, or a negative value if an output error occurs.
+If the *`buffer`* is a `NULL` pointer and *`sizeInBytes`* or *`count`* are zero, functions return the number of characters that would have been written not including the terminating `NULL`.
+If the *`buffer`* is valid and *`sizeInBytes`* or *`count`* are zero, returns -1.
## Remarks
@@ -76,10 +78,10 @@ These functions differ from the `vsprintf_s` and `vswprintf_s` only in that they
The versions of these functions with the `_l` suffix are identical except that they use the locale parameter passed in instead of the current thread locale.
-If the *`buffer`* or *`format`* parameters are `NULL` pointers, if count is zero, or if the format string contains invalid formatting characters, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`.
+If the *`buffer`* or *`format`* parameters are `NULL` pointers, or if the format string contains invalid formatting characters, the invalid parameter handler is invoked, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, the functions return -1 and set `errno` to `EINVAL`.
> [!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).
+> 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
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 991b132063..94c4dc3632 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,7 +1,7 @@
---
-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, _vstprintf_s, _vstprintf_s_l"
-ms.date: "3/9/2021"
+description: "Learn more about: vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l"
+ms.date: 3/9/2021
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"]
@@ -94,7 +94,7 @@ The versions of these functions with the **`_l`** suffix are identical except th
In C++, using these functions is simplified by template overloads. The overloads can infer buffer length automatically, eliminating the need to specify a size argument. And, they can automatically replace non-secure functions with their secure counterparts. For more information, see [Secure template overloads](../secure-template-overloads.md).
> [!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).
+> 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 function mappings
diff --git a/docs/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md b/docs/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md
index 0d197f9619..e5eadb3323 100644
--- a/docs/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md
+++ b/docs/c-runtime-library/reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l"
title: "vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l"
-ms.date: "3/9/2021"
+description: "Learn more about: vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l"
+ms.date: 3/9/2021
api_name: ["_vswprintf_l", "_vsprintf_l", "vsprintf", "vswprintf", "__vswprintf_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"]
@@ -95,6 +95,10 @@ The locale to use.
**`vsprintf`** and **`vswprintf`** return the number of characters written, not including the terminating `NULL` character, or a negative value if an output error occurs. If *`buffer`* or *`format`* is a `NULL` pointer, these functions invoke the invalid parameter handler, as described in [Parameter validation](../parameter-validation.md). If execution is allowed to continue, these functions return -1 and set `errno` to `EINVAL`.
+If *`buffer`* is a `NULL` pointer and *`count`* is zero, **`vswprintf`** and **`_vswprintf_l`** return the number of characters that would have been written not including the terminating NULL.
+
+If *`buffer`* is valid and *`count`* is zero, **`vswprintf`** and **`_vswprintf_l`** return -1. The contents of *`buffer`* are unchanged.
+
For information on these and other error codes, see [`errno`, `_doserrno`, `_sys_errlist`, and `_sys_nerr`](../errno-doserrno-sys-errlist-and-sys-nerr.md).
## Remarks
@@ -105,7 +109,7 @@ The versions of these functions with the **`_l`** suffix are identical except th
> [!IMPORTANT]
> Using **`vsprintf`**, there is no way to limit the number of characters written, which means that code using this function is susceptible to buffer overruns. Use [`_vsnprintf`](vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md) instead, or call [`_vscprintf`](vscprintf-vscprintf-l-vscwprintf-vscwprintf-l.md) to determine how large a buffer is needed. Also, ensure that *`format`* is not a user-defined string. For more information, see [Avoiding buffer overruns](/windows/win32/SecBP/avoiding-buffer-overruns).
-> 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).
+> 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).
**`vswprintf`** conforms to the ISO C Standard, which requires the second parameter, *`count`*, of type **`size_t`**. To force the old nonstandard behavior, define `_CRT_NON_CONFORMING_SWPRINTFS`. The old behavior may not be in a future version, so code should be changed to use the new conformant behavior.
diff --git a/docs/c-runtime-library/required-and-optional-header-files.md b/docs/c-runtime-library/required-and-optional-header-files.md
index 679afb5450..13fb797a27 100644
--- a/docs/c-runtime-library/required-and-optional-header-files.md
+++ b/docs/c-runtime-library/required-and-optional-header-files.md
@@ -2,7 +2,7 @@
title: "Required and Optional Header Files"
description: "When to use required versus optional header files from the Microsoft C runtime library."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords: ["c.headers"]
helpviewer_keywords: ["include files, required in run time", "header files, required in run time"]
ms.assetid: f64d0bf5-e2c3-4b42-97d0-443b3d901d9f
diff --git a/docs/c-runtime-library/routine-mappings.md b/docs/c-runtime-library/routine-mappings.md
index 087515c0cd..e36658b739 100644
--- a/docs/c-runtime-library/routine-mappings.md
+++ b/docs/c-runtime-library/routine-mappings.md
@@ -1,9 +1,8 @@
---
-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"
+description: "Learn more about: Microsoft specific generic-text functions and the CRT functions they map to."
+ms.date: 11/04/2016
ms.author: twhitney
-api_name: ["foo",]
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"]
---
@@ -127,7 +126,6 @@ For related information, see [Generic-text mappings in tchar.h](../text/generic-
| `_tcsnicmp` | `_strnicmp` | `_mbsnbicmp` | `_wcsnicmp` |
| `_tcsnicoll` | `_strnicoll` | `_mbsnbicoll` | `_wcsnicoll` |
| `_tcsninc` | `_strninc` | `_mbsninc` | `_wcsninc` |
-| `_tcsnccnt` | `_strncnt` | `_mbsnccnt` | `_wcsncnt` |
| `_tcsnset` | `_strnset` | `_mbsnbset` | `_wcsnset` |
| `_tcspbrk` | `strpbrk` | `_mbspbrk` | `wcspbrk` |
| `_tcsspnp` | `_strspnp` | `_mbsspnp` | `_wcsspnp` |
diff --git a/docs/c-runtime-library/sal-annotations.md b/docs/c-runtime-library/sal-annotations.md
index 1307e5f0a2..3b7f7b2499 100644
--- a/docs/c-runtime-library/sal-annotations.md
+++ b/docs/c-runtime-library/sal-annotations.md
@@ -2,7 +2,7 @@
title: "SAL Annotations"
description: "A brief description of the Microsoft source-code annotation language (SAL)."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["__z annotation", "ref annotation", "_opt annotation", "__checkreturn annotatioin", "__deref_opt annotation", "deref_opt annotation", "__deref annotation", "__in annotation", "annotations [C++]", "z annotation", "_inout annotation", "__ref annotation", "full annotation", "_in annotation", "_ref annotation", "__out annotation", "_ecount annotation", "SAL annotations", "__opt annotation", "inout annotation", "in annotation", "_CA_SHOULD_CHECK_RETURN", "__bcount annotation", "_full annotation", "_bcount annotation", "deref annotation", "part annotation", "_out annotation", "__nz annotation", "__part annotation", "opt annotation", "__full annotation", "_nz annotation", "_z annotation", "out annotation", "__ecount annotation", "__inout annotation", "SAL annotations, _CA_SHOULD_CHECK_RETURN", "_deref_opt annotation", "_deref annotation", "nz annotation", "_part annotation", "ecount annotation", "bcount annotation"]
ms.assetid: 81893638-010c-41a0-9cb3-666fe360f3e0
---
diff --git a/docs/c-runtime-library/sbcs-and-mbcs-data-types.md b/docs/c-runtime-library/sbcs-and-mbcs-data-types.md
index 71473d9c2b..c2111a54b4 100644
--- a/docs/c-runtime-library/sbcs-and-mbcs-data-types.md
+++ b/docs/c-runtime-library/sbcs-and-mbcs-data-types.md
@@ -1,7 +1,7 @@
---
title: "SBCS and MBCS Data Types"
description: "How to represent single and multibyte characters in the Microsoft C runtime."
-ms.topic: "conceptual"
+ms.topic: "how-to"
ms.date: "04/11/2018"
f1_keywords: ["_MBCS", "MBCS", "SBCS"]
helpviewer_keywords: ["SBCS and MBCS data types", "data types [C], MBCS and SBCS"]
diff --git a/docs/c-runtime-library/secure-template-overloads.md b/docs/c-runtime-library/secure-template-overloads.md
index 865c43c2ab..99f5ab2d92 100644
--- a/docs/c-runtime-library/secure-template-overloads.md
+++ b/docs/c-runtime-library/secure-template-overloads.md
@@ -2,7 +2,7 @@
title: "Secure Template Overloads"
description: "A description of Microsoft C runtime template overloads that provide security-enhanced functions."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords: ["_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES", "_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES", "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT"]
helpviewer_keywords: ["_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES", "_CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES", "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT", "secure template overloads"]
ms.assetid: 562741d0-39c0-485e-8529-73d740f29f8f
diff --git a/docs/c-runtime-library/security-features-in-the-crt.md b/docs/c-runtime-library/security-features-in-the-crt.md
index d1dc77a81a..624d6d1b9e 100644
--- a/docs/c-runtime-library/security-features-in-the-crt.md
+++ b/docs/c-runtime-library/security-features-in-the-crt.md
@@ -2,10 +2,9 @@
title: "Security Features in the CRT"
description: "An overview of secure CRT functions in the Microsoft C runtime."
ms.date: "09/29/2020"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords: ["_CRT_SECURE_NO_DEPRECATE", "_CRT_NONSTDC_NO_DEPRECATE", "_CRT_NONSTDC_NO_WARNINGS", "_CRT_SECURE_NO_WARNINGS"]
helpviewer_keywords: ["security deprecation warnings [C++]", "CRT_NONSTDC_NO_DEPRECATE", "buffers [C++], buffer overruns", "deprecation warnings (security-related), disabling", "_CRT_NONSTDC_NO_WARNINGS", "security [CRT]", "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE", "_CRT_SECURE_NO_DEPRECATE", "security-enhanced CRT", "CRT_SECURE_NO_WARNINGS", "CRT_SECURE_NO_DEPRECATE", "deprecation warnings (security-related)", "buffer overruns", "CRT_NONSTDC_NO_WARNINGS", "CRT, security enhancements", "parameters [C++], validation"]
-ms.assetid: d9568b08-9514-49cd-b3dc-2454ded195a3
---
# Security Features in the CRT
@@ -19,7 +18,7 @@ For example, the `strcpy` function can't tell if the string it copies is too lar
## Eliminating deprecation warnings
-There are several ways to eliminate deprecation warnings for the older, less secure functions. The simplest is simply to define `_CRT_SECURE_NO_WARNINGS` or use the [`warning`](../preprocessor/warning.md) pragma. Either will disable deprecation warnings, but the security issues that caused the warnings still exist. It's better to leave deprecation warnings enabled and take advantage of the new CRT security features.
+There are several ways to eliminate deprecation warnings for the older, less secure functions. The simplest is simply to define `_CRT_SECURE_NO_WARNINGS` or use the [`warning`](../preprocessor/warning.md) pragma. Either disables deprecation warnings, but the security issues that caused the warnings still exist. It's better to leave deprecation warnings enabled and take advantage of the new CRT security features.
In C++, the easiest way to eliminate the deprecation warnings is to use [Secure template overloads](./secure-template-overloads.md). The overloads eliminate deprecation warnings in many cases. They replace calls to deprecated functions with calls to secure versions of the functions. For example, consider this deprecated call to `strcpy`:
@@ -54,13 +53,15 @@ Some of the security features include:
You must pass the buffer size to any secure function that writes to a buffer. The secure versions validate that the buffer is large enough before writing to it. The validation helps avoid dangerous buffer overrun errors that could allow malicious code to execute. These functions usually return an `errno` error code and invoke the invalid parameter handler if the size of the buffer is too small. Functions that read from input buffers, such as `gets`, have secure versions that require you to specify a maximum size.
+ The debug versions of *some* security-enhanced CRT functions fill the buffer passed to them with a special character (0xFE). This fill character helps to find cases where the incorrect size was passed to the function. Unfortunately, it also reduces performance. To improve performance, use **`_CrtSetDebugFillThreshold`** to disable buffer-filling. For more information, and a list of functions that have this behavior, see [`_CrtSetDebugFillThreshold`](./reference/crtsetdebugfillthreshold.md).
+
- **Null termination**
- Some functions that left potentially non-terminated strings have secure versions, which ensure that strings are properly null-terminated.
+ Some functions that left potentially nonterminated strings have secure versions, which ensure that strings are properly null-terminated.
- **Enhanced error reporting**
- The secure functions return error codes with more error information than was available with the pre-existing functions. The secure functions and many of the pre-existing functions now set `errno` and often return an `errno` code type as well, to provide better error reporting.
+ The secure functions return error codes with more error information than was available with the preexisting functions. The secure functions and many of the preexisting functions now set `errno` and often return an `errno` code type as well, to provide better error reporting.
- **Filesystem security**
diff --git a/docs/c-runtime-library/setjmp3.md b/docs/c-runtime-library/setjmp3.md
index 05fbacbc02..d406921ec9 100644
--- a/docs/c-runtime-library/setjmp3.md
+++ b/docs/c-runtime-library/setjmp3.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: _setjmp3"
title: "_setjmp3"
-ms.date: "1/14/2021"
+description: "Learn more about: _setjmp3"
+ms.date: 1/14/2021
api_name: ["_setjmp3"]
api_location: ["msvcrt.dll", "msvcr90.dll", "msvcr110.dll", "msvcr80.dll", "msvcr110_clr0400.dll", "msvcr100.dll", "msvcr120.dll"]
api_type: ["DLLExport"]
topic_type: ["apiref"]
f1_keywords: ["setjmp3", "_setjmp3"]
helpviewer_keywords: ["_setjmp3 function", "setjmp3 function"]
-ms.assetid: 6129c2f3-8bac-4fdb-a827-44e1eebba500
---
# `_setjmp3`
@@ -43,8 +42,6 @@ Always returns 0.
Don't use this function in a C++ program. It's an intrinsic function that doesn't support C++. For more information about how to use `setjmp`, see [Using setjmp/longjmp](../cpp/using-setjmp-longjmp.md).
-## Requirements
-
## See also
[Alphabetical function reference](./reference/crt-alphabetical-function-reference.md)\
diff --git a/docs/c-runtime-library/single-byte-and-multibyte-character-sets.md b/docs/c-runtime-library/single-byte-and-multibyte-character-sets.md
index 7828ab3cc9..cbebeccee2 100644
--- a/docs/c-runtime-library/single-byte-and-multibyte-character-sets.md
+++ b/docs/c-runtime-library/single-byte-and-multibyte-character-sets.md
@@ -1,14 +1,13 @@
---
title: "Single-Byte and Multibyte Character Sets"
description: "An introduction to single and multi-byte character sets in the Microsoft runtime library."
-ms.topic: "conceptual"
-ms.date: "11/04/2016"
+ms.date: 11/04/2016
+ms.topic: "concept-article"
helpviewer_keywords: ["SBCS (single byte character set)", "MBCS [C++], about MBCS", "character sets [C++], multibyte", "character sets [C++], single byte"]
-ms.assetid: 2cbc78ea-33c0-4cfb-b0df-7ce2458431ce
---
# Single-byte and multibyte character sets
-The ASCII character set defines characters in the range 0x00 - 0x7F. There are many other character sets, primarily European, that define the characters within the range 0x00 - 0x7F identically to the ASCII character set and also define an extended character set from 0x80 - 0xFF. An 8-bit, single-byte-character set (SBCS) is sufficient to represent the ASCII character set and the character sets for many European languages. However, some non-European character sets, such as Japanese Kanji, include many more characters than can be represented in a single-byte coding scheme, and so require multibyte-character set (MBCS) encoding.
+The ASCII character set defines characters in the range 0x00 - 0x7F. There are other character sets, primarily European, that define the characters within the range 0x00 - 0x7F identically to the ASCII character set and also define an extended character set from 0x80 - 0xFF. Thus, an 8-bit, single-byte-character set (SBCS) is sufficient to represent the ASCII character set and the character sets for many European languages. However, some non-European character sets, such as Japanese Kanji, include many more characters than a single-byte coding scheme can represent, and therefore require multibyte-character set (MBCS) encoding.
> [!NOTE]
> Many Microsoft run-time library SBCS routines handle multibyte bytes, characters, and strings as appropriate. Many multibyte-character sets define the ASCII character set as a subset. In many multibyte character sets, each character in the range 0x00 - 0x7F is identical to the character that has the same value in the ASCII character set. For example, in both ASCII and MBCS character strings, the one-byte null character ('\0') has value 0x00 and indicates the terminating null character.
diff --git a/docs/c-runtime-library/stream-i-o.md b/docs/c-runtime-library/stream-i-o.md
index 180ecf2b1f..e91fcfdda2 100644
--- a/docs/c-runtime-library/stream-i-o.md
+++ b/docs/c-runtime-library/stream-i-o.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Stream I/O"
title: "Stream I/O"
-ms.date: "11/04/2016"
+description: "Learn more about: Stream I/O"
+ms.date: 11/04/2016
helpviewer_keywords: ["I/O routines, stream I/O", "I/O [CRT], stream", "stream I/O"]
-ms.assetid: dc7874d3-a91b-456a-9015-4748bb358217
---
# Stream I/O
@@ -13,61 +12,61 @@ These functions process data in different sizes and formats, from single charact
| Routine | Use |
|---|---|
-| [`clearerr`](./reference/clearerr.md), [`clearerr_s`](./reference/clearerr-s.md) | Clear error indicator for stream |
-| [`fclose`](./reference/fclose-fcloseall.md) | Close stream |
-| [`_fcloseall`](./reference/fclose-fcloseall.md) | Close all open streams except **`stdin`**, **`stdout`**, and **`stderr`** |
-| [`_fdopen`, `wfdopen`](./reference/fdopen-wfdopen.md) | Associate stream with file descriptor of open file |
-| [`feof`](./reference/feof.md) | Test for end of file on stream |
-| [`ferror`](./reference/ferror.md) | Test for error on stream |
-| [`fflush`](./reference/fflush.md) | Flush stream to buffer or storage device |
-| [`fgetc`, `fgetwc`](./reference/fgetc-fgetwc.md) | Read character from stream (function versions of **`getc`** and **`getwc`**) |
-| [`_fgetchar`, `_fgetwchar`](./reference/fgetc-fgetwc.md) | Read character from **`stdin`** (function versions of **`getchar`** and **`getwchar`**) |
-| [`fgetpos`](./reference/fgetpos.md) | Get position indicator of stream |
-| [`fgets`, `fgetws`](./reference/fgets-fgetws.md) | Read string from stream |
-| [`_fileno`](./reference/fileno.md) | Get file descriptor associated with stream |
-| [`_flushall`](./reference/flushall.md) | Flush all streams to buffer or storage device |
-| [`fopen`, `_wfopen`](./reference/fopen-wfopen.md), [`fopen_s`, `_wfopen_s`](./reference/fopen-s-wfopen-s.md) | Open stream |
-| [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](./reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md), [`fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l`](./reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md) | Write formatted data to stream |
-| [`fputc`, `fputwc`](./reference/fputc-fputwc.md) | Write a character to a stream (function versions of **`putc`** and **`putwc`**) |
-| [`_fputchar`, `_fputwchar`](./reference/fputc-fputwc.md) | Write character to **`stdout`** (function versions of **`putchar`** and **`putwchar`**) |
-| [`fputs`, `fputws`](./reference/fputs-fputws.md) | Write string to stream |
-| [`fread`](./reference/fread.md) | Read unformatted data from stream |
-| [`freopen`, `_wfreopen`](./reference/freopen-wfreopen.md), [`freopen_s`, `_wfreopen_s`](./reference/freopen-s-wfreopen-s.md) | Reassign `FILE` stream pointer to new file or device |
-| [`fscanf`, `fwscanf`](./reference/fscanf-fscanf-l-fwscanf-fwscanf-l.md), [`fscanf_s`, `_fscanf_s_l`, `fwscanf_s`, `_fwscanf_s_l`](./reference/fscanf-s-fscanf-s-l-fwscanf-s-fwscanf-s-l.md) | Read formatted data from stream |
-| [`fseek`, `_fseeki64`](./reference/fseek-fseeki64.md) | Move file position to given location |
-| [`fsetpos`](./reference/fsetpos.md) | Set position indicator of stream |
-| [`_fsopen`, `_wfsopen`](./reference/fsopen-wfsopen.md) | Open stream with file sharing |
-| [`ftell`, `_ftelli64`](./reference/ftell-ftelli64.md) | Get current file position |
-| [`fwrite`](./reference/fwrite.md) | Write unformatted data items to stream |
-| [`getc`, `getwc`](./reference/getc-getwc.md) | Read character from stream (macro versions of **`fgetc`** and **`fgetwc`**) |
-| [`getchar`, `getwchar`](./reference/getc-getwc.md) | Read character from **`stdin`** (macro versions of **`fgetchar`** and **`fgetwchar`**) |
-| [`_getmaxstdio`](./reference/getmaxstdio.md) | Returns the number of simultaneously open files permitted at the stream I/O level. |
-| [`gets_s`, `_getws_s`](./reference/gets-s-getws-s.md) | Read line from **`stdin`** |
-| [`_getw`](./reference/getw.md) | Read binary **`int`** from stream |
-| [`printf`, `_printf_l`, `wprintf`, `_wprintf_l`](./reference/printf-printf-l-wprintf-wprintf-l.md),[`printf_s`, `_printf_s_l`, `wprintf_s`, `_wprintf_s_l`](./reference/printf-s-printf-s-l-wprintf-s-wprintf-s-l.md) | Write formatted data to **`stdout`** |
-| [`putc`, `putwc`](./reference/putc-putwc.md) | Write character to a stream (macro versions of **`fputc`** and **`fputwc`**) |
-| [`putchar`, `putwchar`](./reference/putc-putwc.md) | Write character to **`stdout`** (macro versions of **`fputchar`** and **`fputwchar`**) |
-| [`puts`, `_putws`](./reference/puts-putws.md) | Write line to stream |
-| [`_putw`](./reference/putw.md) | Write binary **`int`** to stream |
-| [`rewind`](./reference/rewind.md) | Move file position to beginning of stream |
-| [`_rmtmp`](./reference/rmtmp.md) | Remove temporary files created by **`tmpfile`** |
-| [`scanf`, `_scanf_l`, `wscanf`, `_wscanf_l`](./reference/scanf-scanf-l-wscanf-wscanf-l.md),[`scanf_s`, `_scanf_s_l`, `wscanf_s`, `_wscanf_s_l`](./reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l.md) | Read formatted data from **`stdin`** |
-| [`setbuf`](./reference/setbuf.md) | Control stream buffering |
-| [`_setmaxstdio`](./reference/setmaxstdio.md) | Set a maximum for the number of simultaneously open files at the stream I/O level. |
-| [`setvbuf`](./reference/setvbuf.md) | Control stream buffering and buffer size |
-| [`_snprintf`, `_snwprintf`](./reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md), [`_snprintf_s`, `_snprintf_s_l`, `_snwprintf_s`, `_snwprintf_s_l`](./reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md) | Write formatted data of specified length to string |
-| [`_snscanf`, `_snwscanf`](./reference/snscanf-snscanf-l-snwscanf-snwscanf-l.md), [`_snscanf_s`, `_snscanf_s_l`, `_snwscanf_s`, `_snwscanf_s_l`](./reference/snscanf-s-snscanf-s-l-snwscanf-s-snwscanf-s-l.md) | Read formatted data of a specified length from the standard input stream. |
-| [`sprintf`, `swprintf`](./reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md), [`sprintf_s`, `_sprintf_s_l`, `swprintf_s`, `_swprintf_s_l`](./reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l.md) | Write formatted data to string |
-| [`sscanf`, `swscanf`](./reference/sscanf-sscanf-l-swscanf-swscanf-l.md), [`sscanf_s`, _sscanf_s_l, `swscanf_s`, `_swscanf_s_l`](./reference/sscanf-s-sscanf-s-l-swscanf-s-swscanf-s-l.md) | Read formatted data from string |
-| [`_tempnam`, `_wtempnam`](./reference/tempnam-wtempnam-tmpnam-wtmpnam.md) | Generate temporary filename in given directory |
-| [`tmpfile`](./reference/tmpfile.md), [`tmpfile_s`](./reference/tmpfile-s.md) | Create temporary file |
-| [`tmpnam`, `_wtmpnam`](./reference/tempnam-wtempnam-tmpnam-wtmpnam.md), [`tmpnam_s`, `_wtmpnam_s`](./reference/tmpnam-s-wtmpnam-s.md) | Generate temporary filename |
-| [`ungetc`, `ungetwc`](./reference/ungetc-ungetwc.md) | Push character back onto stream |
-| [`_vcprintf`, `_vcwprintf`](./reference/vcprintf-vcprintf-l-vcwprintf-vcwprintf-l.md), [`_vcprintf_s`, `_vcprintf_s_l`, `_vcwprintf_s`, `_vcwprintf_s_l`](./reference/vcprintf-s-vcprintf-s-l-vcwprintf-s-vcwprintf-s-l.md) | Write formatted data to the console. |
-| [`vfprintf`, `vfwprintf`](./reference/vfprintf-vfprintf-l-vfwprintf-vfwprintf-l.md), [`vfprintf_s`, `_vfprintf_s_l`, `vfwprintf_s`, `_vfwprintf_s_l`](./reference/vfprintf-s-vfprintf-s-l-vfwprintf-s-vfwprintf-s-l.md) | Write formatted data to stream |
-| [`vprintf`, `vwprintf`](./reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md), [`vprintf_s`, `_vprintf_s_l`, `vwprintf_s`, `_vwprintf_s_l`](./reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md) | Write formatted data to **`stdout`** |
-| [`_vsnprintf`, `_vsnwprintf`](./reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md), [`vsnprintf_s`, `_vsnprintf_s`, `_vsnprintf_s_l`, `_vsnwprintf_s`, `_vsnwprintf_s_l`](./reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md) | Write formatted data of specified length to buffer |
-| [`vsprintf`, `vswprintf`](./reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md), [`vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l`](./reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md) | Write formatted data to buffer |
+| [`clearerr`](reference/clearerr.md), [`clearerr_s`](reference/clearerr-s.md) | Clear error indicator for stream |
+| [`fclose`](reference/fclose-fcloseall.md) | Close stream |
+| [`_fcloseall`](reference/fclose-fcloseall.md) | Close all open streams except **`stdin`**, **`stdout`**, and **`stderr`** |
+| [`_fdopen`, `wfdopen`](reference/fdopen-wfdopen.md) | Associate stream with file descriptor of open file |
+| [`feof`](reference/feof.md) | Test for end of file on stream |
+| [`ferror`](reference/ferror.md) | Test for error on stream |
+| [`fflush`](reference/fflush.md) | Flush stream to buffer or storage device |
+| [`fgetc`, `fgetwc`](reference/fgetc-fgetwc.md) | Read character from stream (function versions of **`getc`** and **`getwc`**) |
+| [`_fgetchar`, `_fgetwchar`](reference/fgetc-fgetwc.md) | Read character from **`stdin`** (function versions of **`getchar`** and **`getwchar`**) |
+| [`fgetpos`](reference/fgetpos.md) | Get position indicator of stream |
+| [`fgets`, `fgetws`](reference/fgets-fgetws.md) | Read string from stream |
+| [`_fileno`](reference/fileno.md) | Get file descriptor associated with stream |
+| [`_flushall`](reference/flushall.md) | Flush all streams to buffer or storage device |
+| [`fopen`, `_wfopen`](reference/fopen-wfopen.md), [`fopen_s`, `_wfopen_s`](reference/fopen-s-wfopen-s.md) | Open stream |
+| [`fprintf`, `_fprintf_l`, `fwprintf`, `_fwprintf_l`](reference/fprintf-fprintf-l-fwprintf-fwprintf-l.md), [`fprintf_s`, `_fprintf_s_l`, `fwprintf_s`, `_fwprintf_s_l`](reference/fprintf-s-fprintf-s-l-fwprintf-s-fwprintf-s-l.md) | Write formatted data to stream |
+| [`fputc`, `fputwc`](reference/fputc-fputwc.md) | Write a character to a stream (function versions of **`putc`** and **`putwc`**) |
+| [`_fputchar`, `_fputwchar`](reference/fputc-fputwc.md) | Write character to **`stdout`** (function versions of **`putchar`** and **`putwchar`**) |
+| [`fputs`, `fputws`](reference/fputs-fputws.md) | Write string to stream |
+| [`fread`](reference/fread.md) | Read unformatted data from stream |
+| [`freopen`, `_wfreopen`](reference/freopen-wfreopen.md), [`freopen_s`, `_wfreopen_s`](reference/freopen-s-wfreopen-s.md) | Reassign `FILE` stream pointer to new file or device |
+| [`fscanf`, `fwscanf`](reference/fscanf-fscanf-l-fwscanf-fwscanf-l.md), [`fscanf_s`, `_fscanf_s_l`, `fwscanf_s`, `_fwscanf_s_l`](reference/fscanf-s-fscanf-s-l-fwscanf-s-fwscanf-s-l.md) | Read formatted data from stream |
+| [`fseek`, `_fseeki64`](reference/fseek-fseeki64.md) | Move file position to given location |
+| [`fsetpos`](reference/fsetpos.md) | Set position indicator of stream |
+| [`_fsopen`, `_wfsopen`](reference/fsopen-wfsopen.md) | Open stream with file sharing |
+| [`ftell`, `_ftelli64`](reference/ftell-ftelli64.md) | Get current file position |
+| [`fwrite`](reference/fwrite.md) | Write unformatted data items to stream |
+| [`getc`, `getwc`](reference/getc-getwc.md) | Read character from stream (macro versions of **`fgetc`** and **`fgetwc`**) |
+| [`getchar`, `getwchar`](reference/getc-getwc.md) | Read character from **`stdin`** (macro versions of **`fgetchar`** and **`fgetwchar`**) |
+| [`_getmaxstdio`](reference/getmaxstdio.md) | Returns the number of simultaneously open files permitted at the stream I/O level. |
+| [`gets_s`, `_getws_s`](reference/gets-s-getws-s.md) | Read line from **`stdin`** |
+| [`_getw`](reference/getw.md) | Read binary **`int`** from stream |
+| [`printf`, `_printf_l`, `wprintf`, `_wprintf_l`](reference/printf-printf-l-wprintf-wprintf-l.md), [`printf_s`, `_printf_s_l`, `wprintf_s`, `_wprintf_s_l`](reference/printf-s-printf-s-l-wprintf-s-wprintf-s-l.md) | Write formatted data to **`stdout`** |
+| [`putc`, `putwc`](reference/putc-putwc.md) | Write character to a stream (macro versions of **`fputc`** and **`fputwc`**) |
+| [`putchar`, `putwchar`](reference/putc-putwc.md) | Write character to **`stdout`** (macro versions of **`fputchar`** and **`fputwchar`**) |
+| [`puts`, `_putws`](reference/puts-putws.md) | Write line to stream |
+| [`_putw`](reference/putw.md) | Write binary **`int`** to stream |
+| [`rewind`](reference/rewind.md) | Move file position to beginning of stream |
+| [`_rmtmp`](reference/rmtmp.md) | Remove temporary files created by **`tmpfile`** |
+| [`scanf`, `_scanf_l`, `wscanf`, `_wscanf_l`](reference/scanf-scanf-l-wscanf-wscanf-l.md), [`scanf_s`, `_scanf_s_l`, `wscanf_s`, `_wscanf_s_l`](reference/scanf-s-scanf-s-l-wscanf-s-wscanf-s-l.md) | Read formatted data from **`stdin`** |
+| [`setbuf`](reference/setbuf.md) | Control stream buffering |
+| [`_setmaxstdio`](reference/setmaxstdio.md) | Set a maximum for the number of simultaneously open files at the stream I/O level. |
+| [`setvbuf`](reference/setvbuf.md) | Control stream buffering and buffer size |
+| [`_snprintf`, `_snwprintf`](reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l.md), [`_snprintf_s`, `_snprintf_s_l`, `_snwprintf_s`, `_snwprintf_s_l`](reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l.md) | Write formatted data of specified length to string |
+| [`_snscanf`, `_snwscanf`](reference/snscanf-snscanf-l-snwscanf-snwscanf-l.md), [`_snscanf_s`, `_snscanf_s_l`, `_snwscanf_s`, `_snwscanf_s_l`](reference/snscanf-s-snscanf-s-l-snwscanf-s-snwscanf-s-l.md) | Read formatted data of a specified length from the standard input stream. |
+| [`sprintf`, `swprintf`](reference/sprintf-sprintf-l-swprintf-swprintf-l-swprintf-l.md), [`sprintf_s`, `_sprintf_s_l`, `swprintf_s`, `_swprintf_s_l`](reference/sprintf-s-sprintf-s-l-swprintf-s-swprintf-s-l.md) | Write formatted data to string |
+| [`sscanf`, `swscanf`](reference/sscanf-sscanf-l-swscanf-swscanf-l.md), [`sscanf_s`, _sscanf_s_l, `swscanf_s`, `_swscanf_s_l`](reference/sscanf-s-sscanf-s-l-swscanf-s-swscanf-s-l.md) | Read formatted data from string |
+| [`_tempnam`, `_wtempnam`](reference/tempnam-wtempnam-tmpnam-wtmpnam.md) | Generate temporary filename in given directory |
+| [`tmpfile`](reference/tmpfile.md), [`tmpfile_s`](reference/tmpfile-s.md) | Create temporary file |
+| [`tmpnam`, `_wtmpnam`](reference/tempnam-wtempnam-tmpnam-wtmpnam.md), [`tmpnam_s`, `_wtmpnam_s`](reference/tmpnam-s-wtmpnam-s.md) | Generate temporary filename |
+| [`ungetc`, `ungetwc`](reference/ungetc-ungetwc.md) | Push character back onto stream |
+| [`_vcprintf`, `_vcwprintf`](reference/vcprintf-vcprintf-l-vcwprintf-vcwprintf-l.md), [`_vcprintf_s`, `_vcprintf_s_l`, `_vcwprintf_s`, `_vcwprintf_s_l`](reference/vcprintf-s-vcprintf-s-l-vcwprintf-s-vcwprintf-s-l.md) | Write formatted data to the console. |
+| [`vfprintf`, `vfwprintf`](reference/vfprintf-vfprintf-l-vfwprintf-vfwprintf-l.md), [`vfprintf_s`, `_vfprintf_s_l`, `vfwprintf_s`, `_vfwprintf_s_l`](reference/vfprintf-s-vfprintf-s-l-vfwprintf-s-vfwprintf-s-l.md) | Write formatted data to stream |
+| [`vprintf`, `vwprintf`](reference/vprintf-vprintf-l-vwprintf-vwprintf-l.md), [`vprintf_s`, `_vprintf_s_l`, `vwprintf_s`, `_vwprintf_s_l`](reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md) | Write formatted data to **`stdout`** |
+| [`_vsnprintf`, `_vsnwprintf`](reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md), [`vsnprintf_s`, `_vsnprintf_s`, `_vsnprintf_s_l`, `_vsnwprintf_s`, `_vsnwprintf_s_l`](reference/vsnprintf-s-vsnprintf-s-vsnprintf-s-l-vsnwprintf-s-vsnwprintf-s-l.md) | Write formatted data of specified length to buffer |
+| [`vsprintf`, `vswprintf`](reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md), [`vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l`](reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md) | Write formatted data to buffer |
When a program begins execution, the startup code automatically opens several streams: standard input (pointed to by **`stdin`**), standard output (pointed to by **`stdout`**), and standard error (pointed to by **`stderr`**). These streams are directed to the console (keyboard and screen) by default. Use **`freopen`** to redirect **`stdin`**, **`stdout`**, or **`stderr`** to a disk file or a device.
@@ -76,16 +75,15 @@ Files opened using the stream routines are buffered by default. The **`stdout`**
There are two ways to commit buffer contents to disk:
- Link with the file COMMODE.OBJ to set a global commit flag. The default setting of the global flag is **`n`**, for "no-commit."
-
- Set the mode flag to **`c`** with **`fopen`** or **`_fdopen`**.
Any file specifically opened with either the **`c`** or the **`n`** flag behaves according to the flag, regardless of the state of the global commit/no-commit flag.
-If your program doesn't explicitly close a stream, the stream is automatically closed when the program terminates. However, you should close a stream when your program finishes with it, as the number of streams that can be open at one time is limited. See [`_setmaxstdio`](./reference/setmaxstdio.md) for information on this limit.
+If your program doesn't explicitly close a stream, the stream is automatically closed when the program terminates. However, you should close a stream when your program finishes with it, as the number of streams that can be open at one time is limited. See [`_setmaxstdio`](reference/setmaxstdio.md) for information on this limit.
Input can follow output directly only with an intervening call to **`fflush`** or to a file-positioning function (**`fseek`**, **`fsetpos`**, or **`rewind`**). Input can be followed by output without an intervening call to a file-positioning function, if the input operation encounters the end of the file.
## See also
-[Input and output](./input-and-output.md)\
-[Universal C runtime routines by category](./run-time-routines-by-category.md)
+[Input and output](input-and-output.md)\
+[Universal C runtime routines by category](run-time-routines-by-category.md)
diff --git a/docs/c-runtime-library/text-and-binary-streams.md b/docs/c-runtime-library/text-and-binary-streams.md
index 5150344ec6..6faf1178a3 100644
--- a/docs/c-runtime-library/text-and-binary-streams.md
+++ b/docs/c-runtime-library/text-and-binary-streams.md
@@ -2,7 +2,7 @@
title: "Text and Binary Streams"
description: "A description of text and binary streams in the Microsoft C runtime library."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["binary streams", "text streams"]
ms.assetid: 57035e4a-955d-4e04-a560-fcf67ce68b4e
---
diff --git a/docs/c-runtime-library/tgmath.md b/docs/c-runtime-library/tgmath.md
index dff2a61f16..87240aaa4d 100644
--- a/docs/c-runtime-library/tgmath.md
+++ b/docs/c-runtime-library/tgmath.md
@@ -1,7 +1,7 @@
---
title: "Type-generic math"
description: "Describes macros in that make it easier to write C code that calls the correct math function, based on argument type."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "6/28/2021"
helpviewer_keywords: ["CRT tgmath.h"]
---
diff --git a/docs/c-runtime-library/time-management.md b/docs/c-runtime-library/time-management.md
index 784c4b009a..619798b3cc 100644
--- a/docs/c-runtime-library/time-management.md
+++ b/docs/c-runtime-library/time-management.md
@@ -1,42 +1,42 @@
---
-description: "Learn more about: Time Management"
title: "Time Management"
-ms.date: "11/04/2016"
+description: "Learn more about: Time Management"
+ms.date: 11/04/2016
helpviewer_keywords: ["dates, run-time library members", "time, time management", "date functions", "time functions"]
---
# Time management
Use these functions to get the current time and convert, adjust, and store it as necessary. The current time is the system time.
-The **`_ftime`** and **`localtime`** routines use the **`TZ`** environment variable. If **`TZ`** isn't set, the run-time library attempts to use the time-zone information specified by the operating system. If this information is unavailable, these functions use the default value of PST8PDT. For more information on **`TZ`**, see [`_tzset`](./reference/tzset.md); also see [`_daylight`, `timezone`, and `_tzname`](./daylight-dstbias-timezone-and-tzname.md).
+The **`_ftime`** and **`localtime`** routines use the **`TZ`** environment variable. If **`TZ`** isn't set, the run-time library attempts to use the time-zone information specified by the operating system. If this information is unavailable, these functions use the default value of PST8PDT. For more information on **`TZ`**, see [`_tzset`](reference/tzset.md); also see [`_daylight`, `timezone`, and `_tzname`](daylight-dstbias-timezone-and-tzname.md).
### Time routines
| Function | Use |
|---|---|
-| [`asctime`, `_wasctime`](./reference/asctime-wasctime.md), [`asctime_s`, `_wasctime_s`](./reference/asctime-s-wasctime-s.md) | Convert time from type **`struct tm`** to character string. The versions of these functions with the **`_s`** suffix are more secure. |
-| [`clock`](./reference/clock.md) | Return elapsed wall-clock time for process. |
-| [`ctime`, `_ctime32`, `_ctime64`, `_wctime`, `_wctime32`, `_wctime64`](./reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md), [`_ctime_s`, `_ctime32_s`, `_ctime64_s`, `_wctime_s`, `_wctime32_s`, `_wctime64_s`](./reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md) | Convert time from type **`time_t`**, **`__time32_t`** or **`__time64_t`** to character string. The versions of these functions with the **`_s`** suffix are more secure. |
-| [`difftime`, `_difftime32`, `_difftime64`](./reference/difftime-difftime32-difftime64.md) | Compute difference between two times. |
-| [`_ftime`, `_ftime32`, `_ftime64`](./reference/ftime-ftime32-ftime64.md),[`_ftime_s`, `_ftime32_s`, _ftime64_s](./reference/ftime-s-ftime32-s-ftime64-s.md) | Store current system time in variable of type **`struct _timeb`** or type **`struct __timeb64`** The versions of these functions with the **`_s`** suffix are more secure. |
-| [`_futime`, `_futime32`, `_futime64`](./reference/futime-futime32-futime64.md) | Set modification time on open file |
-| [`gmtime`, `_gmtime32`, `_gmtime64`](./reference/gmtime-gmtime32-gmtime64.md), [`gmtime_s`, `_gmtime32_s`, `_gmtime64_s`](./reference/gmtime-s-gmtime32-s-gmtime64-s.md) | Convert time from type **`time_t`** to **`struct tm`** or from type **`__time64_t`** to **`struct tm`**. The versions of these functions with the **`_s`** suffix are more secure. |
-| [`localtime`, `_localtime32`, `_localtime64`](./reference/localtime-localtime32-localtime64.md), [`localtime_s`, `_localtime32_s`, `_localtime64_s`](./reference/localtime-s-localtime32-s-localtime64-s.md) | Convert time from type **`time_t`** to **`struct tm`** or from type **`__time64_t`** to **`struct tm`** with local correction. The versions of these functions with the **`_s`** suffix are more secure. |
-| [`_mkgmtime`, `_mkgmtime32`, `_mkgmtime64`](./reference/mkgmtime-mkgmtime32-mkgmtime64.md) | Convert time to calendar value in Greenwich Mean Time. |
-| [`mktime`, `_mktime32`, `_mktime64`](./reference/mktime-mktime32-mktime64.md) | Convert time to calendar value. |
-| [`_strdate`, `_wstrdate`](./reference/strdate-wstrdate.md), [`_strdate_s`, `_wstrdate_s`](./reference/strdate-s-wstrdate-s.md) | Return current system date as string. The versions of these functions with the **`_s`** suffix are more secure. |
-| [`strftime`, `wcsftime`, `_strftime_l`, `_wcsftime_l`](./reference/strftime-wcsftime-strftime-l-wcsftime-l.md) | Format date-and-time string for international use. |
-| [`_strtime`, `_wstrtime`](./reference/strtime-wstrtime.md), [`_strtime_s`, `_wstrtime_s`](./reference/strtime-s-wstrtime-s.md) | Return current system time as string. The versions of these functions with the **`_s`** suffix are more secure. |
-| [`time`, `_time32`, `_time64`](./reference/time-time32-time64.md) | Get current system time as type **`time_t`**, **`__time32_t`** or as type **`__time64_t`**. |
-| [`_tzset`](./reference/tzset.md) | Set external time variables from environment time variable **`TZ`**. |
-| [`_utime`, `_utime32`, `_utime64`, `_wutime`, `_wutime32`, `_wutime64`](./reference/utime-utime32-utime64-wutime-wutime32-wutime64.md) | Set modification time for specified file using either current time or time value stored in structure. |
+| [`asctime`, `_wasctime`](reference/asctime-wasctime.md), [`asctime_s`, `_wasctime_s`](reference/asctime-s-wasctime-s.md) | Convert time from type **`struct tm`** to character string. The versions of these functions with the **`_s`** suffix are more secure. |
+| [`clock`](reference/clock.md) | Return elapsed wall-clock time for process. |
+| [`ctime`, `_ctime32`, `_ctime64`, `_wctime`, `_wctime32`, `_wctime64`](reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md), [`_ctime_s`, `_ctime32_s`, `_ctime64_s`, `_wctime_s`, `_wctime32_s`, `_wctime64_s`](reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md) | Convert time from type **`time_t`**, **`__time32_t`** or **`__time64_t`** to character string. The versions of these functions with the **`_s`** suffix are more secure. |
+| [`difftime`, `_difftime32`, `_difftime64`](reference/difftime-difftime32-difftime64.md) | Compute difference between two times. |
+| [`_ftime`, `_ftime32`, `_ftime64`](reference/ftime-ftime32-ftime64.md), [`_ftime_s`, `_ftime32_s`, _ftime64_s](reference/ftime-s-ftime32-s-ftime64-s.md) | Store current system time in variable of type **`struct _timeb`** or type **`struct __timeb64`** The versions of these functions with the **`_s`** suffix are more secure. |
+| [`_futime`, `_futime32`, `_futime64`](reference/futime-futime32-futime64.md) | Set modification time on open file |
+| [`gmtime`, `_gmtime32`, `_gmtime64`](reference/gmtime-gmtime32-gmtime64.md), [`gmtime_s`, `_gmtime32_s`, `_gmtime64_s`](reference/gmtime-s-gmtime32-s-gmtime64-s.md) | Convert time from type **`time_t`** to **`struct tm`** or from type **`__time64_t`** to **`struct tm`**. The versions of these functions with the **`_s`** suffix are more secure. |
+| [`localtime`, `_localtime32`, `_localtime64`](reference/localtime-localtime32-localtime64.md), [`localtime_s`, `_localtime32_s`, `_localtime64_s`](reference/localtime-s-localtime32-s-localtime64-s.md) | Convert time from type **`time_t`** to **`struct tm`** or from type **`__time64_t`** to **`struct tm`** with local correction. The versions of these functions with the **`_s`** suffix are more secure. |
+| [`_mkgmtime`, `_mkgmtime32`, `_mkgmtime64`](reference/mkgmtime-mkgmtime32-mkgmtime64.md) | Convert time to calendar value in Greenwich Mean Time. |
+| [`mktime`, `_mktime32`, `_mktime64`](reference/mktime-mktime32-mktime64.md) | Convert time to calendar value. |
+| [`_strdate`, `_wstrdate`](reference/strdate-wstrdate.md), [`_strdate_s`, `_wstrdate_s`](reference/strdate-s-wstrdate-s.md) | Return current system date as string. The versions of these functions with the **`_s`** suffix are more secure. |
+| [`strftime`, `wcsftime`, `_strftime_l`, `_wcsftime_l`](reference/strftime-wcsftime-strftime-l-wcsftime-l.md) | Format date-and-time string for international use. |
+| [`_strtime`, `_wstrtime`](reference/strtime-wstrtime.md), [`_strtime_s`, `_wstrtime_s`](reference/strtime-s-wstrtime-s.md) | Return current system time as string. The versions of these functions with the **`_s`** suffix are more secure. |
+| [`time`, `_time32`, `_time64`](reference/time-time32-time64.md) | Get current system time as type **`time_t`**, **`__time32_t`** or as type **`__time64_t`**. |
+| [`_tzset`](reference/tzset.md) | Set external time variables from environment time variable **`TZ`**. |
+| [`_utime`, `_utime32`, `_utime64`, `_wutime`, `_wutime32`, `_wutime64`](reference/utime-utime32-utime64-wutime-wutime32-wutime64.md) | Set modification time for specified file using either current time or time value stored in structure. |
> [!NOTE]
> In all versions of Microsoft C/C++ except Microsoft C/C++ version 7.0, and in all versions of Visual C++, the time function returns the current time as the number of seconds elapsed since midnight on January 1, 1970. In Microsoft C/C++ version 7.0, **`time`** returned the current time as the number of seconds elapsed since midnight on December 31, 1899.
> [!NOTE]
-> In versions of Visual C++ and Microsoft C/C++ before Visual Studio 2005, **`time_t`** was a **`long int`** (32 bits) and hence could not be used for dates past 3:14:07 January 19, 2038, UTC. **`time_t`** is now equivalent to **`__time64_t`** by default, but defining `_USE_32BIT_TIME_T` changes **`time_t`** to **`__time32_t`** and forces many time functions to call versions that take the 32-bit **`time_t`**. For more information, see [Standard types](./standard-types.md) and comments in the documentation for the individual time functions.
+> In versions of Visual C++ and Microsoft C/C++ before Visual Studio 2005, **`time_t`** was a **`long int`** (32 bits) and hence could not be used for dates past 3:14:07 January 19, 2038, UTC. **`time_t`** is now equivalent to **`__time64_t`** by default, but defining `_USE_32BIT_TIME_T` changes **`time_t`** to **`__time32_t`** and forces many time functions to call versions that take the 32-bit **`time_t`**. For more information, see [Standard types](standard-types.md) and comments in the documentation for the individual time functions.
## See also
-[Universal C runtime routines by category](./run-time-routines-by-category.md)
+[Universal C runtime routines by category](run-time-routines-by-category.md)
diff --git a/docs/c-runtime-library/toc.yml b/docs/c-runtime-library/toc.yml
index 4eb9c708b3..926d9dd23f 100644
--- a/docs/c-runtime-library/toc.yml
+++ b/docs/c-runtime-library/toc.yml
@@ -75,7 +75,7 @@ items:
- name: Global state in the CRT
href: ../c-runtime-library/global-state.md
- name: Type-generic math
- href: ../c-runtime-library/tgmath.md
+ href: ../c-runtime-library/tgmath.md
- name: C runtime (CRT) and C++ Standard Library (STL) .lib files
href: ../c-runtime-library/crt-library-features.md
- name: Universal C runtime routines by category
diff --git a/docs/c-runtime-library/unicode-stream-i-o-in-text-and-binary-modes.md b/docs/c-runtime-library/unicode-stream-i-o-in-text-and-binary-modes.md
index c6c1034d8e..2a38a3ec73 100644
--- a/docs/c-runtime-library/unicode-stream-i-o-in-text-and-binary-modes.md
+++ b/docs/c-runtime-library/unicode-stream-i-o-in-text-and-binary-modes.md
@@ -1,7 +1,7 @@
---
title: "Unicode Stream I/O in Text and Binary Modes"
description: "A description of character conversions with Unicode stream I/O."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "11/04/2016"
helpviewer_keywords: ["stream I/O routines", "I/O [CRT], unicode stream", "Unicode, stream I/O routines", "Unicode stream I/O"]
ms.assetid: 68be0c3e-a9e6-4fd5-b34a-1b5207f0e7d6
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 9fbde6648e..b78b180c2a 100644
--- a/docs/c-runtime-library/unicode-the-wide-character-set.md
+++ b/docs/c-runtime-library/unicode-the-wide-character-set.md
@@ -1,7 +1,7 @@
---
title: "Unicode: The Wide-Character Set"
description: "An introduction to the Unicode wide character set in the Microsoft C runtime."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "11/04/2016"
helpviewer_keywords: ["Unicode [C++], wide character set", "wide characters [C++], Unicode"]
ms.assetid: b6a05a21-59a5-4d30-8c85-2dbe185f7a74
diff --git a/docs/c-runtime-library/unix.md b/docs/c-runtime-library/unix.md
index 5d63b80fd2..e8aec36694 100644
--- a/docs/c-runtime-library/unix.md
+++ b/docs/c-runtime-library/unix.md
@@ -2,7 +2,7 @@
title: "UNIX"
description: "Guidelines for porting your program to Unix."
ms.date: "11/04/2016"
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords: ["unix"]
helpviewer_keywords: ["UNIX", "POSIX compatibility", "POSIX file names", "UNIX, compatibility"]
ms.assetid: 40792414-7a5b-415d-bfa8-2bfb1ebb3731
diff --git a/docs/c-runtime-library/using-generic-text-mappings.md b/docs/c-runtime-library/using-generic-text-mappings.md
index 357e8f4a54..388ffd3397 100644
--- a/docs/c-runtime-library/using-generic-text-mappings.md
+++ b/docs/c-runtime-library/using-generic-text-mappings.md
@@ -1,7 +1,7 @@
---
title: "Using Generic-Text Mappings"
description: "An introduction to Microsoft-specific mappings for data types, routines, and other objects in the C runtime."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "11/04/2016"
f1_keywords: ["_UNICODE"]
helpviewer_keywords: ["_TXCHAR type", "TINT type", "_TCHAR type", "TSCHAR type", "TEXT type", "TCHAR type", "TCHAR.H data types, mappings defined in", "generic-text data types", "_TINT type", "TUCHAR type", "_UNICODE constant", "TXCHAR type", "generic-text mappings", "_TSCHAR type", "T type", "mappings, generic-text", "_TUCHAR type", "MBCS data type", "_MBCS data type", "_TEXT type", "UNICODE constant", "_T type"]
diff --git a/docs/c-runtime-library/using-tchar-h-data-types-with-mbcs.md b/docs/c-runtime-library/using-tchar-h-data-types-with-mbcs.md
index 2a18a51678..9a6ab1ceff 100644
--- a/docs/c-runtime-library/using-tchar-h-data-types-with-mbcs.md
+++ b/docs/c-runtime-library/using-tchar-h-data-types-with-mbcs.md
@@ -1,7 +1,7 @@
---
title: "Using TCHAR.H Data Types with _MBCS"
description: "An overview of how Microsoft C runtime text routines are mapped when you use TCHAR.H data types with the multibyte constant _MBCS."
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.date: "11/04/2016"
helpviewer_keywords: ["TCHAR.H data types", "MBCS data type", "_MBCS data type"]
ms.assetid: 48f471e7-9d2b-4a39-b841-16a0e15c0a18
diff --git a/docs/c-runtime-library/vprintf-functions.md b/docs/c-runtime-library/vprintf-functions.md
index bc1cb41d24..6119ea7428 100644
--- a/docs/c-runtime-library/vprintf-functions.md
+++ b/docs/c-runtime-library/vprintf-functions.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: vprintf Functions"
title: "vprintf Functions"
+description: "Learn more about: vprintf Functions"
ms.date: "11/04/2016"
helpviewer_keywords: ["vprintf functions", "formatted text [C++]"]
-ms.assetid: 02ac7c51-eab1-4bf0-bf4c-77065e3fa744
---
# `vprintf` functions
@@ -17,7 +16,7 @@ Each of the `vprintf` functions takes a pointer to an argument list, then format
[`_vprintf_p`, `_vprintf_p_l`, `_vwprintf_p`, `_vwprintf_p_l`](./reference/vprintf-p-vprintf-p-l-vwprintf-p-vwprintf-p-l.md)\
[`vprintf_s`, `_vprintf_s_l`, `vwprintf_s`, `_vwprintf_s_l`](./reference/vprintf-s-vprintf-s-l-vwprintf-s-vwprintf-s-l.md)\
[`_vscprintf`, `_vscprintf_l`, `_vscwprintf`, `_vscwprintf_l`](./reference/vscprintf-vscprintf-l-vscwprintf-vscwprintf-l.md)\
-[`_vsnprintf`, `_vsnwprintf`](./reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md)
+[`_vsnprintf`, `_vsnwprintf`](./reference/vsnprintf-vsnprintf-vsnprintf-l-vsnwprintf-vsnwprintf-l.md)\
[`vsprintf`, `vswprintf`](./reference/vsprintf-vsprintf-l-vswprintf-vswprintf-l-vswprintf-l.md)\
[`_vsprintf_p`, `_vsprintf_p_l`, `_vswprintf_p`, `_vswprintf_p_l`](./reference/vsprintf-p-vsprintf-p-l-vswprintf-p-vswprintf-p-l.md)\
[`vsprintf_s`, `_vsprintf_s_l`, `vswprintf_s`, `_vswprintf_s_l`](./reference/vsprintf-s-vsprintf-s-l-vswprintf-s-vswprintf-s-l.md)
diff --git a/docs/cloud/cloud-and-web-programming-in-visual-cpp.md b/docs/cloud/cloud-and-web-programming-in-visual-cpp.md
index 8ae34ccfbc..f2c9b0519b 100644
--- a/docs/cloud/cloud-and-web-programming-in-visual-cpp.md
+++ b/docs/cloud/cloud-and-web-programming-in-visual-cpp.md
@@ -1,8 +1,7 @@
---
-description: "Learn more about: Cloud and Web Programming in Visual C++"
title: "Cloud and Web Programming in Visual C++"
+description: "Learn more about: Cloud and Web Programming in Visual C++"
ms.date: "05/14/2019"
-ms.assetid: b63611f1-9723-44d0-ba7f-c3ebef341313
ms.topic: "overview"
ms.custom: intro-overview
---
@@ -43,7 +42,7 @@ In C++, you have several options for connecting to the web and the cloud.
- [Windows::Web::Http::HttpClient](/uwp/api/windows.web.http.httpclient)
- A Windows Runtime HTTP client class modeled on the .NET Framework class of the same name in the System.Web namespace. `HttpClient` fully supports asynchronous upload and download over HTTP, and pipeline filters that enable the insertion of custom HTTP handlers into the pipeline. The Windows SDK includes sample filters for metered networks, OAuth authentication, and more. For apps that target only Universal Windows Platform, we recommend that you use the `Windows::Web:HttpClient` class.
+ A Windows Runtime HTTP client class modeled on the .NET Framework class of the same name in the System.Web namespace. `HttpClient` fully supports asynchronous upload and download over HTTP, and pipeline filters that enable the insertion of custom HTTP handlers into the pipeline. The Windows SDK includes sample filters for metered networks, OAuth authentication, and more. For apps that target only Universal Windows Platform, we recommend that you use the `Windows::Web::Http::HttpClient` class.
- [IXMLHTTPRequest2 interface](/windows/win32/api/msxml6/nn-msxml6-ixmlhttprequest2)
@@ -55,6 +54,6 @@ In C++, you have several options for connecting to the web and the cloud.
## See also
-[C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md)
-[Microsoft Azure C and C++ Developer Center](https://azure.microsoft.com/develop/cpp/)
+[C++ in Visual Studio](../overview/visual-cpp-in-visual-studio.md)\
+[Microsoft Azure C and C++ Developer Center](https://azure.microsoft.com/develop/cpp/)\
[Networks and web services (UWP)](/windows/uwp/networking/)
diff --git a/docs/code-quality/annotating-function-behavior.md b/docs/code-quality/annotating-function-behavior.md
index 4458f342c2..98a9bf99f6 100644
--- a/docs/code-quality/annotating-function-behavior.md
+++ b/docs/code-quality/annotating-function-behavior.md
@@ -2,7 +2,7 @@
description: "Learn more about: Annotating function behavior"
title: Annotating function behavior
ms.date: 11/04/2016
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords:
- "_On_failure_"
- "_Return_type_success_"
diff --git a/docs/code-quality/annotating-function-parameters-and-return-values.md b/docs/code-quality/annotating-function-parameters-and-return-values.md
index bd9ffdd453..5c0a0531f0 100644
--- a/docs/code-quality/annotating-function-parameters-and-return-values.md
+++ b/docs/code-quality/annotating-function-parameters-and-return-values.md
@@ -2,7 +2,7 @@
title: Annotating function parameters and return values
description: "Reference guide to function parameter and return value annotations."
ms.date: 10/15/2019
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords:
- "_Outptr_opt_result_bytebuffer_to_"
- "_Inout_updates_all_opt_"
diff --git a/docs/code-quality/annotating-locking-behavior.md b/docs/code-quality/annotating-locking-behavior.md
index a362074bad..99bb3bf25e 100644
--- a/docs/code-quality/annotating-locking-behavior.md
+++ b/docs/code-quality/annotating-locking-behavior.md
@@ -2,7 +2,7 @@
description: "Learn more about: Annotating Locking Behavior"
title: Annotating Locking Behavior
ms.date: 08/24/2022
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords:
- "_Releases_nonreentrant_lock_"
- "_Lock_kind_mutex_"
diff --git a/docs/code-quality/annotating-structs-and-classes.md b/docs/code-quality/annotating-structs-and-classes.md
index 32669912be..fdc83bc210 100644
--- a/docs/code-quality/annotating-structs-and-classes.md
+++ b/docs/code-quality/annotating-structs-and-classes.md
@@ -1,8 +1,8 @@
---
-description: "Learn more about: Annotating Structs and Classes"
title: Annotating Structs and Classes
+description: "Learn more about: Annotating Structs and Classes"
ms.date: 06/28/2019
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords:
- "_Field_size_bytes_part_"
- "_Field_size_bytes_full_opt_"
@@ -19,7 +19,6 @@ f1_keywords:
- "_Field_size_full_"
- "_Field_size_full_opt_"
- "_Field_z_"
-ms.assetid: b8278a4a-c86e-4845-aa2a-70da21a1dd52
---
# Annotating Structs and Classes
@@ -52,13 +51,11 @@ You can annotate struct and class members by using annotations that act like inv
Applies to struct or class declaration. Indicates that a valid object of that type may be larger than the declared type, with the number of bytes being specified by `size`. For example:
```cpp
-
typedef _Struct_size_bytes_(nSize)
struct MyStruct {
size_t nSize;
...
};
-
```
The buffer size in bytes of a parameter `pM` of type `MyStruct *` is then taken to be:
diff --git a/docs/code-quality/best-practices-and-examples-sal.md b/docs/code-quality/best-practices-and-examples-sal.md
index 320b8100d3..aa2b6e986b 100644
--- a/docs/code-quality/best-practices-and-examples-sal.md
+++ b/docs/code-quality/best-practices-and-examples-sal.md
@@ -2,7 +2,7 @@
description: "Learn more about: Best practices and examples (SAL)"
title: Best practices and examples (SAL)
ms.date: 03/30/2023
-ms.topic: "conceptual"
+ms.topic: "best-practice"
---
# Best practices and examples (SAL)
diff --git a/docs/code-quality/build-reliable-secure-programs.md b/docs/code-quality/build-reliable-secure-programs.md
index 13341b3094..94181eb5c9 100644
--- a/docs/code-quality/build-reliable-secure-programs.md
+++ b/docs/code-quality/build-reliable-secure-programs.md
@@ -1,8 +1,8 @@
---
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"
+ms.date: 04/25/2025
+ms.topic: "concept-article"
---
# Build reliable and secure C++ programs
@@ -182,7 +182,7 @@ Remove the now-invalidated secrets from your source code, and replace them with
**Azure DevOps (AzDO)**
-AzDO users can scan their code through GitHub Advanced Security for Azure DevOps (GHAzDO). GHAzDO also allows users to prevent secret exposures by enabling Push Protection on their repositories, catching potential exposures before they're ever leaked. For more information on how to detect hardcoded secrets in code in Azure DevOps, see *Secret Scanning for Github Advanced Security for Azure DevOps* in each of the following links:
+AzDO users can scan their code through GitHub Advanced Security for Azure DevOps (GHAzDO). GHAzDO also allows users to prevent secret exposures by enabling Push Protection on their repositories, catching potential exposures before they're ever leaked. For more information on how to detect hardcoded secrets in code in Azure DevOps, see *Secret Scanning for GitHub Advanced Security for Azure DevOps* in each of the following links:
- [GitHub advanced security for Azure DevOps](https://azure.microsoft.com/products/devops/github-advanced-security)
- [Secret Scanning for GitHub Advanced Security for Azure DevOps](/azure/devops/repos/security/github-advanced-security-secret-scanning)
@@ -205,11 +205,11 @@ GitHub provides known patterns of secrets for partners and users that can be con
**Additional resources**
-- [Credential Scanning | Microsoft Code With Engineering Playbook](https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/credential_scanning/).
-- [detect-secrets: Credential scanning tool | GitHub](https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets/) - an aptly named module for detecting secrets within a code base.
-- [Running detect-secrets in Azure Pipelines](https://microsoft.github.io/code-with-engineering-playbook/continuous-integration/dev-sec-ops/secret-management/recipes/detect-secrets-ado/).
+- [Credential Scanning | Microsoft Code With Engineering Playbook](https://microsoft.github.io/code-with-engineering-playbook/CI-CD/dev-sec-ops/secrets-management/credential_scanning/).
+- [detect-secrets: Credential scanning tool | GitHub](https://microsoft.github.io/code-with-engineering-playbook/CI-CD/dev-sec-ops/secrets-management/recipes/detect-secrets/) - an aptly named module for detecting secrets within a code base.
+- [Running detect-secrets in Azure Pipelines](https://microsoft.github.io/code-with-engineering-playbook/CI-CD/dev-sec-ops/secrets-management/recipes/detect-secrets-ado/).
- [Git-secrets | GitHub awslabs](https://github.com/awslabs/git-secrets) - prevents you from committing passwords and other sensitive information to a git repository.
-- [Secrets Management | Microsoft Code with Engineering Playbook](https://microsoft.github.io/code-with-engineering-playbook/continuous-delivery/secrets-management/) - provides general guidelines on how secrets should be managed.
+- [Secrets Management | Microsoft Code with Engineering Playbook](https://microsoft.github.io/code-with-engineering-playbook/CI-CD/dev-sec-ops/secrets-management/) - provides general guidelines on how secrets should be managed.
## 2.5 Run with language- and OS-provided checks and protection
@@ -395,7 +395,7 @@ When using both sanitizers such as [Address Sanitizer (ASan)](../sanitizers/asan
**Azure and GitHub CI/CD**
-Modify your build(s) to support continuous creation of executables that use LibFuzzer or AFL++. You can add extra computing resources required for fuzzing at services like OSS-Fuzz or OneFuzz.
+Modify your build(s) to support continuous creation of executables that use LibFuzzer or AFL++. You can add extra computing resources required for fuzzing at services like OSS-Fuzz.
## 2.10 Web Application Scanning
diff --git a/docs/code-quality/c1250.md b/docs/code-quality/c1250.md
index 26582cfe00..593bf2fe4d 100644
--- a/docs/code-quality/c1250.md
+++ b/docs/code-quality/c1250.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1250"
description: "Learn more about: Fatal error C1250"
-title: Fatal error C1250
ms.date: 10/04/2022
f1_keywords: ["C1250", "FATALERROR_UnableToLoadPlugin"]
helpviewer_keywords: ["C1250"]
-ms.assetid: 3f2385d7-e0d6-4574-8cea-342e82d0aea4
---
# Fatal error C1250
> Unable to load plug-in '*plugin-name*'.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the plugin, not in the code being analyzed.
diff --git a/docs/code-quality/c1251.md b/docs/code-quality/c1251.md
index ca58d7858b..369f49e98e 100644
--- a/docs/code-quality/c1251.md
+++ b/docs/code-quality/c1251.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1251"
description: "Learn more about: Fatal error C1251"
-title: Fatal error C1251
ms.date: 10/04/2022
f1_keywords: ["C1251", "FATALERROR_UnableToLoadModel"]
helpviewer_keywords: ["C1251"]
-ms.assetid: 0b46e0a5-c290-48d8-ba4e-f526ae68993b
---
# Fatal error C1251
> Unable to load models.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the model file, not in the code being analyzed.
diff --git a/docs/code-quality/c1252.md b/docs/code-quality/c1252.md
index 4cdf0a1612..3e679ec2d3 100644
--- a/docs/code-quality/c1252.md
+++ b/docs/code-quality/c1252.md
@@ -1,15 +1,16 @@
---
+title: "Fatal error C1252"
description: "Learn more about: Fatal error C1252"
-title: Fatal error C1252
ms.date: 10/04/2022
f1_keywords: ["C1252", "FATALERROR_CircularDependency"]
helpviewer_keywords: ["C1252"]
-ms.assetid: e88bf199-890d-4582-bb5c-c1238797145b
---
# Fatal error C1252
> Circular or missing dependency between plugins: '*plugin-name*' requires GUID '*globally-unique-identifier*'
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the plugin dependencies. It's not caused by an issue in the code being analyzed.
In some cases, it's possible to work around this issue by disabling the **Enable Code Analysis on Build** property. To disable this build property, open the Property pages dialog for your project. In the **Solution Explorer** window, right-click on the project (not the solution) and select **Properties** in the shortcut menu. Set the **Configuration** to **All Configurations** and the **Platform** to **All Platforms**. Open the **Configuration Properties** > **Code Analysis** > **General** property page. Modify the **Enable Code Analysis on Build** property to **No**. Choose **OK** to save your changes, and then save your project files. Rebuild your project to verify that the issue no longer occurs.
diff --git a/docs/code-quality/c1253.md b/docs/code-quality/c1253.md
index 3276546314..568be82155 100644
--- a/docs/code-quality/c1253.md
+++ b/docs/code-quality/c1253.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1253"
description: "Learn more about: Fatal error C1253"
-title: Fatal error C1253
ms.date: 10/04/2022
f1_keywords: ["C1253", "FATALERROR_UnableToLoadModelFile"]
helpviewer_keywords: ["C1253"]
-ms.assetid: 21a4062f-fde8-40e5-8dbd-6f892926d3d2
---
# Fatal error C1253
> Unable to load model file.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the model file, not in the code being analyzed.
diff --git a/docs/code-quality/c1254.md b/docs/code-quality/c1254.md
index e584d07eee..b77f3f40da 100644
--- a/docs/code-quality/c1254.md
+++ b/docs/code-quality/c1254.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1254"
description: "Learn more about: Fatal error C1254"
-title: Fatal error C1254
ms.date: 10/04/2022
f1_keywords: ["C1254", "FATALERROR_PluginVersionMismatch"]
helpviewer_keywords: ["C1254"]
-ms.assetid: cb1377cf-869e-432d-941f-71f77134f97a
---
# Fatal error C1254
> Plugin version mismatch: '*module*' version '*version-number*' doesn't match the version '*version-number*' of the PREfast driver
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error with the plugin version, not in the code being analyzed.
diff --git a/docs/code-quality/c1255.md b/docs/code-quality/c1255.md
index 9480c693e1..1f3b9d92e5 100644
--- a/docs/code-quality/c1255.md
+++ b/docs/code-quality/c1255.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1255"
description: "Learn more about: Fatal error C1255"
-title: Fatal error C1255
ms.date: 10/04/2022
f1_keywords: ["C1255", "FATALERROR_PCHSyncLost"]
helpviewer_keywords: ["C1255"]
-ms.assetid: a97da6bd-06dc-42bf-9158-0de1ebb90d4a
---
# Fatal error C1255
> PCH data for plugin '*plugin-name*' has incorrect length.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the tool, not in the code being analyzed.
diff --git a/docs/code-quality/c1256.md b/docs/code-quality/c1256.md
index 54a456fa9e..bdf7af0eff 100644
--- a/docs/code-quality/c1256.md
+++ b/docs/code-quality/c1256.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1256"
description: "Learn more about: Fatal error C1256"
-title: Fatal error C1256
ms.date: 10/04/2022
f1_keywords: ["C1256", "FATALERROR_PCHInconsistent"]
helpviewer_keywords: ["C1256"]
-ms.assetid: 4d65e495-f9d9-435c-ba51-1cf5b4cc2309
---
# Fatal error C1256
> '*plugin-name*': PCH must be both written and read.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the tool, not in the code being analyzed.
diff --git a/docs/code-quality/c1257.md b/docs/code-quality/c1257.md
index c104af70b7..b4e698c29b 100644
--- a/docs/code-quality/c1257.md
+++ b/docs/code-quality/c1257.md
@@ -1,13 +1,14 @@
---
+title: "Fatal error C1257"
description: "Learn more about: Fatal error C1257"
-title: Fatal error C1257
ms.date: 10/04/2022
f1_keywords: ["C1257", "FATALERROR_InitFailure"]
helpviewer_keywords: ["C1257"]
-ms.assetid: 38d3ec05-01ba-42b3-aac6-077e92bf2ded
---
# Fatal error C1257
> '*Plugin-name*': Initialization Failure.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the plugin, not in the code being analyzed.
diff --git a/docs/code-quality/c1258.md b/docs/code-quality/c1258.md
index accca5c1d8..46de1a74a7 100644
--- a/docs/code-quality/c1258.md
+++ b/docs/code-quality/c1258.md
@@ -1,6 +1,6 @@
---
+title: "Fatal error C1258"
description: "Learn more about: Fatal error C1258"
-title: Fatal error C1258
ms.date: 10/04/2022
f1_keywords: ["C1258", "FATALERROR_SaveToXmlFailed"]
helpviewer_keywords: ["C1258"]
@@ -9,4 +9,6 @@ helpviewer_keywords: ["C1258"]
> Failed to save XML Log file '*filename*'. *Message*.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the plugin, not in the code being analyzed.
diff --git a/docs/code-quality/c1259.md b/docs/code-quality/c1259.md
index 0d22874e87..0dd892f8ae 100644
--- a/docs/code-quality/c1259.md
+++ b/docs/code-quality/c1259.md
@@ -1,6 +1,6 @@
---
+title: "Fatal error C1259"
description: "Learn more about: Fatal error C1259"
-title: Fatal error C1259
ms.date: 10/04/2022
f1_keywords: ["C1259", "FATALERROR_FatalError"]
helpviewer_keywords: ["C1259"]
@@ -9,4 +9,6 @@ helpviewer_keywords: ["C1259"]
> A fatal error was issued by a plugin.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the plugin, not in the code being analyzed.
diff --git a/docs/code-quality/c1260.md b/docs/code-quality/c1260.md
index 6cf3642c1d..8142771589 100644
--- a/docs/code-quality/c1260.md
+++ b/docs/code-quality/c1260.md
@@ -1,6 +1,6 @@
---
+title: "Fatal error C1260"
description: "Learn more about: Fatal error C1260"
-title: Fatal error C1260
ms.date: 10/04/2022
f1_keywords: ["C1260", "FATALERROR_DuplicateId"]
helpviewer_keywords: ["C1260"]
@@ -9,4 +9,6 @@ helpviewer_keywords: ["C1260"]
> The plugins '*plugin-1*' and '*plugin-2*' share the same id. It is not supported to load the same plugin twice.
+## Remarks
+
The Code Analysis tool reports this error when there's an internal error in the plugin, not in the code being analyzed.
diff --git a/docs/code-quality/c26132.md b/docs/code-quality/c26132.md
new file mode 100644
index 0000000000..487cad505f
--- /dev/null
+++ b/docs/code-quality/c26132.md
@@ -0,0 +1,73 @@
+---
+title: Warning C26132
+description: Documentation on static analysis warning C26132
+author: Rastaban
+ms.author: philc
+ms.service: visual-cpp
+ms.topic: concept-article
+ms.date: 02/11/2025
+---
+# Warning C26132
+
+> Variable '*variable name*' should be protected by '*lock 1*', but '*lock 2*' is held instead. Possible annotation mismatch.
+
+The analyzer issues Warning C26132 when it detects that a lock, which is annotated to protect a value, isn't held while accessing the value. However, a related lock is held. The code may be thread-safe, so you might need to update the annotations.
+
+This diagnostic usually doesn't indicate a bug in the code, but rather a mismatch between the annotations and the actual locking behavior. If so, the diagnostic should be resolved as there may be other static analysis issues that aren't being reported due to the inconsistent annotations.
+
+## Examples
+
+In the following example, C26132 is emitted when `data` is used.
+
+ The annotation specifies that `customLock01` should protect the variable `data`, but `CustomLockAcquire` is responsible for acquiring the related lock `customLock01->cs`.
+
+```cpp
+#include
+struct CustomLock
+{
+ int cs; // "Critical Section" lock
+};
+
+_Acquires_exclusive_lock_(criticalSection->cs) // notice the `->` indirection
+void CustomLockAcquire(CustomLock* criticalSection);
+
+_Releases_lock_(criticalSection->cs) // notice the `->` indirection
+void CustomLockRelease(CustomLock* criticalSection);
+
+// global lock
+CustomLock customLock01;
+
+void Initialize(_Guarded_by_(customLock01) int* data)
+{
+ CustomLockAcquire(&customLock01);
+ *data = 1; // C26132
+ CustomLockRelease(&customLock01);
+}
+```
+
+In this example, the `Initialize` function is thread-safe and behaves as designed, but that design isn't correctly reflected in the concurrency SAL annotations. Fix by adjusting the annotations on the custom locking functions to use `criticalSection` rather than `criticalSection->cs`. The warning could also be fixed by changing the `_Guarded_by_` annotation from `customLock01` to `customLock01.cs`.
+
+```cpp
+#include
+struct CustomLock
+{
+ int cs; // "Critical Section" lock
+};
+
+_Acquires_exclusive_lock_(criticalSection)
+void CustomLockAcquire(CustomLock* criticalSection);
+
+_Releases_lock_(criticalSection)
+void CustomLockRelease(CustomLock* criticalSection);
+
+// global lock
+CustomLock customLock01;
+
+void Initialize(_Guarded_by_(customLock01) int* data)
+{
+ CustomLockAcquire(&customLock01);
+ *data = 1;
+ CustomLockRelease(&customLock01);
+}
+```
+
diff --git a/docs/code-quality/c26133.md b/docs/code-quality/c26133.md
new file mode 100644
index 0000000000..e1067f9c3a
--- /dev/null
+++ b/docs/code-quality/c26133.md
@@ -0,0 +1,76 @@
+---
+title: Warning C26133
+description: Documentation on static analysis warning C26133
+author: Rastaban
+ms.author: philc
+ms.service: visual-cpp
+ms.topic: concept-article
+ms.date: 02/19/2025
+---
+# Warning C26133
+
+> Caller failing to hold lock '*lock 1*' before calling function '*function name*', but '*lock 2*' is held instead. Possible annotation mismatch.
+
+Warning C26133 is issued when the analyzer detects that the lock required to call a function isn't held when the function is called. However, another lock that appears to be related is held. It's possible the code is thread-safe, and the annotations need to be updated.
+
+This diagnostic usually doesn't indicate a bug in the code, but rather a mismatch between the annotations and the actual locking behavior. If so, the diagnostic should be resolved as there may be other static analysis issues that aren't being reported due to the inconsistent annotations.
+
+## Examples
+
+In the following example, C26133 is emitted when `DoTaskWithCustomLock` is called.
+
+> warning C26133: Caller failing to hold lock 'customLock01' before calling function 'DoTaskWithCustomLock', but '(&customLock01)->cs' is held instead. Possible annotation mismatch.
+
+```cpp
+#include
+
+struct CustomLock
+{
+ int cs; // "Critical Section"
+};
+
+_Acquires_exclusive_lock_(criticalSection->cs) // notice the `->` indirection
+void CustomLockAcquire(CustomLock* criticalSection);
+
+_Releases_lock_(criticalSection->cs) // notice the `->` indirection
+void CustomLockRelease(CustomLock* criticalSection);
+
+CustomLock customLock01;
+
+_Requires_lock_held_(customLock01) void DoTaskWithCustomLock();
+
+void DoTask()
+{
+ CustomLockAcquire(&customLock01);
+ DoTaskWithCustomLock(); // C26133
+ CustomLockRelease(&customLock01);
+}
+```
+
+In this example, the `DoTask` function is thread-safe and behaves as designed, but that design isn't correctly reflected in the concurrency SAL annotations. Fix by adjusting the annotations on the custom locking functions to use `criticalSection` rather than `criticalSection->cs`. The warning could also be fixed by changing the `_Requires_lock_held_` annotation from `customLock01` to `customLock01.cs`.
+
+```cpp
+#include
+
+struct CustomLock
+{
+ int cs; // "Critical Section"
+};
+
+_Acquires_exclusive_lock_(criticalSection)
+void CustomLockAcquire(CustomLock* criticalSection);
+
+_Releases_lock_(criticalSection)
+void CustomLockRelease(CustomLock* criticalSection);
+
+CustomLock customLock01;
+
+_Requires_lock_held_(customLock01) void DoTaskWithCustomLock();
+
+void DoTask()
+{
+ CustomLockAcquire(&customLock01);
+ DoTaskWithCustomLock();
+ CustomLockRelease(&customLock01);
+}
+```
\ No newline at end of file
diff --git a/docs/code-quality/c26135.md b/docs/code-quality/c26135.md
index bbd4c04054..96db147d01 100644
--- a/docs/code-quality/c26135.md
+++ b/docs/code-quality/c26135.md
@@ -25,14 +25,14 @@ typedef struct _DATA
void MyEnter(DATA* p)
{
// Warning C26135:
- // Missing side effect annotation _Acquires_lock_(&p->cs)
+ // Missing side effect annotation _Acquires_lock_(p->cs)
EnterCriticalSection(&p->cs);
}
void MyLeave(DATA* p)
{
// warning C26135:
- // Missing side effect annotation _Releases_lock_(&p->cs)
+ // Missing side effect annotation _Releases_lock_(p->cs)
LeaveCriticalSection(&p->cs);
}
```
diff --git a/docs/code-quality/c26400.md b/docs/code-quality/c26400.md
index ccdd3a65e3..e4819ceeaa 100644
--- a/docs/code-quality/c26400.md
+++ b/docs/code-quality/c26400.md
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26400"]
## Remarks
-This check helps to enforce the *rule I.11: Never transfer ownership by a raw pointer (T\*), which is a subset of the rule *R.3: A raw pointer (a T\*) is non-owning*. Specifically, it warns on any call to `operator new`, which saves its result in a variable of raw pointer type. It also warns on calls to functions that return `gsl::owner` if their results are assigned to raw pointers. The idea is that you should clearly state ownership of memory resources. For more information, see the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management).
+This check helps to enforce the *rule I.11: Never transfer ownership by a raw pointer (T\*), which is a subset of the rule *R.3: A raw pointer (a T\*) is non-owning*. Specifically, it warns on any call to `operator new`, which saves its result in a variable of raw pointer type. It also warns on calls to functions that return `gsl::owner` if their results are assigned to raw pointers. The idea is that you should clearly state ownership of memory resources. For more information, see the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-resource).
The easiest way to fix this warning is to use **`auto`** declaration if the resource is assigned immediately at the variable declaration. If this fix isn't possible, then we suggest that you use the type `gsl::owner`. The **`auto`** declarations initialized with operator **`new`** are "owners" because we assume that the result of any allocation is implicitly an owner pointer. We transfer this assumption to the **`auto`** variable and treat it as `owner`.
diff --git a/docs/code-quality/c26401.md b/docs/code-quality/c26401.md
index ef45225be5..0029e443d5 100644
--- a/docs/code-quality/c26401.md
+++ b/docs/code-quality/c26401.md
@@ -20,7 +20,7 @@ Code analysis name: `DONT_DELETE_NON_OWNER`
## See also
-[C++ Core Guidelines I.11](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i11-never-transfer-ownership-by-a-raw-pointer-t-or-reference-t)
+[C++ Core Guidelines I.11](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-raw)
## Examples
@@ -63,7 +63,7 @@ public:
ref_count_--;
if (ref_count_ == 0)
{
- [[gsl::suppress(i.11)]]
+ [[gsl::suppress("i.11")]]
delete this;
}
}
diff --git a/docs/code-quality/c26402.md b/docs/code-quality/c26402.md
index b79483f914..16f0f248d2 100644
--- a/docs/code-quality/c26402.md
+++ b/docs/code-quality/c26402.md
@@ -12,7 +12,7 @@ ms.assetid: b9d3d398-697a-4a5d-8bfe-9c667dffb90b
## Remarks
-To avoid confusion about whether a pointer owns an object, a function that returns a movable object should allocate it on the stack. It should then return the object by value instead of returning a heap-allocated object. If pointer semantics are required, return a smart pointer instead of a raw pointer. For more information, see [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr): *Warn if a function returns an object that was allocated within the function but has a move constructor. Suggest considering returning it by value instead.*
+To avoid confusion about whether a pointer owns an object, a function that returns a movable object should allocate it on the stack. It should then return the object by value instead of returning a heap-allocated object. If pointer semantics are required, return a smart pointer instead of a raw pointer. For more information, see [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr): *Warn if a function returns an object that was allocated within the function but has a move constructor. Suggest considering returning it by value instead.*
## Example
diff --git a/docs/code-quality/c26403.md b/docs/code-quality/c26403.md
index 2501899487..801e33dce9 100644
--- a/docs/code-quality/c26403.md
+++ b/docs/code-quality/c26403.md
@@ -12,7 +12,7 @@ ms.assetid: 7e14868d-df86-4df3-98d3-71b1e80ba14e
Owner pointers are like unique pointers: they own a resource exclusively, and manage release of the resource, or its transfers to other owners. This check validates that a local owner pointer properly maintains its resource through all execution paths in a function. If the resource wasn't transferred to another owner, or wasn't explicitly release, the checker warns, and points to the declaration of the pointer variable.
-For more information, see the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management).
+For more information, see the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-resource).
## Remarks
diff --git a/docs/code-quality/c26405.md b/docs/code-quality/c26405.md
index cf14b63ea6..8c8d2b45eb 100644
--- a/docs/code-quality/c26405.md
+++ b/docs/code-quality/c26405.md
@@ -12,7 +12,7 @@ ms.assetid: 2034d961-3ec5-4184-bbef-aa792e4c03c0
## Remarks
-If an owner pointer already points to a valid memory buffer, it must not be assigned to another value without releasing its current resource first. Such assignment may lead to a resource leak even if the resource address is copied into some raw pointer (because raw pointers shouldn't release resources). For more information, see the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r3-a-raw-pointer-a-t-is-non-owning).
+If an owner pointer already points to a valid memory buffer, it must not be assigned to another value without releasing its current resource first. Such assignment may lead to a resource leak even if the resource address is copied into some raw pointer (because raw pointers shouldn't release resources). For more information, see the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
Code analysis name: `DONT_ASSIGN_TO_VALID`
diff --git a/docs/code-quality/c26406.md b/docs/code-quality/c26406.md
index 1dc0b113bf..3027afd728 100644
--- a/docs/code-quality/c26406.md
+++ b/docs/code-quality/c26406.md
@@ -10,7 +10,7 @@ ms.assetid: 02fb8e23-1989-4e24-a5a5-e30f71d00325
> Do not assign a raw pointer to an `owner` (r.3)
-This warning enforces R.3 from the C++ Core Guidelines. For more information, see [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r3-a-raw-pointer-a-t-is-non-owning).
+This warning enforces R.3 from the C++ Core Guidelines. For more information, see [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
## Remarks
diff --git a/docs/code-quality/c26407.md b/docs/code-quality/c26407.md
index d082e56681..79022356f0 100644
--- a/docs/code-quality/c26407.md
+++ b/docs/code-quality/c26407.md
@@ -10,7 +10,7 @@ ms.assetid: 5539907a-bfa0-40db-82a6-b860c97209e1
> Prefer scoped objects, don't heap-allocate unnecessarily (r.5)
-To avoid unnecessary use of pointers, we try to detect common patterns of local allocations. For example, we detect when the result of a call to operator **`new`** is stored in a local variable and later explicitly deleted. This check supports the [C++ Core Guidelines rule R.5](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r5-prefer-scoped-objects-dont-heap-allocate-unnecessarily): *Prefer scoped objects, don't heap-allocate unnecessarily*. To fix the issue, use an RAII type instead of a raw pointer, and allow it to deal with resources. Obviously, it isn't necessary to create a wrapper type to allocate a single object. Instead, a local variable of the object's type would work better.
+To avoid unnecessary use of pointers, we try to detect common patterns of local allocations. For example, we detect when the result of a call to operator **`new`** is stored in a local variable and later explicitly deleted. This check supports the [C++ Core Guidelines rule R.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-scoped): *Prefer scoped objects, don't heap-allocate unnecessarily*. To fix the issue, use an RAII type instead of a raw pointer, and allow it to deal with resources. Obviously, it isn't necessary to create a wrapper type to allocate a single object. Instead, a local variable of the object's type would work better.
## Remarks
diff --git a/docs/code-quality/c26408.md b/docs/code-quality/c26408.md
index 159c8cbfb0..423b99d972 100644
--- a/docs/code-quality/c26408.md
+++ b/docs/code-quality/c26408.md
@@ -22,7 +22,7 @@ Code analysis name: `NO_MALLOC_FREE`
## See also
-[C++ Core Guidelines R.10](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r10-avoid-malloc-and-free)
+[C++ Core Guidelines R.10](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-mallocfree)
## Example
diff --git a/docs/code-quality/c26409.md b/docs/code-quality/c26409.md
index 8939a08776..459ce8cf92 100644
--- a/docs/code-quality/c26409.md
+++ b/docs/code-quality/c26409.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about CppCoreCheck rule C26409: avoid explicit new and delete."
title: Warning C26409
+description: "Learn more about CppCoreCheck rule C26409: avoid explicit new and delete."
ms.date: 12/14/2020
f1_keywords: ["C26409", "NO_NEW_DELETE"]
helpviewer_keywords: ["C26409"]
-ms.assetid: a3b3a229-d566-4be3-bd28-2876ccc8dc37
---
# Warning C26409
@@ -13,7 +12,7 @@ ms.assetid: a3b3a229-d566-4be3-bd28-2876ccc8dc37
Even if code is clean of calls to `malloc` and `free`, we still suggest that you consider better options than explicit use of operators [`new` and `delete`](../cpp/new-and-delete-operators.md).
**C++ Core Guidelines**:\
-[R.11: Avoid calling new and delete explicitly](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r11-avoid-calling-new-and-delete-explicitly)
+[R.11: Avoid calling `new` and `delete` explicitly](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-newdelete)
The ultimate fix is to use smart pointers and appropriate factory functions, such as [`std::make_unique`](../standard-library/memory-functions.md#make_unique).
@@ -49,7 +48,7 @@ public:
ref_count_--;
if (ref_count_ == 0)
{
- [[gsl::suppress(i.11)]]
+ [[gsl::suppress("i.11")]]
delete this;
}
}
diff --git a/docs/code-quality/c26410.md b/docs/code-quality/c26410.md
index ea77c9e0df..6a8429c1ec 100644
--- a/docs/code-quality/c26410.md
+++ b/docs/code-quality/c26410.md
@@ -10,11 +10,11 @@ ms.assetid: d1547faf-96c6-48da-90f5-841154d0e878
> The parameter '*parameter*' is a reference to const unique pointer, use `const T*` or `const T&` instead (r.32)
-Generally, references to const unique pointer are meaningless. They can safely be replaced by a raw reference or a pointer. This warning enforces [C++ Core Guidelines rule R.32](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r32-take-a-unique_ptrwidget-parameter-to-express-that-a-function-assumes-ownership-of-a-widget).
+Generally, references to const unique pointer are meaningless. They can safely be replaced by a raw reference or a pointer. This warning enforces [C++ Core Guidelines rule R.32](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-uniqueptrparam).
## Remarks
-- Unique pointer checks have rather broad criteria to identify smart pointers. The [C++ Core Guidelines rule R.31](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r31-if-you-have-non-std-smart-pointers-follow-the-basic-pattern-from-std): *If you have non-std smart pointers, follow the basic pattern from std describes the unique pointer and shared pointer concepts*. The heuristic is simple, but may lead to surprises: a smart pointer type is any type that defines either `operator->` or `operator*`. A copy-able type (shared pointer) must have either a public copy constructor or an overloaded assignment operator that deals with a non-Rvalue reference parameter.
+- Unique pointer checks have rather broad criteria to identify smart pointers. The [C++ Core Guidelines rule R.31](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-smart): *If you have non-std smart pointers, follow the basic pattern from std describes the unique pointer and shared pointer concepts*. The heuristic is simple, but may lead to surprises: a smart pointer type is any type that defines either `operator->` or `operator*`. A copy-able type (shared pointer) must have either a public copy constructor or an overloaded assignment operator that deals with a non-Rvalue reference parameter.
- Template code may produce noisy warnings. Keep in mind that templates can be instantiated with various type parameters with different levels of indirection, including references. Some warnings may not be obvious and fixes may require some rework of templates (for example, explicit removal of reference indirection). If template code is intentionally generic, the warning can be suppressed.
diff --git a/docs/code-quality/c26411.md b/docs/code-quality/c26411.md
index d0ff131460..cf66a21b4d 100644
--- a/docs/code-quality/c26411.md
+++ b/docs/code-quality/c26411.md
@@ -10,7 +10,7 @@ ms.assetid: 5134e51e-8b92-4ee7-94c3-022e318a0e24
> The parameter '*parameter*' is a reference to unique pointer and it is never reassigned or reset, use `T*` or `T&` instead (r.33)
-When you pass a unique pointer to a function by reference, it implies that its resource may be released or transferred inside the function. If the function uses its parameter only to access the resource, it's safe to pass a raw pointer or a reference. For more information, see [C++ Core Guidelines rule R.33](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r33-take-a-unique_ptrwidget-parameter-to-express-that-a-function-reseats-thewidget): *Take a unique_ptr\& parameter to express that a function reseats the widget*.
+When you pass a unique pointer to a function by reference, it implies that its resource may be released or transferred inside the function. If the function uses its parameter only to access the resource, it's safe to pass a raw pointer or a reference. For more information, see [C++ Core Guidelines rule R.33](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-reseat): *Take a unique_ptr\& parameter to express that a function reseats the widget*.
## Remarks
diff --git a/docs/code-quality/c26414.md b/docs/code-quality/c26414.md
index 471b69d1d9..704a57d4e8 100644
--- a/docs/code-quality/c26414.md
+++ b/docs/code-quality/c26414.md
@@ -4,7 +4,6 @@ description: "Reference for Visual Studio C++ Core Guidelines code analysis warn
ms.date: 01/29/2020
f1_keywords: ["C26414", "RESET_LOCAL_SMART_PTR"]
helpviewer_keywords: ["C26414"]
-ms.assetid: dd875d0c-6752-4491-a533-3e8831795fbc
---
# Warning C26414
diff --git a/docs/code-quality/c26415.md b/docs/code-quality/c26415.md
index 8dfc40ae41..93c445fc29 100644
--- a/docs/code-quality/c26415.md
+++ b/docs/code-quality/c26415.md
@@ -11,7 +11,7 @@ ms.assetid: 4165f70a-78ae-4a03-b256-c4bd74b02d09
> Smart pointer parameter is used only to access contained pointer. Use T* or T& instead.
**C++ Core Guidelines**:
-[R.30](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r30-take-smart-pointers-as-parameters-only-to-explicitly-express-lifetime-semantics): Take smart pointers as parameters only to explicitly express lifetime semantics
+[R.30](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-smartptrparam): Take smart pointers as parameters only to explicitly express lifetime semantics
Using a smart pointer type to pass data to a function indicates that the target function needs to manage the lifetime of the contained object. However, say the function only uses the smart pointer to access the contained object and never actually calls any code that may lead to its deallocation (that is, never affects its lifetime). Then there's usually no need to complicate the interface with smart pointers. A plain pointer or reference to the contained object is preferred.
diff --git a/docs/code-quality/c26416.md b/docs/code-quality/c26416.md
index 1bd6192adc..c658471dc4 100644
--- a/docs/code-quality/c26416.md
+++ b/docs/code-quality/c26416.md
@@ -11,7 +11,7 @@ ms.assetid: f158207b-45cf-44cf-8e4b-b5b75b56ea0e
> Shared pointer parameter is passed by rvalue reference. Pass by value instead.
**C++ Core Guidelines**:
-[R.34](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r34-take-a-shared_ptrwidget-parameter-to-express-that-a-function-is-part-owner): Take a shared_ptr\ parameter to express that a function is part owner
+[R.34](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-sharedptrparam-owner): Take a shared_ptr\ parameter to express shared ownership
Passing a shared pointer by rvalue reference is rarely necessary. Unless it's an implementation of move semantics for a shared pointer type itself, shared pointer objects can be safely passed by value. Using rvalue reference may be also an indication that unique pointer is more appropriate since it clearly transfers unique ownership from caller to callee.
diff --git a/docs/code-quality/c26417.md b/docs/code-quality/c26417.md
index 7659d01250..b8138b42ab 100644
--- a/docs/code-quality/c26417.md
+++ b/docs/code-quality/c26417.md
@@ -11,7 +11,7 @@ ms.assetid: 0e09fcc6-f9eb-4404-b51e-5815705c6afb
> Shared pointer parameter is passed by reference and not reset or reassigned. Use T* or T& instead.
**C++ Core Guidelines**:
-[R.35](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r35-take-a-shared_ptrwidget-parameter-to-express-that-a-function-might-reseat-the-shared-pointer): Take a shared_ptr\& parameter to express that a function might reseat the shared pointer
+[R.35](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-sharedptrparam): Take a shared_ptr\& parameter to express that a function might reseat the shared pointer
Passing shared pointers by reference may be useful in scenarios where called code updates the target of the smart pointer object, and its caller expects to see such updates. Using a reference solely to reduce costs of passing a shared pointer is questionable. If called code only accesses the target object and never manages its lifetime, it's safer to pass a raw pointer or reference, rather than to expose resource management details.
diff --git a/docs/code-quality/c26418.md b/docs/code-quality/c26418.md
index d1a07d1b8d..d29c62c865 100644
--- a/docs/code-quality/c26418.md
+++ b/docs/code-quality/c26418.md
@@ -11,7 +11,7 @@ ms.assetid: d2c84a40-8a5d-4018-92c2-6498cdd9b541
> Shared pointer parameter is not copied or moved. Use T* or T& instead.
**C++ Core Guidelines**:
-[R.36](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r36-take-a-const-shared_ptrwidget-parameter-to-express-that-it-might-retain-a-reference-count-to-the-object-): Take a const shared_ptr\& parameter to express that it might retain a reference count to the object
+[R.36](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-sharedptrparam-const): Take a const shared_ptr\& parameter to express that it might retain a reference count to the object
If a shared pointer parameter is passed by value or by reference to a constant object, the function is expected to take control of the target object's lifetime without affecting the caller. The code should either copy or move the shared pointer parameter to another shared pointer object, or pass it along to other code by invoking functions that accept shared pointers. Otherwise, a plain pointer or reference may be feasible.
diff --git a/docs/code-quality/c26426.md b/docs/code-quality/c26426.md
index 818d76d22d..15289f08c7 100644
--- a/docs/code-quality/c26426.md
+++ b/docs/code-quality/c26426.md
@@ -12,7 +12,7 @@ ms.assetid: 6fb5f6d2-b097-47f8-8b49-f2fd4e9bef0e
## C++ Core Guidelines
-[I.22](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i22-avoid-complex-initialization-of-global-objects): Avoid complex initialization of global objects
+[I.22](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-global-init): Avoid complex initialization of global objects
The order of execution of initializers for global objects may be inconsistent or undefined, which can lead to issues that are hard to reproduce and investigate. To avoid such problems, global initializers shouldn't depend on external code that's executed at run time, and that may depend on data that's not yet initialized. This rule flags cases where global objects call functions to obtain their initial values.
diff --git a/docs/code-quality/c26427.md b/docs/code-quality/c26427.md
index 556e26de75..5586e4d46a 100644
--- a/docs/code-quality/c26427.md
+++ b/docs/code-quality/c26427.md
@@ -11,7 +11,7 @@ ms.assetid: 8fb95a44-8704-45b1-bc55-eccd59b1db2f
> Global initializer accesses extern object '*symbol*' (i.22)
**C++ Core Guidelines**:
-[I.22](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i22-avoid-complex-initialization-of-global-objects): Avoid complex initialization of global objects
+[I.22](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-global-init): Avoid complex initialization of global objects
Global objects may be initialized in an inconsistent or undefined order, which means that interdependency between them is risky and should be avoided. This guideline is applicable when initializers refer to another object that's considered to be **`extern`**.
diff --git a/docs/code-quality/c26429.md b/docs/code-quality/c26429.md
index 9543595243..857bffecf9 100644
--- a/docs/code-quality/c26429.md
+++ b/docs/code-quality/c26429.md
@@ -11,7 +11,7 @@ ms.assetid: 4e1c74d5-7307-436c-927b-f74ae863282c
> Symbol is never tested for nullness, it can be marked as `gsl::not_null`.
**C++ Core Guidelines**:
-[F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value): Use a `not_null` to indicate that "null" isn't a valid value
+[F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr): Use a `not_null` to indicate that "null" is not a valid value
It's a common practice to use asserts to enforce assumptions about the validity of pointer values. The problem is, asserts don't expose assumptions through the interface (such as in return types or parameters). Asserts are also harder to maintain and keep in sync with other code changes. The recommendation is to use `gsl::not_null` from the Guidelines Support Library to mark resources that should never have a null value. The rule `USE_NOTNULL` helps to identify places that omit checks for null and hence can be updated to use `gsl::not_null`.
diff --git a/docs/code-quality/c26430.md b/docs/code-quality/c26430.md
index 230352b2e9..92fa6af1ec 100644
--- a/docs/code-quality/c26430.md
+++ b/docs/code-quality/c26430.md
@@ -11,7 +11,7 @@ ms.assetid: 3dca2626-8102-4eed-8ff3-73eb3d5c328c
> Symbol is not tested for nullness on all paths.
**C++ Core Guidelines**:
-[F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value): Use a not_null\ to indicate that "null" isn't a valid value
+[F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr): Use a not_null\ to indicate that "null" is not a valid value
If code ever checks pointer variables for null, it should do so consistently and validate pointers on all paths. Sometimes overaggressive checking for null is still better than the possibility of a hard crash in one of the complicated branches. Ideally, such code should be refactored to be less complex (by splitting it into multiple functions), and to rely on markers like `gsl::not_null`. These markers allow the code to isolate parts of the algorithm that can make safe assumptions about valid pointer values. The rule `TEST_ON_ALL_PATHS` helps to find places where null checks are inconsistent (meaning assumptions may require review). Or, it finds actual bugs where a potential null value can bypass null checks in some of the code paths.
diff --git a/docs/code-quality/c26431.md b/docs/code-quality/c26431.md
index 4b78314a6d..ae48a3ac66 100644
--- a/docs/code-quality/c26431.md
+++ b/docs/code-quality/c26431.md
@@ -11,7 +11,7 @@ ms.assetid: 40be6032-c8de-49ab-8e43-e8eedc0ca0ba
> The type of expression '*expr*' is already `gsl::not_null`. Do not test it for nullness (f.23)
**C++ Core Guidelines**:
-[F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value): Use a not_null\ to indicate that "null" isn't a valid value
+[F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr): Use a not_null\ to indicate that "null" is not a valid value
The marker type `gsl::not_null` from the Guidelines Support Library is used to clearly indicate values that are never null pointers. It causes a hard failure if the assumption doesn't hold at run time. So, obviously, there's no need to check for null if an expression evaluates to a result of type `gsl::not_null`.
diff --git a/docs/code-quality/c26432.md b/docs/code-quality/c26432.md
index 51dba4ebdc..98a45f3475 100644
--- a/docs/code-quality/c26432.md
+++ b/docs/code-quality/c26432.md
@@ -4,14 +4,13 @@ description: "Microsoft C++ Code Analysis warning C26432 for the C++ Core Guidel
ms.date: 11/15/2017
f1_keywords: ["C26432", "DEFINE_OR_DELETE_SPECIAL_OPS"]
helpviewer_keywords: ["C26432"]
-ms.assetid: f587b05a-5c69-4176-baa6-fcb79d228b24
---
# Warning C26432
> `If you define or delete any default operation in the type 'type-name', define or delete them all (c.21).`
**C++ Core Guidelines**:\
-[C.21: If you define or =delete any default operation, define or =delete them all](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c21-if-you-define-or-delete-any-default-operation-define-or-delete-them-all)
+[C.21: If you define or `=delete` any copy, move, or destructor function, define or `=delete` them all](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-five)
Special operations such as constructors are assumed to alter the behavior of types so they rely more on language mechanisms to automatically enforce specific scenarios. The canonical example is resource management. If you explicitly define, default, or delete any of these special operations, it signals you want to avoid any special handling of a type. It's inconsistent to leave the other operations unspecified, that is, implicitly defined as deleted by the compiler.
diff --git a/docs/code-quality/c26433.md b/docs/code-quality/c26433.md
index ed350b445d..20d866f966 100644
--- a/docs/code-quality/c26433.md
+++ b/docs/code-quality/c26433.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Warning C26433 OVERRIDE_EXPLICITLY"
title: Warning C26433
+description: "Learn more about: Warning C26433 OVERRIDE_EXPLICITLY"
ms.date: 01/18/2017
f1_keywords: ["C26433", "OVERRIDE_EXPLICITLY"]
helpviewer_keywords: ["C26433"]
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26433"]
## C++ Core Guidelines
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override)
It's not required by the compiler to clearly state that a virtual function overrides its base. Not specifying `override` can cause subtle issues during maintenance if the virtual specification ever changes in the class hierarchy. It also lowers readability and makes an interface's polymorphic behavior less obvious. If a function is clearly marked as `override`, the compiler can check the consistency of the interface, and help to spot issues before they manifest themselves at run time.
@@ -25,7 +25,7 @@ Warnings show up on function definitions, not declarations. It may be confusing,
Code analysis name: `OVERRIDE_EXPLICITLY`
-## Example: Implicit overriding
+## Example: Implicit overriding
```cpp
class Shape {
@@ -44,4 +44,4 @@ public:
## See also
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override)
diff --git a/docs/code-quality/c26434.md b/docs/code-quality/c26434.md
index 7db222af1a..197a57cbcf 100644
--- a/docs/code-quality/c26434.md
+++ b/docs/code-quality/c26434.md
@@ -4,7 +4,6 @@ description: "Microsoft C++ Code Analysis warning C26434 for the C++ Core Guidel
ms.date: 08/21/2020
f1_keywords: ["C26434", "DONT_HIDE_METHODS"]
helpviewer_keywords: ["C26434"]
-ms.assetid: 7f66477f-da66-444a-a6e3-44513d7d7e31
---
# Warning C26434
@@ -12,7 +11,7 @@ ms.assetid: 7f66477f-da66-444a-a6e3-44513d7d7e31
## C++ Core Guidelines
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override)
## Remarks
@@ -44,5 +43,4 @@ struct Derived : Base
void not_virtual() noexcept {} // C26434, hides a non-virtual function
virtual void not_virtual(int i) noexcept {} // C26434, and parameters ignored
};
-
```
diff --git a/docs/code-quality/c26435.md b/docs/code-quality/c26435.md
index ab4ec78c93..61b57161dc 100644
--- a/docs/code-quality/c26435.md
+++ b/docs/code-quality/c26435.md
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26435"]
## C++ Core Guidelines
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override)
To improve readability, the kind of virtual behavior should be stated clearly and without unnecessary redundancy. Even though multiple virtual specifiers can be used simultaneously, it's better to specify one at a time to emphasize the most important aspect of virtual behavior. The following order of importance is apparent:
@@ -49,4 +49,4 @@ public:
## See also
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)
diff --git a/docs/code-quality/c26436.md b/docs/code-quality/c26436.md
index 222d58fb20..f2c433854f 100644
--- a/docs/code-quality/c26436.md
+++ b/docs/code-quality/c26436.md
@@ -10,7 +10,7 @@ description: CppCoreCheck rule that enforces C++ Core Guidelines C.35
> The type '*symbol*' with a virtual function needs either public virtual or protected non-virtual destructor (c.35)
-[**C++ Core Guidelines**: C.35](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c35-a-base-class-destructor-should-be-either-public-and-virtual-or-protected-and-non-virtual): A base class destructor should be either public and virtual, or protected and nonvirtual
+[**C++ Core Guidelines**: C.35](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-virtual): A base class destructor should be either public and virtual, or protected and non-virtual
If a class defines a virtual function it becomes polymorphic, which implies that derived classes can change its behavior including resource management and destruction logic. Because client code may call polymorphic types via pointers to base classes, there's no way a client can explicitly choose which behavior is appropriate without downcasting. To make sure that resources are managed consistently and destruction occurs according to the actual type's rules, you should define a public virtual destructor. If the type hierarchy is designed to disallow client code to destroy objects directly, destructors should be defined as protected non-virtual.
diff --git a/docs/code-quality/c26437.md b/docs/code-quality/c26437.md
index 5757f17f66..1ec3dbc432 100644
--- a/docs/code-quality/c26437.md
+++ b/docs/code-quality/c26437.md
@@ -4,7 +4,6 @@ description: "Learn more about: Warning C26437 DONT_SLICE"
ms.date: 05/17/2023
f1_keywords: ["C26437", "DONT_SLICE"]
helpviewer_keywords: ["C26437"]
-ms.assetid: ed2f55bc-a6d8-4cc4-8069-5c96e581a96a
---
# Warning C26437
diff --git a/docs/code-quality/c26438.md b/docs/code-quality/c26438.md
index e6c696ca31..dd7f16b4eb 100644
--- a/docs/code-quality/c26438.md
+++ b/docs/code-quality/c26438.md
@@ -11,7 +11,7 @@ ms.assetid: c7b3f59c-fb2f-4816-bda4-0fad23c80d83
> Avoid `goto` (es.76)
**C++ Core Guidelines**:\
-[ES.76](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es76-avoid-goto): Avoid goto
+[ES.76](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-goto): Avoid goto
The use of **`goto`** is widely considered a dangerous and error-prone practice. It's acceptable only in generated code, such as in a parser generated from a grammar. With modern C++ features and utilities provided by the Guidelines Support Library, it should be easy to avoid **`goto`** altogether.
diff --git a/docs/code-quality/c26439.md b/docs/code-quality/c26439.md
index 68ee27f512..385f65ca54 100644
--- a/docs/code-quality/c26439.md
+++ b/docs/code-quality/c26439.md
@@ -4,13 +4,12 @@ description: CppCoreCheck rule C26439 that enforces C++ Core Guidelines F.6
ms.date: 05/17/2023
f1_keywords: ["C26439", "SPECIAL_NOEXCEPT"]
helpviewer_keywords: ["C26439"]
-ms.assetid: 9df2a1b0-ea94-4884-9d28-c1522ec33a1b
---
# Warning C26439
> This kind of function may not throw. Declare it 'noexcept'.
-[**C++ Core Guidelines** F.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept): If your function must not throw, declare it `noexcept`
+[F.6: If your function must not throw, declare it `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept)
Some operations should never throw exceptions. Their implementations should be reliable and should handle possible errors conditions gracefully. They shouldn't use exceptions to indicate failure. This rule flags cases where such operations aren't explicitly marked as `noexcept`, which means that they may throw exceptions and consumers can't make assumptions about its reliability.
@@ -63,5 +62,5 @@ struct S
## See also
-[C26455](./c26455.md)\
-[**C++ Core Guidelines** F.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept)
\ No newline at end of file
+[C26455](c26455.md)\
+[F.6: If your function must not throw, declare it `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept)
diff --git a/docs/code-quality/c26440.md b/docs/code-quality/c26440.md
index edeb1db827..62a9c87e53 100644
--- a/docs/code-quality/c26440.md
+++ b/docs/code-quality/c26440.md
@@ -10,7 +10,7 @@ description: CppCoreCheck rule C26440 that enforces C++ Core Guidelines F.6
> Function can be declared 'noexcept'.
-[**C++ Core Guidelines** F.6](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f6-if-your-function-may-not-throw-declare-it-noexcept): If your function may not throw, declare it `noexcept`
+[**C++ Core Guidelines** F.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept): If your function must not throw, declare it `noexcept`
If code isn't supposed to cause any exceptions, it should be marked by using the `noexcept` specifier. This annotation helps to simplify error handling on the client code side, and enables the compiler to do more optimizations.
diff --git a/docs/code-quality/c26441.md b/docs/code-quality/c26441.md
index 75b08a780d..a91a41ff87 100644
--- a/docs/code-quality/c26441.md
+++ b/docs/code-quality/c26441.md
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26441"]
## C++ Core Guidelines
-[CP.44](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cp44-remember-to-name-your-lock_guards-and-unique_locks): Remember to name your `lock_guard`s and `unique_lock`s
+[CP.44: Remember to name your `lock_guard`s and `unique_lock`s](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconc-name)
## Remarks
diff --git a/docs/code-quality/c26443.md b/docs/code-quality/c26443.md
index 090995ebda..e07e15b419 100644
--- a/docs/code-quality/c26443.md
+++ b/docs/code-quality/c26443.md
@@ -13,7 +13,7 @@ This warning was removed in Visual Studio 16.8 to reflect [changes to C.128 in t
## C++ Core Guidelines
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md).
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override).
The current consensus on the Core Guidelines is to exclude destructors from the 'override explicitly' recommendation.
@@ -44,4 +44,4 @@ public:
## See also
-[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+[C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override)
diff --git a/docs/code-quality/c26444.md b/docs/code-quality/c26444.md
index 86c5a32949..cca16a240b 100644
--- a/docs/code-quality/c26444.md
+++ b/docs/code-quality/c26444.md
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26444"]
## C++ Core Guidelines
-[ES.84: Don't (try to) declare a local variable with no name](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-noname)
+[ES.84: Don't try to declare a local variable with no name](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-noname)
An unnamed variable declaration creates a temporary object that is discarded at the end of the statement. Such temporary objects with nontrivial behavior may point to either inefficient code that allocates and immediately throws away resources or to the code that unintentionally ignores nonprimitive data. Sometimes it may also indicate plainly wrong declaration.
@@ -46,4 +46,4 @@ void Foo()
## See also
[C26441](C26441.md)\
-[ES.84: Don't (try to) declare a local variable with no name](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-noname)
+[ES.84: Don't try to declare a local variable with no name](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-noname)
diff --git a/docs/code-quality/c26445.md b/docs/code-quality/c26445.md
index 2602c8bfa5..2269f7e065 100644
--- a/docs/code-quality/c26445.md
+++ b/docs/code-quality/c26445.md
@@ -13,7 +13,7 @@ A reference to `gsl::span` or `std::string_view` may be an indication of a lifet
## C++ Core Guidelines
-[GSL.view: Views](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslview-views)
+[GSL.view: Views](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views)
This rule catches subtle lifetime issues that may occur in code migrated from standard containers to new span and view types. Such types can be considered as "references to buffers." Using a reference to a span or view creates an extra layer of indirection. Such indirection is often unnecessary and can be confusing for maintainers. Spans are cheap to copy and can be returned by value from function calls. Obviously, such call results should never be referenced.
diff --git a/docs/code-quality/c26446.md b/docs/code-quality/c26446.md
index 39091ddfde..c8e7f37213 100644
--- a/docs/code-quality/c26446.md
+++ b/docs/code-quality/c26446.md
@@ -9,7 +9,7 @@ helpviewer_keywords: ["C26446"]
> Prefer to use gsl::at() instead of unchecked subscript operator (bounds.4).
-C++ Core Guidelines: [Bounds.4: Don't use standard-library functions and types that are not bounds-checked](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#probounds-bounds-safety-profile).
+C++ Core Guidelines: [Bounds.4: Don't use standard-library functions and types that are not bounds-checked](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-bounds).
## Remarks
diff --git a/docs/code-quality/c26447.md b/docs/code-quality/c26447.md
index 8c4c2ef820..1835053be8 100644
--- a/docs/code-quality/c26447.md
+++ b/docs/code-quality/c26447.md
@@ -10,7 +10,7 @@ helpviewer_keywords: ["C26447"]
> The function is declared `noexcept` but calls function *function_name* that may throw exceptions (f.6).
C++ Core Guidelines:\
-[F.6: If your function may not throw, declare it noexcept](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f6-if-your-function-may-not-throw-declare-it-noexcept).
+[F.6: If your function must not throw, declare it noexcept](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept).
## Remarks
diff --git a/docs/code-quality/c26448.md b/docs/code-quality/c26448.md
index 6173ec82b5..3da19b9eca 100644
--- a/docs/code-quality/c26448.md
+++ b/docs/code-quality/c26448.md
@@ -9,7 +9,7 @@ helpviewer_keywords: ["C26448"]
> Consider using `gsl::finally` if final action is intended (gsl.util)
-C++ Core Guidelines: [GSL.util: Utilities](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-utilities)
+C++ Core Guidelines: [GSL.util: Utilities](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-utilities)
The Guidelines Support Library provides a convenient utility to implement the *final action* concept. Since the C++ language doesn't support **try-finally** constructs, it became common to implement custom cleanup types that would invoke arbitrary actions on destruction. The `gsl::finally` utility is implemented in this way and provides a more uniform way to perform final actions across a code base.
diff --git a/docs/code-quality/c26450.md b/docs/code-quality/c26450.md
index ec01abc830..2f4d1f351d 100644
--- a/docs/code-quality/c26450.md
+++ b/docs/code-quality/c26450.md
@@ -43,8 +43,8 @@ long long multiply()
## See also
-[26451](c26451.md)\
-[26452](c26452.md)\
-[26453](c26453.md)\
-[26454](c26454.md)\
+[C26451](c26451.md)\
+[C26452](c26452.md)\
+[C26453](c26453.md)\
+[C26454](c26454.md)\
[ES.103: Don't overflow](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-overflow)
diff --git a/docs/code-quality/c26451.md b/docs/code-quality/c26451.md
index 725ce91a6c..3a2246a977 100644
--- a/docs/code-quality/c26451.md
+++ b/docs/code-quality/c26451.md
@@ -45,8 +45,8 @@ void leftshift(int i) noexcept
## See also
-[26450](c26450.md)\
-[26452](c26452.md)\
-[26453](c26453.md)\
-[26454](c26454.md)\
-[ES.103: Don't overflow](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-overflow)
+[C26450](c26450.md)\
+[C26452](c26452.md)\
+[C26453](c26453.md)\
+[C26454](c26454.md)\
+[ES.103: Don't overflow](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-overflow)
diff --git a/docs/code-quality/c26452.md b/docs/code-quality/c26452.md
index d6f004eaa5..14a7f7d727 100644
--- a/docs/code-quality/c26452.md
+++ b/docs/code-quality/c26452.md
@@ -37,9 +37,9 @@ unsigned long long combine(unsigned lo, unsigned hi)
## See also
-[26450](c26450.md)\
-[26451](c26451.md)\
-[26453](c26453.md)\
-[26454](c26454.md)\
+[C26450](c26450.md)\
+[C26451](c26451.md)\
+[C26453](c26453.md)\
+[C26454](c26454.md)\
[ES.101: Use unsigned types for bit manipulation](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-unsigned)\
[ES.102: Use signed types for arithmetic](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-signed)
diff --git a/docs/code-quality/c26453.md b/docs/code-quality/c26453.md
index 7012f697ae..f7a44f29ab 100644
--- a/docs/code-quality/c26453.md
+++ b/docs/code-quality/c26453.md
@@ -39,9 +39,9 @@ void leftshift(int shiftCount)
## See also
-[26450](c26450.md)\
-[26451](c26451.md)\
-[26452](c26452.md)\
-[26454](c26454.md)\
+[C26450](c26450.md)\
+[C26451](c26451.md)\
+[C26452](c26452.md)\
+[C26454](c26454.md)\
[ES.101: Use unsigned types for bit manipulation](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-unsigned)\
[ES.102: Use signed types for arithmetic](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-signed)
diff --git a/docs/code-quality/c26454.md b/docs/code-quality/c26454.md
index 15940afe9e..59e6c58c51 100644
--- a/docs/code-quality/c26454.md
+++ b/docs/code-quality/c26454.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Arithmetic overflow: 'operator' operation produces a negative unsigned result at compile time"
title: Warning C26454
+description: "Learn more about: Arithmetic overflow: 'operator' operation produces a negative unsigned result at compile time"
ms.date: 01/08/2017
f1_keywords: ["C26454", "RESULT_OF_ARITHMETIC_OPERATION_NEGATIVE_UNSIGNED"]
helpviewer_keywords: ["C26454"]
@@ -37,8 +37,8 @@ unsigned int negativeunsigned()
## See also
-[26450](c26450.md)\
-[26451](c26451.md)\
-[26452](c26452.md)\
-[26453](c26453.md)\
-[ES.106: Don't try to avoid negative values by using unsigned](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-nonnegative)
+[C26450](c26450.md)\
+[C26451](c26451.md)\
+[C26452](c26452.md)\
+[C26453](c26453.md)\
+[ES.106: Don't try to avoid negative values by using `unsigned`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-nonnegative)
diff --git a/docs/code-quality/c26455.md b/docs/code-quality/c26455.md
index ca27f3e0e2..756871cae8 100644
--- a/docs/code-quality/c26455.md
+++ b/docs/code-quality/c26455.md
@@ -4,7 +4,6 @@ description: "Learn more about the C26455 DEFAULT_CTOR_NOEXCEPT"
ms.date: 04/29/2022
f1_keywords: ["C26455", "DEFAULT_CTOR_NOEXCEPT"]
helpviewer_keywords: ["C26455"]
-ms.assetid: 27e86063-d969-49d8-8912-dcc2dc57249f
author: kylereedmsft
ms.author: kylereed
ms.custom: kr2b-contr-experiment
@@ -24,4 +23,4 @@ Code analysis name: `DEFAULT_CTOR_NOEXCEPT`
## See also
[C26439](./c26439.md)\
-[**C++ Core Guidelines** F.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept)
+[F.6: If your function must not throw, declare it `noexcept`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexceptt)
diff --git a/docs/code-quality/c26456.md b/docs/code-quality/c26456.md
index 0abedce51b..74456141ad 100644
--- a/docs/code-quality/c26456.md
+++ b/docs/code-quality/c26456.md
@@ -21,4 +21,4 @@ Code analysis name: `DONT_HIDE_OPERATORS`
## See also
-[C++ Core Guideline c.128](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c128-virtual-functions-should-specify-exactly-one-of-virtual-override-or-final)
+[C++ Core Guideline c.128](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override)
diff --git a/docs/code-quality/c26457.md b/docs/code-quality/c26457.md
index e1a5560feb..17430f1830 100644
--- a/docs/code-quality/c26457.md
+++ b/docs/code-quality/c26457.md
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26457"]
## Remarks
-Excerpt from the [C++ Core Guideline ES.48](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es48-avoid-casts):
+Excerpt from the [C++ Core Guideline ES.48](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts):
> Never cast to `(void)` to ignore a `[[nodiscard]]` return value. If you deliberately want to discard such a result, first think hard about whether that is really a good idea (there is usually a good reason the author of the function or of the return type used `[[nodiscard]]` in the first place). If you still think it's appropriate and your code reviewer agrees, use `std::ignore =` to turn off the warning which is simple, portable, and easy to grep.
diff --git a/docs/code-quality/c26460.md b/docs/code-quality/c26460.md
index 2307b0d592..008786d1a0 100644
--- a/docs/code-quality/c26460.md
+++ b/docs/code-quality/c26460.md
@@ -39,4 +39,4 @@ void Function2(MyStruct& myStruct)
## See also
-[C++ Core Guidelines con.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rconst-ref).
+[C++ Core Guidelines con.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-ref).
diff --git a/docs/code-quality/c26461.md b/docs/code-quality/c26461.md
index 85cd180b56..eb18934fd4 100644
--- a/docs/code-quality/c26461.md
+++ b/docs/code-quality/c26461.md
@@ -45,4 +45,4 @@ void Function2(MyStruct* myStruct)
## See also
-[C++ Core Guidelines con.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rconst-ref).
+[C++ Core Guidelines con.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-ref).
diff --git a/docs/code-quality/c26462.md b/docs/code-quality/c26462.md
index f39a230769..8f9adfd83d 100644
--- a/docs/code-quality/c26462.md
+++ b/docs/code-quality/c26462.md
@@ -31,4 +31,4 @@ void function1(int* ptr)
## See also
-[C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+[C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
diff --git a/docs/code-quality/c26463.md b/docs/code-quality/c26463.md
index a23cd9d028..1da69c4f32 100644
--- a/docs/code-quality/c26463.md
+++ b/docs/code-quality/c26463.md
@@ -17,4 +17,4 @@ Code analysis name: `USE_CONST_FOR_ELEMENTS`
## See also
-[C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+[C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
diff --git a/docs/code-quality/c26464.md b/docs/code-quality/c26464.md
index c96634aba1..aa5d02d128 100644
--- a/docs/code-quality/c26464.md
+++ b/docs/code-quality/c26464.md
@@ -17,4 +17,4 @@ Code analysis name: `USE_CONST_POINTER_FOR_ELEMENTS`
## See also
-[C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+[C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
diff --git a/docs/code-quality/c26465.md b/docs/code-quality/c26465.md
index d6b7fa8316..1ca3fee5d1 100644
--- a/docs/code-quality/c26465.md
+++ b/docs/code-quality/c26465.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule C26465 that enforces C++ Core Guidelines Type.3
## See also
-[C++ Core Guidelines Type.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-constcast)
+[C++ Core Guidelines Type.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-constcast)
## Example
diff --git a/docs/code-quality/c26466.md b/docs/code-quality/c26466.md
index 13c4d70db4..786d95159b 100644
--- a/docs/code-quality/c26466.md
+++ b/docs/code-quality/c26466.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule that enforces C++ Core Guidelines Type.2
## See also
-[C++ Core Guidelines Type.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-downcast)
+[C++ Core Guidelines Type.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-downcast)
## Example
diff --git a/docs/code-quality/c26471.md b/docs/code-quality/c26471.md
index e525394288..f44d8335af 100644
--- a/docs/code-quality/c26471.md
+++ b/docs/code-quality/c26471.md
@@ -29,4 +29,4 @@ void function(void* pValue)
## See also
-[C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-reinterpretcast)
+[C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-reinterpretcast)
diff --git a/docs/code-quality/c26472.md b/docs/code-quality/c26472.md
index 3a18f09f0e..67a2f80fd1 100644
--- a/docs/code-quality/c26472.md
+++ b/docs/code-quality/c26472.md
@@ -11,7 +11,7 @@ ms.assetid: 51e215a7-0e0a-4e6c-bff1-805bf5b1af29
> Don't use a static_cast for arithmetic conversions. Use brace initialization, `gsl::narrow_cast`, or `gsl::narrow`.
**C++ Core Guidelines**:
-[Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prosafety-type-safety-profile): Avoid casts
+[Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-arithmeticcast): Avoid casts
This rule helps to find places where static casts are used to convert between integral types. These casts are unsafe because the compiler wouldn't warn if any data loss occurs. Brace initializers are better for the cases where constants are used, and a compiler error is desired. There are also utilities from the Guidelines Support Library that help to describe intentions clearly:
diff --git a/docs/code-quality/c26473.md b/docs/code-quality/c26473.md
index 6ff7913be8..410129d326 100644
--- a/docs/code-quality/c26473.md
+++ b/docs/code-quality/c26473.md
@@ -11,7 +11,7 @@ ms.assetid: d88aaa57-0003-421f-8377-4e6a5c27f2df
> Don't cast between pointer types where the source type and the target type are the same.
**C++ Core Guidelines**:
-[Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prosafety-type-safety-profile): Avoid casts
+[Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-identitycast): Avoid casts
This rule helps to remove unnecessary or suspicious casts. Obviously, when a type is converted to itself, such a conversion is ineffective. Yet the fact that the cast is used may indicate a subtle design issue or a potential for regression if types change in future. It's always safer to use as few casts as possible.
diff --git a/docs/code-quality/c26474.md b/docs/code-quality/c26474.md
index 30fbf70bef..fd62d069f6 100644
--- a/docs/code-quality/c26474.md
+++ b/docs/code-quality/c26474.md
@@ -11,7 +11,7 @@ ms.assetid: 1e23a8e6-97fa-47f5-a279-b52aa2efafa4
> Don't cast between pointer types when the conversion could be implicit.
**C++ Core Guidelines**:\
-[Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prosafety-type-safety-profile): Avoid casts
+[Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-implicitpointercast): Avoid casts
In some cases, implicit casts between pointer types are safe and don't require you to write a specific cast expression. This rule finds instances of unnecessary casts you can safely remove.
diff --git a/docs/code-quality/c26475.md b/docs/code-quality/c26475.md
index b3856c661f..b44baae8a8 100644
--- a/docs/code-quality/c26475.md
+++ b/docs/code-quality/c26475.md
@@ -11,7 +11,7 @@ ms.assetid: 4ed71cf8-f155-4961-b4fe-77feb3b880c3
> Do not use function style C-casts.
**C++ Core Guidelines**:
-[ES.49](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es49-if-you-must-use-a-cast-use-a-named-cast): If you must use a cast, use a named cast
+[ES.49](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts-named): If you must use a cast, use a named cast
Function-style casts (for example, `int(1.1)`) are another form of C-style casts (like `(int)1.1`), which have questionable safety. Specifically, the compiler doesn't try to check if any data loss can occur either in C-casts or in function casts. In both cases, it's better either to avoid casting or to use a braced initializer if possible. If neither works, static casts may be suitable, but it's still better to use utilities from the Guidelines Support Library:
diff --git a/docs/code-quality/c26476.md b/docs/code-quality/c26476.md
index d942009432..b07cb80eea 100644
--- a/docs/code-quality/c26476.md
+++ b/docs/code-quality/c26476.md
@@ -21,4 +21,4 @@ Code analysis name: `USE_VARIANT`
## See also
-[C++ Core Guideline C.181](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ru-naked)
+[C++ Core Guideline C.181](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ru-naked)
diff --git a/docs/code-quality/c26477.md b/docs/code-quality/c26477.md
index fe713f5618..7da0611abf 100644
--- a/docs/code-quality/c26477.md
+++ b/docs/code-quality/c26477.md
@@ -21,4 +21,4 @@ Code analysis name: `USE_NULLPTR_NOT_CONSTANT`
## See also
-[C++ Core Guideline ES.47](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-nullptr)
+[C++ Core Guideline ES.47](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-nullptr)
diff --git a/docs/code-quality/c26478.md b/docs/code-quality/c26478.md
index e9c680bfad..47dc1d62bf 100644
--- a/docs/code-quality/c26478.md
+++ b/docs/code-quality/c26478.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Warning C26478: Don't use std::move on constant variables. (es.56)"
title: Warning C26478
+description: "Learn more about: Warning C26478: Don't use std::move on constant variables. (es.56)"
ms.date: 10/12/2023
f1_keywords: ["C26478", "NO_MOVE_OP_ON_CONST"]
helpviewer_keywords: ["C26478"]
@@ -37,4 +37,4 @@ To fix the issue, remove the redundant `std::move`.
## See also
-[ES.56 - Write `std::move()` only when you need to explicitly move an object to another scope](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-move)
+[ES.56: Write `std::move()` only when you need to explicitly move an object to another scope](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-move)
diff --git a/docs/code-quality/c26479.md b/docs/code-quality/c26479.md
index 336a12c33b..130adb11af 100644
--- a/docs/code-quality/c26479.md
+++ b/docs/code-quality/c26479.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Warning C26479: Don't use std::move to return a local variable. (f.48)"
title: Warning C26479
+description: "Learn more about: Warning C26479: Don't use std::move to return a local variable. (f.48)"
ms.date: 10/12/2023
f1_keywords: ["C26479", "NO_MOVE_RET_ON_LOCALS"]
helpviewer_keywords: ["C26479"]
@@ -38,5 +38,5 @@ S foo()
## See also
-[F.48 - Don't return `std::move(local)`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-return-move-local)
-[ES.56 - Write `std::move()` only when you need to explicitly move an object to another scope](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-move)
+[F.48: Don't `return std::move(local)`](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-return-move-local)\
+[ES.56: Write `std::move()` only when you need to explicitly move an object to another scope](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-move)
diff --git a/docs/code-quality/c26481.md b/docs/code-quality/c26481.md
index 051b2c96ee..31249a98f1 100644
--- a/docs/code-quality/c26481.md
+++ b/docs/code-quality/c26481.md
@@ -12,11 +12,11 @@ ms.assetid: 4fd8694d-b45b-4163-b2d5-88c4889d00ed
## Remarks
-This check supports the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md) rule [I.13](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-array): *Do not pass an array as a single pointer*. Whenever raw pointers are used in arithmetic operations they should be replaced with safer kinds of buffers, such as `span` or `vector`.
+This check supports the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) rule [I.13](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array): *Do not pass an array as a single pointer*. Whenever raw pointers are used in arithmetic operations they should be replaced with safer kinds of buffers, such as `span` or `vector`.
This check is more restrictive than I.13: it doesn't skip `zstring` or `czstring` types.
-C26481 and [C26485](c26485.md) come from the [Bounds Safety Profile](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds) rules. These rules were implemented in the first release of the C++ Core Guidelines Checker. They're applicable to the raw pointers category since they help to avoid unsafe use of raw pointers.
+C26481 and [C26485](c26485.md) come from the [Bounds Safety Profile](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-bounds) rules. These rules were implemented in the first release of the C++ Core Guidelines Checker. They're applicable to the raw pointers category since they help to avoid unsafe use of raw pointers.
## Example
diff --git a/docs/code-quality/c26482.md b/docs/code-quality/c26482.md
index e360a51d10..9fafb3b912 100644
--- a/docs/code-quality/c26482.md
+++ b/docs/code-quality/c26482.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule C26482 that enforces C++ Core Guidelines Bounds.2
## See also
-[C++ Core Guidelines Bounds.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds)
+[C++ Core Guidelines Bounds.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-arrayindex)
## Example
diff --git a/docs/code-quality/c26483.md b/docs/code-quality/c26483.md
index ea4c10c6b9..45fb0f2471 100644
--- a/docs/code-quality/c26483.md
+++ b/docs/code-quality/c26483.md
@@ -1,9 +1,9 @@
---
title: Warning C26483
+description: CppCoreCheck rule C26483 that enforces C++ Core Guidelines Bounds.2
ms.date: 03/22/2018
f1_keywords: ["C26483", "STATIC_INDEX_OUT_OF_RANGE"]
helpviewer_keywords: ["C26483"]
-description: CppCoreCheck rule C26483 that enforces C++ Core Guidelines Bounds.2
---
# Warning C26483
@@ -11,7 +11,7 @@ description: CppCoreCheck rule C26483 that enforces C++ Core Guidelines Bounds.2
## See also
-[C++ Core Guidelines Bounds.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds)
+[C++ Core Guidelines Bounds.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-arrayindex)
## Example
@@ -24,5 +24,4 @@ void function()
int arr2[] { 1, 2, 3 };
arr2[3] = 4; // C26483, 3 is outside the bounds of the array
}
-
```
diff --git a/docs/code-quality/c26485.md b/docs/code-quality/c26485.md
index e0aa010236..ef77b05790 100644
--- a/docs/code-quality/c26485.md
+++ b/docs/code-quality/c26485.md
@@ -12,9 +12,9 @@ ms.assetid: 8915ad2d-7fd6-4bbc-abe4-0b3292ea2170
## Remarks
-Like [C26481](c26481.md), this check helps to enforce the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md) rule [I.13](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-array): *Do not pass an array as a single pointer*. The rule detects places where static array type information is lost from decay to a raw pointer. The `zstring` and `czstring` types aren't excluded.
+Like [C26481](c26481.md), this check helps to enforce the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) rule [I.13](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array): *Do not pass an array as a single pointer*. The rule detects places where static array type information is lost from decay to a raw pointer. The `zstring` and `czstring` types aren't excluded.
-C26481 and C26485 come from the [Bounds Safety Profile](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds) rules. These rules were implemented in the first release of the C++ Core Guidelines Checker. They're applicable to the raw pointers category since they help to avoid unsafe use of raw pointers.
+C26481 and C26485 come from the [Bounds Safety Profile](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-bounds) rules. These rules were implemented in the first release of the C++ Core Guidelines Checker. They're applicable to the raw pointers category since they help to avoid unsafe use of raw pointers.
## Example
diff --git a/docs/code-quality/c26488.md b/docs/code-quality/c26488.md
index b3ae0ce888..a54608facb 100644
--- a/docs/code-quality/c26488.md
+++ b/docs/code-quality/c26488.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C26488 LIFETIMES_DEREF_NULL_POINTER"
title: Warning C26488
+description: "Learn more about: Warning C26488 LIFETIMES_DEREF_NULL_POINTER"
ms.date: 12/14/2018
f1_keywords: ["C26488", "LIFETIMES_DEREF_NULL_POINTER"]
helpviewer_keywords: ["C26488"]
-ms.assetid: 2ade0d31-f259-49de-8676-cce6092fabfc
author: kylereedmsft
ms.author: kylereed
---
@@ -28,9 +27,9 @@ void ex1()
The Lifetime guidelines from the C++ core guidelines outline a contract that code can follow which will enable more thorough static memory leak and dangling pointer detection. The basic ideas behind the guidelines are:
-1) Never dereference an invalid (dangling) or known-null pointer
-2) Never return (either formal return or out parameter) any pointer from a function.
-3) Never pass an invalid (dangling) pointer to any function.
+1. Never dereference an invalid (dangling) or known-null pointer.
+1. Never return (either formal return or out parameter) any pointer from a function.
+1. Never pass an invalid (dangling) pointer to any function.
## See also
diff --git a/docs/code-quality/c26489.md b/docs/code-quality/c26489.md
index 2f252dc766..85df9e569a 100644
--- a/docs/code-quality/c26489.md
+++ b/docs/code-quality/c26489.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C26489 LIFETIMES_DEREF_INVALID_POINTER"
title: Warning C26489
+description: "Learn more about: Warning C26489 LIFETIMES_DEREF_INVALID_POINTER"
ms.date: 12/14/2018
f1_keywords: ["C26489", "LIFETIMES_DEREF_INVALID_POINTER"]
helpviewer_keywords: ["C26489"]
-ms.assetid: 15983d4f-f615-42e7-8521-ee094b87d066
author: kylereedmsft
ms.author: kylereed
---
@@ -30,9 +29,9 @@ int ex1()
The Lifetime guidelines from the C++ core guidelines outline a contract that code can follow which will enable more thorough static memory leak and dangling pointer detection. The basic ideas behind the guidelines are:
-1) Never dereference an invalid (dangling) or known-null pointer
-2) Never return (either formal return or out parameter) any pointer from a function.
-3) Never pass an invalid (dangling) pointer to any function.
+1. Never dereference an invalid (dangling) or known-null pointer.
+1. Never return (either formal return or out parameter) any pointer from a function.
+1. Never pass an invalid (dangling) pointer to any function.
## See also
diff --git a/docs/code-quality/c26490.md b/docs/code-quality/c26490.md
index 48e766138e..141a6a1941 100644
--- a/docs/code-quality/c26490.md
+++ b/docs/code-quality/c26490.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule C26490 that enforces C++ Core Guidelines Type.1
## See also
-[C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+[C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-reinterpretcast).
## Example
diff --git a/docs/code-quality/c26491.md b/docs/code-quality/c26491.md
index b55c5b0f32..109c4dae5a 100644
--- a/docs/code-quality/c26491.md
+++ b/docs/code-quality/c26491.md
@@ -7,4 +7,4 @@ helpviewer_keywords: ["C26491"]
---
# Warning C26491
-> Don't use `static_cast` downcasts. See [C++ Core Guidelines Type.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+> Don't use `static_cast` downcasts. See [C++ Core Guidelines Type.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-downcast).
diff --git a/docs/code-quality/c26492.md b/docs/code-quality/c26492.md
index 2e6ede538f..33735543dc 100644
--- a/docs/code-quality/c26492.md
+++ b/docs/code-quality/c26492.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule C26492 that enforces C++ Core Guidelines Type.3
## See also
-[C++ Core Guidelines Type.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+[C++ Core Guidelines Type.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-constcast).
## Example
diff --git a/docs/code-quality/c26493.md b/docs/code-quality/c26493.md
index 34d7225070..c67d9ffdd5 100644
--- a/docs/code-quality/c26493.md
+++ b/docs/code-quality/c26493.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule that enforces C++ Core Guidelines Type.4
## See also
-[C++ Core Guidelines Type.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+[C++ Core Guidelines Type.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-cstylecast).
## Example
diff --git a/docs/code-quality/c26494.md b/docs/code-quality/c26494.md
index 100acee105..447b03a4c4 100644
--- a/docs/code-quality/c26494.md
+++ b/docs/code-quality/c26494.md
@@ -38,4 +38,4 @@ void function()
## See also
[ES.20: Always initialize an object](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-always)\
-[C++ Core Guidelines Type.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#prosafety-type-safety-profile)
+[Pro.safety: Type-safety profile](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-type)
diff --git a/docs/code-quality/c26495.md b/docs/code-quality/c26495.md
index f99e5697b8..5bfc3c1685 100644
--- a/docs/code-quality/c26495.md
+++ b/docs/code-quality/c26495.md
@@ -11,7 +11,7 @@ helpviewer_keywords: ["C26495"]
## Remarks
-A member variable isn't initialized by a constructor or by an initializer. Make sure all variables are initialized by the end of construction. For more information, see C++ Core Guidelines [Type.6](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type) and [C.48](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c48-prefer-in-class-initializers-to-member-initializers-in-constructors-for-constant-initializers).
+A member variable isn't initialized by a constructor or by an initializer. Make sure all variables are initialized by the end of construction. For more information, see C++ Core Guidelines [Type.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-memberinit) and [C.48](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-in-class-initializer).
This check is intra-procedural. Whenever there's a function call to a nonconst member function, the check assumes that this member function initializes all of the members. This heuristic can result in missed errors and is in place to avoid false positive results. Moreover, when a member is passed by nonconst reference to a function, the check assumes that the function initializes the member.
diff --git a/docs/code-quality/c26496.md b/docs/code-quality/c26496.md
index b5ad576328..9fd6800df5 100644
--- a/docs/code-quality/c26496.md
+++ b/docs/code-quality/c26496.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule C26496 that enforces C++ Core Guidelines Con.4
## See also
-[C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+[C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
## Example
diff --git a/docs/code-quality/c26497.md b/docs/code-quality/c26497.md
index 7a7cd3fc6c..36b52d3bfe 100644
--- a/docs/code-quality/c26497.md
+++ b/docs/code-quality/c26497.md
@@ -11,7 +11,7 @@ description: CppCoreCheck rule that enforces C++ Core Guidelines F.4
## See also
-[C++ Core Guidelines F.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rf-constexpr).
+[C++ Core Guidelines F.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-constexpr).
## Example
diff --git a/docs/code-quality/c26498.md b/docs/code-quality/c26498.md
index 8277d9601c..417a425427 100644
--- a/docs/code-quality/c26498.md
+++ b/docs/code-quality/c26498.md
@@ -9,7 +9,7 @@ helpviewer_keywords: ["C26498"]
> The function '*function*' is constexpr, mark variable '*variable*' constexpr if compile-time evaluation is desired (con.5)
-This rule helps to enforce Con.5 from the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-constexpr): use constexpr for values that can be computed at compile time.
+This rule helps to enforce [Con.5: Use `constexpr` for values that can be computed at compile time](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-constexpr) in the C++ Core Guidelines.
## Remarks
@@ -58,6 +58,6 @@ void foo()
## See also
-[C26497](./c26407.md)\
-[C26814](./c26814.md)\
-[Con.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-constexpr)
\ No newline at end of file
+[C26497](c26407.md)\
+[C26814](c26814.md)\
+[Con.5: Use `constexpr` for values that can be computed at compile time](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-constexpr)
diff --git a/docs/code-quality/c26812.md b/docs/code-quality/c26812.md
index f5b54e1086..d7a3ef1038 100644
--- a/docs/code-quality/c26812.md
+++ b/docs/code-quality/c26812.md
@@ -47,4 +47,4 @@ Print_color(Product_info::Red); // Error: cannot convert Product_info to int.
## See also
-[Enum.3 Prefer enum class over enum](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#enum3-prefer-class-enums-over-plain-enums)
+[Enum.3 Prefer enum class over enum](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Renum-class)
diff --git a/docs/code-quality/c26814.md b/docs/code-quality/c26814.md
index 0727406c7d..f446f2644b 100644
--- a/docs/code-quality/c26814.md
+++ b/docs/code-quality/c26814.md
@@ -33,4 +33,4 @@ void bar()
## See also
-[Con.5 Use constexpr for all variables that can be computed at compile time](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rconst-constexpr)
+[Con.5 Use constexpr for all variables that can be computed at compile time](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-constexpr)
diff --git a/docs/code-quality/c26817.md b/docs/code-quality/c26817.md
index fd72d2a527..470b699dd2 100644
--- a/docs/code-quality/c26817.md
+++ b/docs/code-quality/c26817.md
@@ -9,7 +9,7 @@ helpviewer_keywords: ["C26817"]
> Potentially expensive copy of variable *name* in range-for loop. Consider making it a const reference (es.71).
-For more information, see [ES.71 notes](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-for-range) in the C++ Core Guidelines.
+For more information, see [ES.71: Prefer a range-`for`-statement to a `for`-statement when there is a choice](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-for-range) in the C++ Core Guidelines.
## Example
diff --git a/docs/code-quality/c26818.md b/docs/code-quality/c26818.md
index aed557b6ad..52adf70f5b 100644
--- a/docs/code-quality/c26818.md
+++ b/docs/code-quality/c26818.md
@@ -14,7 +14,7 @@ no-loc: [ default, int, char ]
This check covers the missing **`default`** label in switch statements that switch over a non-enumeration type, such as **`int`**, **`char`**, and so on.
-For more information, see [ES.79: Use default to handle common cases (only)](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es79-use-default-to-handle-common-cases-only) in the C++ Core Guidelines.
+For more information, see [ES.79: Use default to handle common cases (only)](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-default) in the C++ Core Guidelines.
## Example
diff --git a/docs/code-quality/c26819.md b/docs/code-quality/c26819.md
index 34dcd15ac7..2e2007c9ff 100644
--- a/docs/code-quality/c26819.md
+++ b/docs/code-quality/c26819.md
@@ -87,4 +87,4 @@ void foo(int a)
## See also
-[ES.78: Don't rely on implicit fallthrough in `switch` statements](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-break)
\ No newline at end of file
+[ES.78: Don't rely on implicit fallthrough in `switch` statements](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-break)
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
diff --git a/docs/code-quality/c26838.md b/docs/code-quality/c26838.md
new file mode 100644
index 0000000000..652ec704cd
--- /dev/null
+++ b/docs/code-quality/c26838.md
@@ -0,0 +1,62 @@
+---
+title: Warning C26838
+description: Learn about Microsoft C++ code analysis warning C26838.
+author: Rastaban
+ms.author: philc
+ms.topic: reference
+ms.date: 1/10/2025
+---
+# 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.
+
+This warning was added in Visual Studio 2022 version 17.13.
+
+## Remarks
+
+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;
+}
+```
+
+The expression `numberOfElements * sizeof(int)`, `numberOfElements` is signed and `sizeof(int)` is unsigned. On 64-bit machines, `numberOfElements` is 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.
+
+## Example
+
+To fix the previous code example in which `numberOfElements * sizeof(int)` might overflow due to a negative signed value, introduce a check to ensure 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)
\ No newline at end of file
diff --git a/docs/code-quality/c26839.md b/docs/code-quality/c26839.md
new file mode 100644
index 0000000000..96d47c6df2
--- /dev/null
+++ b/docs/code-quality/c26839.md
@@ -0,0 +1,53 @@
+---
+title: Warning C26839
+description: Learn about Microsoft C++ code analysis warning C26839.
+author: Rastaban
+ms.author: philc
+ms.topic: reference
+ms.date: 1/10/2025
+---
+# 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.
+
+This warning was added in Visual Studio 2022 version 17.13.
+
+## Remarks
+
+Reports that the size specified for an 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;
+}
+```
+
+The expression `new int[size]`, `size` is signed. The compiler converts the signed value to an unsigned value to calculate how many bytes to be allocated for the array. When `size` is negative, the result of that calculation may overflow or have unexpected results when passed to `new`.
+
+This check is the same as [`C26838`](c26838.md), but applies only to `new T[]`.
+
+This check sometimes fails to recognize that certain checks can prevent overflows because the check is conservative.
+
+## Example
+
+To fix the previous code example in which the size calculation might overflow due to a negative signed value, introduce a check to ensure 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
diff --git a/docs/code-quality/c28020.md b/docs/code-quality/c28020.md
index d3597bd143..927e462bda 100644
--- a/docs/code-quality/c28020.md
+++ b/docs/code-quality/c28020.md
@@ -1,15 +1,32 @@
---
-description: "Learn more about: Warning C28020"
title: Warning C28020
-ms.date: 11/04/2016
+description: "Learn more about: Warning C28020"
+ms.date: 03/25/2025
f1_keywords: ["C28020"]
helpviewer_keywords: ["C28020"]
-ms.assetid: 3612185a-0858-4ba9-b795-4a0681073cf7
---
# Warning C28020
-> The expression '*expr*' is not true at this call
+> The expression '*expr*' is not true at this call.
This warning is reported when the `_Satisfies_` expression listed isn't true. Frequently, the warning indicates an incorrect parameter.
If this warning occurs on a function declaration, the annotations indicate an impossible condition.
+
+## Example
+
+The following example generates C28020:
+
+```cpp
+#include
+
+int func(_In_range_(0, 10) int value)
+{
+ return value;
+}
+
+int main()
+{
+ func(11); // C28020
+}
+```
diff --git a/docs/code-quality/c28112.md b/docs/code-quality/c28112.md
index d717ffd596..61e0a5588e 100644
--- a/docs/code-quality/c28112.md
+++ b/docs/code-quality/c28112.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C28112"
title: Warning C28112
+description: "Learn more about: Warning C28112"
ms.date: 08/25/2022
f1_keywords: ["C28112", "INTERLOCKED_ACCESS", "__WARNING_INTERLOCKED_ACCESS"]
helpviewer_keywords: ["C28112"]
-ms.assetid: 2720a5dc-84e9-4f78-a8c7-a320c9f9216b
---
# Warning C28112
@@ -16,7 +15,7 @@ A variable that is accessed by using the Interlocked executive support routines,
`InterlockedXxx` functions are intended to provide atomic operations, but are only atomic with respect to other `InterlockedXxx` functions. Although certain ordinary assignments, accesses, and comparisons to variables that are used by the Interlocked\* routines can be safely accessed by using a different function, the risk is great enough to justify examining each instance.
-Code analysis name: INTERLOCKED_ACCESS
+Code analysis name: `INTERLOCKED_ACCESS`
## Example
@@ -36,7 +35,7 @@ InterlockedDecrement(&inter_var);
InterlockedIncrement(&inter_var);
```
-## See Also
+## See also
[InterlockedIncrement function (wdm.h)](/windows-hardware/drivers/ddi/wdm/nf-wdm-interlockedincrement)\
[InterlockedDecrement function (wdm.h)](/windows-hardware/drivers/ddi/wdm/nf-wdm-interlockeddecrement)
diff --git a/docs/code-quality/c28159.md b/docs/code-quality/c28159.md
index e17a31ee6f..05fbe31944 100644
--- a/docs/code-quality/c28159.md
+++ b/docs/code-quality/c28159.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: Warning C28159"
title: Warning C28159
+description: "Learn more about: Warning C28159"
ms.date: 09/08/2022
f1_keywords: ["C28159", "USE_OTHER_FUNCTION", "__WARNING_USE_OTHER_FUNCTION"]
helpviewer_keywords: ["C28159"]
-ms.assetid: fab6cd58-0985-4ef6-89a2-64ed04297437
---
# Warning C28159
-> Consider using `*function_name_1*` instead of `*function_name_2*`. Reason: *reason*
+> Consider using *`function_name_1`* instead of *`function_name_2`*. Reason: *reason*
This warning occurs when you use a function that is semantically equivalent to an alternative, preferred function call.
@@ -16,7 +15,7 @@ This warning occurs when you use a function that is semantically equivalent to a
C28159 is a general warning message; the annotation `__drv_preferredFunction` was used (possibly with a conditional `__drv_when`() annotation) to flag a bad coding practice.
-Code analysis name: USE_OTHER_FUNCTION
+Code analysis name: `USE_OTHER_FUNCTION`
## Example
diff --git a/docs/code-quality/c28160.md b/docs/code-quality/c28160.md
index 38ea9be0b1..eeee7046da 100644
--- a/docs/code-quality/c28160.md
+++ b/docs/code-quality/c28160.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C28160"
title: Warning C28160
+description: "Learn more about: Warning C28160"
ms.date: 09/08/2022
f1_keywords: ["C28160", "ERROR", "__WARNING_ERROR"]
helpviewer_keywords: ["C28160"]
-ms.assetid: cab15f6b-909c-4cc8-81a0-c24ac7c91c7c
---
# Warning C28160
@@ -16,4 +15,4 @@ This warning is reported when a `__drv_error` annotation has been encountered.
This annotation is used to flag coding practices that should be fixed, and can be used with a `__drv_when` annotation to indicate specific combinations of parameters.
-Code analysis name: ERROR
+Code analysis name: `ERROR`
diff --git a/docs/code-quality/c28196.md b/docs/code-quality/c28196.md
index 4bd26b4162..388766230a 100644
--- a/docs/code-quality/c28196.md
+++ b/docs/code-quality/c28196.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C28196"
title: Warning C28196
+description: "Learn more about: Warning C28196"
ms.date: 11/04/2016
f1_keywords: ["C28196", "RETURNING_BAD_RESULT", "__WARNING_RETURNING_BAD_RESULT"]
helpviewer_keywords: ["C28196"]
-ms.assetid: 5ee89e96-2796-4316-a64c-702463ca1374
---
# Warning C28196
@@ -51,4 +50,4 @@ Item *get_item(_In_reads_(len) Item *items, size_t len, size_t index) {
## See also
[Annotating function parameters and return values](./annotating-function-parameters-and-return-values.md)\
-[Specifying When and Where an Annotation Applies](./specifying-when-and-where-an-annotation-applies.md)\
+[Specifying When and Where an Annotation Applies](./specifying-when-and-where-an-annotation-applies.md)
diff --git a/docs/code-quality/c28208.md b/docs/code-quality/c28208.md
index 1a9dc76e94..6d352f4247 100644
--- a/docs/code-quality/c28208.md
+++ b/docs/code-quality/c28208.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C28208"
title: Warning C28208
+description: "Learn more about: Warning C28208"
ms.date: 10/03/2022
f1_keywords: ["C28208", "FUNCTION_TYPE_REDECLARATION", "__WARNING_FUNCTION_TYPE_REDECLARATION"]
helpviewer_keywords: ["C28208"]
-ms.assetid: e9a8ce37-3b05-4202-b078-5570ae496d1d
---
# Warning C28208
@@ -30,8 +29,8 @@ typedef void test_type(void*);
#include "c28208_example.h"
test_type my_test1;
test_type my_test2;
-void my_test1(int* x){}; // Generates C28208
-void my_test2(void* x){}; // Doesn't generate C28208
+void my_test1(int* x){} // Generates C28208
+void my_test2(void* x){} // Doesn't generate C28208
int main()
{
diff --git a/docs/code-quality/c28310.md b/docs/code-quality/c28310.md
index 4b85718201..30aa4d8244 100644
--- a/docs/code-quality/c28310.md
+++ b/docs/code-quality/c28310.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C28310"
title: Warning C28310
+description: "Learn more about: Warning C28310"
ms.date: 11/04/2016
f1_keywords: ["C28310"]
-ms.assetid: 51054ca8-01b6-454b-9853-f05f1c817b18
+helpviewer_keywords: ["C28310"]
---
# Warning C28310
diff --git a/docs/code-quality/c28311.md b/docs/code-quality/c28311.md
index 70e03e716e..9d72006cae 100644
--- a/docs/code-quality/c28311.md
+++ b/docs/code-quality/c28311.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C28311"
title: Warning C28311
+description: "Learn more about: Warning C28311"
ms.date: 11/04/2016
f1_keywords: ["C28311"]
-ms.assetid: 2c76e07a-4418-40ef-8a77-c62774bc3677
+helpviewer_keywords: ["C28311"]
---
# Warning C28311
diff --git a/docs/code-quality/c28312.md b/docs/code-quality/c28312.md
index 55f6154d54..852d5bec16 100644
--- a/docs/code-quality/c28312.md
+++ b/docs/code-quality/c28312.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C28312"
title: Warning C28312
+description: "Learn more about: Warning C28312"
ms.date: 11/04/2016
f1_keywords: ["C28312"]
-ms.assetid: 19828546-33c9-4373-b7df-2a362ca12637
+helpviewer_keywords: ["C28312"]
---
# Warning C28312
diff --git a/docs/code-quality/c33001.md b/docs/code-quality/c33001.md
index d3208941b4..679ffc1e04 100644
--- a/docs/code-quality/c33001.md
+++ b/docs/code-quality/c33001.md
@@ -13,14 +13,23 @@ helpviewer_keywords: ["C33001"]
## Remarks
-This warning is triggered when an uninitialized `VARIANT` is passed to an API such as `VariantClear`
-that expects an initialized `VARIANT`.
+This warning is triggered when an uninitialized `VARIANT` is passed to an API, such as `VariantClear`, that clears the object. Initialize the `VARIANT` before passing it to these functions so it can be properly cleared.
+
+This warning applies to these functions:
+
+* `VariantClear`
+* `PropVariantClear`
+* `VariantCopy`
+* `VariantCopyInd`
+* `VariantChangeType`
+* `VariantChangeTypeEx`
+* `DestroyPropVariant`
Code analysis name: `VARIANTCLEAR_UNINITIALIZED`
## Example
-The following sample code causes warning C33001:
+The following code causes warning C33001:
```cpp
#include
@@ -36,11 +45,11 @@ HRESULT foo(bool some_condition)
//...
}
- VariantClear(&var); // C33001
+ VariantClear(&var); // C33001
}
```
-These warnings are corrected by ensuring `VariantClear` is called only for a properly initialized `VARIANT`:
+In this example, the warning is corrected by calling `VariantClear` only after `var` has been initialized:
```cpp
#include
@@ -54,12 +63,12 @@ HRESULT foo(bool some_condition)
//...
VariantInit(&var);
//...
- VariantClear(&var); // C33001
+ VariantClear(&var); // OK
}
}
```
## See also
-[C33004](./c33004.md)
+[C33004](./c33004.md)\
[C33005](./c33005.md)
diff --git a/docs/code-quality/c33004.md b/docs/code-quality/c33004.md
index 752103c945..44486d8ffc 100644
--- a/docs/code-quality/c33004.md
+++ b/docs/code-quality/c33004.md
@@ -49,5 +49,5 @@ void t2(_Out_ VARIANT* pv)
## See also
-[C33001](./c33001.md)
+[C33001](./c33001.md)\
[C33005](./c33005.md)
diff --git a/docs/code-quality/c33005.md b/docs/code-quality/c33005.md
index 8c056ba671..41509513e3 100644
--- a/docs/code-quality/c33005.md
+++ b/docs/code-quality/c33005.md
@@ -55,5 +55,5 @@ void foo()
## See also
-[C33001](./c33001.md)
+[C33001](./c33001.md)\
[C33004](./c33004.md)
diff --git a/docs/code-quality/c6029.md b/docs/code-quality/c6029.md
index 85829020b6..729f39ab08 100644
--- a/docs/code-quality/c6029.md
+++ b/docs/code-quality/c6029.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Warning C6029"
title: Warning C6029
+description: "Learn more about: Warning C6029"
ms.date: 2/07/2023
f1_keywords: ["C6029", "USING_TAINTED_DATA", "__WARNING_USING_TAINTED_DATA"]
helpviewer_keywords: ["C6029"]
@@ -35,7 +35,7 @@ void processData(FILE* file)
}
```
-The fix for the issue depends on the nature of the data and the behavior of the annotated function that triggers the diagnostic. For more information, see the documentation for that function. A straightforward fix is to check the size before the second call to `std:fread`. In the next example, we throw an exception to terminate the function. Most real-world code would instead have an error recovery strategy that's specific to the scenario.
+The fix for the issue depends on the nature of the data and the behavior of the annotated function that triggers the diagnostic. For more information, see the documentation for that function. A straightforward fix is to check the size before the second call to `std::fread`. In the next example, we throw an exception to terminate the function. Most real-world code would instead have an error recovery strategy that's specific to the scenario.
```cpp
void processData(FILE* file)
@@ -55,7 +55,7 @@ void processData(FILE* file)
}
```
-In `std:fread` and similar functions, the code may need to read large amounts of data. To handle large data, you can allocate the size of the buffer dynamically after the size becomes known. Or, you can call `std:fread` multiple times as needed to read in the rest of the data. If you allocate the buffer dynamically, we recommend you put a limit on the size to avoid introducing an out-of-memory exploit for large values. We don't use this approach in our example because it's already bounded by the size of `uint8_t`.
+In `std::fread` and similar functions, the code may need to read large amounts of data. To handle large data, you can allocate the size of the buffer dynamically after the size becomes known. Or, you can call `std::fread` multiple times as needed to read in the rest of the data. If you allocate the buffer dynamically, we recommend you put a limit on the size to avoid introducing an out-of-memory exploit for large values. We don't use this approach in our example because it's already bounded by the size of `uint8_t`.
```cpp
void processDataDynamic(FILE* file)
diff --git a/docs/code-quality/c6030.md b/docs/code-quality/c6030.md
index 41d536acb3..d839858cfa 100644
--- a/docs/code-quality/c6030.md
+++ b/docs/code-quality/c6030.md
@@ -6,17 +6,18 @@ f1_keywords: ["C6030", "USE_ATTRIBUTE_NORETURN", "__WARNING_USE_ATTRIBUTE_NORETU
helpviewer_keywords: ["C6030"]
---
-# Warning C6030
+# Warning C6030
> Use attribute [[noreturn]] over __declspec(noreturn) in function '*function-name*'
## Remarks
-This warning suggests using the C++11 standard attribute `[[noreturn]]` in place of the declspec variant `__declspec(noreturn)`. The standard attribute provides better cross-platform support because it doesn't rely on language extensions.
+This warning suggests using the C++11 standard attribute [`[[noreturn]]`](../cpp/attributes.md#noreturn) in place of the declspec variant [`__declspec(noreturn)`](../cpp/noreturn.md). The standard attribute provides better cross-platform support because it doesn't rely on language extensions.
This warning is off by default and isn't part of the `All Rules` rule set. To enable this warning, it must be added to the rule set file being used.
This check is available in Visual Studio 2022 version 17.0 and later versions.
+
Code analysis name: `USE_ATTRIBUTE_NORETURN`
## Example
@@ -24,15 +25,13 @@ Code analysis name: `USE_ATTRIBUTE_NORETURN`
The following code generates C6030:
```cpp
-__declspec(noreturn) void TerminateApplication();
-
+__declspec(noreturn) void terminate_application();
```
Fix the issue by using the `[[noreturn]]` attribute:
```cpp
-[[ noreturn ]] void TerminateApplication();
-
+[[noreturn]] void terminate_application();
```
## See also
diff --git a/docs/code-quality/c6102.md b/docs/code-quality/c6102.md
index d1dd840a69..9c35f2bc5a 100644
--- a/docs/code-quality/c6102.md
+++ b/docs/code-quality/c6102.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C6102"
title: Warning C6102
+description: "Learn more about: Warning C6102"
ms.date: 11/04/2016
f1_keywords: ["C6102"]
-ms.assetid: cfd49a8c-df46-48de-8dcb-02ecf2450034
+helpviewer_keywords: ["C6102"]
---
# Warning C6102
diff --git a/docs/code-quality/c6103.md b/docs/code-quality/c6103.md
index d348b72bd5..6c9dfdcfcd 100644
--- a/docs/code-quality/c6103.md
+++ b/docs/code-quality/c6103.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C6103"
title: Warning C6103
+description: "Learn more about: Warning C6103"
ms.date: 11/04/2016
f1_keywords: ["C6103"]
-ms.assetid: 22d1ab35-31a3-4ba9-8ef4-7a64bce66621
+helpviewer_keywords: ["C6103"]
---
# Warning C6103
diff --git a/docs/code-quality/c6296.md b/docs/code-quality/c6296.md
index c5b5b21acb..e6f7da0340 100644
--- a/docs/code-quality/c6296.md
+++ b/docs/code-quality/c6296.md
@@ -1,47 +1,35 @@
---
-description: "Learn more about: Warning C6296"
title: Warning C6296
-ms.date: 11/04/2016
+description: "Learn more about: Warning C6296"
+ms.date: 03/30/2025
f1_keywords: ["C6296", "LOOP_ONLY_EXECUTED_ONCE", "__WARNING_LOOP_ONLY_EXECUTED_ONCE"]
helpviewer_keywords: ["C6296"]
-ms.assetid: 226573e0-db18-4c44-8fc6-0bc09d1028bc
---
# Warning C6296
-> Ill-defined for-loop: Loop body only executed once
+> Ill-defined for-loop. Loop body only executed once.
## Remarks
-This warning indicates that a for-loop might not function as intended. When the index is unsigned and a loop counts down from zero, its body is run only once.
+This warning indicates that a for-loop might unintentionally execute only once. A loop with an unsigned index counting down from zero or a mistaken use of `==` might cause this warning.
Code analysis name: `LOOP_ONLY_EXECUTED_ONCE`
## Example
-The following code generates this warning:
+The following example generates C6296. Each for-loop shown executes exactly once.
```cpp
-void f( )
+int main()
{
- unsigned int i;
+ for (unsigned int i = 0; i < 10; i--) {} // C6296
+ // Use the following line to resolve the warning:
+ // for (unsigned int i = 0; i < 10; i++) {}
- for (i = 0; i < 100; i--)
- {
- // code ...
- }
-}
-```
+ for (int i = 0; i == 0; i++) {} // C6296
-To correct this warning, use the following code:
-
-```cpp
-void f( )
-{
- unsigned int i;
+ for (int i = 0; i < 1; i++) {} // OK
- for (i = 0; i < 100; i++)
- {
- // code ...
- }
+ for (int i = 1; i > 0; i--) {} // OK
}
```
diff --git a/docs/code-quality/c6331.md b/docs/code-quality/c6331.md
index 8c3047f9cd..b0e322a1d4 100644
--- a/docs/code-quality/c6331.md
+++ b/docs/code-quality/c6331.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: Warning C6331"
title: Warning C6331
+description: "Learn more about: Warning C6331"
ms.date: 10/03/2022
f1_keywords: ["C6331", "VirtualFreeInvalidParam1", "__WARNING_VIRTUALFREEINVALIDPARAM1"]
helpviewer_keywords: ["C6331"]
-ms.assetid: cb1ecc2c-29a5-4c57-acf2-0954a4c047b1
---
# Warning C6331
-> Invalid parameter: passing MEM_RELEASE and MEM_DECOMMIT in conjunction to `*function*` is not allowed. This results in the failure of this call
+> Invalid parameter: passing MEM_RELEASE and MEM_DECOMMIT in conjunction to *`function`* is not allowed. This results in the failure of this call
This message indicates that an invalid parameter is passed to `VirtualFree` or `VirtualFreeEx`. `VirtualFree` and `VirtualFreeEx` both reject the flags (`MEM_RELEASE | MEM_DECOMMIT`) in combination. Therefore, the values `MEM_DECOMMIT` and `MEM_RELEASE` may not be used together in the same call.
diff --git a/docs/code-quality/c6383.md b/docs/code-quality/c6383.md
index 84bf8c2737..72d0ef8b4f 100644
--- a/docs/code-quality/c6383.md
+++ b/docs/code-quality/c6383.md
@@ -1,14 +1,13 @@
---
-description: "Learn more about: Warning C6383"
title: Warning C6383
+description: "Learn more about: Warning C6383"
ms.date: 09/07/2022
f1_keywords: ["C6383", "ELEMENTS_TO_BYTES", "__WARNING_ELEMENTS_TO_BYTES"]
helpviewer_keywords: ["C6383"]
-ms.assetid: f5ff7938-0fbe-4b71-b98f-098fe887799d
---
# Warning C6383
-> Buffer overrun due to conversion of an element count into a byte count: an element count is expected for parameter `*parameter_name*` in call to `*function_name*`
+> Buffer overrun due to conversion of an element count into a byte count: an element count is expected for parameter *`parameter_name`* in call to *`function_name`*
This warning indicates that a non-constant byte count is being passed when an element count is instead required.
diff --git a/docs/code-quality/c6386.md b/docs/code-quality/c6386.md
index 2419833b70..7aa56f9f9f 100644
--- a/docs/code-quality/c6386.md
+++ b/docs/code-quality/c6386.md
@@ -1,10 +1,9 @@
---
description: "Learn more about: Warning C6386"
title: Warning C6386
-ms.date: 11/04/2016
+ms.date: 4/30/2025
f1_keywords: ["C6386", "WRITE_OVERRUN", "__WARNING_WRITE_OVERRUN"]
helpviewer_keywords: ["C6386"]
-ms.assetid: 84e69fe8-8f03-4bb3-b194-e5551882e214
---
# Warning C6386
@@ -23,15 +22,14 @@ The following code generates both this warning and [C6201](../code-quality/c6201
```cpp
#define MAX 25
-void f ( )
+void f()
{
- char ar[MAX];
- // code ...
- ar[MAX] = '\0';
+ char a[MAX];
+ a[MAX] = '\0'; // this writes one element past the end of the buffer
}
```
-To correct both warnings, use the following code:
+To correct the warning, use the following code which accounts for the fact that array indexes are zero-based. Thus `MAX - 1` is the last element in the buffer:
```cpp
#define MAX 25
@@ -39,8 +37,7 @@ To correct both warnings, use the following code:
void f ( )
{
char a[MAX];
- // code ...
- a[MAX - 1] = '\0';
+ a[MAX-1] = '\0';
}
```
diff --git a/docs/code-quality/c6387.md b/docs/code-quality/c6387.md
index d96f377b6d..a925d0b397 100644
--- a/docs/code-quality/c6387.md
+++ b/docs/code-quality/c6387.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C6387"
title: Warning C6387
+description: "Learn more about: Warning C6387"
ms.date: 11/04/2016
f1_keywords: ["C6387", "INVALID_PARAM_VALUE_1", "__WARNING_INVALID_PARAM_VALUE_1"]
helpviewer_keywords: ["C6387"]
-ms.assetid: 3ea2fc4d-ffc3-4c3c-bfae-d42aa56235d8
---
# Warning C6387
@@ -27,7 +26,7 @@ _Post_ _Null_ char * g();
void f(_In_ char *pch);
-void main()
+int main()
{
char *pCh = g();
f(pCh); // Warning C6387
@@ -43,7 +42,7 @@ _Post_ _Notnull_ char * g();
void f(_In_ char *pch);
-void main()
+int main()
{
char *pCh = g();
f(pCh);
diff --git a/docs/code-quality/c6393.md b/docs/code-quality/c6393.md
index 07f0c540f0..a905c012a2 100644
--- a/docs/code-quality/c6393.md
+++ b/docs/code-quality/c6393.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Warning C6393"
title: Warning C6393
+description: "Learn more about: Warning C6393"
ms.date: 11/29/2023
f1_keywords: ["C6393", "LEAP_YEAR_INVALID_DATE_KEYED_LOOKUP", "__WARNING_LEAP_YEAR_INVALID_DATE_KEYED_LOOKUP"]
helpviewer_keywords: ["C6393"]
@@ -26,26 +26,25 @@ Code analysis name: `LEAP_YEAR_INVALID_DATE_KEYED_LOOKUP`
The following code creates a lookup table for the day of the year, assuming 365 days per year. However, this doesn't work if the year is a leap year:
```cpp
-
-#include
-
-void foo(int year)
-{
- const std::vector items(365); // C6393
- // Initialize items and use it...
+#include
+
+void foo(int year)
+{
+ const std::vector items(365); // C6393
+ // Initialize items and use it...
}
```
To fix the problem, adjust the size of the lookup table as the table is created according to the result of appropriate leap year check:
```cpp
-#include
-
-void foo(int year)
-{
- bool isLeapYear = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
- const std::vector items(isLeapYear ? 366 : 365);
- // Initialize items and use it...
+#include
+
+void foo(int year)
+{
+ bool isLeapYear = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
+ const std::vector items(isLeapYear ? 366 : 365);
+ // Initialize items and use it...
}
```
diff --git a/docs/code-quality/c6394.md b/docs/code-quality/c6394.md
index 7d5c7b4db2..d4a4fe6668 100644
--- a/docs/code-quality/c6394.md
+++ b/docs/code-quality/c6394.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Warning C6394"
title: Warning C6394
+description: "Learn more about: Warning C6394"
ms.date: 11/29/2023
f1_keywords: ["C6394", "LEAP_YEAR_INVALID_DATE_KEYED_LOOKUP_MUTABLE", "__WARNING_LEAP_YEAR_INVALID_DATE_KEYED_LOOKUP_MUTABLE"]
helpviewer_keywords: ["C6394"]
@@ -52,7 +52,7 @@ void foo(int year)
## Heuristics
-This rule is enforced by checking if a lookup table has an initial size of 365 elements, but can be expanded to 366. However, it doesn't check if the table’s size is adjusted through proper leap year check or not, and so is a low confidence warning.
+This rule is enforced by checking if a lookup table has an initial size of 365 elements, but can be expanded to 366. However, it doesn't check if the table's size is adjusted through proper leap year check or not, and so is a low confidence warning.
## See also
diff --git a/docs/code-quality/c6411.md b/docs/code-quality/c6411.md
index a24d5c9118..a4a99565a8 100644
--- a/docs/code-quality/c6411.md
+++ b/docs/code-quality/c6411.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C6411"
title: Warning C6411
+description: "Learn more about: Warning C6411"
ms.date: 11/04/2016
f1_keywords: ["C6411", "POTENTIAL_READ_OVERRUN"]
-ms.assetid: 6bbc1734-eec4-4ad6-9908-4ed2a5f025db
+helpviewer_keywords: ["C6411"]
---
# Warning C6411
diff --git a/docs/code-quality/c6412.md b/docs/code-quality/c6412.md
index 5c29356882..230011ec6e 100644
--- a/docs/code-quality/c6412.md
+++ b/docs/code-quality/c6412.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C6412"
title: Warning C6412
+description: "Learn more about: Warning C6412"
ms.date: 11/04/2016
f1_keywords: ["C6412", "POTENTIAL_WRITE_OVERRUN"]
-ms.assetid: 6498f045-1bdc-4428-9d95-d9498de207bb
+helpviewer_keywords: ["C6412"]
---
# Warning C6412
diff --git a/docs/code-quality/c6504.md b/docs/code-quality/c6504.md
index e77e99df28..d7683b709d 100644
--- a/docs/code-quality/c6504.md
+++ b/docs/code-quality/c6504.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C6504"
title: Warning C6504
+description: "Learn more about: Warning C6504"
ms.date: 10/03/2022
f1_keywords: ["C6504", "NULL_ON_NON_POINTER", "__WARNING_NULL_ON_NON_POINTER"]
helpviewer_keywords: ["C6504"]
-ms.assetid: 6baeed46-e73d-4974-af16-7487c55b3473
---
# Warning C6504
@@ -60,6 +59,6 @@ void g(Point& pt)
}
```
-## See Also
+## See also
[Annotation Properties](using-sal-annotations-to-reduce-c-cpp-code-defects.md)
diff --git a/docs/code-quality/c6506.md b/docs/code-quality/c6506.md
index df143e3c84..377aef7813 100644
--- a/docs/code-quality/c6506.md
+++ b/docs/code-quality/c6506.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C6506"
title: Warning C6506
+description: "Learn more about: Warning C6506"
ms.date: 11/04/2016
f1_keywords: ["C6506", "BUFFER_SIZE_ON_NON_POINTER_OR_ARRAY", "__WARNING_BUFFER_SIZE_ON_NON_POINTER_OR_ARRAY"]
helpviewer_keywords: ["C6506"]
-ms.assetid: 20b87ee8-13ea-4d71-95a1-2b2d144d196a
---
# Warning C6506
@@ -21,7 +20,7 @@ Code analysis name: `BUFFER_SIZE_ON_NON_POINTER_OR_ARRAY`
The following code generates this warning:
```cpp
-#include
+#include
void f(_Out_ char c)
{
c = 'd';
@@ -31,7 +30,7 @@ void f(_Out_ char c)
To correct this warning, use a pointer or an array type, as shown in the following sample code:
```cpp
-#include
+#include
void f(_Out_ char *c)
{
*c = 'd';
diff --git a/docs/code-quality/c6701.md b/docs/code-quality/c6701.md
index bdbbdf6afa..386d29a099 100644
--- a/docs/code-quality/c6701.md
+++ b/docs/code-quality/c6701.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: Warning C6701"
title: Warning C6701
+description: "Learn more about: Warning C6701"
ms.date: 11/04/2016
f1_keywords: ["C6701"]
-helpviewer_keywords: ["C67901"]
-ms.assetid: c48484e2-542c-4f7b-93ea-98c6367cb3d9
+helpviewer_keywords: ["C6701"]
---
# Warning C6701
diff --git a/docs/code-quality/c6993.md b/docs/code-quality/c6993.md
index e4df96bfab..54f78c56c9 100644
--- a/docs/code-quality/c6993.md
+++ b/docs/code-quality/c6993.md
@@ -1,12 +1,14 @@
---
-description: "Learn more about: Warning C6993"
title: Warning C6993
-ms.date: 11/04/2016
+description: "Learn more about: Warning C6993"
+ms.date: 2/25/2025
f1_keywords: ["C6993"]
-ms.assetid: 7ea93bc6-b934-4b6b-b71a-a56e765fb4cd
+helpviewer_keywords: ["C6993"]
---
# Warning C6993
> Code analysis ignores OpenMP constructs; analyzing single-threaded code
-This warning indicates that the Code Analyzer has encountered Open MP pragmas that it can't analyze.
+This warning indicates that the static analysis tools don't support Open MP pragmas. The static analysis tools could generate incorrect results because they assume the code is single-threaded, not multi-threaded.
+
+Your code doesn't necessarily need to be 'fixed' to resolve this diagnostic because this warning indicates what the toolset supports and not an issue with your code.
\ No newline at end of file
diff --git a/docs/code-quality/c6995.md b/docs/code-quality/c6995.md
index 6e5736bd79..4ca022014e 100644
--- a/docs/code-quality/c6995.md
+++ b/docs/code-quality/c6995.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C6995"
title: Warning C6995
+description: "Learn more about: Warning C6995"
ms.date: 11/04/2016
f1_keywords: ["C6995"]
-ms.assetid: 1e82e3ad-99fe-4a35-87d5-359c74b9658e
+helpviewer_keywords: ["C6995"]
---
# Warning C6995
diff --git a/docs/code-quality/c6997.md b/docs/code-quality/c6997.md
index 4090bea051..8cbfc9bd5e 100644
--- a/docs/code-quality/c6997.md
+++ b/docs/code-quality/c6997.md
@@ -1,9 +1,9 @@
---
-description: "Learn more about: Warning C6997"
title: Warning C6997
+description: "Learn more about: Warning C6997"
ms.date: 11/04/2016
f1_keywords: ["C6997", "IGNORED_ANNOTATIONS"]
-ms.assetid: 48fd86a3-d57b-4ecb-979a-5d3a4186482e
+helpviewer_keywords: ["C6997"]
---
# Warning C6997
diff --git a/docs/code-quality/clang-tidy.md b/docs/code-quality/clang-tidy.md
index 7427e96a45..3d731181ea 100644
--- a/docs/code-quality/clang-tidy.md
+++ b/docs/code-quality/clang-tidy.md
@@ -2,8 +2,8 @@
title: Using Clang-Tidy in Visual Studio
description: "How to use Clang-Tidy in Visual Studio for Microsoft C++ code analysis."
ms.date: 03/1/2022
-ms.topic: "conceptual"
-f1_keywords: ["vs.codeanalysis.clangtidy","vs.codeanalysis.propertypages.ClangTidyToolPath"]
+ms.topic: "concept-article"
+f1_keywords: ["vs.codeanalysis.clangtidy","vs.codeanalysis.propertypages.ClangTidyToolPath","vs.codeanalysis.propertypages.AdditionalOptions","vs.codeanalysis.propertypages.MaxProcesses"]
---
# Using Clang-Tidy in Visual Studio
@@ -94,6 +94,18 @@ By default, Clang-Tidy does not set any checks when enabled. To see the list of
If you'd like to have custom rules built into your clang-tidy executable and run it in Microsoft Visual Studio, you can change the path to the executable that Visual Studio runs. In the project Property Pages dialog, open the **Configuration Properties** > **Code Analysis** > **Clang-Tidy** page. Manually type in the path or **Browse** and select the path under the **Clang-Tidy Tool Directory** property. The new executable is used once the change is saved, and the app is recompiled.
+## Clang-Tidy Additional Options
+
+The **Clang-Tidy Additional Options** property lets you specify additional compiler arguments that are passed to Clang-Tidy using the `--extra-args` command-line option. These arguments can be used to control how Clang-Tidy parses your code, such as defining macros, include paths, or language standards. Enter arguments as a semi-colon separated list. For example: `-std=c++20;-DMY_DEFINE=1;-Ipath\to\include`.
+
+## Clang-Tidy Prepend Additional Options
+
+The **Clang-Tidy Prepend Additional Options** property lets you specify compiler arguments that are passed to Clang-Tidy using the `--extra-args-before` command-line option. These arguments are inserted before the default compiler arguments when Clang-Tidy parses your code. Enter arguments as a semi-colon separated list. For example: `-std=c++20;-DMY_DEFINE=1;`.
+
+## Max Number of Processes
+
+The **Max Number of Processes** property lets you specify how many processes Clang-Tidy can use to run analysis in parallel. By default, Clang-Tidy runs serially. Set this property to enable parallel execution and specify the number of parallel processes. Set it to `0` to use all available logical processors on your system. Increasing the number of processes can improve analysis speed on multi-core machines.
+
## See also
[Clang/LLVM support for MSBuild projects](https://devblogs.microsoft.com/cppblog/clang-llvm-support-for-msbuild-projects/)\
diff --git a/docs/code-quality/code-analysis-for-c-cpp-overview.md b/docs/code-quality/code-analysis-for-c-cpp-overview.md
index e9ef85e677..33c4a8e91e 100644
--- a/docs/code-quality/code-analysis-for-c-cpp-overview.md
+++ b/docs/code-quality/code-analysis-for-c-cpp-overview.md
@@ -2,7 +2,7 @@
description: "Learn more about: Code analysis for C/C++ overview"
title: Code analysis for C/C++ overview
ms.date: 04/28/2018
-ms.topic: conceptual
+ms.topic: concept-article
helpviewer_keywords:
- "annotations, code analysis"
- "build integration, code analysis"
@@ -20,7 +20,7 @@ ms.assetid: 81f0c9e8-f471-4de5-aac4-99db336a8809
---
# Code analysis for C/C++ overview
-The C/C++ Code Analysis tool provides information about possible defects in your C/C++ source code. Common coding errors reported by the tool include buffer overruns, uninitialized memory, null pointer dereferences, and memory and resource leaks. The tool can also run checks against the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md).
+The C/C++ Code Analysis tool provides information about possible defects in your C/C++ source code. Common coding errors reported by the tool include buffer overruns, uninitialized memory, null pointer dereferences, and memory and resource leaks. The tool can also run checks against the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines).
## IDE (integrated development environment) integration
diff --git a/docs/code-quality/code-analysis-for-cpp-corecheck.md b/docs/code-quality/code-analysis-for-cpp-corecheck.md
index ecae8ba0d0..82158f2233 100644
--- a/docs/code-quality/code-analysis-for-cpp-corecheck.md
+++ b/docs/code-quality/code-analysis-for-cpp-corecheck.md
@@ -17,250 +17,250 @@ This section lists C++ Core Guidelines Checker warnings. For information about C
## OWNER_POINTER Group
[C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT](C26402.md)\
-Return a scoped object instead of a heap-allocated if it has a move constructor. See [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr).
+Return a scoped object instead of a heap-allocated if it has a move constructor. See [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
[C26403 RESET_OR_DELETE_OWNER](C26403.md)\
-Reset or explicitly delete an owner\ pointer '*variable*'. See [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr).
+Reset or explicitly delete an owner\ pointer '*variable*'. See [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
[C26404 DONT_DELETE_INVALID](C26404.md)\
-Do not delete an owner\ that may be in invalid state. See [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr).
+Do not delete an owner\ that may be in invalid state. See [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
[C26405 DONT_ASSIGN_TO_VALID](C26405.md)\
-Do not assign to an owner\ that may be in valid state. See [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr).
+Do not assign to an owner\ that may be in valid state. See [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
[C26406 DONT_ASSIGN_RAW_TO_OWNER](C26406.md)\
-Do not assign a raw pointer to an owner\. See [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr).
+Do not assign a raw pointer to an owner\. See [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
[C26407 DONT_HEAP_ALLOCATE_UNNECESSARILY](C26407.md)\
-Prefer scoped objects, don't heap-allocate unnecessarily. See [C++ Core Guidelines R.5](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped).
+Prefer scoped objects, don't heap-allocate unnecessarily. See [C++ Core Guidelines R.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-scoped).
[C26429 USE_NOTNULL](C26429.md)\
-Symbol '*symbol*' is never tested for nullness, it can be marked as not_null. See [C++ Core Guidelines F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value).
+Symbol '*symbol*' is never tested for nullness, it can be marked as not_null. See [C++ Core Guidelines F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr).
[C26430 TEST_ON_ALL_PATHS](C26430.md)\
-Symbol '*symbol*' is not tested for nullness on all paths. See [C++ Core Guidelines F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value).
+Symbol '*symbol*' is not tested for nullness on all paths. See [C++ Core Guidelines F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr).
[C26431 DONT_TEST_NOTNULL](C26431.md)\
-The type of expression '*expr*' is already gsl::not_null. Do not test it for nullness. See [C++ Core Guidelines F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value).
+The type of expression '*expr*' is already gsl::not_null. Do not test it for nullness. See [C++ Core Guidelines F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr).
## RAW_POINTER Group
[C26400 NO_RAW_POINTER_ASSIGNMENT](c26400.md)\
-Do not assign the result of an allocation or a function call with an owner\ return value to a raw pointer; use owner\ instead. See [C++ Core Guidelines I.11](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-raw).
+Do not assign the result of an allocation or a function call with an owner\ return value to a raw pointer; use owner\ instead. See [C++ Core Guidelines I.11](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-raw).
[C26401 DONT_DELETE_NON_OWNER](c26401.md)\
-Do not delete a raw pointer that is not an owner\. See [C++ Core Guidelines I.11](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-raw).
+Do not delete a raw pointer that is not an owner\. See [C++ Core Guidelines I.11](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-raw).
[C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT](C26402.md)\
-Return a scoped object instead of a heap-allocated if it has a move constructor. See [C++ Core Guidelines R.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-ptr).
+Return a scoped object instead of a heap-allocated if it has a move constructor. See [C++ Core Guidelines R.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-ptr).
[C26408 NO_MALLOC_FREE](C26408.md)\
-Avoid malloc() and free(), prefer the nothrow version of new with delete. See [C++ Core Guidelines R.10](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-mallocfree).
+Avoid malloc() and free(), prefer the nothrow version of new with delete. See [C++ Core Guidelines R.10](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-mallocfree).
[C26409 NO_NEW_DELETE](C26409.md)\
-Avoid calling new and delete explicitly, use std::make_unique\ instead. See [C++ Core Guidelines R.11](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-newdelete).
+Avoid calling new and delete explicitly, use std::make_unique\ instead. See [C++ Core Guidelines R.11](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-newdelete).
[C26429 USE_NOTNULL](C26429.md)\
-Symbol '*symbol*' is never tested for nullness, it can be marked as not_null. See [C++ Core Guidelines F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value).
+Symbol '*symbol*' is never tested for nullness, it can be marked as not_null. See [C++ Core Guidelines F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr).
[C26430 TEST_ON_ALL_PATHS](C26430.md)\
-Symbol '*symbol*' is not tested for nullness on all paths. See [C++ Core Guidelines F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value).
+Symbol '*symbol*' is not tested for nullness on all paths. See [C++ Core Guidelines F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr).
[C26431 DONT_TEST_NOTNULL](C26431.md)\
-The type of expression '*expr*' is already gsl::not_null. Do not test it for nullness. See [C++ Core Guidelines F.23](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f23-use-a-not_nullt-to-indicate-that-null-is-not-a-valid-value).
+The type of expression '*expr*' is already gsl::not_null. Do not test it for nullness. See [C++ Core Guidelines F.23](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr).
[C26481 NO_POINTER_ARITHMETIC](C26481.md)\
-Don't use pointer arithmetic. Use span instead. See [C++ Core Guidelines Bounds.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds).
+Don't use pointer arithmetic. Use span instead. See [C++ Core Guidelines Bounds.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-arithmetic).
[C26485 NO_ARRAY_TO_POINTER_DECAY](C26485.md)\
-Expression '*expr*': No array to pointer decay. See [C++ Core Guidelines Bounds.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds).
+Expression '*expr*': No array to pointer decay. See [C++ Core Guidelines Bounds.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-decay).
## UNIQUE_POINTER Group
[C26410 NO_REF_TO_CONST_UNIQUE_PTR](C26410.md)\
-The parameter '*parameter*' is a reference to `const` unique pointer, use const T* or const T& instead. See [C++ Core Guidelines R.32](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-uniqueptrparam).
+The parameter '*parameter*' is a reference to `const` unique pointer, use const T* or const T& instead. See [C++ Core Guidelines R.32](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-uniqueptrparam).
[C26411 NO_REF_TO_UNIQUE_PTR](C26411.md)\
-The parameter '*parameter*' is a reference to unique pointer and it is never reassigned or reset, use T* or T& instead. See [C++ Core Guidelines R.33](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-reseat).
+The parameter '*parameter*' is a reference to unique pointer and it is never reassigned or reset, use T* or T& instead. See [C++ Core Guidelines R.33](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-reseat).
[C26414 RESET_LOCAL_SMART_PTR](C26414.md)\
-Move, copy, reassign, or reset a local smart pointer '*symbol*'. See [C++ Core Guidelines R.5](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped).
+Move, copy, reassign, or reset a local smart pointer '*symbol*'. See [C++ Core Guidelines R.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-scoped).
[C26415 SMART_PTR_NOT_NEEDED](C26415.md)\
-Smart pointer parameter '*symbol*' is used only to access contained pointer. Use T* or T& instead. See [C++ Core Guidelines R.30](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-smartptrparam).
+Smart pointer parameter '*symbol*' is used only to access contained pointer. Use T* or T& instead. See [C++ Core Guidelines R.30](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-smartptrparam).
## SHARED_POINTER Group
[C26414 RESET_LOCAL_SMART_PTR](C26414.md)\
-Move, copy, reassign, or reset a local smart pointer '*symbol*'. See [C++ Core Guidelines R.5](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-scoped).
+Move, copy, reassign, or reset a local smart pointer '*symbol*'. See [C++ Core Guidelines R.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-scoped).
[C26415 SMART_PTR_NOT_NEEDED](C26415.md)\
-Smart pointer parameter '*symbol*' is used only to access contained pointer. Use T* or T& instead. See [C++ Core Guidelines R.30](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-smartptrparam).
+Smart pointer parameter '*symbol*' is used only to access contained pointer. Use T* or T& instead. See [C++ Core Guidelines R.30](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-smartptrparam).
[C26416 NO_RVALUE_REF_SHARED_PTR](C26416.md)\
-Shared pointer parameter '*symbol*' is passed by rvalue reference. Pass by value instead. See [C++ Core Guidelines R.34](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-sharedptrparam-owner).
+Shared pointer parameter '*symbol*' is passed by rvalue reference. Pass by value instead. See [C++ Core Guidelines R.34](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-sharedptrparam-owner).
[C26417 NO_LVALUE_REF_SHARED_PTR](C26417.md)\
-Shared pointer parameter '*symbol*' is passed by reference and not reset or reassigned. Use T* or T& instead. See [C++ Core Guidelines R.35](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-sharedptrparam).
+Shared pointer parameter '*symbol*' is passed by reference and not reset or reassigned. Use T* or T& instead. See [C++ Core Guidelines R.35](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-sharedptrparam).
[C26418 NO_VALUE_OR_CONST_REF_SHARED_PTR](C26418.md)\
-Shared pointer parameter '*symbol*' is not copied or moved. Use T* or T& instead. See [C++ Core Guidelines R.36](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rr-sharedptrparam-const).
+Shared pointer parameter '*symbol*' is not copied or moved. Use T* or T& instead. See [C++ Core Guidelines R.36](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-sharedptrparam-const).
## DECLARATION Group
[C26426 NO_GLOBAL_INIT_CALLS](C26426.md)\
-Global initializer calls a non-constexpr function '*symbol*'. See [C++ Core Guidelines I.22](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i22-avoid-complex-initialization-of-global-objects).
+Global initializer calls a non-constexpr function '*symbol*'. See [C++ Core Guidelines I.22](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-global-init).
[C26427 NO_GLOBAL_INIT_EXTERNS](C26427.md)\
-Global initializer accesses extern object '*symbol*'. See [C++ Core Guidelines I.22](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i22-avoid-complex-initialization-of-global-objects).
+Global initializer accesses extern object '*symbol*'. See [C++ Core Guidelines I.22](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-global-init).
[C26444 NO_UNNAMED_RAII_OBJECTS](c26444.md)\
-Avoid unnamed objects with custom construction and destruction. See [ES.84: Don't (try to) declare a local variable with no name](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md).
+Avoid unnamed objects with custom construction and destruction. See [ES.84: Don't (try to) declare a local variable with no name](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-noname).
## CLASS Group
[C26432 DEFINE_OR_DELETE_SPECIAL_OPS](C26432.md)\
-If you define or delete any default operation in the type '*symbol*', define or delete them all. See [C++ Core Guidelines C.21](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c21-if-you-define-or-delete-any-default-operation-define-or-delete-them-all).
+If you define or delete any default operation in the type '*symbol*', define or delete them all. See [C++ Core Guidelines C.21](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-five).
[C26433 OVERRIDE_EXPLICITLY](c26433.md)\
-Function '*symbol*' should be marked with 'override'. See [C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c128-virtual-functions-should-specify-exactly-one-of-virtual-override-or-final).
+Function '*symbol*' should be marked with 'override'. See [C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override).
[C26434 DONT_HIDE_METHODS](C26434.md)\
-Function '*symbol_1*' hides a non-virtual function '*symbol_2*'. See [C++ Core Guidelines C.128](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c128-virtual-functions-should-specify-exactly-one-of-virtual-override-or-final).
+Function '*symbol_1*' hides a non-virtual function '*symbol_2*'. See [C++ Core Guidelines C.128](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override).
[C26435 SINGLE_VIRTUAL_SPECIFICATION](c26435.md)\
-Function '*symbol*' should specify exactly one of 'virtual', 'override', or 'final'. See [C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md).
+Function '*symbol*' should specify exactly one of 'virtual', 'override', or 'final'. See [C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override).
[C26436 NEED_VIRTUAL_DTOR](C26436.md)\
-The type '*symbol*' with a virtual function needs either public virtual or protected non-virtual destructor. See [C++ Core Guidelines C.35](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c35-a-base-class-destructor-should-be-either-public-and-virtual-or-protected-and-nonvirtual).
+The type '*symbol*' with a virtual function needs either public virtual or protected non-virtual destructor. See [C++ Core Guidelines C.35](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-virtual).
[C26443 NO_EXPLICIT_DTOR_OVERRIDE](c26443.md)\
-Overriding destructor should not use explicit 'override' or 'virtual' specifiers. See [C.128: Virtual functions should specify exactly one of virtual, override, or final](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md).
+Overriding destructor should not use explicit 'override' or 'virtual' specifiers. See [C.128: Virtual functions should specify exactly one of virtual, override, or final](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override).
## STYLE Group
[C26438 NO_GOTO](C26438.md)\
-Avoid `goto`. See [C++ Core Guidelines ES.76](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es76-avoid-goto).
+Avoid `goto`. See [C++ Core Guidelines ES.76](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-goto).
## FUNCTION Group
[C26439 SPECIAL_NOEXCEPT](C26439.md)\
-This kind of function may not throw. Declare it **`noexcept`**. See [C++ Core Guidelines F.6](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f6-if-your-function-may-not-throw-declare-it-noexcept).
+This kind of function may not throw. Declare it **`noexcept`**. See [C++ Core Guidelines F.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept).
[C26440 DECLARE_NOEXCEPT](C26440.md)\
-Function '*symbol*' can be declared **`noexcept`**. See [C++ Core Guidelines F.6](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f6-if-your-function-may-not-throw-declare-it-noexcept).
+Function '*symbol*' can be declared **`noexcept`**. See [C++ Core Guidelines F.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept).
[C26447 DONT_THROW_IN_NOEXCEPT](c26447.md)\
The function is declared **`noexcept`** but calls a function which may throw exceptions.
-See [C++ Core Guidelines: F.6: If your function may not throw, declare it noexcept](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f6-if-your-function-may-not-throw-declare-it-noexcept).
+See [C++ Core Guidelines: F.6: If your function may not throw, declare it noexcept](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-noexcept).
## CONCURRENCY Group
[C26441 NO_UNNAMED_GUARDS](C26441.md)\
-Guard objects must be named. See [C++ Core Guidelines cp.44](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#cp44-remember-to-name-your-lock_guards-and-unique_locks).
+Guard objects must be named. See [C++ Core Guidelines cp.44](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconc-name).
## CONST Group
[C26460 USE_CONST_REFERENCE_ARGUMENTS](c26460.md)\
-The reference argument '*argument*' for function '*function*' can be marked as `const`. See [C++ Core Guidelines con.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rconst-ref).
+The reference argument '*argument*' for function '*function*' can be marked as `const`. See [C++ Core Guidelines con.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-ref).
[C26461 USE_CONST_POINTER_ARGUMENTS](c26461.md):\
-The pointer argument '*argument*' for function '*function*' can be marked as a pointer to `const`. See [C++ Core Guidelines con.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rconst-ref).
+The pointer argument '*argument*' for function '*function*' can be marked as a pointer to `const`. See [C++ Core Guidelines con.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-ref).
[C26462 USE_CONST_POINTER_FOR_VARIABLE](c26462.md)\
-The value pointed to by '*variable*' is assigned only once, mark it as a pointer to `const`. See [C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+The value pointed to by '*variable*' is assigned only once, mark it as a pointer to `const`. See [C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
[C26463 USE_CONST_FOR_ELEMENTS](c26463.md)\
-The elements of array '*array*' are assigned only once, mark elements `const`. See [C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+The elements of array '*array*' are assigned only once, mark elements `const`. See [C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
[C26464 USE_CONST_POINTER_FOR_ELEMENTS](c26464.md)\
-The values pointed to by elements of array '*array*' are assigned only once, mark elements as pointer to `const`. See [C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+The values pointed to by elements of array '*array*' are assigned only once, mark elements as pointer to `const`. See [C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
[C26496 USE_CONST_FOR_VARIABLE](c26496.md)\
-The variable '*variable*' is assigned only once, mark it as `const`. See [C++ Core Guidelines con.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con4-use-const-to-define-objects-with-values-that-do-not-change-after-construction).
+The variable '*variable*' is assigned only once, mark it as `const`. See [C++ Core Guidelines con.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-const).
[C26497 USE_CONSTEXPR_FOR_FUNCTION](c26497.md)\
-This function *function* could be marked `constexpr` if compile-time evaluation is desired. See [C++ Core Guidelines F.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rf-constexpr).
+This function *function* could be marked `constexpr` if compile-time evaluation is desired. See [C++ Core Guidelines F.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-constexpr).
[C26498 USE_CONSTEXPR_FOR_FUNCTIONCALL](c26498.md)\
-This function call *function* can use `constexpr` if compile-time evaluation is desired. See [C++ Core Guidelines con.5](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rconst-constexpr).
+This function call *function* can use `constexpr` if compile-time evaluation is desired. See [C++ Core Guidelines con.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rconst-constexpr).
## TYPE Group
[C26437 DONT_SLICE](C26437.md)\
-Do not slice. See [C++ Core Guidelines ES.63](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es63-dont-slice).
+Do not slice. See [C++ Core Guidelines ES.63](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-slice).
[C26465 NO_CONST_CAST_UNNECESSARY](c26465.md)\
-Don't use `const_cast` to cast away `const`. `const_cast` is not required; constness or volatility is not being removed by this conversion. See [C++ Core Guidelines Type.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-constcast).
+Don't use `const_cast` to cast away `const`. `const_cast` is not required; constness or volatility is not being removed by this conversion. See [C++ Core Guidelines Type.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-constcast).
[C26466 NO_STATIC_DOWNCAST_POLYMORPHIC](c26466.md)\
-Don't use `static_cast` downcasts. A cast from a polymorphic type should use dynamic_cast. See [C++ Core Guidelines Type.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-downcast).
+Don't use `static_cast` downcasts. A cast from a polymorphic type should use dynamic_cast. See [C++ Core Guidelines Type.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-downcast).
[C26471 NO_REINTERPRET_CAST_FROM_VOID_PTR](c26471.md)\
-Don't use `reinterpret_cast`. A cast from void* can use `static_cast`. See [C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-reinterpretcast).
+Don't use `reinterpret_cast`. A cast from void* can use `static_cast`. See [C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-reinterpretcast).
[C26472 NO_CASTS_FOR_ARITHMETIC_CONVERSION](C26472.md)\
-Don't use a `static_cast` for arithmetic conversions. Use brace initialization, gsl::narrow_cast, or gsl::narrow. See [C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-reinterpretcast).
+Don't use a `static_cast` for arithmetic conversions. Use brace initialization, gsl::narrow_cast, or gsl::narrow. See [C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-arithmeticcast).
[C26473 NO_IDENTITY_CAST](C26473.md)\
-Don't cast between pointer types where the source type and the target type are the same. See [C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-reinterpretcast).
+Don't cast between pointer types where the source type and the target type are the same. See [C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-identitycast).
[C26474 NO_IMPLICIT_CAST](C26474.md)\
-Don't cast between pointer types when the conversion could be implicit. See [C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-reinterpretcast).
+Don't cast between pointer types when the conversion could be implicit. See [C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-implicitpointercast).
[C26475 NO_FUNCTION_STYLE_CASTS](C26475.md)\
-Do not use function style C-casts. See [C++ Core Guidelines ES.49](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es49-if-you-must-use-a-cast-use-a-named-cast).
+Do not use function style C-casts. See [C++ Core Guidelines ES.49](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts-named).
[C26490 NO_REINTERPRET_CAST](c26490.md)\
-Don't use `reinterpret_cast`. See [C++ Core Guidelines Type.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+Don't use `reinterpret_cast`. See [C++ Core Guidelines Type.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-reinterpretcast).
[C26491 NO_STATIC_DOWNCAST](c26490.md)\
-Don't use `static_cast` downcasts. See [C++ Core Guidelines Type.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+Don't use `static_cast` downcasts. See [C++ Core Guidelines Type.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-downcast).
[C26492 NO_CONST_CAST](c26492.md)\
-Don't use `const_cast` to cast away `const`. See [C++ Core Guidelines Type.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+Don't use `const_cast` to cast away `const`. See [C++ Core Guidelines Type.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-constcast).
[C26493 NO_CSTYLE_CAST](c26493.md)\
-Don't use C-style casts. See [C++ Core Guidelines Type.4](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+Don't use C-style casts. See [C++ Core Guidelines Type.4](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-cstylecast).
[C26494 VAR_USE_BEFORE_INIT](c26494.md)\
-Variable '*variable*' is uninitialized. Always initialize an object. See [C++ Core Guidelines Type.5](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+Variable '*variable*' is uninitialized. Always initialize an object. See [C++ Core Guidelines Type.5](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-init).
[C26495 MEMBER_UNINIT](c26495.md)\
-Variable '*variable*' is uninitialized. Always initialize a member variable. See [C++ Core Guidelines Type.6](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-type).
+Variable '*variable*' is uninitialized. Always initialize a member variable. See [C++ Core Guidelines Type.6](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-type-memberinit).
## BOUNDS Group
[C26446 USE_GSL_AT](c26446.md)\
-Prefer to use `gsl::at()` instead of unchecked subscript operator. See [C++ Core Guidelines: Bounds.4: Don't use standard-library functions and types that are not bounds-checked](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#probounds-bounds-safety-profile).
+Prefer to use `gsl::at()` instead of unchecked subscript operator. See [C++ Core Guidelines: Bounds.4: Don't use standard-library functions and types that are not bounds-checked](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-stdlib).
[C26481 NO_POINTER_ARITHMETIC](C26481.md)\
-Don't use pointer arithmetic. Use span instead. See [C++ Core Guidelines Bounds.1](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds)
+Don't use pointer arithmetic. Use span instead. See [C++ Core Guidelines Bounds.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-arithmetic)
[C26482 NO_DYNAMIC_ARRAY_INDEXING](c26482.md)\
-Only index into arrays using constant expressions. See [C++ Core Guidelines Bounds.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds)
+Only index into arrays using constant expressions. See [C++ Core Guidelines Bounds.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-arrayindex)
[C26483 STATIC_INDEX_OUT_OF_RANGE](c26483.md)\
-Value *value* is outside the bounds (0, *bound*) of variable '*variable*'. Only index into arrays using constant expressions that are within bounds of the array. See [C++ Core Guidelines Bounds.2](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds)
+Value *value* is outside the bounds (0, *bound*) of variable '*variable*'. Only index into arrays using constant expressions that are within bounds of the array. See [C++ Core Guidelines Bounds.2](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-arrayindex)
[C26485 NO_ARRAY_TO_POINTER_DECAY](C26485.md)\
-Expression '*expr*': No array to pointer decay. See [C++ Core Guidelines Bounds.3](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-bounds)
+Expression '*expr*': No array to pointer decay. See [C++ Core Guidelines Bounds.3](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-decay)
## GSL Group
[C26445 NO_SPAN_REF](c26445.md)\
A reference to `gsl::span` or `std::string_view` may be an indication of a lifetime issue.
-See [C++ Core Guidelines GSL.view: Views](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslview-views)
+See [C++ Core Guidelines GSL.view: Views](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views)
[C26446 USE_GSL_AT](c26446.md)\
-Prefer to use `gsl::at()` instead of unchecked subscript operator. See [C++ Core Guidelines: Bounds.4: Don't use standard-library functions and types that are not bounds-checked](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#probounds-bounds-safety-profile).
+Prefer to use `gsl::at()` instead of unchecked subscript operator. See [C++ Core Guidelines: Bounds.4: Don't use standard-library functions and types that are not bounds-checked](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Pro-bounds-stdlib).
[C26448 USE_GSL_FINALLY](c26448.md)\
-Consider using `gsl::finally` if final action is intended. See [C++ Core Guidelines: GSL.util: Utilities](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#SS-utilities).
+Consider using `gsl::finally` if final action is intended. See [C++ Core Guidelines: GSL.util: Utilities](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-utilities).
[C26449 NO_SPAN_FROM_TEMPORARY](c26449.md)\
`gsl::span` or `std::string_view` created from a temporary will be invalid when the temporary is invalidated. See
-[C++ Core Guidelines: GSL.view: Views](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslview-views).
+[C++ Core Guidelines: GSL.view: Views](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views).
## Deprecated Warnings
diff --git a/docs/code-quality/how-to-set-code-analysis-properties-for-c-cpp-projects.md b/docs/code-quality/how-to-set-code-analysis-properties-for-c-cpp-projects.md
index cd25a57d26..d4b1e95e89 100644
--- a/docs/code-quality/how-to-set-code-analysis-properties-for-c-cpp-projects.md
+++ b/docs/code-quality/how-to-set-code-analysis-properties-for-c-cpp-projects.md
@@ -2,7 +2,6 @@
description: "Learn more about: How to: Set Code Analysis Properties for C/C++ Projects"
title: "How to: Set Code Analysis Properties for C/C++ Projects"
ms.date: 11/04/2016
-ms.topic: "conceptual"
f1_keywords:
- "vs.codeanalysis.propertypages.native"
- "VC.Project.VCCLCompilerTool.EnablePrefast"
diff --git a/docs/code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md b/docs/code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md
index cf2bac2dc3..16272c8e97 100644
--- a/docs/code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md
+++ b/docs/code-quality/how-to-specify-additional-code-information-by-using-analysis-assume.md
@@ -2,7 +2,6 @@
description: "Learn more about how to specify additional code information by using _Analysis_assume_."
title: "Use _Analysis_assume_ for code analysis hints"
ms.date: 12/16/2020
-ms.topic: "conceptual"
f1_keywords:
- "_Analysis_assume_"
helpviewer_keywords:
diff --git a/docs/code-quality/intrinsic-functions.md b/docs/code-quality/intrinsic-functions.md
index 7b9d3a334c..7a86f4a05c 100644
--- a/docs/code-quality/intrinsic-functions.md
+++ b/docs/code-quality/intrinsic-functions.md
@@ -2,7 +2,7 @@
description: "Learn more about: Intrinsic Functions"
title: Intrinsic Functions
ms.date: 11/04/2016
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords:
- "_String_length_"
- "_Param_"
diff --git a/docs/code-quality/quick-start-code-analysis-for-c-cpp.md b/docs/code-quality/quick-start-code-analysis-for-c-cpp.md
index b54c5ce1d3..7c2a7c05f3 100644
--- a/docs/code-quality/quick-start-code-analysis-for-c-cpp.md
+++ b/docs/code-quality/quick-start-code-analysis-for-c-cpp.md
@@ -2,7 +2,7 @@
title: "Quickstart: Code analysis for C/C++"
description: "Run static analysis on C++ code in Visual Studio to detect common coding problems and defects."
ms.date: 04/08/2020
-ms.topic: "conceptual"
+ms.topic: "quickstart"
helpviewer_keywords:
- "C/C++ code analysis"
- "code analysis, C/C++"
@@ -19,7 +19,7 @@ You can improve the quality of your application by running code analysis regular
1. To run code analysis every time the project is built using the selected configuration, select the **Enable Code Analysis on Build** check box. You can also run code analysis manually by opening the **Analyze** menu and then choosing **Run Code Analysis on** *ProjectName* or **Run Code Analysis on File**.
-1. Choose the [rule set](using-rule-sets-to-specify-the-cpp-rules-to-run.md) that you want to use or create a [custom rule set](using-rule-sets-to-specify-the-cpp-rules-to-run.md#to-create-a-rule-set-in-a-text-editor). If using LLVM/clang-cl, see [Using Clang-Tidy in Visual Studio](../code-quality/clang-tidy.md) to configure Clang-Tidy analysis options.
+1. Choose the [rule set](using-rule-sets-to-specify-the-cpp-rules-to-run.md) that you want to use or create a [custom rule set](using-rule-sets-to-specify-the-cpp-rules-to-run.md#to-create-a-rule-set-in-a-text-editor). If using LLVM/clang-cl, see [Using Clang-Tidy in Visual Studio](clang-tidy.md) to configure Clang-Tidy analysis options.
### Standard C/C++ rule sets
@@ -27,25 +27,25 @@ Visual Studio includes these standard sets of rules for native code:
| Rule Set | Description |
|--|--|
-| **C++ Core Check Arithmetic Rules** | These rules enforce checks related to [arithmetic operations from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es-expressions-and-statements). |
-| **C++ Core Check Bounds Rules** | These rules enforce the [Bounds profile of the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#probounds-bounds-safety-profile). |
-| **C++ Core Check Class Rules** | These rules enforce checks related to [classes from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c-classes-and-class-hierarchies). |
-| **C++ Core Check Concurrency Rules** | These rules enforce checks related to [concurrency from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#cpcon-concurrency). |
-| **C++ Core Check Const Rules** | These rules enforce [const-related checks from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con-constants-and-immutability). |
-| **C++ Core Check Declaration Rules** | These rules enforce checks related to [declarations from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#i-interfaces). |
-| **C++ Core Check Enum Rules** | These rules enforce [enum-related checks from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-enum). |
+| **C++ Core Check Arithmetic Rules** | These rules enforce checks related to [arithmetic operations from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es-expressions-and-statements). |
+| **C++ Core Check Bounds Rules** | These rules enforce the [Bounds profile of the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#probounds-bounds-safety-profile). |
+| **C++ Core Check Class Rules** | These rules enforce checks related to [classes from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c-classes-and-class-hierarchies). |
+| **C++ Core Check Concurrency Rules** | These rules enforce checks related to [concurrency from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cpcon-concurrency). |
+| **C++ Core Check Const Rules** | These rules enforce [const-related checks from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#con-constants-and-immutability). |
+| **C++ Core Check Declaration Rules** | These rules enforce checks related to [declarations from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i-interfaces). |
+| **C++ Core Check Enum Rules** | These rules enforce [enum-related checks from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-enum). |
| **C++ Core Check Experimental Rules** | These rules collect some experimental checks. Eventually, we expect these checks to be moved to other rulesets or removed completely. |
-| **C++ Core Check Function Rules** | These rules enforce checks related to [functions from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#f-functions). |
-| **C++ Core Check GSL Rules** | These rules enforce checks related to the [Guidelines Support Library from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-gsl). |
-| **C++ Core Check Lifetime Rules** | These rules enforce the [Lifetime profile of the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prolifetime-lifetime-safety-profile). |
-| **C++ Core Check Owner Pointer Rules** | These rules enforce resource-management checks related to [`owner` from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management). |
-| **C++ Core Check Raw Pointer Rules** | These rules enforce resource-management checks related to [raw pointers from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management). |
-| **C++ Core Check Rules** | These rules enforce a subset of the checks from the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c-core-guidelines). Use this ruleset to include all of the C++ Core Check rules except the Enum and Experimental rulesets. |
-| **C++ Core Check Shared Pointer Rules** | These rules enforce resource-management checks related to [types with shared pointer semantics from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management). |
-| **C++ Core Check STL Rules** | These rules enforce checks related to the [C++ Standard Library from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-stdlib). |
-| **C++ Core Check Style Rules** | These rules enforce checks related to use of [expressions and statements from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es-expressions-and-statements). |
-| **C++ Core Check Type Rules** | These rules enforce the [Type profile of the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prosafety-type-safety-profile). |
-| **C++ Core Check Unique Pointer Rules** | These rules enforce resource-management checks related to types with [unique pointer semantics from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management). |
+| **C++ Core Check Function Rules** | These rules enforce checks related to [functions from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#f-functions). |
+| **C++ Core Check GSL Rules** | These rules enforce checks related to the [Guidelines Support Library from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-gsl). |
+| **C++ Core Check Lifetime Rules** | These rules enforce the [Lifetime profile of the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#prolifetime-lifetime-safety-profile). |
+| **C++ Core Check Owner Pointer Rules** | These rules enforce resource-management checks related to [`owner` from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management). |
+| **C++ Core Check Raw Pointer Rules** | These rules enforce resource-management checks related to [raw pointers from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management). |
+| **C++ Core Check Rules** | These rules enforce a subset of the checks from the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c-core-guidelines). Use this ruleset to include all of the C++ Core Check rules except the Enum and Experimental rulesets. |
+| **C++ Core Check Shared Pointer Rules** | These rules enforce resource-management checks related to [types with shared pointer semantics from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management). |
+| **C++ Core Check STL Rules** | These rules enforce checks related to the [C++ Standard Library from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-stdlib). |
+| **C++ Core Check Style Rules** | These rules enforce checks related to use of [expressions and statements from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es-expressions-and-statements). |
+| **C++ Core Check Type Rules** | These rules enforce the [Type profile of the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#prosafety-type-safety-profile). |
+| **C++ Core Check Unique Pointer Rules** | These rules enforce resource-management checks related to types with [unique pointer semantics from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management). |
| **Concurrency Check Rules** | These rules enforce a set of Win32 concurrency pattern checks in C++. |
| **Concurrency Rules** | Adds concurrency rules from C++ Core Guidelines to **Concurrency Check Rules**. |
| **Microsoft Native Minimum Rules** | These rules focus on the most critical problems in your native code, including potential security holes and application crashes. We recommend you include this rule set in any custom rule set you create for your native projects. |
@@ -100,7 +100,7 @@ The Error List window lists the code analysis warnings found. The results are di
For detailed information about the warning, including possible solutions to the issue, choose the warning ID in the Code column to display its corresponding online help article.
-Double-click a warning to move the cursor to the line of code that caused the warning in the Visual Studio code editor. Or, press Enter on the selected warning.
+Double-click a warning to move the cursor to the line of code that caused the warning in the code editor. Or, press Enter on the selected warning.
After you understand the problem, you can resolve it in your code. Then, rerun code analysis to make sure that the warning no longer appears in the Error List.
@@ -128,4 +128,4 @@ You can search long lists of warning messages and you can filter warnings in mul
## See also
-- [Code analysis for C/C++](../code-quality/code-analysis-for-c-cpp-overview.md)
+- [Code analysis for C/C++](code-analysis-for-c-cpp-overview.md)
diff --git a/docs/code-quality/specifying-when-and-where-an-annotation-applies.md b/docs/code-quality/specifying-when-and-where-an-annotation-applies.md
index d0849fc192..f01e08d991 100644
--- a/docs/code-quality/specifying-when-and-where-an-annotation-applies.md
+++ b/docs/code-quality/specifying-when-and-where-an-annotation-applies.md
@@ -2,7 +2,7 @@
description: "Learn more about: Specifying When and Where an Annotation Applies"
title: Specifying When and Where an Annotation Applies
ms.date: 11/04/2016
-ms.topic: "conceptual"
+ms.topic: "concept-article"
f1_keywords:
- "_Group_"
- "_At_"
diff --git a/docs/code-quality/toc.yml b/docs/code-quality/toc.yml
index 049d6ad622..61bafc57ca 100644
--- a/docs/code-quality/toc.yml
+++ b/docs/code-quality/toc.yml
@@ -591,6 +591,10 @@ items:
href: ../code-quality/c26117.md
- name: Warning C26130
href: ../code-quality/c26130.md
+ - name: Warning C26132
+ href: c26132.md
+ - name: Warning C26133
+ href: c26133.md
- name: Warning C26135
href: ../code-quality/c26135.md
- name: Warning C26138
@@ -633,6 +637,10 @@ items:
href: ../code-quality/c26830.md
- name: Warning C26831
href: ../code-quality/c26831.md
+ - name: Warning C26838
+ href: ../code-quality/c26838.md
+ - name: Warning C26839
+ href: ../code-quality/c26839.md
- name: Warning C26832
href: ../code-quality/c26832.md
- name: Warning C26833
diff --git a/docs/code-quality/understanding-sal.md b/docs/code-quality/understanding-sal.md
index 8669d1689b..fea482553a 100644
--- a/docs/code-quality/understanding-sal.md
+++ b/docs/code-quality/understanding-sal.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Understanding SAL"
title: Understanding SAL
+description: "Learn more about: Understanding SAL"
ms.date: 11/04/2016
-ms.topic: "conceptual"
-ms.assetid: a94d6907-55f2-4874-9571-51d52d6edcfd
+ms.topic: "concept-article"
---
# Understanding SAL
@@ -94,9 +93,9 @@ These annotations help identify possible uninitialized values and invalid null p
This section shows code examples for the basic SAL annotations.
-### Using the Visual Studio Code Analysis Tool to Find Defects
+### Using the Visual Studio code analysis tool to find defects
-In the examples, the Visual Studio Code Analysis tool is used together with SAL annotations to find code defects. Here's how to do that.
+In the examples, the Visual Studio code analysis tool is used together with SAL annotations to find code defects. Here's how to do that.
#### To use Visual Studio code analysis tools and SAL
@@ -145,7 +144,7 @@ void BadInCaller()
}
```
-If you use Visual Studio Code Analysis on this example, it validates that the callers pass a non-Null pointer to an initialized buffer for `pInt`. In this case, `pInt` pointer cannot be NULL.
+If you use Visual Studio code analysis on this example, it validates that the callers pass a non-Null pointer to an initialized buffer for `pInt`. In this case, `pInt` pointer cannot be NULL.
### Example: The \_In\_opt\_ Annotation
@@ -172,7 +171,7 @@ void InOptCaller()
}
```
-Visual Studio Code Analysis validates that the function checks for NULL before it accesses the buffer.
+Visual Studio code analysis validates that the function checks for NULL before it accesses the buffer.
### Example: The \_Out\_ Annotation
@@ -198,7 +197,7 @@ void OutCaller()
}
```
-Visual Studio Code Analysis Tool validates that the caller passes a non-NULL pointer to a buffer for `pInt` and that the buffer is initialized by the function before it returns.
+Visual Studio code analysis validates that the caller passes a non-NULL pointer to a buffer for `pInt` and that the buffer is initialized by the function before it returns.
### Example: The \_Out\_opt\_ Annotation
@@ -225,7 +224,7 @@ void OutOptCaller()
}
```
-Visual Studio Code Analysis validates that this function checks for NULL before `pInt` is dereferenced, and if `pInt` is not NULL, that the buffer is initialized by the function before it returns.
+Visual Studio code analysis validates that this function checks for NULL before `pInt` is dereferenced, and if `pInt` is not NULL, that the buffer is initialized by the function before it returns.
### Example: The \_Inout\_ Annotation
@@ -256,7 +255,7 @@ void BadInOutCaller()
}
```
-Visual Studio Code Analysis validates that callers pass a non-NULL pointer to an initialized buffer for `pInt`, and that, before return, `pInt` is still non-NULL and the buffer is initialized.
+Visual Studio code analysis validates that callers pass a non-NULL pointer to an initialized buffer for `pInt`, and that, before return, `pInt` is still non-NULL and the buffer is initialized.
### Example: The \_Inout\_opt\_ Annotation
@@ -285,7 +284,7 @@ void InOutOptCaller()
}
```
-Visual Studio Code Analysis validates that this function checks for NULL before it accesses the buffer, and if `pInt` is not NULL, that the buffer is initialized by the function before it returns.
+Visual Studio code analysis validates that this function checks for NULL before it accesses the buffer, and if `pInt` is not NULL, that the buffer is initialized by the function before it returns.
### Example: The \_Outptr\_ Annotation
@@ -315,7 +314,7 @@ void OutPtrCaller()
}
```
-Visual Studio Code Analysis validates that the caller passes a non-NULL pointer for `*pInt`, and that the buffer is initialized by the function before it returns.
+Visual Studio code analysis validates that the caller passes a non-NULL pointer for `*pInt`, and that the buffer is initialized by the function before it returns.
### Example: The \_Outptr\_opt\_ Annotation
@@ -347,7 +346,7 @@ void OutPtrOptCaller()
}
```
-Visual Studio Code Analysis validates that this function checks for NULL before `*pInt` is dereferenced, and that the buffer is initialized by the function before it returns.
+Visual Studio code analysis validates that this function checks for NULL before `*pInt` is dereferenced, and that the buffer is initialized by the function before it returns.
### Example: The \_Success\_ Annotation in Combination with \_Out\_
@@ -366,7 +365,7 @@ bool GetValue(_Out_ int *pInt, bool flag)
}
```
-The `_Out_` annotation causes Visual Studio Code Analysis to validate that the caller passes a non-NULL pointer to a buffer for `pInt`, and that the buffer is initialized by the function before it returns.
+The `_Out_` annotation causes Visual Studio code analysis to validate that the caller passes a non-NULL pointer to a buffer for `pInt`, and that the buffer is initialized by the function before it returns.
## SAL Best Practice
@@ -384,7 +383,7 @@ Here are some guidelines:
- Annotate value-range annotations so that Code Analysis can ensure buffer and pointer safety.
-- Annotate locking rules and locking side effects. For more information, see [Annotating Locking Behavior](../code-quality/annotating-locking-behavior.md).
+- Annotate locking rules and locking side effects. For more information, see [Annotating Locking Behavior](annotating-locking-behavior.md).
- Annotate driver properties and other domain-specific properties.
@@ -392,10 +391,10 @@ Or you can annotate all parameters to make your intent clear throughout and to m
## See also
-- [Using SAL Annotations to Reduce C/C++ Code Defects](../code-quality/using-sal-annotations-to-reduce-c-cpp-code-defects.md)
-- [Annotating Function Parameters and Return Values](../code-quality/annotating-function-parameters-and-return-values.md)
-- [Annotating Function Behavior](../code-quality/annotating-function-behavior.md)
-- [Annotating Structs and Classes](../code-quality/annotating-structs-and-classes.md)
-- [Annotating Locking Behavior](../code-quality/annotating-locking-behavior.md)
-- [Specifying When and Where an Annotation Applies](../code-quality/specifying-when-and-where-an-annotation-applies.md)
-- [Best Practices and Examples](../code-quality/best-practices-and-examples-sal.md)
+- [Using SAL Annotations to Reduce C/C++ Code Defects](using-sal-annotations-to-reduce-c-cpp-code-defects.md)
+- [Annotating Function Parameters and Return Values](annotating-function-parameters-and-return-values.md)
+- [Annotating Function Behavior](annotating-function-behavior.md)
+- [Annotating Structs and Classes](annotating-structs-and-classes.md)
+- [Annotating Locking Behavior](annotating-locking-behavior.md)
+- [Specifying When and Where an Annotation Applies](specifying-when-and-where-an-annotation-applies.md)
+- [Best Practices and Examples](best-practices-and-examples-sal.md)
diff --git a/docs/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run.md b/docs/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run.md
index 545b52d184..363cce16f6 100644
--- a/docs/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run.md
+++ b/docs/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run.md
@@ -2,7 +2,7 @@
description: "Learn more about: Use Rule Sets to Specify the C++ Rules to Run"
title: Using Rule Sets to Specify the C++ Rules to Run
ms.date: 07/27/2020
-ms.topic: "conceptual"
+ms.topic: "how-to"
f1_keywords:
- "vs.codeanalysis.rulesets.native"
---
diff --git a/docs/code-quality/using-sal-annotations-to-reduce-c-cpp-code-defects.md b/docs/code-quality/using-sal-annotations-to-reduce-c-cpp-code-defects.md
index 80f88e1c27..3426d695a2 100644
--- a/docs/code-quality/using-sal-annotations-to-reduce-c-cpp-code-defects.md
+++ b/docs/code-quality/using-sal-annotations-to-reduce-c-cpp-code-defects.md
@@ -1,13 +1,12 @@
---
-description: "Learn more about: Using SAL Annotations to Reduce C/C++ Code Defects"
title: Using SAL Annotations to Reduce C/C++ Code Defects
+description: "Learn more about: Using SAL Annotations to Reduce C/C++ Code Defects"
ms.date: 11/04/2016
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords:
- "annotations"
- "SAL annotations"
- "code analysis, annotation"
-ms.assetid: a16e47d0-6f3e-4ed6-8883-459b2874e9a4
---
# Using SAL Annotations to Reduce C/C++ Code Defects
@@ -47,6 +46,6 @@ The articles in this section of the documentation discuss aspects of SAL, provid
Provides examples that show how to use SAL annotations. Also explains common pitfalls.
-## See Also
+## See also
[SAL 2.0 Annotations for Windows Drivers](/windows-hardware/drivers/devtest/sal-2-annotations-for-windows-drivers)
diff --git a/docs/code-quality/using-the-cpp-core-guidelines-checkers.md b/docs/code-quality/using-the-cpp-core-guidelines-checkers.md
index 3609f413ac..0010cfda98 100644
--- a/docs/code-quality/using-the-cpp-core-guidelines-checkers.md
+++ b/docs/code-quality/using-the-cpp-core-guidelines-checkers.md
@@ -2,7 +2,7 @@
title: Using the C++ Core Guidelines checkers
description: "How to set up and use the Microsoft C++ Code Analysis rules for C++ Core Guidelines."
ms.date: 06/21/2023
-ms.topic: "conceptual"
+ms.topic: "how-to"
dev_langs:
- CPP
---
@@ -74,7 +74,7 @@ int main()
int arr[10]; // warning C26494
int* p = arr; // warning C26485
- [[gsl::suppress(bounds.1)]] // This attribute suppresses Bounds rule #1
+ [[gsl::suppress("bounds.1", justification : "This attribute suppresses Bounds rules #1")]]
{
int* q = p + 1; // warning C26481 (suppressed)
p = q++; // warning C26481 (suppressed)
@@ -104,50 +104,50 @@ c:\users\username\documents\visual studio 2015\projects\corecheckexample\coreche
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
```
-The C++ Core Guidelines are there to help you write better and safer code. However, you might find an instance where a rule or a profile shouldn't be applied. It's easy to suppress it directly in the code. You can use the `[[gsl::suppress]]` attribute to keep C++ Core Check from detecting and reporting any violation of a rule in the following code block. You can mark individual statements to suppress specific rules. You can even suppress the entire bounds profile by writing `[[gsl::suppress(bounds)]]` without including a specific rule number.
+The C++ Core Guidelines are there to help you write better and safer code. However, you might find an instance where a rule or a profile shouldn't be applied. It's easy to suppress it directly in the code. You can use the `[[gsl::suppress]]` attribute to keep C++ Core Check from detecting and reporting any violation of a rule in the following code block. You can mark individual statements to suppress specific rules. You can even suppress the entire bounds profile by writing `[[gsl::suppress("bounds")]]` without including a specific rule number.
## Supported rule sets
As new rules are added to the C++ Core Guidelines Checker, the number of warnings that are produced for pre-existing code might increase. You can use predefined rule sets to filter which kinds of rules to enable. You'll find reference articles for most rules under
[Visual Studio C++ Core Check Reference](code-analysis-for-cpp-corecheck.md).
-- **Arithmetic Rules**: Rules to detect arithmetic [overflow](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-overflow), [signed-unsigned operations](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-unsigned), and [bit manipulation](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-nonnegative).15.6
+- **Arithmetic Rules**: Rules to detect arithmetic [overflow](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-overflow), [signed-unsigned operations](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-unsigned), and [bit manipulation](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-nonnegative).15.6
-- **Bounds Rules**: Enforce the [Bounds profile of the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#probounds-bounds-safety-profile).15.3
+- **Bounds Rules**: Enforce the [Bounds profile of the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#probounds-bounds-safety-profile).15.3
-- **Class Rules**: A few rules that focus on proper use of special member functions and virtual specifications. They're a subset of the checks recommended for [classes and class hierarchies](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-class).15.5
+- **Class Rules**: A few rules that focus on proper use of special member functions and virtual specifications. They're a subset of the checks recommended for [classes and class hierarchies](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-class).15.5
-- **Concurrency Rules**: A single rule, which catches bad guard object declarations. For more information, see [guidelines related to concurrency](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-concurrency).15.5
+- **Concurrency Rules**: A single rule, which catches bad guard object declarations. For more information, see [guidelines related to concurrency](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-concurrency).15.5
-- **Const Rules**: Enforce [const-related checks from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#con-constants-and-immutability).15.3
+- **Const Rules**: Enforce [const-related checks from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#con-constants-and-immutability).15.3
-- **Declaration Rules**: A couple of rules from the [interfaces guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-interfaces) that focus on how global variables are declared.15.5
+- **Declaration Rules**: A couple of rules from the [interfaces guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-interfaces) that focus on how global variables are declared.15.5
-- **Enum Rules**: These rules enforce [enum-related checks from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-enum).16.3
+- **Enum Rules**: These rules enforce [enum-related checks from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-enum).16.3
- **Experimental Rules** These are experimental C++ Core Check rules that are useful but not ready for everyday use. Try them out and [provide feedback](https://aka.ms/feedback/suggest?space=62).16.0
-- **Function Rules**: Two checks that help with adoption of the **`noexcept`** specifier. They're part of the guidelines for [clear function design and implementation](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-functions).15.5
+- **Function Rules**: Two checks that help with adoption of the **`noexcept`** specifier. They're part of the guidelines for [clear function design and implementation](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-functions).15.5
-- **GSL Rules**: These rules enforce checks related to the [Guidelines Support Library from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-gsl).15.7
+- **GSL Rules**: These rules enforce checks related to the [Guidelines Support Library from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-gsl).15.7
-- **Lifetime Rules**: These rules enforce the [Lifetime profile of the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prolifetime-lifetime-safety-profile).15.7
+- **Lifetime Rules**: These rules enforce the [Lifetime profile of the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#prolifetime-lifetime-safety-profile).15.7
-- **Owner Pointer Rules**: Enforce [resource-management checks related to owner\ from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management).15.3
+- **Owner Pointer Rules**: Enforce [resource-management checks related to owner\ from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management).15.3
-- **Raw Pointer Rules**: Enforce [resource-management checks related to raw pointers from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management).15.3
+- **Raw Pointer Rules**: Enforce [resource-management checks related to raw pointers from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management).15.3
-- **Shared pointer Rules**: It's part of [resource management](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-resource) guidelines enforcement.15.5 We added a few rules specific to how shared pointers are passed into functions or used locally.
+- **Shared pointer Rules**: It's part of [resource management](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-resource) guidelines enforcement.15.5 We added a few rules specific to how shared pointers are passed into functions or used locally.
-- **STL Rules**: These rules enforce checks related to the [C++ Standard Library (STL) from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-stdlib).15.7
+- **STL Rules**: These rules enforce checks related to the [C++ Standard Library (STL) from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-stdlib).15.7
-- **Style Rules**: One simple but important check, which bans use of [goto](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Res-goto).15.5 It's the first step to improve your coding style and use of expressions and statements in C++.
+- **Style Rules**: One simple but important check, which bans use of [goto](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-goto).15.5 It's the first step to improve your coding style and use of expressions and statements in C++.
-- **Type Rules**: Enforce the [Type profile of the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#prosafety-type-safety-profile).15.3
+- **Type Rules**: Enforce the [Type profile of the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#prosafety-type-safety-profile).15.3
-- **Unique Pointer Rules**: Enforce [resource-management checks related to types with unique pointer semantics from the C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r-resource-management).15.3
+- **Unique Pointer Rules**: Enforce [resource-management checks related to types with unique pointer semantics from the C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#r-resource-management).15.3
-- **C++ Core Check Rules**: This rule set contains all the currently implemented checks from the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c-core-guidelines), except for the Experimental rules.
+- **C++ Core Check Rules**: This rule set contains all the currently implemented checks from the [C++ Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c-core-guidelines), except for the Experimental rules.
15.3 These rules first appeared in Visual Studio 2017 version 15.3\
15.5 These rules first appeared in Visual Studio 2017 version 15.5\
@@ -197,10 +197,10 @@ The Microsoft C++ compiler has limited support for the `[[gsl::suppress]]` attri
```cpp
// Suppress only warnings from the 'r.11' rule in expression.
-[[gsl::suppress(r.11)]] new int;
+[[gsl::suppress("r.11")]] new int;
// Suppress all warnings from the 'r' rule group (resource management) in block.
-[[gsl::suppress(r)]]
+[[gsl::suppress("r")]]
{
new int;
}
@@ -209,7 +209,7 @@ The Microsoft C++ compiler has limited support for the `[[gsl::suppress]]` attri
// For declarations, you might need to use the surrounding block.
// Macros are not expanded inside of attributes.
// Use plain numbers instead of macros from the warnings.h.
-[[gsl::suppress(26400)]]
+[[gsl::suppress("26400")]]
{
int *p = new int;
}
@@ -317,11 +317,11 @@ Because of the way the code analysis rules get loaded within Visual Studio 2015,
1. In the **NuGet Package Manager** window, search for Microsoft.CppCoreCheck.
- 
+ 
1. Select the Microsoft.CppCoreCheck package and then choose the **Install** button to add the rules to your project.
- The NuGet package adds an MSBuild *`.targets`* file to your project that is invoked when you enable code analysis on your project. The *`.targets`* file adds the C++ Core Check rules as another extension to the Visual Studio Code analysis tool. When the package is installed, you can use the Property Pages dialog to enable or disable the released and experimental rules.
+ The NuGet package adds an MSBuild *`.targets`* file to your project that is invoked when you enable code analysis on your project. The *`.targets`* file adds the C++ Core Check rules as another extension to the Visual Studio code analysis tool. When the package is installed, you can use the Property Pages dialog to enable or disable the released and experimental rules.
::: moniker-end
diff --git a/docs/code-quality/walkthrough-analyzing-c-cpp-code-for-defects.md b/docs/code-quality/walkthrough-analyzing-c-cpp-code-for-defects.md
index 0332306aa5..384584b365 100644
--- a/docs/code-quality/walkthrough-analyzing-c-cpp-code-for-defects.md
+++ b/docs/code-quality/walkthrough-analyzing-c-cpp-code-for-defects.md
@@ -2,7 +2,7 @@
title: "Walkthrough: Analyzing C/C++ code for defects"
description: "Demonstrates how to use code analysis with Microsoft C++ in Visual Studio."
ms.date: 04/14/2020
-ms.topic: "conceptual"
+ms.topic: "concept-article"
helpviewer_keywords: ["C/C++, code analysis", "code analysis, walkthroughs", "code, analyzing C/C++", "code analysis tool, walkthroughs"]
---
# Walkthrough: Analyzing C/C++ code for defects
diff --git a/docs/cpp/anonymous-class-types.md b/docs/cpp/anonymous-class-types.md
index 591f849267..2e26ebc728 100644
--- a/docs/cpp/anonymous-class-types.md
+++ b/docs/cpp/anonymous-class-types.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Anonymous Class Types"
title: "Anonymous Class Types"
-ms.date: "11/04/2016"
+description: "Learn more about: Anonymous Class Types"
+ms.date: 11/04/2016
helpviewer_keywords: ["class types [C++], anonymous", "anonymous class types"]
-ms.assetid: 9ba667b2-8c2a-4c29-82a6-fa120b9233c8
---
# Anonymous Class Types
@@ -42,7 +41,7 @@ In the preceding code, `iValue` can be accessed using the object member-selectio
int i = ptv.iValue;
```
-Anonymous classes are subject to certain restrictions. (For more information about anonymous unions, see [Unions](../cpp/unions.md).) Anonymous classes:
+Anonymous classes are subject to certain restrictions. For more information about anonymous unions, see [Unions](../cpp/unions.md). Anonymous classes:
- Cannot have a constructor or destructor.
diff --git a/docs/cpp/arrays-cpp.md b/docs/cpp/arrays-cpp.md
index e32eaab9fa..48563141ee 100644
--- a/docs/cpp/arrays-cpp.md
+++ b/docs/cpp/arrays-cpp.md
@@ -161,10 +161,9 @@ int i2[5][7];
It specifies an array of type **`int`**, conceptually arranged in a two-dimensional matrix of five rows and seven columns, as shown in the following figure:
-:::image type="content" source="../cpp/media/vc38rc1.gif" alt-text="Conceptual layout of a multidimensional array.":::
-
+:::image type="complex" source="../cpp/media/vc38rc1.gif" alt-text="Conceptual layout of a multidimensional array.":::
The image is a grid 7 cells wide and 5 cells high. Each cell contains the index of the cell. The first cell index is labeled 0,0. The next cell in that row is 0,1 and so on to the last cell in that row which is 0,6. The next row starts with the index 1,0. The cell after that has an index of 1,1. The last cell in that row is 1,6. This pattern repeats until the last row, which starts with the index 4,0. The last cell in the last row has an index of 4,6.
-:::image-end
+:::image-end:::
You can declare multidimensioned arrays that have an initializer list (as described in [Initializers](../cpp/initializers.md)). In these declarations, the constant expression that specifies the bounds for the first dimension can be omitted. For example:
diff --git a/docs/cpp/attributes.md b/docs/cpp/attributes.md
index 961f2945bb..8ed976529a 100644
--- a/docs/cpp/attributes.md
+++ b/docs/cpp/attributes.md
@@ -1,8 +1,8 @@
---
-description: "Learn more about: Attributes in C++"
title: "Attributes in C++"
-f1_keywords: ["deprecated", "no_return", "carries_dependency", "fallthrough", "nodiscard", "maybe_unused", "likely", "unlikely", "gsl::suppress", "msvc::intrinsic", "msvc::no_tls_guard"]
-helpviewer_keywords: ["deprecated", "no_return", "carries_dependency", "fallthrough", "nodiscard", "maybe_unused", "likely", "unlikely", "gsl::suppress", "msvc::intrinsic", "msvc::no_tls_guard"]
+description: "Learn more about: Attributes in C++"
+f1_keywords: ["deprecated", "noreturn", "carries_dependency", "fallthrough", "nodiscard", "maybe_unused", "likely", "unlikely", "gsl::suppress", "msvc::flatten", "msvc::forceinline", "msvc::forceinline_calls", "msvc::intrinsic", "msvc::noinline", "msvc::noinline_calls", "msvc::no_tls_guard"]
+helpviewer_keywords: ["deprecated", "noreturn", "carries_dependency", "fallthrough", "nodiscard", "maybe_unused", "likely", "unlikely", "gsl::suppress", "msvc::flatten", "msvc::forceinline", "msvc::forceinline_calls", "msvc::intrinsic", "msvc::noinline", "msvc::noinline_calls", "msvc::no_tls_guard"]
ms.date: 4/13/2023
---
@@ -77,16 +77,18 @@ The `[[noreturn]]` attribute specifies that a function never returns; in other w
## Microsoft-specific attributes
-### `[[gsl::suppress(rules)]]`
+### `[[gsl::suppress( [, justification: ])]]`
+
+`` is a string that specifies the name of the rule to suppress. The optional `justification` field allows you to explain why a warning is being disabled or suppressed. This value will appear in the SARIF output when the `/analyze:log:includesuppressed` option is specified. Its value is a UTF-8 encoded narrow string literal. The `[[gsl::suppress]]` attribute is available in Visual Studio 2022 version 17.14 and later versions.
-The Microsoft-specific `[[gsl::suppress(rules)]]` attribute is used to suppress warnings from checkers that enforce [Guidelines Support Library (GSL)](https://github.com/Microsoft/GSL) rules in code. For example, consider this code snippet:
+The Microsoft-specific `[[gsl::suppress]]` attribute is used to suppress warnings from checkers that enforce [Guidelines Support Library (GSL)](https://github.com/Microsoft/GSL) rules in code. For example, consider this code snippet:
```cpp
int main()
{
int arr[10]; // GSL warning C26494 will be fired
int* p = arr; // GSL warning C26485 will be fired
- [[gsl::suppress(bounds.1)]] // This attribute suppresses Bounds rule #1
+ [[gsl::suppress("bounds.1", justification: "This attribute suppresses Bounds rule #1")]]
{
int* q = p + 1; // GSL warning C26481 suppressed
p = q--; // GSL warning C26481 suppressed
@@ -102,7 +104,7 @@ The example raises these warnings:
- [C26481](../code-quality/c26481.md) (Bounds Rule 1: Don't use pointer arithmetic. Use span instead.)
-The first two warnings fire when you compile this code with the CppCoreCheck code analysis tool installed and activated. But the third warning doesn't fire because of the attribute. You can suppress the entire bounds profile by writing `[[gsl::suppress(bounds)]]` without including a specific rule number. The C++ Core Guidelines are designed to help you write better and safer code. The suppress attribute makes it easy to turn off the warnings when they aren't wanted.
+The first two warnings fire when you compile this code with the CppCoreCheck code analysis tool installed and activated. But the third warning doesn't fire because of the attribute. You can suppress the entire bounds profile by writing `[[gsl::suppress("bounds")]]` without including a specific rule number. The C++ Core Guidelines are designed to help you write better and safer code. The suppress attribute makes it easy to turn off the warnings when they aren't wanted.
### `[[msvc::flatten]]`
diff --git a/docs/cpp/basic-concepts-cpp.md b/docs/cpp/basic-concepts-cpp.md
index 7102a6a9f7..a60b27fef4 100644
--- a/docs/cpp/basic-concepts-cpp.md
+++ b/docs/cpp/basic-concepts-cpp.md
@@ -1,12 +1,11 @@
---
-description: "Learn more about: Basic Concepts (C++)"
-title: "Basic Concepts (C++)"
+title: "Basic Concepts (C++)"
+description: "Learn more about: Basic Concepts (C++)"
ms.custom: "index-page"
-ms.date: "12/11/2019"
+ms.date: 12/11/2019
helpviewer_keywords: ["C++, basic language concepts"]
-ms.assetid: 961801e6-2ffd-4bf1-bb71-7f55e48d9c79
---
-# Basic Concepts (C++)
+# Basic Concepts (C++)
This section explains concepts that are critical to understanding C++. C programmers will be familiar with many of these concepts, but there are some subtle differences that can cause unexpected program results. The following topics are included:
diff --git a/docs/cpp/bstr-t-assign.md b/docs/cpp/bstr-t-assign.md
index 565b248630..801be55d0a 100644
--- a/docs/cpp/bstr-t-assign.md
+++ b/docs/cpp/bstr-t-assign.md
@@ -1,11 +1,11 @@
---
-description: "Learn more about: _bstr_t::Assign"
title: "_bstr_t::Assign"
+description: "Learn more about: _bstr_t::Assign"
ms.date: 02/02/2021
f1_keywords: ["_bstr_t::Assign"]
helpviewer_keywords: ["Assign method [C++]"]
---
-# _`bstr_t::Assign`
+# `_bstr_t::Assign`
**Microsoft Specific**
diff --git a/docs/cpp/c-cpp-language-and-standard-libraries.md b/docs/cpp/c-cpp-language-and-standard-libraries.md
index 69a5e4afc8..59218ff5e3 100644
--- a/docs/cpp/c-cpp-language-and-standard-libraries.md
+++ b/docs/cpp/c-cpp-language-and-standard-libraries.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: C/C++ language and standard libraries reference"
title: "C/C++ language and standard libraries reference"
+description: "Learn more about: C/C++ language and standard libraries reference"
ms.date: 09/11/2024
ms.topic: "overview"
ms.custom: intro-overview
@@ -16,7 +16,7 @@ You'll also find documentation for the C runtime library, the C++ standard libra
[C language](../c-language/c-language-reference.md)\
Reference content for the Microsoft implementation of the C language.
-[C++ language](../cpp/cpp-language-reference.md)\
+[C++ language](cpp-language-reference.md)\
Reference content for the Microsoft implementation of the C++ language.
[C/C++ preprocessor](../preprocessor/c-cpp-preprocessor-reference.md)\
@@ -66,7 +66,7 @@ A header-only C++20 library for using polymorphism in C++ without inheritance. F
[SafeInt library](../safeint/safeint-library.md)\
A portable library that can be used with MSVC, GCC, or Clang to help prevent integer overflows.
-[Data Access Libraries](../data/data-access-in-cpp.md)
+[Data Access Libraries](../data/data-access-in-cpp.md)\
Libraries to support data access using ATL or MFC, and legacy services such as OLE DB and ODBC.
## Related articles
diff --git a/docs/cpp/casting.md b/docs/cpp/casting.md
index 17830ed970..1a74c49398 100644
--- a/docs/cpp/casting.md
+++ b/docs/cpp/casting.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Casting in C++"
title: "Casting"
+description: "Learn more about: Casting in C++"
ms.date: 6/11/2024
helpviewer_keywords: ["casting [C++]", "coercion [C++]", "virtual functions [C++], in derived classes [C++]", "static cast operator", "dynamic cast operator", "polymorphic classes [C++]", "classes [C++], polymorphism"]
ai-usage: ai-assisted
@@ -9,21 +9,21 @@ ai-usage: ai-assisted
In C++, if a class is derived from a base class containing one or more virtual functions, a pointer to that base class type can be used to call virtual functions in the derived class object. A class containing virtual functions is sometimes called a "polymorphic class."
-
+\
Class hierarchy
An object of type `C` can be visualized as follows:
-
+\
Class C with subobjects B and A
Given an instance of class `C`, there's a `B` subobject and an `A` subobject. The instance of `C`, including the `A` and `B` subobjects, is the "complete object."
Because a derived class completely contains the definitions of all the base classes from which it's derived, it's safe to cast a pointer to any of its base classes (also called an upcast). Given a pointer to a base class, it may be safe to cast the pointer to an instance of a derived class (also called a downcast).
-Using run-time type information, it's possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. The [dynamic_cast](../cpp/dynamic-cast-operator.md) operator performs a run-time check to ensure that the operation is safe. It's better to design your class hierarchy so that you can use virtual functions to avoid the need for downcasting. However, if you must downcast, use `dynamic_cast` to ensure that the operation is safe.
+Using run-time type information, it's possible to check whether a pointer actually points to a complete object and can be safely cast to point to another object in its hierarchy. The [dynamic_cast](dynamic-cast-operator.md) operator performs a run-time check to ensure that the operation is safe. It's better to design your class hierarchy so that you can use virtual functions to avoid the need for downcasting. However, if you must downcast, use `dynamic_cast` to ensure that the operation is safe.
-For conversion of nonpolymorphic types, you can use the [static_cast](../cpp/static-cast-operator.md) operator (this topic explains the difference between static and dynamic casting conversions, and when it's appropriate to use each).
+For conversion of nonpolymorphic types, you can use the [static_cast](static-cast-operator.md) operator (this topic explains the difference between static and dynamic casting conversions, and when it's appropriate to use each).
The following example demonstrates the use of `dynamic_cast` and `static_cast`:
@@ -72,9 +72,9 @@ int main() {
This section covers the following topics:
-- [Casting operators](../cpp/casting-operators.md)\
-- [Run-time type information](../cpp/run-time-type-information.md)
+- [Casting operators](casting-operators.md)
+- [Run-time type information](run-time-type-information.md)
## See also
-[Expressions](../cpp/expressions-cpp.md)
+[Expressions](expressions-cpp.md)
diff --git a/docs/cpp/class-member-overview.md b/docs/cpp/class-member-overview.md
index 54f6191224..3d97b74bea 100644
--- a/docs/cpp/class-member-overview.md
+++ b/docs/cpp/class-member-overview.md
@@ -17,7 +17,7 @@ The full list of member categories is as follows:
- [Overview of member functions](overview-of-member-functions.md).
-- [Mutable](static-members-cpp.md) and [static](static-members-cpp.md) data members, including built-in types and other user defined types.
+- [Mutable](mutable-data-members-cpp.md) and [static](static-members-cpp.md) data members, including built-in types and other user defined types.
- Operators
diff --git a/docs/cpp/class-templates.md b/docs/cpp/class-templates.md
index 42bb8d2539..4d0d7b7ce6 100644
--- a/docs/cpp/class-templates.md
+++ b/docs/cpp/class-templates.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Class Templates"
title: "Class Templates"
+description: "Learn more about: Class Templates"
ms.date: 06/30/2022
helpviewer_keywords: ["classes [C++], operating on type", "class templates", "templates, class templates"]
-ms.assetid: 633a53c8-24ee-4c23-8c88-e7c3cb0b7ac3
---
# Class Templates
@@ -28,15 +27,15 @@ public:
template< class T, int i > MyStack< T, i >::MyStack( void )
{
-};
+}
template< class T, int i > void MyStack< T, i >::push( const T item )
{
-};
+}
template< class T, int i > T& MyStack< T, i >::pop( void )
{
-};
+}
int main()
{
diff --git a/docs/cpp/clrcall.md b/docs/cpp/clrcall.md
index e0271e971a..c368132c78 100644
--- a/docs/cpp/clrcall.md
+++ b/docs/cpp/clrcall.md
@@ -38,7 +38,7 @@ int __clrcall Func1() {
}
// Func1 hasn't been used at this point (code has not been generated),
-// so runtime returns the adddress of a stub to the function
+// so runtime returns the address of a stub to the function
int (__clrcall *pf)() = &Func1;
// code calls the function, code generated at difference address
diff --git a/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_1.cpp b/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_1.cpp
index af736b0495..753367555e 100644
--- a/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_1.cpp
+++ b/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_1.cpp
@@ -1,4 +1,3 @@
-
// Use make_shared function when possible.
auto sp1 = make_shared(L"The Beatles", L"Im Happy Just to Dance With You");
diff --git a/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_6.cpp b/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_6.cpp
index 551c3f2f5b..2c02d593fb 100644
--- a/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_6.cpp
+++ b/docs/cpp/codesnippet/CPP/how-to-create-and-use-shared-ptr-instances_6.cpp
@@ -1,4 +1,3 @@
-
// Initialize two separate raw pointers.
// Note that they contain the same values.
auto song1 = new Song(L"Village People", L"YMCA");
diff --git a/docs/cpp/codesnippet/CPP/how-to-create-and-use-unique-ptr-instances_3.cpp b/docs/cpp/codesnippet/CPP/how-to-create-and-use-unique-ptr-instances_3.cpp
index e7ad81c8d5..29baefa191 100644
--- a/docs/cpp/codesnippet/CPP/how-to-create-and-use-unique-ptr-instances_3.cpp
+++ b/docs/cpp/codesnippet/CPP/how-to-create-and-use-unique-ptr-instances_3.cpp
@@ -1,4 +1,3 @@
-
class MyClass
{
private:
diff --git a/docs/cpp/codesnippet/CPP/smart-pointers-modern-cpp_2.cpp b/docs/cpp/codesnippet/CPP/smart-pointers-modern-cpp_2.cpp
index 10ac9aab95..2c7e2716ed 100644
--- a/docs/cpp/codesnippet/CPP/smart-pointers-modern-cpp_2.cpp
+++ b/docs/cpp/codesnippet/CPP/smart-pointers-modern-cpp_2.cpp
@@ -1,4 +1,3 @@
-
class LargeObject
{
public:
diff --git a/docs/cpp/com-ptr-t-extractors.md b/docs/cpp/com-ptr-t-extractors.md
index 416c396712..305a593e87 100644
--- a/docs/cpp/com-ptr-t-extractors.md
+++ b/docs/cpp/com-ptr-t-extractors.md
@@ -4,7 +4,6 @@ description: "Describes the extraction operators for the _com_ptr_t class."
ms.date: 07/07/2020
f1_keywords: ["_com_ptr_t::operatorInterface&", "_com_ptr_t::operatorbool", "_com_ptr_t::operator->", "_com_ptr_t::operator*"]
helpviewer_keywords: ["operator Interface& [C++]", "* operator [C++], with specific objects", "operator& [C++]", "operator* [C++]", "-> operator [C++], with specific objects", "& operator [C++], with specific objects", "operator Interface* [C++]", "operator * [C++]", "operator->", "operator bool", "extractors, _com_ptr_t class", "extractors [C++]"]
-ms.assetid: 194b9e0e-123c-49ff-a187-0a7fcd68145a
---
# `_com_ptr_t` Extractors
@@ -14,7 +13,7 @@ Extract the encapsulated COM interface pointer.
## Syntax
-```c++
+```cpp
operator Interface*( ) const throw( );
operator Interface&( ) const;
Interface& operator*( ) const;
diff --git a/docs/cpp/com-ptr-t-relational-operators.md b/docs/cpp/com-ptr-t-relational-operators.md
index 37ebee5979..7101967bd2 100644
--- a/docs/cpp/com-ptr-t-relational-operators.md
+++ b/docs/cpp/com-ptr-t-relational-operators.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: _com_ptr_t Relational Operators"
title: "_com_ptr_t Relational Operators"
-ms.date: "11/04/2016"
+description: "Learn more about: _com_ptr_t Relational Operators"
+ms.date: 11/04/2016
f1_keywords: ["_com_ptr_t::operator>", "_com_ptr_t::operator>=", "_com_ptr_t::operator<=", "_com_ptr_t::operator==", "_com_ptr_t::operator!=", "_com_ptr_t::operator<"]
helpviewer_keywords: [">= operator [C++], comparing specific objects", "!= operator", "operator > [C++], pointers", "operator>= [C++], pointers", "operator < [C++], pointers", "operator!= [C++], relational operators", "< operator [C++], comparing specific objects", "operator== [C++], pointers", "operator == [C++], pointers", "<= operator [C++], with specific objects", "relational operators [C++], _com_ptr_t class", "operator >= [C++], pointers", "operator != [C++], relational operators", "operator <= [C++], pointers", "> operator [C++], comparing specific objects", "operator<= [C++], pointers", "operator< [C++], pointers", "== operator [C++], with specific Visual C++ objects"]
-ms.assetid: 5ae4028c-33ee-485d-bbda-88d2604d6d4b
---
# _com_ptr_t Relational Operators
@@ -33,7 +32,7 @@ bool operator==( const _com_ptr_t& p ) throw();
template<>
bool operator==( _com_ptr_t& p ) throw();
-bool operator==( Int null );
+bool operator==( int null );
template
bool operator!=( const _com_ptr_t<_OtherIID>& p );
@@ -44,7 +43,7 @@ bool operator!=( _com_ptr_t<_OtherIID>& p );
template
bool operator!=( _InterfaceType* p );
-bool operator!=( Int null );
+bool operator!=( int null );
template
bool operator<( const _com_ptr_t<_OtherIID>& p );
diff --git a/docs/cpp/compiler-limits.md b/docs/cpp/compiler-limits.md
index c1926cd274..4fcdd08cfc 100644
--- a/docs/cpp/compiler-limits.md
+++ b/docs/cpp/compiler-limits.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Compiler Limits"
title: "Compiler Limits"
+description: "Learn more about: Compiler Limits"
ms.date: "06/05/2023"
helpviewer_keywords: ["cl.exe compiler, limits for language constructs"]
---
@@ -22,7 +22,7 @@ The C++ standard recommends limits for various language constructs. The followin
- Scope qualifications of one identifier - C++ standard: 256, Microsoft C++ compiler: 127.
-- Nested **`extern`** specifications - C++ standard: 1024, Microsoft C++ compiler: 9 (not counting the implicit **`extern`** specification in global scope, or 10, if you count the implicit **`extern`** specification in global scope..
+- Nested **`extern`** specifications - C++ standard: 1024, Microsoft C++ compiler: 9 (not counting the implicit **`extern`** specification in global scope, or 10, if you count the implicit **`extern`** specification in global scope.
- Template arguments in a template declaration - C++ standard: 1024, Microsoft C++ compiler: 2046.
diff --git a/docs/cpp/const-and-volatile-pointers.md b/docs/cpp/const-and-volatile-pointers.md
index cca4371b50..b786fcb6b4 100644
--- a/docs/cpp/const-and-volatile-pointers.md
+++ b/docs/cpp/const-and-volatile-pointers.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: const and volatile pointers"
title: "const and volatile pointers"
+description: "Learn more about: const and volatile pointers"
ms.date: "11/19/2019"
helpviewer_keywords: ["volatile keyword [C++], and pointers", "pointers, and const", "pointers, and volatile", "const keyword [C++], volatile pointers"]
-ms.assetid: 0c92dc6c-400e-4342-b345-63ddfe649d7e
---
# const and volatile pointers
@@ -117,5 +116,5 @@ int main() {
## See also
-[Pointers](pointers-cpp.md)
+[Pointers](pointers-cpp.md)\
[Raw pointers](raw-pointers.md)
diff --git a/docs/cpp/cpp-language-reference.md b/docs/cpp/cpp-language-reference.md
index f5316639df..7165a7aa29 100644
--- a/docs/cpp/cpp-language-reference.md
+++ b/docs/cpp/cpp-language-reference.md
@@ -1,10 +1,9 @@
---
-description: "Learn more about: C++ Language Reference"
title: "C++ Language Reference"
+description: "Learn more about: C++ Language Reference"
ms.custom: "index-page"
-ms.date: "12/10/2019"
+ms.date: 12/10/2019
helpviewer_keywords: ["C++, language reference"]
-ms.assetid: 4be9cacb-c862-4391-894a-3a118c9c93ce
---
# C++ Language Reference
@@ -14,96 +13,95 @@ For an overview of Modern C++ programming practices, see [Welcome Back to C++](w
See the following tables to quickly find a keyword or operator:
-- [C++ Keywords](../cpp/keywords-cpp.md)
-
-- [C++ Operators](../cpp/cpp-built-in-operators-precedence-and-associativity.md)
+- [C++ Keywords](keywords-cpp.md)
+- [C++ Operators](cpp-built-in-operators-precedence-and-associativity.md)
## In This Section
-[Lexical Conventions](../cpp/lexical-conventions.md)
+[Lexical Conventions](lexical-conventions.md)\
Fundamental lexical elements of a C++ program: tokens, comments, operators, keywords, punctuators, literals. Also, file translation, operator precedence/associativity.
-[Basic Concepts](../cpp/basic-concepts-cpp.md)
+[Basic Concepts](basic-concepts-cpp.md)\
Scope, linkage, program startup and termination, storage classes, and types.
-[Built-in types](fundamental-types-cpp.md)
+[Built-in types](fundamental-types-cpp.md)\
The fundamental types that are built into the C++ compiler and their value ranges.
-[Standard Conversions](../cpp/standard-conversions.md)
+[Standard Conversions](standard-conversions.md)\
Type conversions between built-in types. Also, arithmetic conversions and conversions among pointer, reference, and pointer-to-member types.
-[Declarations and definitions](declarations-and-definitions-cpp.md)
+[Declarations and definitions](declarations-and-definitions-cpp.md)\
Declaring and defining variables, types and functions.
-[Operators, Precedence and Associativity](../cpp/cpp-built-in-operators-precedence-and-associativity.md)
+[Operators, Precedence and Associativity](cpp-built-in-operators-precedence-and-associativity.md)\
The operators in C++.
-[Expressions](../cpp/expressions-cpp.md)
+[Expressions](expressions-cpp.md)\
Types of expressions, semantics of expressions, reference topics on operators, casting and casting operators, run-time type information.
-[Lambda Expressions](../cpp/lambda-expressions-in-cpp.md)
+[Lambda Expressions](lambda-expressions-in-cpp.md)\
A programming technique that implicitly defines a function object class and constructs a function object of that class type.
-[Statements](../cpp/statements-cpp.md)
+[Statements](statements-cpp.md)\
Expression, null, compound, selection, iteration, jump, and declaration statements.
-[Classes and structs](../cpp/classes-and-structs-cpp.md)
+[Classes and structs](classes-and-structs-cpp.md)\
Introduction to classes, structures, and unions. Also, member functions, special member functions, data members, bit fields, **`this`** pointer, nested classes.
-[Unions](unions.md)
+[Unions](unions.md)\
User-defined types in which all members share the same memory location.
-[Derived Classes](../cpp/inheritance-cpp.md)
+[Derived Classes](inheritance-cpp.md)\
Single and multiple inheritance, **`virtual`** functions, multiple base classes, **abstract** classes, scope rules. Also, the **`__super`** and **`__interface`** keywords.
-[Member-Access Control](../cpp/member-access-control-cpp.md)
+[Member-Access Control](member-access-control-cpp.md)\
Controlling access to class members: **`public`**, **`private`**, and **`protected`** keywords. Friend functions and classes.
-[Overloading](operator-overloading.md)
+[Overloading](operator-overloading.md)\
Overloaded operators, rules for operator overloading.
-[Exception Handling](../cpp/exception-handling-in-visual-cpp.md)
+[Exception Handling](exception-handling-in-visual-cpp.md)\
C++ exception handling, structured exception handling (SEH), keywords used in writing exception handling statements.
-[Assertion and User-Supplied Messages](../cpp/assertion-and-user-supplied-messages-cpp.md)
+[Assertion and User-Supplied Messages](assertion-and-user-supplied-messages-cpp.md)\
`#error` directive, the **`static_assert`** keyword, the `assert` macro.
-[Templates](../cpp/templates-cpp.md)
+[Templates](templates-cpp.md)\
Template specifications, function templates, class templates, **`typename`** keyword, templates vs. macros, templates and smart pointers.
-[Event Handling](../cpp/event-handling.md)
+[Event Handling](event-handling.md)\
Declaring events and event handlers.
-[Microsoft-Specific Modifiers](../cpp/microsoft-specific-modifiers.md)
+[Microsoft-Specific Modifiers](microsoft-specific-modifiers.md)\
Modifiers specific to Microsoft C++. Memory addressing, calling conventions, **`naked`** functions, extended storage-class attributes (**`__declspec`**), **`__w64`**.
-[Inline Assembler](../assembler/inline/inline-assembler.md)
+[Inline Assembler](../assembler/inline/inline-assembler.md)\
Using assembly language and C++ in **`__asm`** blocks.
-[Compiler COM Support](../cpp/compiler-com-support.md)
+[Compiler COM Support](compiler-com-support.md)\
A reference to Microsoft-specific classes and global functions used to support COM types.
-[Microsoft Extensions](../cpp/microsoft-extensions.md)
+[Microsoft Extensions](microsoft-extensions.md)\
Microsoft extensions to C++.
-[Nonstandard Behavior](../cpp/nonstandard-behavior.md)
+[Nonstandard Behavior](nonstandard-behavior.md)\
Information about nonstandard behavior of the Microsoft C++ compiler.
-[Welcome Back to C++](welcome-back-to-cpp-modern-cpp.md)
+[Welcome Back to C++](welcome-back-to-cpp-modern-cpp.md)\
An overview of modern C++ programming practices for writing safe, correct and efficient programs.
## Related Sections
-[Component Extensions for Runtime Platforms](../extensions/component-extensions-for-runtime-platforms.md)
+[Component Extensions for Runtime Platforms](../extensions/component-extensions-for-runtime-platforms.md)\
Reference material on using the Microsoft C++ compiler to target .NET.
-[C/C++ Building Reference](../build/reference/c-cpp-building-reference.md)
+[C/C++ Building Reference](../build/reference/c-cpp-building-reference.md)\
Compiler options, linker options, and other build tools.
-[C/C++ Preprocessor Reference](../preprocessor/c-cpp-preprocessor-reference.md)
+[C/C++ Preprocessor Reference](../preprocessor/c-cpp-preprocessor-reference.md)\
Reference material on pragmas, preprocessor directives, predefined macros, and the preprocessor.
-[Visual C++ Libraries](../standard-library/cpp-standard-library-reference.md)
+[Visual C++ Libraries](../standard-library/cpp-standard-library-reference.md)\
A list of links to the reference start pages for the various Microsoft C++ libraries.
## See also
diff --git a/docs/cpp/cpp-type-system-modern-cpp.md b/docs/cpp/cpp-type-system-modern-cpp.md
index ad5f425f45..a624541147 100644
--- a/docs/cpp/cpp-type-system-modern-cpp.md
+++ b/docs/cpp/cpp-type-system-modern-cpp.md
@@ -2,7 +2,7 @@
description: "Learn more about: C++ type system"
title: "C++ type system"
ms.date: 11/04/2022
-ms.topic: "conceptual"
+ms.topic: "concept-article"
ms.assetid: 553c0ed6-77c4-43e9-87b1-c903eec53e80
---
# C++ type system
diff --git a/docs/cpp/declspec.md b/docs/cpp/declspec.md
index 253de9e94d..443a140a7c 100644
--- a/docs/cpp/declspec.md
+++ b/docs/cpp/declspec.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: `__declspec`"
title: "__declspec"
-ms.date: 03/01/2022
+description: "Learn more about: `__declspec`"
+ms.date: 1/14/2025
f1_keywords: ["__declspec_cpp", "__declspec", "_declspec"]
helpviewer_keywords: ["__declspec keyword [C++]"]
---
@@ -9,7 +9,7 @@ helpviewer_keywords: ["__declspec keyword [C++]"]
**Microsoft Specific**
-The extended attribute syntax for specifying storage-class information uses the **`__declspec`** keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute listed below. Examples of other storage-class modifiers include the **`static`** and **`extern`** keywords. However, these keywords are part of the ANSI specification of the C and C++ languages, and as such aren't covered by extended attribute syntax. The extended attribute syntax simplifies and standardizes Microsoft-specific extensions to the C and C++ languages.
+The extended attribute syntax for specifying storage-class information uses the `__declspec` keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute listed below. Examples of other storage-class modifiers include the `static` and `extern` keywords. However, these keywords are part of the ANSI specification of the C and C++ languages, and as such aren't covered by extended attribute syntax. The extended attribute syntax simplifies and standardizes Microsoft-specific extensions to the C and C++ languages.
## Grammar
@@ -30,6 +30,7 @@ The extended attribute syntax for specifying storage-class information uses the
**`dllimport`**\
**`dllexport`**\
**`empty_bases`**\
+ **`hybrid_patchable`**\
**`jitintrinsic`**\
**`naked`**\
**`noalias`**\
@@ -49,7 +50,7 @@ The extended attribute syntax for specifying storage-class information uses the
White space separates the declaration modifier sequence. Examples appear in later sections.
-Extended attribute grammar supports these Microsoft-specific storage-class attributes: [`align`](../cpp/align-cpp.md), [`allocate`](../cpp/allocate.md), [`allocator`](../cpp/allocator.md), [`appdomain`](../cpp/appdomain.md), [`code_seg`](../cpp/code-seg-declspec.md), [`deprecated`](../cpp/deprecated-cpp.md), [`dllexport`](../cpp/dllexport-dllimport.md), [`dllimport`](../cpp/dllexport-dllimport.md), [`empty_bases`](../cpp/empty-bases.md), [`jitintrinsic`](../cpp/jitintrinsic.md), [`naked`](../cpp/naked-cpp.md), [`noalias`](../cpp/noalias.md), [`noinline`](../cpp/noinline.md), [`noreturn`](../cpp/noreturn.md), [`nothrow`](../cpp/nothrow-cpp.md), [`novtable`](../cpp/novtable.md), [`no_sanitize_address`](../cpp/no-sanitize-address.md),[`process`](../cpp/process.md), [`restrict`](../cpp/restrict.md), [`safebuffers`](../cpp/safebuffers.md), [`selectany`](../cpp/selectany.md), [`spectre`](../cpp/spectre.md), and [`thread`](../cpp/thread.md). It also supports these COM-object attributes: [`property`](../cpp/property-cpp.md) and [`uuid`](../cpp/uuid-cpp.md).
+Extended attribute grammar supports these Microsoft-specific storage-class attributes: [`align`](align-cpp.md), [`allocate`](allocate.md), [`allocator`](allocator.md), [`appdomain`](appdomain.md), [`code_seg`](code-seg-declspec.md), [`deprecated`](deprecated-cpp.md), [`dllexport`](dllexport-dllimport.md), [`dllimport`](dllexport-dllimport.md), [`empty_bases`](empty-bases.md), [`jitintrinsic`](jitintrinsic.md), [`naked`](naked-cpp.md), [`noalias`](noalias.md), [`noinline`](noinline.md), [`noreturn`](noreturn.md), [`nothrow`](nothrow-cpp.md), [`novtable`](novtable.md), [`no_sanitize_address`](no-sanitize-address.md), [`process`](process.md), [`restrict`](restrict.md), [`safebuffers`](safebuffers.md), [`selectany`](selectany.md), [`spectre`](spectre.md), and [`thread`](thread.md). It also supports these COM-object attributes: [`property`](property-cpp.md) and [`uuid`](uuid-cpp.md).
The **`code_seg`**, **`dllexport`**, **`dllimport`**, **`empty_bases`**, **`naked`**, **`noalias`**, **`nothrow`**, **`no_sanitize_address`**, **`property`**, **`restrict`**, **`selectany`**, **`thread`**, and **`uuid`** storage-class attributes are properties only of the declaration of the object or function to which they're applied. The **`thread`** attribute affects data and objects only. The **`naked`** and **`spectre`** attributes affect functions only. The **`dllimport`** and **`dllexport`** attributes affect functions, data, and objects. The **`property`**, **`selectany`**, and **`uuid`** attributes affect COM objects.
@@ -94,5 +95,5 @@ __declspec( thread ) int tls_i = 1;
## See also
-[Keywords](../cpp/keywords-cpp.md)\
+[Keywords](keywords-cpp.md)\
[C extended storage-class attributes](../c-language/c-extended-storage-class-attributes.md)
diff --git a/docs/cpp/decltype-cpp.md b/docs/cpp/decltype-cpp.md
index 2b387820ce..a223db3db5 100644
--- a/docs/cpp/decltype-cpp.md
+++ b/docs/cpp/decltype-cpp.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: decltype (C++)"
title: "decltype (C++)"
+description: "Learn more about: decltype (C++)"
ms.date: 09/14/2023
f1_keywords: ["decltype_cpp"]
helpviewer_keywords: ["operators [C++], decltype", "decltype operator", "operators [C++], type of an expression", "operators [C++], deduce expression type"]
@@ -60,7 +60,7 @@ In C++11, you can use the **`decltype`** type specifier on a trailing return typ
```cpp
template
-UNKNOWN func(T&& t, U&& u){ return t + u; };
+UNKNOWN func(T&& t, U&& u){ return t + u; }
```
The introduction of the **`decltype`** type specifier enables a developer to obtain the type of the expression that the function template returns. Use the *alternative function declaration syntax* that is shown later, the **`auto`** keyword, and the **`decltype`** type specifier to declare a *late-specified* return type. The late-specified return type is determined when the declaration is compiled, instead of when it's coded.
@@ -75,12 +75,12 @@ In the following code example, the late-specified return type of the `myFunc` fu
//C++11
template
auto myFunc(T&& t, U&& u) -> decltype (forward(t) + forward(u))
- { return forward(t) + forward(u); };
+ { return forward(t) + forward(u); }
//C++14
template
decltype(auto) myFunc(T&& t, U&& u)
- { return forward(t) + forward(u); };
+ { return forward(t) + forward(u); }
```
## `decltype` and forwarding functions (C++11)
diff --git a/docs/cpp/errors-and-exception-handling-modern-cpp.md b/docs/cpp/errors-and-exception-handling-modern-cpp.md
index 486a271ba8..3140848fae 100644
--- a/docs/cpp/errors-and-exception-handling-modern-cpp.md
+++ b/docs/cpp/errors-and-exception-handling-modern-cpp.md
@@ -2,7 +2,7 @@
title: "Modern C++ best practices for exceptions and error handling"
description: "How Modern C++ supports exceptional programming styles over error codes."
ms.date: 03/22/2024
-ms.topic: "conceptual"
+ms.topic: "best-practice"
---
# Modern C++ best practices for exceptions and error handling
diff --git a/docs/cpp/explicit-specialization-of-function-templates.md b/docs/cpp/explicit-specialization-of-function-templates.md
index 5842f4e767..769315f149 100644
--- a/docs/cpp/explicit-specialization-of-function-templates.md
+++ b/docs/cpp/explicit-specialization-of-function-templates.md
@@ -1,9 +1,8 @@
---
-description: "Learn more about: Explicit Specialization of Function Templates"
title: "Explicit Specialization of Function Templates"
-ms.date: "11/04/2016"
+description: "Learn more about: Explicit Specialization of Function Templates"
+ms.date: 11/04/2016
helpviewer_keywords: ["overriding, functions", "function templates, specialization", "explicit specialization of function templates", "declaring functions [C++], specialization of function template", "specialization of function templates"]
-ms.assetid: eb0fcb73-eaed-42a1-9b83-14b055a34bf8
---
# Explicit Specialization of Function Templates
@@ -21,7 +20,7 @@ This declaration enables you to define a different function for **`double`** var
// explicit_specialization.cpp
template void f(T t)
{
-};
+}
// Explicit specialization of f with 'char' with the
// template argument explicitly specified:
diff --git a/docs/cpp/explicitly-defaulted-and-deleted-functions.md b/docs/cpp/explicitly-defaulted-and-deleted-functions.md
index 13daddcfc3..78904c4e76 100644
--- a/docs/cpp/explicitly-defaulted-and-deleted-functions.md
+++ b/docs/cpp/explicitly-defaulted-and-deleted-functions.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: Explicitly Defaulted and Deleted Functions"
title: "Explicitly Defaulted and Deleted Functions"
-ms.date: "11/04/2016"
+description: "Learn more about: Explicitly Defaulted and Deleted Functions"
+ms.date: 11/04/2016
---
# Explicitly Defaulted and Deleted Functions
@@ -44,7 +44,7 @@ These rules can complicate the implementation of what should be straight-forward
```cpp
struct noncopyable
{
- noncopyable() {};
+ noncopyable() {}
private:
noncopyable(const noncopyable&);
diff --git a/docs/cpp/function-overloading.md b/docs/cpp/function-overloading.md
index 694aa6e3d1..8f8c24a61a 100644
--- a/docs/cpp/function-overloading.md
+++ b/docs/cpp/function-overloading.md
@@ -1,6 +1,6 @@
---
-description: "Learn more about: Function Overloading"
title: "Function Overloading"
+description: "Learn more about: Function Overloading"
ms.date: 02/01/2023
helpviewer_keywords: ["function overloading [C++], about function overloading", "function overloading", "declaring functions [C++], overloading"]
---
@@ -307,7 +307,7 @@ public:
void Print( int i )
{
-};
+}
UDC udc;
diff --git a/docs/cpp/functions-cpp.md b/docs/cpp/functions-cpp.md
index 92c4ee5158..58670206a1 100644
--- a/docs/cpp/functions-cpp.md
+++ b/docs/cpp/functions-cpp.md
@@ -1,7 +1,7 @@
---
-description: "Learn more about: Functions (C++)"
title: "Functions (C++)"
-ms.date: "11/19/2018"
+description: "Learn more about: Functions (C++)"
+ms.date: 11/19/2018
helpviewer_keywords: ["defaults, arguments", "function definitions", "function definitions, about function definitions", "default arguments", "declarators, functions"]
---
# Functions (C++)
@@ -77,7 +77,6 @@ Optional parts of a function declaration are:
```cpp
//Declare printf with C linkage.
extern "C" int printf( const char *fmt, ... );
-
```
For more information, see [Translation units and linkage](../cpp/program-and-linkage-cpp.md).
diff --git a/docs/cpp/functions-with-variable-argument-lists-cpp.md b/docs/cpp/functions-with-variable-argument-lists-cpp.md
index 1fb884942d..59316d6993 100644
--- a/docs/cpp/functions-with-variable-argument-lists-cpp.md
+++ b/docs/cpp/functions-with-variable-argument-lists-cpp.md
@@ -1,66 +1,68 @@
---
-description: "Learn more about: Functions with Variable Argument Lists (C++)"
-title: "Functions with Variable Argument Lists (C++)"
-ms.date: "11/04/2016"
+title: "Functions with Variable Argument Lists (C++)"
+description: "Learn more about: Functions with Variable Argument Lists (C++)"
+ms.date: 05/01/2025
helpviewer_keywords: ["arguments [C++], variable number of", "variable argument lists", "declarators, functions", "argument lists [C++], variable number of", "declaring functions [C++], variables", "function calls, variable number of arguments"]
-ms.assetid: 27c2f83a-21dd-44c6-913c-2834cb944703
---
-# Functions with Variable Argument Lists (C++)
+# Functions with Variable Argument Lists (C++)
-Function declarations in which the last member of is the ellipsis (...) can take a variable number of arguments. In these cases, C++ provides type checking only for the explicitly declared arguments. You can use variable argument lists when you need to make a function so general that even the number and types of arguments can vary. The family of functions is an example of functions that use variable argument lists.`printf`*argument-declaration-list*
+Function declarations that have ellipsis (...) as the last argument take a variable number of arguments. C++ provides type checking only for the explicitly declared arguments. You can use variable argument lists when the number and types of arguments to the function can vary. The `printf` family of functions is an example of functions that have variable argument lists.
## Functions with variable arguments
-To access arguments after those declared, use the macros contained in the standard include file \ as described below.
+To access arguments after those declared, use the macros contained in the standard include file `` as explained in this article.
**Microsoft Specific**
-Microsoft C++ allows the ellipsis to be specified as an argument if the ellipsis is the last argument and the ellipsis is preceded by a comma. Therefore, the declaration `int Func( int i, ... );` is legal, but `int Func( int i ... );` is not.
+Microsoft C++ allows the ellipsis to be specified as an argument if the ellipsis is the last argument and a comma comes before the ellipsis. Therefore, the declaration `int Func( int i, ... );` is legal, but `int Func( int i ... );` isn't.
**END Microsoft Specific**
-Declaration of a function that takes a variable number of arguments requires at least one placeholder argument, even if it is not used. If this placeholder argument is not supplied, there is no way to access the remaining arguments.
+Declaration of a function that takes a variable number of arguments requires at least one placeholder argument, even if it isn't used. If this placeholder argument isn't supplied, there's no way to access the remaining arguments.
-When arguments of type **`char`** are passed as variable arguments, they are converted to type **`int`**. Similarly, when arguments of type **`float`** are passed as variable arguments, they are converted to type **`double`**. Arguments of other types are subject to the usual integral and floating-point promotions. See [Standard Conversions](standard-conversions.md) for more information.
+When arguments of type **`char`** are passed as variable arguments, they're converted to type **`int`**. Similarly, when arguments of type **`float`** are passed as variable arguments, they're converted to type **`double`**. Arguments of other types are subject to the usual integral and floating-point promotions. For more information, see [Standard Conversions](standard-conversions.md).
-Functions that require variable lists are declared by using the ellipsis (...) in the argument list. Use the types and macros that are described in the \ include file to access arguments that are passed by a variable list. For more information about these macros, see [va_arg, va_copy, va_end, va_start](../c-runtime-library/reference/va-arg-va-copy-va-end-va-start.md). in the documentation for the C Run-Time Library.
+Functions that require variable lists are declared by using the ellipsis (...) in the argument list. Use the types and macros that are described in the `` include file to access arguments that are passed by a variable list. For more information about these macros, see [va_arg, va_copy, va_end, va_start](../c-runtime-library/reference/va-arg-va-copy-va-end-va-start.md).
-The following example shows how the macros work together with the type (declared in \