EXP15-C. Do not place a semicolon on the same line as an if, for, or while statement
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:
Non-compliant code
if (a == b); {
/* ... */
}
Compliant Solution
It is likely, in this example, that the semicolon was accidentally inserted:
Compliant code
if (a == b) {
/* ... */
}
Risk Assessment
Errors of omission can result in unintended program flow.
| Recommendation | Severity | Likelihood | Detectable | Repairable | Priority | Level |
|---|---|---|---|---|---|---|
| EXP15-C | High | Likely | Yes | Yes | P27 | L1 |
Automated Detection
Tool | Version | Checker | Description |
|---|---|---|---|
| Astrée | 25.10 | empty-body | Fully checked |
| Axivion Bauhaus Suite | 7.2.0 | CertC-EXP15 | Fully implemented |
| CodeSonar | 9.1p0 | LANG.STRUCT.EBS | Empty branch statement |
| Helix QAC | 2025.2 | C3109 | |
| Klocwork | 2025.2 | SEMICOL | |
| LDRA tool suite | 9.7.1 | 11 S, 12 S, 428 S | Fully Implemented |
| Parasoft C/C++test | 2025.2 | CERT_C-EXP15-a | Suspicious use of semicolon |
| PC-lint Plus | 1.4 | 721, 722 | Partially supported: reports missing body from if, for, or while with semi-colon immediately following predicate |
| Polyspace Bug Finder | R2025b | CERT C: Rec. EXP15-C | Checks for semicolon on same line as for, if or while statement (rule fully covered) |
| PVS-Studio | 7.42 | V529 , V715 | |
| SonarQube C/C++ Plugin | 3.11 | S1116 | |
| RuleChecker | 25.10 | empty-body | Fully checked |
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" |


