I understand forward declaration ... But have a look at kernel/sched_fair.c ... struct cfs_rq has been used a number of places in it, but they don't even have a forward declaration of the structure. The only header file that gets included is linux/latencytop.h ... which doesn't includes any header that has a forward declaration of struct cfs_rq. so, how does the compiler gives no errors ? If I just assume that i am missing a place from where the structure gets the forward declaration (forward declaration is in linux\sched.h header) ... how are the fields of this structure being accessed inside kernel/sched_fair.c ? Now, if I assume that somehow the compiler gets the complete declaration of "struct cfs_rq" inside kernel/sched_fair.c ... then why does the compiler complains when I try to write a kprobe module for the a function "__enqueue_entity" of kernel/sched_fair.c which accesses the fields of this structure. I can understand why the compiler is complaining but why doesn't it do so for the kernel/sched_fair.c case ... What am I missing ? On Thu, Mar 12, 2009 at 10:09 PM, Durga Prasad <writexdp@xxxxxxxxx> wrote: > Look for 'forward declaration' of variables in C. > You are telling the compiler that "I am declaring such a structure. > Understand it when you encounter it" . > - Durga > > ________________________________ > From: Sukanto Ghosh <sukanto.cse.iitb@xxxxxxxxx> > To: Nelson Castillo <nelsoneci@xxxxxxxxx>; Pei Lin <telent997@xxxxxxxxx> > Cc: kernelnewbies <kernelnewbies@xxxxxxxxxxxx> > Sent: Thursday, March 12, 2009 3:06:46 PM > Subject: Re: structure definition in a .c file rather than .h file > > On Thu, Mar 12, 2009 at 11:58 AM, Nelson Castillo <nelsoneci@xxxxxxxxx> > wrote: >> On Thu, Mar 12, 2009 at 2:06 PM, Sukanto Ghosh >> <sukanto.cse.iitb@xxxxxxxxx> wrote: >>> Hi, >>> >>> The complete definition of structure cfs_rq is in a .c file >>> (kernel/sched.c). In the head linux/sched.h it has been declared as >>> "struct cfs_rq;" >>> What is the purpose of doing so ? >> >> With this declaration in linux/sched.h you can make pointers of the >> structure anywhere. All pointers have the same size thus it just >> doesn't matter if you don't know the details of the structure. >> >> The idea of not exposing the structure is just encapsulation. It means >> you shouldn't be touching those fields outside kernel/sched.c unless >> you use one of the provided API functions to do so (if any). >> > > exactly, and yet the fields have been used in kernel/sched_fair.c > .... this is what confuses me > > > -- > Regards, > Sukanto Ghosh > > -- > To unsubscribe from this list: send an email with > "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx > Please read the FAQ at http://kernelnewbies.org/FAQ > > > -- Regards, Sukanto Ghosh -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ