|
Watch out: equality tests
If you are doing an equality test, be sure to use
==, not =. Statement
if(n = 0) { m = 1; } else { m = 2; }always makes m = 2. Expression n = 0 is not a test, it is an assignment. It stores 0 into n, and yields result 0. Since 0 is treated as false, the else-part is performed. If you ask g++ to give common warnings (option -Wall), it will let you know about this mistake, with a message similar to the following. test.cpp:7:11: warning: suggest parentheses around assignment used as truth value [-Wparentheses] if(n = 0) ^ Do not use = in a test even if it is what you want. The coding standards do not allow that. |
Watch out: semicolons
Be careful about semicolons. A lone semicolon is
a statement that does nothing.
Statement
if(n == 0); { printf("n is zero\n"); }always writes "n is zero", regardless of the value of n. The semicolon at the end of the first line is an empty statement, so the if-statement says, if n equals 0, do nothing. The statement after that is just a compound statement. This really does two statements in a row. The coding standards require you not to use a semicolon as an empty statement, and explicitly forbid using a semicolon as the body of an if-statement. |
|