Details

    • Type: Language-Specification
    • Status: Active
    • Resolution: Unresolved
    • Labels:
      None
    • Impact:
      Unknown 'null' severity
    • Likelihood:
      Unknown 'null' severity
    • Default Quality Profiles:
      Sonar way

      Description

      Nested if, for, do, while, switch and try statements is a key ingredient for making what's known as "Spaghetti code".
      Such code is hard to read, refactor and therefore maintain.

      Noncompliant Code Example

      With the default threshold of 3:

        if (condition1) {                  // Compliant; depth = 1
          /* ... */
          if (condition2) {                // Compliant; depth = 2
            /* ... */
            for(int i = 0; i < 10; i++) {  // Compliant; depth = 3, not exceeding the limit
              /* ... */
              if (condition4) {            // Noncompliant; depth = 4
                if (condition5) {          // Depth = 5, exceeding the limit, but issues are only reported on depth = 4
                  /* ... */
                }
                return;
              }
            }
          }
        }
      

      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
                /* ... */
              }
            }
          }
        }
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              evgeny.mandrikov Evgeny Mandrikov
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated: