sprintf
=======

POSIX specification:
 https://pubs.opengroup.org/onlinepubs/9699919799/functions/sprintf.html

Gnulib module: sprintf-posix or sprintf-gnu

Portability problems fixed by either Gnulib module sprintf-posix or sprintf-gnu:

  * This function does not support size specifiers as in C99 (hh, ll, j, t, z) on some platforms: AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.24, old mingw, MSVC 9.

  * This function does not support size specifiers as in C23 (w8, w16, w32, w64, wf8, wf16, wf32, wf64) on some platforms: glibc, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 9.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14.

  * printf of long double numbers is unsupported on some platforms: mingw, MSVC 14.

  * printf "%f", "%e", "%g" of Infinity and NaN yields an incorrect result on some platforms: AIX 5.2, Solaris 11.4, mingw, MSVC 14.

  * This function does not support the a and A directives on some platforms: glibc-2.3.6, Mac OS X 10.5, NetBSD 9.0, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC 14.

  * This function does not support the b directive, required by ISO C23, on some platforms: glibc 2.34, musl libc, macOS 12.5, FreeBSD 13.2, NetBSD 9.0, OpenBSD 7.2, AIX 7.2, HP-UX 11, IRIX 6.5, Solaris 11.4, Cygwin 2.9.0, mingw, MSVC 14.

  * This function does not support the F directive on some platforms: NetBSD 3.0, AIX 5.1, HP-UX 11.23, IRIX 6.5, Solaris 9, Cygwin 1.5.x, mingw, MSVC 14.

  * This function does not support the n directive on some platforms: glibc when used with _FORTIFY_SOURCE >= 2 (set by default on Ubuntu), Android, OpenBSD, macOS 11.1, MSVC 14.

  * This function does not support the ls directive on some platforms: OpenBSD 4.0, IRIX 6.5, Cygwin 1.5.x, Haiku.

  * This function does not support precisions in the ls directive correctly on some platforms: Solaris 11.4.

  * This function does not support format directives that access arguments in an arbitrary order, such as "%2$s", on some platforms: NetBSD 3.0, mingw, MSVC 14.

  * This function doesn't support the ' flag on some platforms: NetBSD 3.0, Cygwin 1.5.24, mingw, MSVC 14.

  * This function does not round the argument of the a directive correctly on some platforms: Mac OS X 10.12, FreeBSD 14.0.

  * printf "%010f" of NaN and Infinity yields an incorrect result (padded with zeroes, or wrong capitalization) on some platforms: Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, AIX 5.2, IRIX 6.5, Solaris 11.4, Cygwin 1.5.x, mingw, MSVC/clang.

  * printf "%#.0x" or "%#.0X" with a zero argument yields an incorrect result (non-empty) on some platforms: Mac OS X 10.6.

  * This function does not support precisions larger than 512 or 1024 in integer, floating-point and pointer output on some platforms: AIX 7.1, Solaris 10/x86, mingw, MSVC/clang.

  * This function mishandles large floating point precisions (for example, formatting 1.0 with "%.511f") on some platforms: Solaris 10.

  * This function produces wrong output for the lc directive with a NUL wide character argument on some platforms: musl libc 1.2.4.

  * This function can crash in out-of-memory conditions on some platforms: FreeBSD 14.0, NetBSD 5.0.

  * The compiler warns that this function is deprecated: macOS 13.0.

Portability problems fixed by Gnulib module sprintf-gnu:

  * This function does not support the B directive on some platforms: glibc 2.34, FreeBSD 13.2, NetBSD 9.0, OpenBSD 7.2, macOS 12.5, AIX 7.2, Solaris 11.4, and others.

Portability problems not fixed by Gnulib:

  * The %m directive is not portable, use %s mapped to an argument of strerror(errno) (or a version of strerror_r) instead.

  * Formatting noncanonical long double numbers produces nonmeaningful results on some platforms: glibc and others, on x86, x86_64, IA-64 CPUs.

  * When formatting an integer with grouping flag, this function inserts thousands separators even in the "C" locale on some platforms: NetBSD 5.1.