Main Content

Semicolon on the same line as an if, for or while statement

Semicolon on same line results in empty body of if, for or while statement

Since R2020a

Description

This defect occurs when a semicolon on the same line as the last token of an if, for or while statement results in an empty body.

The checker makes an exception for the case where the if statement is immediately followed by an else statement:

if(condition);
else {
  ...
}

Risk

The semicolon following the if, for or while statement often indicates a programming error. The spurious semicolon changes the execution flow and leads to unintended results.

Fix

If you want an empty body for the if, for or while statement, wrap the semicolon in a block and place the block on a new line to explicitly indicate your intent:

if(condition)
   {;}
Otherwise, remove the spurious semicolon.

Examples

expand all

int credentialsOK(void);

void login () {
    int loggedIn = 0;
    if(credentialsOK());
      loggedIn = 1;
}

In this example, the spurious semicolon results in an empty if body. The assignment loggedIn=1 is always performed. However, the assignment was probably to be performed only under a condition.

Correction – Remove Spurious Semicolon

If the semicolon was unintended, remove the semicolon.

int credentialsOK(void);

void login () {
    int loggedIn = 0;
    if(credentialsOK())
      loggedIn = 1;
}

Result Information

Group: Good practice
Language: C | C++
Default: Off
Command-Line Syntax: SEMICOLON_CTRL_STMT_SAME_LINE
Impact: Low

Version History

Introduced in R2020a