From: Blue Swirl <blauwirbel@gmail.com>
To: qemu-devel <qemu-devel@nongnu.org>
Subject: [Qemu-devel] [PATCH 2/5] CODING_STYLE: add C type rules
Date: Thu, 12 Aug 2010 17:50:06 +0000 [thread overview]
Message-ID: <AANLkTinM4GFK8cUj3gAyUNFT_9yM83MGTbDiwLjvCJi2@mail.gmail.com> (raw)
Add C type rules from libvirt HACKING. Also include
a description of special QEMU scalar types.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
CODING_STYLE | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/CODING_STYLE b/CODING_STYLE
index c4c09ab..3f10d72 100644
--- a/CODING_STYLE
+++ b/CODING_STYLE
@@ -92,3 +92,59 @@ indentation to track nesting:
#if defined(HAVE_POSIX_FALLOCATE) && !defined(HAVE_FALLOCATE)
# define fallocate(a,ignored,b,c) posix_fallocate(a,b,c)
#endif
+
+6. C types
+
+Use the right type.
+
+6.1. Scalars
+
+If you're using "int" or "long", odds are good that there's a better type.
+If a variable is counting something, be sure to declare it with an
+unsigned type.
+If it's memory-size-related, use size_t (use ssize_t only if required).
+If it's file-size related, use uintmax_t, or maybe off_t.
+If it's file-offset related (i.e., signed), use off_t.
+If it's just counting small numbers use "unsigned int";
+(on all but oddball embedded systems, you can assume that that
+type is at least four bytes wide).
+
+In the event that you require a specific width, use a standard type like
+int32_t, uint32_t, uint64_t, etc. The specific types are mandatory for
+vmstate.
+
+Don't use Linux kernel internal types like u32, __u32 or __le32.
+
+Use target_phys_addr_t for hardware physical addresses except pcibus_t
+for PCI addresses. Use target_ulong (or abi_ulong) for CPU
+virtual addresses, however devices should not need to use target_ulong.
+
+While using "bool" is good for readability, it comes with minor caveats:
+ - Don't use "bool" in places where the type size must be constant across
+ all systems, like public interfaces and on-the-wire protocols.
+ - Don't compare a bool variable against the literal, "true",
+ since a value with a logical non-false value need not be "1".
+ I.e., don't write "if (seen == true) ...". Rather, write "if (seen)...".
+
+Of course, take all of the above with a grain of salt. If you're about
+to use some system interface that requires a type like size_t, pid_t or
+off_t, use matching types for any corresponding variables.
+
+Also, if you try to use e.g., "unsigned int" as a type, and that
+conflicts with the signedness of a related variable, sometimes
+it's best just to use the *wrong* type, if "pulling the thread"
+and fixing all related variables would be too invasive.
+
+Finally, while using descriptive types is important, be careful not to
+go overboard. If whatever you're doing causes warnings, or requires
+casts, then reconsider or ask for help.
+
+6.2. Pointers
+
+Ensure that all of your pointers are "const-correct".
+Unless a pointer is used to modify the pointed-to storage,
+give it the "const" attribute. That way, the reader knows
+up-front that this is a read-only pointer. Perhaps more
+importantly, if we're diligent about this, when you see a non-const
+pointer, you're guaranteed that it is used to modify the storage
+it points to, or it is aliased to another pointer that is.
--
1.6.2.4
next reply other threads:[~2010-08-12 17:50 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-12 17:50 Blue Swirl [this message]
2010-08-13 19:37 ` [Qemu-devel] Re: [PATCH 2/5] CODING_STYLE: add C type rules Blue Swirl
2010-08-17 8:09 ` [Qemu-devel] " Jes Sorensen
2010-08-17 17:56 ` Blue Swirl
2010-08-17 18:55 ` malc
2010-08-17 19:23 ` Jes Sorensen
2010-08-17 19:24 ` malc
2010-08-17 19:43 ` Jes Sorensen
2010-08-17 20:29 ` Anthony Liguori
2010-08-17 20:33 ` malc
2010-08-17 18:39 ` Richard Henderson
2010-08-17 19:15 ` Jes Sorensen
2010-08-18 16:46 ` Avi Kivity
2010-08-19 7:58 ` Jes Sorensen
2010-08-19 8:10 ` Avi Kivity
2010-08-19 8:17 ` Jes Sorensen
2010-08-19 12:24 ` Avi Kivity
2010-08-19 12:52 ` malc
2010-08-19 12:59 ` Avi Kivity
2010-08-18 8:35 ` [Qemu-devel] " Paolo Bonzini
2010-08-18 8:58 ` Jes Sorensen
2010-08-18 10:30 ` Kevin Wolf
2010-08-18 13:57 ` Paolo Bonzini
2010-08-18 16:55 ` Avi Kivity
2010-08-19 7:51 ` Paolo Bonzini
2010-08-19 8:12 ` Avi Kivity
2010-08-18 16:44 ` [Qemu-devel] " Avi Kivity
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=AANLkTinM4GFK8cUj3gAyUNFT_9yM83MGTbDiwLjvCJi2@mail.gmail.com \
--to=blauwirbel@gmail.com \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).