"Diez B. Roggisch" <de***@nospam.web.dewrites:
hg wrote:
[...]
In a relatively similar domain, I spent a few hours find this bug:
value == self.Get_Value()
if value == WHATEVER:
do this
instead of
value = self.Get_Value()
if value == WHATEVER:
do this
Is there a way to avoid such a bug with some type of construct ?
No. In a language inherent with sideeffects, there is nothing that should
force you to not write that.
[...]
It's illegal in C#:
// -------- compare.cs ----------
class BadComparison {
static void Main() {
1 == 2;
}
}
// -------- end -----------------
$ mcs compare.cs
compare.cs(3,9): error CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement
Compilation failed: 1 error(s), 0 warnings
csharp[0]$
// -------- compare2.cs ----------
class BadComparison {
static void Main() {
bool falsehood = 1 == 2;
}
}
// -------- end -----------------
$ mcs compare2.cs
compare2.cs(3,14): warning CS0219: The variable `falsehood' is assigned but its value is never used
Compilation succeeded - 1 warning(s)
John