Curious assignment behaviour

Andrew Dalke dalke at dalkescientific.com
Wed Oct 10 04:48:13 EDT 2001


Paul Rubin:
>The thing is, it's just not a matter of MY immunities.  I've spent
>plenty of time debugging other people's code too, and have encountered
>all kinds of errors in both their code and mine.  The =/== mistake has
>just been very rare in my experience.  Can it be that the Unix
>compilers I use flag the error a lot of the time, so it gets fixed
>quickly, while Windows compilers don't flag it, and you're mostly
>using Windows compilers?

You're kidding us, aren't you?  Or maybe you've only been programming
for the last few years.  When I started with unix (IRIX 3.3 in 1990)
it came with a K&R C compiler.  It didn't have any of this sort of
checking.  That's why 'lint' was written.

And you're saying you've never seen all the code that uses
    if (22 == a)
instead of
    if (a == 22)
just in case the '==' is accidently replaced with '='?  That's
common enough to be mentioned as a joke in Q5.A. of
  http://www.ddj.com/columns/stob/2001/0110vs001.htm
] When comparing variables with constants, write the constant
] first to avoid accidental assignment ie write

GCC was the first unix compiler I saw which generated a warning
for this problem.  That was about 4 or 5 years ago.  But trying
some compilers I have access to (some old C compilers too :)

> uname -a
SunOS day 5.7 Generic sun4d sparc SUNW,SPARCserver-1000
> cc -V
ucbcc: SC3.0.1 13 Jul 1994
  ...told you it was old :)
>
> cat > test.c
main() {
  int i = 0;
  if (i = 1) {
    printf("Hello.\n");
  }
}
> cc test.c
> ./a.out
Hello.
>

With "WorkShop Compilers 5.0 98/12/15 C 5.0" on "SunOS 5.7"
there is no warning.

With "MIPSpro Compilers: Version 7.2.1" on IRIX 6.4 there
*is* a warning.

Don't currently have ready access to other compilers.

                    Andrew
                    dalke at dalkescientific.com






More information about the Python-list mailing list