Bug of the day
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
Which language? The C# compiler will give you a warning for that: "Possible mistaken empty statement".
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
Which language? The C# compiler will give you a warning for that: "Possible mistaken empty statement".
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
Does that even compile? /ravi
My new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
This is one of the dangers of C syntax (and friends). That's the price you pay for willing conciseness. Block-only statements like VB's
If Condition Then
Statement
End Ifor Modula's
IF Condition THEN
Statement
ENDare safer.
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
Oh no, you misunderstood the guy who wrote that piece of code. Never did he intend that DoSomeThing() is executed only when some codition is true. He just wanted to make his colleagues (who'll have to maintain his buggy code after he quit his job) believe so.
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
-
Wich compiler ?
while (*dest++ = *source++);
is completely correct, isn't it ?
-
Wich compiler ?
while (*dest++ = *source++);
is completely correct, isn't it ?
-
This is one of the dangers of C syntax (and friends). That's the price you pay for willing conciseness. Block-only statements like VB's
If Condition Then
Statement
End Ifor Modula's
IF Condition THEN
Statement
ENDare safer.
Or Pascal:
if condition then
begin
DoStuff();
end
else
begin
DoOtherStuff();
end;Sort an 'are you sure?' prompt for every single conditional. :rolleyes:
Software Zen:
delete this;
-
Or Pascal:
if condition then
begin
DoStuff();
end
else
begin
DoOtherStuff();
end;Sort an 'are you sure?' prompt for every single conditional. :rolleyes:
Software Zen:
delete this;
-
Can't you do if condition then one-statement else other-statement though if you don't need a block?
Yes, but I've always hated doing those, unless you write it on a single line:
if condition then DoSomething() else DoOtherThing();
That's the only way in my mind to avoid stupid mistakes like this:
if condition then
DoThing1();
DoThing2();
DoThing3();
MainStuff();DoThing2()
andDoThing3()
look like they're part of theif
, but they're not. I do the same thing in C-style languages. If anif
-statement occupies more than one line, it gets braced.Software Zen:
delete this;
-
if(SomeThing == SomeOtherThing); { DoSomeThing; } This one has been sitting in the codebase for a couple of years... :(( At least it did SomeThing...
I had to read it three times before spotting the problem. Go bugged by the fact that
DoSomeThing
didn't have parenthesis.To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson ---- Our heads are round so our thoughts can change direction - Francis Picabia
-
Yes, but I've always hated doing those, unless you write it on a single line:
if condition then DoSomething() else DoOtherThing();
That's the only way in my mind to avoid stupid mistakes like this:
if condition then
DoThing1();
DoThing2();
DoThing3();
MainStuff();DoThing2()
andDoThing3()
look like they're part of theif
, but they're not. I do the same thing in C-style languages. If anif
-statement occupies more than one line, it gets braced.Software Zen:
delete this;
-
I had to read it three times before spotting the problem. Go bugged by the fact that
DoSomeThing
didn't have parenthesis.To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson ---- Our heads are round so our thoughts can change direction - Francis Picabia
Me too. I didn't see the semicolon until I review it two or three times. So maybe it is not a trap but a genuine bug. Some times you check your code 10 times and do not see this kind of bugs. :-\
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
-
Me too. I didn't see the semicolon until I review it two or three times. So maybe it is not a trap but a genuine bug. Some times you check your code 10 times and do not see this kind of bugs. :-\
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
Tell me about it. I'm specially vulnerable to problems that are right in front of my face. I do this too often: :doh: Maybe it's my short span of attention.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson ---- Our heads are round so our thoughts can change direction - Francis Picabia
-
Tell me about it. I'm specially vulnerable to problems that are right in front of my face. I do this too often: :doh: Maybe it's my short span of attention.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson ---- Our heads are round so our thoughts can change direction - Francis Picabia
This errors can be present in C like language. The last only in C# This one is usual (very)
if(Something)
One();
two();
...Of course only One() is inside the if(), but it seems that the other two instructions are inside also. I did fall in this bug many times until I decided to enclose into curly braces any if() or loop with one or more instructions. It could increase the number of lines, but, for sure, decrease the bugs. Other one:
bool MyBoolValue = true;
if(MyBoolValue = false){
... SomeStuff ...
}Maybe the compiler throws a warning, but this statement is valid. Surely is not what you want to do because you have omitted one equal sign:
if(MyBoolValue == false)...
I have no solution to this one, but to check again :sigh: Of course the comparison is not necessary, because MyBoolValue is true or false per se. ;)
if(MyBoolValue)...
for(int i = 0; i < MyArray.GetUpperBound(0); i++){
SomeStuff....
}You must remember that GetUpperBound(0) does not start in '0' but in '1', because is the number of elements not the dimensions of the array so it must be:
for(int i = 0; i <= MyArray.GetUpperBound(0); i++)
I will try to remember more "Mistakes" that are common for me, but for sure here are more qualified people to show you many more.
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
-
This errors can be present in C like language. The last only in C# This one is usual (very)
if(Something)
One();
two();
...Of course only One() is inside the if(), but it seems that the other two instructions are inside also. I did fall in this bug many times until I decided to enclose into curly braces any if() or loop with one or more instructions. It could increase the number of lines, but, for sure, decrease the bugs. Other one:
bool MyBoolValue = true;
if(MyBoolValue = false){
... SomeStuff ...
}Maybe the compiler throws a warning, but this statement is valid. Surely is not what you want to do because you have omitted one equal sign:
if(MyBoolValue == false)...
I have no solution to this one, but to check again :sigh: Of course the comparison is not necessary, because MyBoolValue is true or false per se. ;)
if(MyBoolValue)...
for(int i = 0; i < MyArray.GetUpperBound(0); i++){
SomeStuff....
}You must remember that GetUpperBound(0) does not start in '0' but in '1', because is the number of elements not the dimensions of the array so it must be:
for(int i = 0; i <= MyArray.GetUpperBound(0); i++)
I will try to remember more "Mistakes" that are common for me, but for sure here are more qualified people to show you many more.
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
I usually prefer:
if (42 == ComputeSomeThing(x)) {
//...
}This one avoids the
=
against==
pit. Another thing I do: my IDE is configured to show operators (like '(){};,+-=...') in color, so they are a bit harder to miss (like the original example). There are two other tools that can help with this: compiler warnings, and static code analysis. JM2B,Pablo. "Accident: An inevitable occurrence due to the action of immutable natural laws." (Ambrose Bierce, circa 1899).
-
This errors can be present in C like language. The last only in C# This one is usual (very)
if(Something)
One();
two();
...Of course only One() is inside the if(), but it seems that the other two instructions are inside also. I did fall in this bug many times until I decided to enclose into curly braces any if() or loop with one or more instructions. It could increase the number of lines, but, for sure, decrease the bugs. Other one:
bool MyBoolValue = true;
if(MyBoolValue = false){
... SomeStuff ...
}Maybe the compiler throws a warning, but this statement is valid. Surely is not what you want to do because you have omitted one equal sign:
if(MyBoolValue == false)...
I have no solution to this one, but to check again :sigh: Of course the comparison is not necessary, because MyBoolValue is true or false per se. ;)
if(MyBoolValue)...
for(int i = 0; i < MyArray.GetUpperBound(0); i++){
SomeStuff....
}You must remember that GetUpperBound(0) does not start in '0' but in '1', because is the number of elements not the dimensions of the array so it must be:
for(int i = 0; i <= MyArray.GetUpperBound(0); i++)
I will try to remember more "Mistakes" that are common for me, but for sure here are more qualified people to show you many more.
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
gervacleto wrote:
if(Something) One(); two(); ...
This can also happen in C#, but auto indent of Visual Studio makes you less likely to fall in this trap.
gervacleto wrote:
if(MyBoolValue = false){
This happened to me several times and the warning saved. I always pay attention to warnings.
gervacleto wrote:
if(MyBoolValue)
I do not consider this a bug, it is actualy a coding style. I do it myself.
gervacleto wrote:
for(int i = 0; i <= MyArray.GetUpperBound(0); i++)
Never used this construct, so I wouldn't know. But will keep my mind to it in case I run into this. Thanks!
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson ---- Our heads are round so our thoughts can change direction - Francis Picabia