Re: [RFC]confusions about 'struct' define
Foward declaration, that is. You can vaguely compare it to function prototypes. On 1 June 2012 15:00, Bernd Petrovitsch wrote: > Hi! > > On Don, 2012-05-31 at 01:37 +0800, harryxiyou wrote: >> On Thu, May 31, 2012 at 1:20 AM, Gaurav Jain wrote: > [...] >> > Those are forward declarations as they are being used in defining struct >> > bus_attribute. It's nothing special about GNU-C. That's the case for ANSI-C >> > too. Pretty standard. > > These actually exists since K&R times. > >> Hmmm.., that is to say, they may be used before definitions in this file or >> defined in other files like 'struct iommu_ops;' field (Actually, i can > > Yes, that's the only reason. And you can't use it if you need the actual > size of that struct because the compiler doesn't know it (yet). > The main usage scenario is if you need a pointer to it. > >> not find this field's >> definition in this file). However, if it has been defined in other >> header files, we need >> not declare here, right? > > If you #include that other file, yes. > But it is not trivial in very large projects like the Linux kernel to > keep somewhat logical and clean and circular-free -h files. > And you also do not really want a separate .h file for each struct. > > Bernd > -- > Bernd Petrovitsch Email : be...@petrovitsch.priv.at > LUGA : http://www.luga.at > > > ___ > Kernelnewbies mailing list > Kernelnewbies@kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: [RFC]confusions about 'struct' define
Hi! On Don, 2012-05-31 at 01:37 +0800, harryxiyou wrote: > On Thu, May 31, 2012 at 1:20 AM, Gaurav Jain wrote: [...] > > Those are forward declarations as they are being used in defining struct > > bus_attribute. It's nothing special about GNU-C. That's the case for ANSI-C > > too. Pretty standard. These actually exists since K&R times. > Hmmm.., that is to say, they may be used before definitions in this file or > defined in other files like 'struct iommu_ops;' field (Actually, i can Yes, that's the only reason. And you can't use it if you need the actual size of that struct because the compiler doesn't know it (yet). The main usage scenario is if you need a pointer to it. > not find this field's > definition in this file). However, if it has been defined in other > header files, we need > not declare here, right? If you #include that other file, yes. But it is not trivial in very large projects like the Linux kernel to keep somewhat logical and clean and circular-free -h files. And you also do not really want a separate .h file for each struct. Bernd -- Bernd Petrovitsch Email : be...@petrovitsch.priv.at LUGA : http://www.luga.at ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: [RFC]confusions about 'struct' define
Hi! On 00:50 Thu 31 May , harryxiyou wrote: ... > I have never seen struct define like > > "struct device; > struct device_private; > struct device_driver; > [...] > struct device_node; > struct iommu_ops;" This basically says that these structs exist and are defined somewhere. You need this basically for things like this: struct b; struct a{ struct b *b_ptr; }; struct b{ struct a *a_ptr; }; The struct can only be dereferenced after it is defined. Also, the storage size is unknown, so the same applies to inlining and sizeof(). -Michi -- programing a layer 3+4 network protocol for mesh networks see http://michaelblizek.twilightparadox.com ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
RE: [RFC]confusions about 'struct' define
This might be the case of cyclic dependency where header files defining these structures are also including this .h file. -Rajat From: harryxiyou Sent: 30-05-2012 23:08 To: Gaurav Jain Cc: Greg-Kroah-Hartman; Harry Wei; kernelnewbies@kernelnewbies.org Subject: Re: [RFC]confusions about 'struct' define On Thu, May 31, 2012 at 1:20 AM, Gaurav Jain wrote: Hi Gaurav, > Those are forward declarations as they are being used in defining struct > bus_attribute. It's nothing special about GNU-C. That's the case for ANSI-C > too. Pretty standard. > Hmmm.., that is to say, they may be used before definitions in this file or defined in other files like 'struct iommu_ops;' field (Actually, i can not find this field's definition in this file). However, if it has been defined in other header files, we need not declare here, right? -- Thanks Harry Wei ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: [RFC]confusions about 'struct' define
On Thu, May 31, 2012 at 1:20 AM, Gaurav Jain wrote: Hi Gaurav, > Those are forward declarations as they are being used in defining struct > bus_attribute. It's nothing special about GNU-C. That's the case for ANSI-C > too. Pretty standard. > Hmmm.., that is to say, they may be used before definitions in this file or defined in other files like 'struct iommu_ops;' field (Actually, i can not find this field's definition in this file). However, if it has been defined in other header files, we need not declare here, right? -- Thanks Harry Wei ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: [RFC]confusions about 'struct' define
Those are forward declarations as they are being used in defining struct bus_attribute. It's nothing special about GNU-C. That's the case for ANSI-C too. Pretty standard. On Wed, May 30, 2012 at 10:20 PM, harryxiyou wrote: > Hi guys, > > When I read the linux/device.h file for some device driver usage, i find > some > confusions like following. > > $ head -60 device.h > [...] > > struct device; > struct device_private; > struct device_driver; > struct driver_private; > struct module; > struct class; > struct subsys_private; > struct bus_type; > struct device_node; > struct iommu_ops; > > struct bus_attribute { >struct attributeattr; >ssize_t (*show)(struct bus_type *bus, char *buf); >ssize_t (*store)(struct bus_type *bus, const char *buf, size_t > count); > }; > [...] > > I have never seen struct define like > > "struct device; > struct device_private; > struct device_driver; > [...] > struct device_node; > struct iommu_ops;" > > The common define is like this > > "struct a{ > int a; > int b; > [...] > }" > > Is this just struct declaration or some extension about gcc? Cloud > anyone give me > some explanations? > Thanks in advance ;-) > > Note: my kernel version is 3.0 around. > > -- > Thanks > Harry Wei > > ___ > Kernelnewbies mailing list > Kernelnewbies@kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > -- Gaurav Jain Associate Software Engineer VxVM Escalations Team, SAMG Symantec Software India Pvt. Ltd. ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies