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


Groups > comp.lang.c > #112206

Re: isspace() executes without ctype header?

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: isspace() executes without ctype header?
Date 2017-06-14 10:17 -0700
Organization None to speak of
Message-ID <lnzidacwu3.fsf@kst-u.example.com> (permalink)
References (2 earlier) <ohq8oe$mi3$1@dont-email.me> <kfno9tq7fpd.fsf@x-alumni2.alumni.caltech.edu> <ivd0B.96368$3k.53796@fx03.am4> <ln4lviecup.fsf@kst-u.example.com> <USd0B.212390$kd6.181170@fx33.am4>

Show all headers | View raw


bartc <bc@freeuk.com> writes:
> On 14/06/2017 17:46, Keith Thompson wrote:
>> bartc <bc@freeuk.com> writes:
>> [...]
>>> I tried compiling this:
>>>
>>> int main(void){
>>>     isspace(0);
>>> }
>>>
>>> I get no messages at all from either of the two tccs I have on Windows
>>> (0.9.26, 32- and 64-buit versions).
>> 
>> That behavior is consistent with a conforming C90 compiler.
>> 
>>> Same with isspace(0,0). Same with isspace("abc"). So it's not just
>>> assuming implicit int.
>> 
>> Yes it is.  The C90 implicit int rule assumes that an undeclared
>> function takes arguments of the (promoted) types in the call,
>> and returns int.  (If that assumption is inconsistent with the
>> actual definition, as it is for isspace(0,0) and isspace("abc"),
>> the behavior is undefined.)
>
> In the second example, the argument type is char*, the assumed parameter 
> type is int. Why doesn't it complain about pointer to int conversion? It 
> will do so when the int parameter is properly declared.

No, there is no assumption that the parameter type is int.

C90 6.3.2.2:

    If the expression that precedes the parenthesized argument list
    in a function call consists solely of an identifier, and if
    no declaration is visible for this identifier, the identifier
    is implicitly declared exactly as if, in the innermost block
    containing the function call, the declaration                                                                                            
        extern int identifier () ;

    appeared.

    If the expression that denotes the called function has a type
    that does not include a prototype, the integral promotions
    are performed on each argument and arguments that have type
    float are promoted to double. These are called the *default
    argument promotions*.  If the number of arguments does not agree
    with the number of parameters, the behavior is undefined. If
    the function is defined with a type that does not include a
    prototype, and the types of the arguments after promotion are
    not compatible with those of the parameters after promotion,
    the behavior is undefined.

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
Working, but not speaking, for JetHead Development, Inc.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

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


Thread

isspace() executes without ctype header? DFS <nospam@dfs.com> - 2017-06-13 21:13 -0400
  Re: isspace() executes without ctype header? Ian Collins <ian-news@hotmail.com> - 2017-06-14 13:20 +1200
    Re: isspace() executes without ctype header? DFS <nospam@dfs.com> - 2017-06-13 21:33 -0400
      Re: isspace() executes without ctype header? Ian Collins <ian-news@hotmail.com> - 2017-06-14 13:35 +1200
        Re: isspace() executes without ctype header? DFS <nospam@dfs.com> - 2017-06-13 22:31 -0400
          Re: isspace() executes without ctype header? Ian Collins <ian-news@hotmail.com> - 2017-06-14 14:40 +1200
  Re: isspace() executes without ctype header? Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2017-06-13 21:49 -0400
  Re: isspace() executes without ctype header? Tim Rentsch <txr@alumni.caltech.edu> - 2017-06-13 19:20 -0700
    Re: isspace() executes without ctype header? DFS <nospam@dfs.com> - 2017-06-13 23:04 -0400
      Re: isspace() executes without ctype header? asetofsymbols@gmail.com - 2017-06-13 23:07 -0700
      Re: isspace() executes without ctype header? Tim Rentsch <txr@alumni.caltech.edu> - 2017-06-14 08:26 -0700
        Re: isspace() executes without ctype header? bartc <bc@freeuk.com> - 2017-06-14 17:29 +0100
          Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 09:46 -0700
            Re: isspace() executes without ctype header? bartc <bc@freeuk.com> - 2017-06-14 17:54 +0100
              Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 10:17 -0700
              Re: isspace() executes without ctype header? supercat@casperkitty.com - 2017-06-14 10:48 -0700
                Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 12:03 -0700
                Re: isspace() executes without ctype header? supercat@casperkitty.com - 2017-06-14 12:48 -0700
                Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 13:06 -0700
            Re: isspace() executes without ctype header? Tim Rentsch <txr@alumni.caltech.edu> - 2017-06-16 23:14 -0700
  Re: isspace() executes without ctype header? bartc <bc@freeuk.com> - 2017-06-14 11:18 +0100
    Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 09:35 -0700
      Re: isspace() executes without ctype header? bartc <bc@freeuk.com> - 2017-06-14 17:47 +0100
        Re: isspace() executes without ctype header? supercat@casperkitty.com - 2017-06-14 10:19 -0700
          Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 10:29 -0700
        Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 10:21 -0700
          Re: isspace() executes without ctype header? bartc <bc@freeuk.com> - 2017-06-14 19:12 +0100
            Re: isspace() executes without ctype header? Keith Thompson <kst-u@mib.org> - 2017-06-14 12:12 -0700
            Re: isspace() executes without ctype header? joel.rees@gmail.com - 2017-06-16 17:56 -0700
              Re: isspace() executes without ctype header? supercat@casperkitty.com - 2017-06-17 10:20 -0700
                Re: isspace() executes without ctype header? Robert Wessel <robertwessel2@yahoo.com> - 2017-06-18 00:25 -0500
                Re: isspace() executes without ctype header? supercat@casperkitty.com - 2017-06-19 09:01 -0700
                Re: isspace() executes without ctype header? Robert Wessel <robertwessel2@yahoo.com> - 2017-06-19 21:59 -0500

csiph-web