difference between stdio.h and cstdio

Discussion in 'C++' started by david wolf, Dec 6, 2006.

  1. david wolf

    david wolf Guest

    My understanding is that cstdio basically is the same as stdio.h except
    the functions are in a namspace called std. However when I take a look
    at the content of the file cstdio, it has the following lines inside
    only:

    -------content of cstdio on red hat linux enterprise 3----
    #ifndef __CSTDIO__
    #define __CSTDIO__
    #include <stdio.h>
    #endif
    ---------------------------------------

    I did not see anywhere or how these functions are defined in namespace
    std, looks like it merely include c language 's stdio.h. Can anyone
    give me an explanation why on linux (maybe on other boxes too) I did
    not see why cstdio's functions are defined in std namespace?

    Thanks,

    David
     
    david wolf, Dec 6, 2006
    #1
    1. Advertising

  2. david wolf wrote:
    > My understanding is that cstdio basically is the same as stdio.h except
    > the functions are in a namspace called std. However when I take a look
    > at the content of the file cstdio, it has the following lines inside
    > only:
    >
    > -------content of cstdio on red hat linux enterprise 3----
    > #ifndef __CSTDIO__
    > #define __CSTDIO__
    > #include <stdio.h>
    > #endif
    > ---------------------------------------
    >
    > I did not see anywhere or how these functions are defined in namespace
    > std, looks like it merely include c language 's stdio.h. Can anyone
    > give me an explanation why on linux (maybe on other boxes too) I did
    > not see why cstdio's functions are defined in std namespace?
    >
    > Thanks,
    >
    > David
    >


    On my gcc 4.0.2 this is not the case.
    Have you loooked in stdio.h?

    Sincerely,

    Peter Jansson
    http://www.p-jansson.com/
    http://www.jansson.net/
     
    Peter Jansson, Dec 6, 2006
    #2
    1. Advertising

  3. david wolf wrote:
    > My understanding is that cstdio basically is the same as stdio.h except
    > the functions are in a namspace called std. However when I take a look
    > at the content of the file cstdio, it has the following lines inside
    > only:
    >
    > -------content of cstdio on red hat linux enterprise 3----
    > #ifndef __CSTDIO__
    > #define __CSTDIO__
    > #include <stdio.h>
    > #endif
    > ---------------------------------------
    >
    > I did not see anywhere or how these functions are defined in namespace
    > std, looks like it merely include c language 's stdio.h. Can anyone
    > give me an explanation why on linux (maybe on other boxes too) I did
    > not see why cstdio's functions are defined in std namespace?


    This question should probably be directed to a GCC support list.

    I have gcc v 4.1.1 on fedora and cstdio looks nothing like that.

    Here it is:

    // -*- C++ -*- forwarding header.

    // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
    // Free Software Foundation, Inc.
    //
    // This file is part of the GNU ISO C++ Library. This library is free
    // software; you can redistribute it and/or modify it under the
    // terms of the GNU General Public License as published by the
    // Free Software Foundation; either version 2, or (at your option)
    // any later version.

    // This library is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    // GNU General Public License for more details.

    // You should have received a copy of the GNU General Public License along
    // with this library; see the file COPYING. If not, write to the Free
    // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301,
    // USA.

    // As a special exception, you may use this file as part of a free software
    // library without restriction. Specifically, if other files instantiate
    // templates or use macros or inline functions from this file, or you
    compile
    // this file and link it with other files to produce an executable, this
    // file does not by itself cause the resulting executable to be covered by
    // the GNU General Public License. This exception does not however
    // invalidate any other reasons why the executable file might be covered by
    // the GNU General Public License.

    //
    // ISO C++ 14882: 27.8.2 C Library files
    //

    /** @file cstdio
    * This is a Standard C++ Library file. You should @c #include this file
    * in your programs, rather than any of the "*.h" implementation files.
    *
    * This is the C++ version of the Standard C Library header @c stdio.h,
    * and its contents are (mostly) the same as that header, but are all
    * contained in the namespace @c std (except for names which are defined
    * as macros in C).
    */

    #ifndef _GLIBCXX_CSTDIO
    #define _GLIBCXX_CSTDIO 1

    #pragma GCC system_header

    #include <bits/c++config.h>
    #include <cstddef>

    #include <stdio.h>

    // Get rid of those macros defined in <stdio.h> in lieu of real functions.
    #undef clearerr
    #undef fclose
    #undef feof
    #undef ferror
    #undef fflush
    #undef fgetc
    #undef fgetpos
    #undef fgets
    #undef fopen
    #undef fprintf
    #undef fputc
    #undef fputs
    #undef fread
    #undef freopen
    #undef fscanf
    #undef fseek
    #undef fsetpos
    #undef ftell
    #undef fwrite
    #undef getc
    #undef getchar
    #undef gets
    #undef perror
    #undef printf
    #undef putc
    #undef putchar
    #undef puts
    #undef remove
    #undef rename
    #undef rewind
    #undef scanf
    #undef setbuf
    #undef setvbuf
    #undef sprintf
    #undef sscanf
    #undef tmpfile
    #undef tmpnam
    #undef ungetc
    #undef vfprintf
    #undef vprintf
    #undef vsprintf

    namespace std
    {
    using ::FILE;
    using ::fpos_t;

    using ::clearerr;
    using ::fclose;
    using ::feof;
    using ::ferror;
    using ::fflush;
    using ::fgetc;
    using ::fgetpos;
    using ::fgets;
    using ::fopen;
    using ::fprintf;
    using ::fputc;
    using ::fputs;
    using ::fread;
    using ::freopen;
    using ::fscanf;
    using ::fseek;
    using ::fsetpos;
    using ::ftell;
    using ::fwrite;
    using ::getc;
    using ::getchar;
    using ::gets;
    using ::perror;
    using ::printf;
    using ::putc;
    using ::putchar;
    using ::puts;
    using ::remove;
    using ::rename;
    using ::rewind;
    using ::scanf;
    using ::setbuf;
    using ::setvbuf;
    using ::sprintf;
    using ::sscanf;
    using ::tmpfile;
    using ::tmpnam;
    using ::ungetc;
    using ::vfprintf;
    using ::vprintf;
    using ::vsprintf;
    }

    #if _GLIBCXX_USE_C99

    #undef snprintf
    #undef vfscanf
    #undef vscanf
    #undef vsnprintf
    #undef vsscanf

    namespace __gnu_cxx
    {
    #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC
    extern "C" int
    (snprintf)(char * restrict, size_t, const char * restrict, ...);
    extern "C" int
    (vfscanf)(FILE * restrict, const char * restrict, __gnuc_va_list);
    extern "C" int (vscanf)(const char * restrict, __gnuc_va_list);
    extern "C" int
    (vsnprintf)(char * restrict, size_t, const char * restrict,
    __gnuc_va_list);
    extern "C" int
    (vsscanf)(const char * restrict, const char * restrict, __gnuc_va_list);
    #endif

    #if !_GLIBCXX_USE_C99_DYNAMIC
    using ::snprintf;
    using ::vfscanf;
    using ::vscanf;
    using ::vsnprintf;
    using ::vsscanf;
    #endif
    }

    namespace std
    {
    using __gnu_cxx::snprintf;
    using __gnu_cxx::vfscanf;
    using __gnu_cxx::vscanf;
    using __gnu_cxx::vsnprintf;
    using __gnu_cxx::vsscanf;
    }
    #endif

    #endif
     
    Gianni Mariani, Dec 6, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. jakk
    Replies:
    4
    Views:
    12,646
  2. Replies:
    3
    Views:
    15,730
    Ali Cehreli
    Aug 10, 2004
  3. Mark
    Replies:
    20
    Views:
    1,720
    Dave O'Hearn
    Dec 27, 2004
  4. Replies:
    18
    Views:
    1,936
    crazzybugger
    Oct 22, 2006
  5. Replies:
    2
    Views:
    420
Loading...

Share This Page