From 866bb996441cd73800643df9fb7df2939bdb75bd Mon Sep 17 00:00:00 2001 From: Laine Stump Date: Thu, 9 Jul 2020 18:36:48 -0400 Subject: [PATCH] docs: point out that locals should be defined at the top of a block of code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Although we have nothing in make syntax-check to enforce this, and apparently there are places where it isn't the case (according to Dan), we should discourage the practice of defining new variables in the middle of a block of code. https://www.redhat.com/archives/libvir-list/2020-July/msg00433.html Signed-off-by: Laine Stump Reviewed-by: Daniel P. Berrangé Reviewed-by: Andrea Bolognani Reviewed-by: Pavel Hrdina --- docs/coding-style.rst | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/coding-style.rst b/docs/coding-style.rst index 03b89c86e5..9212a42a77 100644 --- a/docs/coding-style.rst +++ b/docs/coding-style.rst @@ -541,6 +541,44 @@ 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. +Defining Local Variables +------------------------ + +Always define local variables at the top of the block in which they +are used (before any pure code). Although modern C compilers allow +defining a local variable in the middle of a block of code, this +practice can lead to bugs, and must be avoided in all libvirt +code. As indicated in these examples, it is okay to initialize +variables where they are defined, even if the initialization involves +calling another function. + +:: + + GOOD: + int + bob(char *loblaw) + { + int x; + int y = lawBlog(); + char *z = NULL; + + x = y + 20; + ... + } + + BAD: + int + bob(char *loblaw) + { + int x; + int y = lawBlog(); + + x = y + 20; + + char *z = NULL; // <=== + ... + } + Attribute annotations ---------------------