Re: Where the hell is definition of struct id3_file????
tj <[email protected]> Tue, 22 Jun 2004 22:29:09 -0400
| Newsgroups | gmane.comp.audio.mad.user |
|---|---|
| Message-ID | <[email protected]> |
Duh, makes all the sense in the world. My head is somewhere it shouldn't be :-). Got a big deadline and I am in panic mode :-(. One more question, to build for Stongarm processor does configure support --host= arm ? Using PXA255 tj DervishD wrote: > Hi tj :) > > * tj <[email protected]> dixit: > > >>The first problem is the practically every call uses a pointer to a >>"struct id3_file" . Now, the problem is that there is no definition for >>id3_file structure in any .h file. I finally found it in file.c, a >>source file. How the hell are you supposed to use it in your app when >>the prototype is in a package source file? >> >> > > Well, it is called encapsulation. You use a pointer to the >structure. You can use a pointer to an incomplete type, this is not a >problem under C, AFAIK. Moreover, using this technique you are sure >that nobody outside your source file is going to dereference the >pointer. You have full encapsulation of the structure internals. This >way, Rob can change the entire definition of the structure internals, >change the implementation of the methods and you don't have to >rewrite a line of code that uses libid3tag (or whatever). Thas a very >good practice, object oriented. If you want to see another clear >example, I have a small library containing a object oriented >implementation (in C) of a multipurpose container, using the same >techniques. > > > >>Seems that something is really broken here. >> >> > > Not at all. I would have provided something like: > > typedef struct id3_file *ID3_FILE; > > not more, for use in programs, thus occulting even the fact that >this is a pointer. Now it is an object ;) I think that Rob is a good >designer if he uses this kind of constructs. Without the above >typedef, you can use the pointer to store a value, not more, not >less, and you can pass it to functions, use it to store returned >values, etc... Under C, all pointers share the same representation. >The only problem (without the typedef above) is that you cannot do >pointer arithmethic, so you cannot have arrays of id3_file structs, >etc... This is the only flaw I see in this kind of code, and if you >want encapsulation, that's the price to pay ;) > > Anyway, I wouldn't use arrays of structs, I will use array of >pointers, so you have pointer arithmethic and all that shit without >exposing the internals of your structs. > > Hope this helps :) > > Raúl Núñez de Arenas Coronado > > >