Nested control flow statements if
, for
, do
, while
, switch
and try
are
often key ingredients in creating what’s known as "Spaghetti code". This code smell can make your program difficult to understand and maintain.
When numerous control structures are placed inside one another, the code becomes a tangled, complex web. This significantly reduces the code’s
readability and maintainability, and it also complicates the testing process.
Exceptions
Each use of a macro containing control flow statements is counted as one nesting level, even if the macro contains more than one control flow
statement.
#define FOREACH(V,ARR) if(ARR!=nullptr) for(int V=0; V<(sizeof(ARR)/sizeof(ARR[0])); V++)
if (condition1) { // Compliant; depth = 1
if (condition2) { // Compliant; depth = 2
FOREACH(i, arr) { // Compliant; depth = 3 (not 4)
if (condition3) { // Noncompliant; depth = 4
/* ... */
}
}
}
}