Add an explanation for defining multi-line macros using the ({ }) notation to CodingStyle.
Signed-off-by: Robert P. J. Day <[EMAIL PROTECTED]> --- diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle index 9069189..1d0ddb8 100644 --- a/Documentation/CodingStyle +++ b/Documentation/CodingStyle @@ -549,13 +549,24 @@ 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: +There are two techniques for defining macros that contain multiple +statements. -#define macrofun(a, b, c) \ - do { \ + (a) Enclose those statements in a do - while block: + + #define macrofun(a, b, c) \ + do { \ + if (a == 5) \ + do_this(b, c); \ + } while (0) + + (b) Use the gcc extension that a compound statement enclosed in + parentheses represents an expression: + + #define macrofun(a, b, c) ({ \ if (a == 5) \ do_this(b, c); \ - } while (0) + }) Things to avoid when using macros: - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/