Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #41309

Re: why printf("%d", arg) works with arg of type int, short, char

From Kaz Kylheku <kaz@kylheku.com>
Newsgroups comp.lang.c
Subject Re: why printf("%d", arg) works with arg of type int, short, char
Date 2014-03-02 20:53 +0000
Organization Aioe.org NNTP Server
Message-ID <20140302125139.273@kylheku.com> (permalink)
References <fc5dad84-08d7-4c7b-bd56-5ce49b177b1b@googlegroups.com> <lniory438k.fsf@nuthaus.mib.org> <el7aua-9bg.ln1@wilbur.25thandClement.com> <87r46luuqw.fsf@mib.org> <1bk3cc4pzt.fsf@snowball.wb.pfeifferfamily.net>

Show all headers | View raw


On 2014-03-02, Joe Pfeiffer <pfeiffer@cs.nmsu.edu> wrote:
> Keith Thompson <kst-u@mib.org> writes:
>
>> <william@wilbur.25thandClement.com> writes:
>>> Keith Thompson <kst-u@mib.org> wrote:
>> [...]
>>>> The default argument promotions convert float to double, and any
>>>> integer type narrower than int is convert to int if int can represent
>>>> all the values of the type, otherwise to unsigned int.  (The latter
>>>> avoids overflow when an unsigned short value is promoted and short
>>>> and int are the same size.)
>>>> 
>>>> That's why, among other things, there are no specific printf formats
>>>> for float or short.
>>>
>>> There's the `h' length modifier for shorts. Also `hh' for chars.
>>
>> Good point, I momentarily forgot about those.
>>
>> "%hd" still requires an int argument (possibly promoted from short),
>> but the value is *converted* to short before printing.  I'm actually
>> not sure what it's good for.  If the argument is already in the
>> range of type short, then it behaves identically to "%d"; if it's
>> outside that range, the result is implementation-defined (or, at
>> least in principle, it can raise an implementation-defined signal).
>
> I always assumed that it was for consistency with scanf.

There are blatant inconsistencies like:

 printf("%f", double_var);

 scanf("%f", &double_var);  /* error */

 scanf("%lf", &double_var);  /* correct */

The consistency ship sailed long ago; printf and scanf missed it.

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

why printf("%d", arg) works with arg of type int, short, char jononanon@googlemail.com - 2014-03-01 01:29 -0800
  Re: why printf("%d", arg) works with arg of type int, short, char jononanon@googlemail.com - 2014-03-01 01:42 -0800
    Re: why printf("%d", arg) works with arg of type int, short, char jononanon@googlemail.com - 2014-03-01 01:54 -0800
      Re: why printf("%d", arg) works with arg of type int, short, char Barry Schwarz <schwarzb@dqel.com> - 2014-03-01 07:21 -0800
        Re: why printf("%d", arg) works with arg of type int, short, char gazelle@shell.xmission.com (Kenny McCormack) - 2014-03-01 15:51 +0000
          Re: why printf("%d", arg) works with arg of type int, short, char Richard <rgrdev_@gmail.com> - 2014-03-01 17:50 +0100
            Re: why printf("%d", arg) works with arg of type int, short, char gazelle@shell.xmission.com (Kenny McCormack) - 2014-03-01 18:36 +0000
  Re: why printf("%d", arg) works with arg of type int, short, char Melzzzzz <mel@zzzzz.invalid> - 2014-03-01 11:22 +0100
    Re: why printf("%d", arg) works with arg of type int, short, char jononanon@googlemail.com - 2014-03-01 02:39 -0800
    Re: why printf("%d", arg) works with arg of type int, short, char Keith Thompson <kst-u@mib.org> - 2014-03-01 19:44 -0800
  Re: why printf("%d", arg) works with arg of type int, short, char Keith Thompson <kst-u@mib.org> - 2014-03-01 02:34 -0800
    Re: why printf("%d", arg) works with arg of type int, short, char jononanon@googlemail.com - 2014-03-01 02:49 -0800
      Re: why printf("%d", arg) works with arg of type int, short, char James Kuyper <jameskuyper@verizon.net> - 2014-03-01 09:10 -0500
    Re: why printf("%d", arg) works with arg of type int, short, char <william@wilbur.25thandClement.com> - 2014-03-01 15:38 -0800
      Re: why printf("%d", arg) works with arg of type int, short, char Keith Thompson <kst-u@mib.org> - 2014-03-01 19:47 -0800
        Re: why printf("%d", arg) works with arg of type int, short, char <william@wilbur.25thandClement.com> - 2014-03-01 21:12 -0800
        Re: why printf("%d", arg) works with arg of type int, short, char Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2014-03-02 07:47 -0700
          Re: why printf("%d", arg) works with arg of type int, short, char Kaz Kylheku <kaz@kylheku.com> - 2014-03-02 20:53 +0000
            Re: why printf("%d", arg) works with arg of type int, short, char jgk@panix.com (Joe keane) - 2014-03-04 00:23 +0000
              Re: why printf("%d", arg) works with arg of type int, short, char Kaz Kylheku <kaz@kylheku.com> - 2014-03-04 00:33 +0000
                Re: why printf("%d", arg) works with arg of type int, short, char glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-03-04 00:45 +0000
                Re: why printf("%d", arg) works with arg of type int, short, char jgk@panix.com (Joe keane) - 2014-03-05 04:07 +0000
                Re: why printf("%d", arg) works with arg of type int, short, char Barry Schwarz <schwarzb@dqel.com> - 2014-03-05 10:07 -0800
  Re: why printf("%d", arg) works with arg of type int, short, char "BartC" <bc@freeuk.com> - 2014-03-01 11:12 +0000
    Re: why printf("%d", arg) works with arg of type int, short, char Eric Sosman <esosman@comcast-dot-net.invalid> - 2014-03-01 10:54 -0500
      Re: why printf("%d", arg) works with arg of type int, short, char glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-03-01 18:55 +0000

csiph-web