public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely.gcc@gmail.com>
To: Olavi Esker <olavi.esker@gmail.com>
Cc: gcc-help <gcc-help@gcc.gnu.org>
Subject: Re: int8_t outputs char via <iostream>
Date: Sat, 23 Dec 2023 10:10:03 +0000	[thread overview]
Message-ID: <CAH6eHdRCf5Yx3wMSyrcXdQ73Bs3rQEu2DwrJn=-k4PyCXGmRbg@mail.gmail.com> (raw)
In-Reply-To: <CALA5Sxz2jf5YXJSa8+M5htmV65ehhfJoc0tu9cDuDR_F3P88Zg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2253 bytes --]

On Sat, 23 Dec 2023, 00:15 Olavi Esker via Gcc-help, <gcc-help@gcc.gnu.org>
wrote:

> Hello,
> With <iostream> int8_t prints out char according to ascii number. Similarly
> it reads a single char, which cannot be static converted. The compiler
> gives no warning whatsoever. But when <cstdio> is used with scanf %hhd and
> printf %d it works perfectly. Is this really the intended <iostream>
> functioning? In Rust i8 and C <stdio.h> int8 works fine, too.
> #include <iostream>
> #include <cstdint>
>
> int main()
> {
> std::int8_t myInt{65};
> myInt += 1;
> std::cout << myInt;
> }
>
> Guess what this returns?
> Character "B".
>
> int main()
> {
> std::int8_t myInt{};
> std::cin >> myInt;
> std::cout << myInt;
> }
> This will also read a character, and
> print the characters ascii value.
> So if I give it 3, it read it as '3', and prints out 51.
>
>
> The compiler gives no warning of this whatsoever with the flags:
>                 "-std=c++20",
>                 "-pedantic-errors",
>                 "-Wall",
>                 "-Wpedantic",
>                 "-Wshadow",
>                 "-Wcast-align",
>                 "-Wlogical-op",
>                 "-Wno-unused-parameter",
>                 "-Weffc++",
>                 "-Wextra",
>                 "-Wconversion",
>                 "-Wsign-conversion".
>
>
> It does seem like a mistake to have `signed char` and `unsigned char`
> display as characters rather than numbers, since `char` is a distinct type.
>

No, it's not a mistake. There are intentionally designed functions for
writing both signed char and unsigned char to an ostream. This is the
intended behaviour. Changing it now would break code that expects the
behaviour that has existed for more than 20 years.

And so `char` could display as a character and the other two as integers.
>
> Wish you can change this, or at least have a warning, because <iostream>
> functions fine for higher bitted integers.
>

A warning doesn't seem appropriate for code that works perfectly correctly
according to the standard. What if this is exactly the behaviour you want?
Why should it warn?

This is something that surprises beginners, then they learn how it works,
and it's not a problem.

Just cast to int to get what you want.

  reply	other threads:[~2023-12-23 10:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-23  0:14 Olavi Esker
2023-12-23 10:10 ` Jonathan Wakely [this message]
2023-12-23 10:31 ` Jonathan Wakely

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='CAH6eHdRCf5Yx3wMSyrcXdQ73Bs3rQEu2DwrJn=-k4PyCXGmRbg@mail.gmail.com' \
    --to=jwakely.gcc@gmail.com \
    --cc=gcc-help@gcc.gnu.org \
    --cc=olavi.esker@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).