From: Alejandro Colomar <colomar.6.4.3@gmail.com>
To: mtk.manpages@gmail.com
Cc: linux-man@vger.kernel.org, libc-alpha@sourceware.org,
eggert@cs.ucla.edu, fweimer@redhat.com,
Alejandro Colomar <colomar.6.4.3@gmail.com>
Subject: [PATCH] system_data_types.7: Add note about length modifiers and conversions to [u]intmax_t, and corresponding example
Date: Sun, 20 Sep 2020 23:40:13 +0200 [thread overview]
Message-ID: <20200920214012.454410-1-colomar.6.4.3@gmail.com> (raw)
Reported-by: Michael Kerrisk <mtk.manpages@gmail.com>
Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
---
Hi Michael,
On 9/20/20 10:20 PM, Michael Kerrisk (man-pages) wrote:
> PS It occurs to me that this manual page is a suitable place
> to explain the general technique of casting integral system
> data types to [u]intmax_t for the purpose of printf(). Would
> you like to add this, Alex?
Sure. Good idea!
Hope you like the patch :)
Cheers,
Alex
man7/system_data_types.7 | 52 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/man7/system_data_types.7 b/man7/system_data_types.7
index 5128e1f01..1fcc09dae 100644
--- a/man7/system_data_types.7
+++ b/man7/system_data_types.7
@@ -626,6 +626,58 @@ See also:
.SH NOTES
The structures described in this manual page shall contain,
at least, the members shown in their definition, in no particular order.
+.PP
+Most of the types described in this page don't have a corresponding
+length modifier for the
+.BR printf (3)
+and the
+.BR scanf (3)
+families of functions.
+To print a value of a type that doesn't have a length modifier,
+it should be converted to
+.I intmax_t
+or
+.I uintmax_t
+by an explicit cast.
+To scan into a variable of a type that doesn't have a length modifier,
+an intermediate temporary variable of type
+.I intmax_t
+or
+.I uintmax_t
+should be used.
+The example below shows how these conversions should be done.
+.SH EXAMPLES
+The program shown below scans from a string and prints a value stored in
+a variable of a type that doesn't have a length modifier.
+The appropriate conversions from and to
+.I intmax_t
+are used as explained in the notes section above:
+.PP
+.EX
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+int
+main (void)
+{
+ static const char *const str = "There are 60 s in an hour";
+ time_t secs;
+ intmax_t tmp;
+
+ /* Scan the number from the string into the temporary variable */
+ sscanf(str, "There are %jd", &tmp);
+
+ /* Copy the value to the time_t variable secs */
+ secs = tmp;
+
+ /* Print the value */
+ printf("There are %jd seconds in an hour!\en", (intmax_t) secs);
+
+ exit(EXIT_SUCCESS);
+}
+.EE
.SH SEE ALSO
.BR feature_test_macros (7),
.BR standards (7)
--
2.28.0
next reply other threads:[~2020-09-20 21:40 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-20 21:40 Alejandro Colomar [this message]
2020-09-21 5:39 ` [PATCH] system_data_types.7: Add note about length modifiers and conversions to [u]intmax_t, and corresponding example Michael Kerrisk (man-pages)
2020-09-21 7:32 ` man-pages.7: Simplify indentation of structure definitions, shell session logs, and so on Alejandro Colomar
2020-09-21 7:49 ` Michael Kerrisk (man-pages)
2020-09-21 14:15 ` G. Branden Robinson
2020-09-24 8:15 ` Michael Kerrisk (man-pages)
2020-09-27 6:03 ` G. Branden Robinson
2020-09-29 13:12 ` Michael Kerrisk (man-pages)
2020-09-29 20:15 ` Michael Kerrisk (man-pages)
2020-09-30 12:02 ` G. Branden Robinson
2020-09-30 12:54 ` G. Branden Robinson
2020-10-01 7:33 ` Michael Kerrisk (man-pages)
2020-10-26 7:00 ` Michael Kerrisk (man-pages)
2020-09-21 8:19 ` [PATCH v2] system_data_types.7: Add note about length modifiers and conversions to [u]intmax_t, and corresponding example Alejandro Colomar
2020-09-21 8:29 ` Alejandro Colomar
2020-09-21 10:38 ` Michael Kerrisk (man-pages)
2020-09-21 13:32 ` [PATCH v3] " Alejandro Colomar
2020-09-21 14:13 ` Michael Kerrisk (man-pages)
2020-09-21 14:39 ` Alejandro Colomar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200920214012.454410-1-colomar.6.4.3@gmail.com \
--to=colomar.6.4.3@gmail.com \
--cc=eggert@cs.ucla.edu \
--cc=fweimer@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-man@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.