All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.