Skip to content

Commit 55f0210

Browse files
committed
annotate new linkage info
1 parent 1cb6c86 commit 55f0210

17 files changed

+133
-21
lines changed

docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ Convert a time value to a string and adjust for local time zone settings. More s
1717
## Syntax
1818

1919
```C
20-
char *ctime( const time_t *sourceTime );
20+
char *ctime( const time_t *sourceTime ); // See note in remarks section about linkage
2121
char *_ctime32( const __time32_t *sourceTime );
2222
char *_ctime64( const __time64_t *sourceTime );
23-
wchar_t *_wctime( const time_t *sourceTime );
23+
wchar_t *_wctime( const time_t *sourceTime ); // See note in remarks section about linkage
2424
wchar_t *_wctime32( const __time32_t *sourceTime );
2525
wchar_t *_wctime64( const __time64_t *sourceTime );
2626
```
@@ -62,6 +62,12 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer,
6262

6363
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).
6464

65+
> [!Note]
66+
> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\
67+
> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\
68+
> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\
69+
> This applies to the following functions: ctime, _wctime
70+
6571
### Generic-text routine mappings
6672

6773
| TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined |

docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Convert a time value to a string and adjust for local time zone settings. These
1616
## Syntax
1717

1818
```C
19-
errno_t ctime_s(
19+
errno_t ctime_s( // See note in remarks section about linkage
2020
char* buffer,
2121
size_t numberOfElements,
2222
const time_t *sourceTime
@@ -31,7 +31,7 @@ errno_t _ctime64_s(
3131
size_t numberOfElements,
3232
const __time64_t *sourceTime
3333
);
34-
errno_t _wctime_s(
34+
errno_t _wctime_s( // See note in remarks section about linkage
3535
wchar_t* buffer,
3636
size_t numberOfElements,
3737
const time_t *sourceTime
@@ -124,6 +124,12 @@ The debug library versions of these functions first fill the buffer with 0xFE. T
124124

125125
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).
126126

127+
> [!Note]
128+
> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\
129+
> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\
130+
> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\
131+
> This applies to the following functions: ctime_s, _wctime_s
132+
127133
### Generic-text routine mappings
128134

129135
| TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined |

docs/c-runtime-library/reference/difftime-difftime32-difftime64.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Finds the difference between two times.
1717
## Syntax
1818

1919
```C
20-
double difftime( time_t timeEnd, time_t timeStart );
20+
double difftime( time_t timeEnd, time_t timeStart ); // See note in remarks section about linkage
2121
double _difftime32( __time32_t timeEnd, __time32_t timeStart );
2222
double _difftime64( __time64_t timeEnd, __time64_t timeStart );
2323
```
@@ -46,6 +46,13 @@ These functions validate their parameters. If either of the parameters is zero o
4646
4747
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).
4848
49+
> [!Note]
50+
> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\
51+
> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\
52+
> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\
53+
> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\
54+
> This applies to the following functions: difftime
55+
4956
## Requirements
5057
5158
| Routine | Required header |

docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Gets information about an open file.
1616
## Syntax
1717

1818
```C
19-
int _fstat(
19+
int _fstat( // See note in remarks section about linkage
2020
int fd,
2121
struct _stat *buffer
2222
);
@@ -81,6 +81,12 @@ Unless `_USE_32BIT_TIME_T` is defined, **`_fstat`** is equivalent to **`_fstat64
8181

8282
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).
8383

84+
> [!Note]
85+
> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\
86+
> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\
87+
> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\
88+
> This applies to the following functions: _fstat
89+
8490
### Time type and file length type variations of `_stat`
8591

8692
| Functions | `_USE_32BIT_TIME_T` defined? | Time type | File length type |

docs/c-runtime-library/reference/ftime-ftime32-ftime64.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Get the current time. More secure versions of these functions are available; see
1717
## Syntax
1818

1919
```C
20-
void _ftime( struct _timeb *timeptr );
20+
void _ftime( struct _timeb *timeptr ); // See note in remarks section about linkage
2121
void _ftime32( struct __timeb32 *timeptr );
2222
void _ftime64( struct __timeb64 *timeptr );
2323
```
@@ -46,6 +46,12 @@ The **`_ftime`** function is equivalent to **`_ftime64`**, and `_timeb` contains
4646
4747
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).
4848
49+
> [!Note]
50+
> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\
51+
> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\
52+
> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\
53+
> This applies to the following functions: _ftime
54+
4955
## Requirements
5056
5157
| Function | Required header |

docs/c-runtime-library/reference/futime-futime32-futime64.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Sets the modification time on an open file.
1717
## Syntax
1818

1919
```C
20-
int _futime(
20+
int _futime( // See note in remarks section about linkage
2121
int fd,
2222
struct _utimbuf *filetime
2323
);
@@ -51,6 +51,12 @@ The **`_futime`** routine sets the modification date and the access time on the
5151

5252
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).
5353

54+
> [!Note]
55+
> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\
56+
> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\
57+
> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\
58+
> This applies to the following functions: _futime
59+
5460
## Requirements
5561

5662
| Function | Required header | Optional header |

docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Converts a `time_t` time value to a `tm` structure. More secure versions of thes
1616
## Syntax
1717

1818
```C
19-
struct tm *gmtime( const time_t *sourceTime );
19+
struct tm *gmtime( const time_t *sourceTime ); // See note in remarks section about linkage
2020
struct tm *_gmtime32( const __time32_t *sourceTime );
2121
struct tm *_gmtime64( const __time64_t *sourceTime );
2222
```
@@ -56,6 +56,13 @@ The **`_gmtime32`** function breaks down the *`sourceTime`* value and stores it
5656
5757
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).
5858
59+
> [!Note]
60+
> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\
61+
> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\
62+
> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\
63+
> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\
64+
> This applies to the following functions: gmtime
65+
5966
## Requirements
6067
6168
| Routine | Required C header | Required C++ header |

docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ Converts a time value to a `tm` structure. These functions are versions of [`_gm
1616
## Syntax
1717

1818
```C
19-
errno_t gmtime_s(
19+
errno_t gmtime_s( // See note in remarks section about linkage
2020
struct tm* tmDest,
2121
const __time_t* sourceTime
2222
);
@@ -76,6 +76,13 @@ Each of the structure fields is of type **`int`**, as shown in the following tab
7676

7777
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).
7878

79+
> [!Note]
80+
> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\
81+
> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\
82+
> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\
83+
> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\
84+
> This applies to the following functions: gmtime_s
85+
7986
## Requirements
8087

8188
| Routine | Required C header | Required C++ header |

docs/c-runtime-library/reference/localtime-localtime32-localtime64.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Converts a time value and corrects for the local time zone. More secure versions
1717
## Syntax
1818

1919
```C
20-
struct tm *localtime( const time_t *sourceTime );
20+
struct tm *localtime( const time_t *sourceTime ); // See note in remarks section about linkage
2121
struct tm *_localtime32( const __time32_t *sourceTime );
2222
struct tm *_localtime64( const __time64_t *sourceTime );
2323
```
@@ -72,6 +72,13 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer,
7272
7373
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).
7474
75+
> [!Note]
76+
> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\
77+
> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\
78+
> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\
79+
> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\
80+
> This applies to the following functions: localtime
81+
7582
## Requirements
7683
7784
| Routine | Required C header | Required C++ header |

docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Converts a **`time_t`** time value to a **`tm`** structure, and corrects for the
1717
## Syntax
1818

1919
```C
20-
errno_t localtime_s(
20+
errno_t localtime_s( // See note in remarks section about linkage
2121
struct tm* const tmDest,
2222
time_t const* const sourceTime
2323
);
@@ -84,6 +84,13 @@ If the **`TZ`** environment variable is set, the C run-time library assumes rule
8484

8585
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).
8686

87+
> [!Note]
88+
> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\
89+
> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\
90+
> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\
91+
> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\
92+
> This applies to the following functions: localtime_s
93+
8794
## Requirements
8895

8996
| Routine | Required C header | Required C++ header |

0 commit comments

Comments
 (0)