Do not use a semicolon on the same line as after an if, for, or while statement condition because this it typically indicates programmer error and can result in unexpected behavior.
Noncompliant Code Example
In this noncompliant code example, a semicolon is used on the same line as immediately following an if statement. condition:
| Code Block | ||
|---|---|---|
| ||
if (a == b); {
/* ... */
}
|
The statements in the apparent body of the if statement are always evaluated regardless of the result of the condition expression.
Compliant Solution
It is likely, in this example, that the semicolon was accidentally inserted.This compliant solution eliminates the semicolon and ensures that the body of the if statement is executed only when the condition expression is true:
| Code Block | ||
|---|---|---|
| ||
if (a == b) {
/* ... */
}
|
Related Guidelines
Applicability
Placing a semicolon immediately following an if, for, or while condition may result in unexpected behavior.
Automated Detection
| Tool | Version | Checker | Description | |||||
|---|---|---|---|---|---|---|---|---|
| Parasoft Jtest |
| CERT.MSC51.NSIF |
| Do not place a semicolon |
| immediately after an if, for, or while |
| condition |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="859f021a-8e6e-46aa-a1e3-32afe9779323"><ac:plain-text-body><![CDATA[
[ISO/IEC TR 24772:2010
http://www.aitcnet.org/isai/]
"Likely Incorrect Expression [KOA]"
]]></ac:plain-text-body></ac:structured-macro>
Bibliography
| PVS-Studio |
| V6063 | |||||||
| SonarQube |
| EmptyStatementUsageCheck |
Bibliography
§2 |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f84628ed-88ba-4a0e-9749-f40c4136ef26"><ac:plain-text-body><![CDATA[
[Hatton 1995]
.7.2, "Errors of |
Omission and |
]]></ac:plain-text-body></ac:structured-macro>
Addition" |
...
MSC05-J. Avoid memory leaks 49. Miscellaneous (MSC) MSC07-J. Do not assume infinite heap space