Frank Heckenbach wrote:
GCC supports `-Wparentheses' (warn about some constructs where parentheses are suggested for clarification, although not strictly syntactically necessary). The corresponding code is also there for GPC. I'm going to activate it now. The questions are:
Which constructs to warn about? So far, I've come up with the following ones:
`and' in an operand of `or', as in `a or b and c' which is equivalent to `a or (b and c)', but may confuse the reader. (Same for `and_then' instead of `and' etc., of course.)
logical operations (`and', `or', `not', etc.) in an operand of a relational operator (`=', etc., `in'). This would catch cases like the dreaded `if not a = b'.
What should be the default? I suggest off by default and on with `-Wall' (same as in GCC).
(Of course, the issue is not as serious in Pascal than it is in C where the danger of confusion between `==' and `=' in a comparison almost requires such a warning, but I think it's also useful in Pascal.)
I'm not too sure about this. In C the primary use is to warn about using an assignment as a logical, which is a syntax error in Pascal, and to warn about possible misconstrued elses, as in "if (a) if (b) c else d;" The else problem is valid for Pascal. Gcc doesn't warn about "if (a | b & c)", although perhaps it should. I definitely think -Wall should warn about the elses, but suspect people will turn it off if it warns about the logical parenthization. Can it be separated into a -Welse and a -Wparenthesis, so that it has to be explicitly turned on? Is there a -Welse in gcc now? Can it warn on (a or b and c) and not on (a + b * c)?