thmpsn....@gmail.com a écrit :
On Feb 3, 1:14 am, David Cournapeau <courn...@gmail.com> wrote:
(snip)
after all, we have used FILE* for years and I have no idea about the FILE
structure.

Your lack of knowledge about it doesn't mean that it has somehow
magically "private" members. The only reason that most of us don't
know what a FILE is is that it's definition is implementation-defined
(i.e., every compiler may define it differently).

That doesn't have anything to do with private members. For example, on
my system, <stdio.h> defines FILE as:

struct _iobuf {
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
        };

Didn't you notice kind of a pattern here ?

typedef struct _iobuf FILE;

Given this information, nothing prevents me from writing things like:

FILE* fp = fopen("file.txt", "r");
if (!fp) { /* do something */ }

printf("fp->_cnt = %d\n", fp->cnt);
printf("fp->_flag = %d\n", fp->_flag);
printf("fp->_file = %d\n", fp->_file);

fp->_flag = 0x20; // OOPS!!

Indeed - and that's exactly the point : nothing prevents you from accessing the implementation, *and yet, you don't* - unless of course you have a very strong reason to do so for a very specific corner case *and* you pretty well know what you're doing *and* you accept the implications.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to