Sure, my point was that even with the proper == comparison I'd still write the (now redundant) parens because I find it more readable that way.
Actually in languages like Rust with type inference that make it cheap and non-verbose to declare intermediate values I tend to avoid complicated conditions altogether, I could rewrite the provided expression like:
let invalid_options = (options == (__WCLONE|__WALL));
let is_root = (current->uid == 0);
if invalid_options && is_root {
// ...
}
One might argue that it's overkill but I find that it's more "self-documenting"
that way. I find that the more experienced I get, the most verbose my code
becomes. Maybe it's early onset dementia, or maybe it's realizing that it's
easier to write the code than to read it.
Of course you can do that in C as well but you have to declare the boolean
variables, and in general it's frowned upon to intermingle code and variable
declarations so you'd have to add them at the beginning of the function so it
adds boilerplate etc...