# V729. Function body contains the 'X' label that is not used by any 'goto' statements.

Анализатор обнаружил в теле функции метку, на которую не ссылается ни один оператор 'goto'. Возможно, программист ошибся и использует где-то переход не на ту метку.

Синтетический пример некорректного кода:

    string SomeFunc(const string &fStr)
    {
      string str;
      while(true)
      {
        getline(cin,str);
        if (str == fStr)
          goto retRes;
        else if(str == "stop")
          goto retRes;
      }
    retRes:
      return str;
    badRet:
      return "fail";
    }

В теле функции есть метка 'badRet' на которую не ссылается ни один оператор 'goto', но при этом присутствует другая метка 'retRes', на которую есть ссылка. Программист ошибся и вместо перехода на метку 'badRet' продублировал переход на метку 'retRes'.

Тогда корректный код мог бы выглядеть так:

    string SomeFunc(const string &fStr)
    {
      string str;
      while(true)
      {
        getline(cin,str);
        if (str == fStr)
          goto retRes;
        else if(str == "stop")
          goto badRet;
      }
    retRes:
      return str;
    badRet:
      return "fail";
    }

Другой пример некорректного кода:

    int DeprecatedFunc(size_t lhs, size_t rhs, bool cond)
    {
      if (cond)
        return lhs*3+rhs;
      else
        return lhs*2 + rhs*7;
    badLbl:
      return -1;
    }

В данном случае будет выдано сообщение с низким уровнем опасности, так как метка 'badLbl' осталась после изменения функции, а операторы 'goto', ссылающиеся на неё, были удалены.

Анализатор не будет выдавать предупреждение в случае, если в теле функции есть оператор 'goto', ссылающийся на данную метку, но он закомментирован или этот участок кода не компилируется из-за директивы '#ifdef'.

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V729.