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


Groups > comp.lang.c > #112198

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 09:35 -0700
Organization None to speak of
Message-ID <ln8tkuede3.fsf@kst-u.example.com> (permalink)
References <ohq29k$892$1@dont-email.me> <B380B.92754$gM7.35332@fx44.am4>

Show all headers | View raw


bartc <bc@freeuk.com> writes:
> On 14/06/2017 02:13, DFS wrote:
>> Seems strange, but the code compiles (Tiny C on Windows) and runs just 
>> fine with only stdio.h and stdlib.h includes.
>> 
>> Online resources say ctype.h is the required header (which I didn't know 
>> obviously).
>> 
>> I compiled the program with Pelles and got warnings:
>> 
>> Undeclared function 'isspace' (did you mean 'vsscanf'?); assuming 
>> 'extern' returning 'int'.
>> 
>> 
>> Why is it working without ctype.h?
>
>
> Try this compiler** (choose either -32 or -64 version depending on your 
> Tiny C):
>
> https://github.com/bartg/langs/blob/master/bccproj/mcc32.c
> https://github.com/bartg/langs/blob/master/bccproj/mcc64.c
>
> Use tcc to compile it, eg:
>
>    tcc mcc32.c -omcc.exe
>
> Then run as:
>
>    mcc program.c
>
> You won't be able to run the result (as it needs extra bits and pieces, 
> code is only for x64 etc), but can give a second opinion on code that 
> apparently passes error-free with other compilers.

Why would a second opinion be needed?  The standard is clear.

Under C90, calls to undeclared functions are permitted.  Under C99 and
C11, they're a constraint violation.  <stdio.h> and <stdlib.h> do not
declare isspace(); <ctype.h> does.

This:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    puts(isspace(' ') ? "OK" : "Huh?");
    return 0;
}

is a valid program with well defined behavior under C90, and violates
a constraint in C99 and C11.  An implementation that compiles it
with no diagnostic is not a conforming C99 or C11 implementation
(a bug if it claims to conform to C99 or C11).

Of course the solution for programmers is easy.  If you call isspace(),
add "#include <ctype.h>", even if your code is only intended to be
compiled as C90.

-- 
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