* [PATCH] Documentation/CodingStyle: Mention multi-line macros using expressions
@ 2012-07-11 17:32 Robert P. J. Day
2012-07-11 18:14 ` Joe Perches
0 siblings, 1 reply; 3+ messages in thread
From: Robert P. J. Day @ 2012-07-11 17:32 UTC (permalink / raw)
To: Linux Kernel Mailing List
Since defining multi-line macros using statements and declarations in
expressions is fairly common in the kernel, add this to CodingStyle.
Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca>
---
diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
index cb9258b..7eb0734 100644
--- a/Documentation/CodingStyle
+++ b/Documentation/CodingStyle
@@ -600,7 +600,8 @@ may be named in lower case.
Generally, inline functions are preferable to macros resembling functions.
-Macros with multiple statements should be enclosed in a do - while block:
+Macros with multiple statements can be defined in one of two ways. The
+earlier technique enclosed the macro in a do - while block, as in:
#define macrofun(a, b, c) \
do { \
@@ -608,6 +609,17 @@ Macros with multiple statements should be enclosed in a do - while block:
do_this(b, c); \
} while (0)
+A newer technique is to use the GCC extension of being able to place
+statements and declarations in an expression, as with this example from
+the <linux/kernel.h> header file:
+
+#define roundup(x, y) ( \
+{ \
+ const typeof(y) __y = y; \
+ (((x) + (__y - 1)) / __y) * __y; \
+} \
+)
+
Things to avoid when using macros:
1) macros that affect control flow:
--
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] Documentation/CodingStyle: Mention multi-line macros using expressions
2012-07-11 17:32 [PATCH] Documentation/CodingStyle: Mention multi-line macros using expressions Robert P. J. Day
@ 2012-07-11 18:14 ` Joe Perches
2012-07-13 12:43 ` Robert P. J. Day
0 siblings, 1 reply; 3+ messages in thread
From: Joe Perches @ 2012-07-11 18:14 UTC (permalink / raw)
To: Robert P. J. Day; +Cc: Linux Kernel Mailing List
On Wed, 2012-07-11 at 13:32 -0400, Robert P. J. Day wrote:
[]
> diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
[]
> +A newer technique is to use the GCC extension of being able to place
> +statements and declarations in an expression, as with this example from
> +the <linux/kernel.h> header file:
> +
> +#define roundup(x, y) ( \
> +{ \
> + const typeof(y) __y = y; \
> + (((x) + (__y - 1)) / __y) * __y; \
> +} \
> +)
Hi Robert.
How about the phrase "GCC's statement expression extension"
or maybe give a link like:
http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
Please put the opening ({ and closing )} on a single line.
It's shorter and makes grep easier.
#define statement_expression(args) \
({ \
etc \
})
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Documentation/CodingStyle: Mention multi-line macros using expressions
2012-07-11 18:14 ` Joe Perches
@ 2012-07-13 12:43 ` Robert P. J. Day
0 siblings, 0 replies; 3+ messages in thread
From: Robert P. J. Day @ 2012-07-13 12:43 UTC (permalink / raw)
To: Joe Perches; +Cc: Linux Kernel Mailing List
On Wed, 11 Jul 2012, Joe Perches wrote:
> On Wed, 2012-07-11 at 13:32 -0400, Robert P. J. Day wrote:
> []
> > diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
> []
> > +A newer technique is to use the GCC extension of being able to place
> > +statements and declarations in an expression, as with this example from
> > +the <linux/kernel.h> header file:
> > +
> > +#define roundup(x, y) ( \
> > +{ \
> > + const typeof(y) __y = y; \
> > + (((x) + (__y - 1)) / __y) * __y; \
> > +} \
> > +)
>
> Hi Robert.
>
> How about the phrase "GCC's statement expression extension"
> or maybe give a link like:
> http://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
ok, i'll do that later today.
> Please put the opening ({ and closing )} on a single line.
> It's shorter and makes grep easier.
>
> #define statement_expression(args) \
> ({ \
> etc \
> })
i was simply transcribing what was in kernel.h verbatim, but i'll
tuck it together for brevity.
rday
--
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-07-13 12:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-11 17:32 [PATCH] Documentation/CodingStyle: Mention multi-line macros using expressions Robert P. J. Day
2012-07-11 18:14 ` Joe Perches
2012-07-13 12:43 ` Robert P. J. Day
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.