On 7/6/22, Bagas Sanjaya <bagasdotme@xxxxxxxxx> wrote: > On Mon, Jul 04, 2022 at 07:57:57PM -0300, Martin Fernandez wrote: >> + **ARG_REUSE** >> + Using the same argument multiple times in the macro definition >> + would lead to unwanted side-effects. >> + >> + For example, given a `min` macro defined like:: >> + >> + #define min(x, y) ((x) < (y) ? (x) : (y)) >> + >> + If you call it with `min(foo(x), 0)`, it would expand to:: >> + >> + foo(x) < 0 ? foo(x) : 0 >> + > > Nit: literal blocks are indented three spaces relative to surrounding > paragraph. I just been told that I should be using 2 (I was using 1) and the rest of the file have 2 spaces... >> + If `foo` has side-effects or it's an expensive calculation the >> + results might not be what the user intended. >> + >> + For a workaround the idea is to define local variables to hold the >> + macro's arguments. Checkout the actual implementation of `min` in >> + include/linux/minmax.h for the full implementation of the >> + workaround. >> + > > For inline code, the correct syntax is ``some text``. You are right, I just misleadingly reused the syntax for some other example in the file. > However, by > convention here, the backquotes aren't used where these would be > appropriate, like variable and function names. So you are saying that for single variables and functions you don't use double backquotes? > For the last paragraph, better say "The workaround is to define local > variables to hold macro arguments. See the min macro in > include/linux/minmax.h for example.". I like it. Thanks. > -- > An old man doll... just what I always wanted! - Clara >