frank at g-n-u.de
Mon Apr 21 16:17:18 CEST 2003
> 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;"
GCC puts this into the same option. I didn't mention this here,
because it's not quite the same. It's about associativity, not
precedence, and BTW, implementing it would be completely distinct.
> The else problem is valid for Pascal. Gcc
> doesn't warn about "if (a | b & c)", although perhaps it should.
frank at goedel:~/work# cat x.c
int main ()
return 0 | 0 & 0;
frank at goedel:~/work# gcc -Wall x.c
x.c: In function `main':
x.c:3: warning: suggest parentheses around arithmetic in operand of |
> I definitely think -Wall should warn about the elses, but suspect
> people will turn it off if it warns about the logical
Well, for me it's just the opposite. I don't like the `else' warning
because in my experience it forces too many additional `begin'/`end'
pairs, and mismatching is usually seen by proper indentation,
anyway. Whereas I found relatively few places in my code where I
needed additional parentheses for the precedence warnings (mostly
with bit-operators which are non-standard, anyway).
> Can it be separated into a -Welse and a
> -Wparenthesis, so that it has to be explicitly turned on?
I agree insofar as I'm implementing `-Wparentheses' which will do
the precedence warnings. If anyone wants to implement `-Welse', just
go ahead. I probably won't do it myself (see above).
> there a -Welse in gcc now?
No, in GCC both is `-Wparentheses' (which I don't really like).
> Can it warn on (a or b and c) and not
> on (a + b * c)?
Yes, I'd prefer so. The precedence of `+' and `*' should be clear
enough to most people.
Frank Heckenbach, frank at g-n-u.de, http://fjf.gnu.de/, 7977168E
GPC To-Do list, latest features, fixed bugs:
GPC download signing key: 51FF C1F0 1A77 C6C2 4482 4DDC 117A 9773 7F88 1707
More information about the Gpc