On 2023-05-05 15:54, Linus Torvalds wrote:
On Fri, May 5, 2023 at 11:49 AM Mathieu Desnoyers
<mathieu.desnoyers@xxxxxxxxxxxx> wrote:
[...]
The other exception I would add is when a parameter is used as an
lvalue, as:
#define m(x) do { x = 2; } while (0)
I really don't understand why you think '=' is so special. It's very
much not special.
It happens to have the lowest precedence, sure, but the keyword is "happens".
I think you are confused by the non-C languages that make assignment
be not an expression operator, but a statement.
The reason why I think the lvalue of a "=" operator can be argued to be
"special" is because it is simply invalid to apply many of the C
operators to an lvalue (e.g. +, -, /, ...), which leads me to think that
there are no valid lvalue parameters which can cause unexpected operator
precedence.
That being said, just having to *think* about it is wasted brain power,
so I am in favor of just adding the parentheses for lvalues as well.
So I think you are technically correct in that the parentheses aren't
_needed_, but the above is still the same case that in many other
situations parentheses aren't technically *needed*, but not having to
think about it is better than having to do so.
Yes, so no exception for the lvalue of an assignment, therefore giving:
#define m(x) do { (x) = 2; } while (0)
If we are OK with this, I will go ahead and update my patch set accordingly.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com