Do not use a semicolon on the same line as an if
, for
, or while
statement because 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 an if
statement:
if (a == b); { /* ... */ }
Compliant Solution
It is likely, in this example, that the semicolon was accidentally inserted:
if (a == b) { /* ... */ }
Risk Assessment
Errors of omission can result in unintended program flow.
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
EXP15-C | High | Likely | Low | P27 | L1 |
Automated Detection
Tool | Version | Checker | Description |
---|---|---|---|
Axivion Bauhaus Suite | 7.2.0 | CertC-EXP15 | Fully implemented |
CodeSonar | 8.1p0 | LANG.STRUCT.EBS | Empty branch statement |
Klocwork | 2024.3 | ||
LDRA tool suite | 9.7.1 | 11 S, 12 S, 428 S | Fully Implemented |
Parasoft C/C++test | 2023.1 | CERT_C-EXP15-a | Suspicious use of semicolon |
PRQA QA-C | Unable to render {include} The included page could not be found. | 3109 | |
PVS-Studio | 7.33 | V529, V715 | |
SonarQube C/C++ Plugin | 3.11 | S1116 |
Related Guidelines
SEI CERT Oracle Coding Standard for Java | MSC51-J. Do not place a semicolon immediately following an if, for, or while condition |
ISO/IEC TR 24772:2013 | Likely Incorrect Expression [KOA] |
MITRE CWE | CWE-480, Use of incorrect operator |
Bibliography
[Hatton 1995] | Section 2.7.2, "Errors of Omission and Addition" |