Well, the assignment vs comparison thing is a powerful tool for some circumstances.

Consider.

Code:
if ( myVar = SomeFunction )
{
  DoSomethingWithMyVar( myVar );
}
with this, if myVar evaluates to true, or a non-zero value, you can immediately do something with it.. So it's doing an assignment and a boolean test at the same time.

the alternative would be
Code:
myVar = SomeFunction();
if( myVar > 0 )
{
  DoSomethingWithMyVar( myVar );
}

But the number of valid uses for this is small compared to the number of bugs it creates by its use by unwitting coders.