From: Eduardo Habkost <ehabkost@redhat.com>
To: Thomas Huth <thuth@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [RFC] HACKING: Document 'struct' keyword usage
Date: Thu, 1 Aug 2019 15:50:43 -0300 [thread overview]
Message-ID: <20190801185043.GC20035@habkost.net> (raw)
In-Reply-To: <e995c6d9-f63a-be72-7d15-ac59a343b487@redhat.com>
On Wed, Jul 31, 2019 at 10:35:31AM +0200, Thomas Huth wrote:
> On 30/07/2019 23.07, Eduardo Habkost wrote:
> > Sometimes we use the 'struct' keyword to help us reduce
> > dependencies between header files. Document that practice.
> >
> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
> > ---
> > I wonder if this is too terse? Should we give examples?
> > ---
> > HACKING | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/HACKING b/HACKING
> > index 0fc3e0fc04..112685bdaf 100644
> > --- a/HACKING
> > +++ b/HACKING
> > @@ -101,6 +101,8 @@ it points to, or it is aliased to another pointer that is.
> >
> > 2.3. Typedefs
> > Typedefs are used to eliminate the redundant 'struct' keyword.
> > +However, the 'struct' keyword may be sometimes used in header
> > +files to avoid unnecessary dependencies between headers.
>
> See also the discussion earlier this year:
>
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg586180.html
Nice, it adds even more information than this patch.
For reference, this is the patch at the URL above:
-Typedefs are used to eliminate the redundant 'struct' keyword.
+Typedefs can be used to eliminate the redundant 'struct' keyword. This is
+especially helpful for common types that are used all over the place. Since
+certain C compilers choke on duplicated typedefs, you should avoid them and
+declare a typedef only in one header file. For common types, you can use
+"include/qemu/typedefs.h" for example. Note that it is also perfectly fine to
+use forward struct definitions without typedefs for references in headers
+to avoid the problem with duplicated typedefs.
I don't agree with the first two sentences, and I agree with what Paolo said
here:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg586214.html
("I agree 100% with the wording after 'Since'. However, I think the first
part should be made stronger, not weaker.")
Paolo sent the following proposal:
| Typedefs are use to eliminate the redundant 'struct' keyword, since type
| names have a different style than other identifiers ("CamelCase" versus
| "snake_case"). Each struct should have a CamelCase name and a
| corresponding typedef.
|
| Since certain C compilers choke on duplicated typedefs, you should avoid
| them and declare a typedef only in one header file. For common types,
| you can use "include/qemu/typedefs.h" for example. However, as a metter
| of convenience it is also perfectly fine to use forward struct
| definitions instead of typedefs in headers and function prototypes; this
| avoids problems with duplicated typedefs and reduces the need to include
| headers from other headers.
It seems perfect to me.
Paolo, do I have your signed-off-by to send that in a patch?
>
> ... and we should merge HACKING and CODING_STYLE finally (that was on my
> private TODO list, but I never found the time to do it).
Agreed, but I prefer to fix one problem at a time.
--
Eduardo
next prev parent reply other threads:[~2019-08-01 18:52 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-26 12:05 [Qemu-devel] [PATCH 00/28] Tame a few "touch this, recompile the world" headers Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 01/28] include: Make headers more self-contained Markus Armbruster
2019-07-26 16:50 ` Alistair Francis
2019-07-26 12:05 ` [Qemu-devel] [PATCH 02/28] Include generated QAPI headers less Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 03/28] qapi: Split error.json off common.json Markus Armbruster
2019-07-26 13:53 ` Eric Blake
2019-07-26 14:34 ` Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 04/28] memory: Fix type of IOMMUMemoryRegionClass member @parent_class Markus Armbruster
2019-07-26 16:06 ` Philippe Mathieu-Daudé
2019-07-26 12:05 ` [Qemu-devel] [PATCH 05/28] queue: Drop superfluous #include qemu/atomic.h Markus Armbruster
2019-07-31 10:54 ` Thomas Huth
2019-07-26 12:05 ` [Qemu-devel] [PATCH 06/28] trace: Eliminate use of TARGET_FMT_plx Markus Armbruster
2019-07-26 16:04 ` Philippe Mathieu-Daudé
2019-07-26 12:05 ` [Qemu-devel] [PATCH 07/28] trace: Do not include qom/cpu.h into generated trace.h Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 08/28] Include sysemu/reset.h a lot less Markus Armbruster
2019-07-26 16:03 ` Philippe Mathieu-Daudé
2019-07-26 16:48 ` Alistair Francis
2019-07-26 12:05 ` [Qemu-devel] [PATCH 09/28] Include migration/qemu-file-types.h " Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 10/28] ide: Include hw/ide/internal a bit less outside hw/ide/ Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 11/28] typedefs: Separate incomplete types and function types Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 12/28] Include hw/irq.h a lot less Markus Armbruster
2019-07-26 16:52 ` Alistair Francis
2019-07-26 12:05 ` [Qemu-devel] [PATCH 13/28] Clean up inclusion of exec/cpu-common.h Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 14/28] migration: Move the VMStateDescription typedef to typedefs.h Markus Armbruster
2019-07-26 15:51 ` Philippe Mathieu-Daudé
2019-08-02 9:47 ` Paolo Bonzini
2019-07-26 12:05 ` [Qemu-devel] [PATCH 15/28] Include migration/vmstate.h less Markus Armbruster
2019-07-26 16:54 ` Alistair Francis
2019-07-26 12:05 ` [Qemu-devel] [PATCH 16/28] Include exec/memory.h slightly less Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 17/28] Include qom/object.h " Markus Armbruster
2019-07-26 15:53 ` Philippe Mathieu-Daudé
2019-07-26 12:05 ` [Qemu-devel] [PATCH 18/28] Include hw/hw.h exactly where needed Markus Armbruster
2019-07-26 22:14 ` Alistair Francis
2019-07-26 12:05 ` [Qemu-devel] [PATCH 19/28] Include qemu/queue.h slightly less Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 20/28] Include qemu/main-loop.h less Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 21/28] Include hw/qdev-properties.h less Markus Armbruster
2019-07-29 19:16 ` Eduardo Habkost
2019-07-30 6:33 ` Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 22/28] Include hw/boards.h a bit less Markus Armbruster
2019-07-26 20:29 ` Alistair Francis
2019-07-29 20:07 ` Eduardo Habkost
2019-07-30 11:03 ` Markus Armbruster
2019-07-29 20:17 ` Eduardo Habkost
2019-07-30 11:06 ` Markus Armbruster
2019-08-02 14:37 ` Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h Markus Armbruster
2019-07-29 19:44 ` Eduardo Habkost
2019-07-30 11:01 ` [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h) Markus Armbruster
2019-07-30 13:15 ` Eric Blake
2019-07-30 13:28 ` Paolo Bonzini
2019-07-30 21:07 ` [Qemu-devel] [RFC] HACKING: Document 'struct' keyword usage Eduardo Habkost
2019-07-30 21:32 ` Eric Blake
2019-07-31 8:35 ` Thomas Huth
2019-08-01 18:50 ` Eduardo Habkost [this message]
2019-08-01 19:23 ` Paolo Bonzini
2019-08-02 7:02 ` Thomas Huth
2019-08-01 17:21 ` Aleksandar Markovic
2019-07-31 6:37 ` [Qemu-devel] When to use qemu/typedefs.h Markus Armbruster
2019-07-31 6:43 ` Paolo Bonzini
2019-07-31 8:40 ` Thomas Huth
2019-07-31 10:45 ` Peter Maydell
2019-07-31 10:51 ` Daniel P. Berrangé
2019-07-30 20:55 ` [Qemu-devel] When to use qemu/typedefs.h (was: [PATCH 23/28] numa: Don't include hw/boards.h into sysemu/numa.h) Eduardo Habkost
2019-07-26 12:05 ` [Qemu-devel] [PATCH 24/28] Include sysemu/hostmem.h less Markus Armbruster
2019-07-26 15:57 ` Philippe Mathieu-Daudé
2019-07-29 19:47 ` Eduardo Habkost
2019-07-30 12:07 ` Igor Mammedov
2019-08-02 9:53 ` Paolo Bonzini
2019-08-02 13:20 ` Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 25/28] numa: Move remaining NUMA declarations from sysemu.h to numa.h Markus Armbruster
2019-07-26 15:57 ` Philippe Mathieu-Daudé
2019-07-29 19:48 ` Eduardo Habkost
2019-07-26 12:05 ` [Qemu-devel] [PATCH 26/28] Clean up inclusion of sysemu/sysemu.h Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 27/28] sysemu: Move the VMChangeStateEntry typedef to qemu/typedefs.h Markus Armbruster
2019-08-02 9:48 ` Paolo Bonzini
2019-08-02 13:16 ` Markus Armbruster
2019-08-02 13:21 ` Paolo Bonzini
2019-08-06 16:26 ` Markus Armbruster
2019-08-02 20:36 ` Markus Armbruster
2019-07-26 12:05 ` [Qemu-devel] [PATCH 28/28] Include sysemu/sysemu.h a lot less Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190801185043.GC20035@habkost.net \
--to=ehabkost@redhat.com \
--cc=armbru@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.