Предупреждение о мертвом коде? - PullRequest
23 голосов
/ 15 февраля 2011

Почему я получаю предупреждение о мертвом коде на i ++ в этой функции?

InputFilter hexInputFilter()
    {
    return new InputFilter()
        {
            @Override
            public CharSequence filter(CharSequence source, int start,
                    int end, Spanned dest, int dstart, int dend)
                {
                for (int i = start; i < end; i++)
                    {
                    if ((source.charAt(i) >= '0')
                            && (source.charAt(i) <= '9'))
                        {
                        return null;
                        }
                    if ((Character.toUpperCase(source.charAt(i)) >= 'A')
                            && (Character.toUpperCase(source.charAt(i)) <= 'F'))
                        {
                        return null;
                        }
                    return "";
                    }
                return null;
                }
        };
    }

Ответы [ 4 ]

56 голосов
/ 15 февраля 2011

У for нет шансов зацикливаться более одного раза, потому что вы возвращаетесь:

return "";

Таким образом, i++ не будет выполняться никогда, и поэтому вы получаете предупреждение dead code . Может быть, вы хотите удалить это return ""; и / или поставить его вне for.

13 голосов
/ 15 февраля 2011

Это потому, что i++ обычно выполняется после конца блока for, и в вашей функции конец блока for никогда не будет достигнут, потому что в блоке вы безоговорочно возвращаете значение.

A-петля

for (A; B; C) {
  D;
}

внутренне переведено на следующее:

A;
while (B) {
  D;  
  C;
}

Вы можете видеть, что если D всегда возвращается из функции, C никогда не будет достигнуто. Вот о чем жалоба.

5 голосов
/ 15 февраля 2011

Вы когда-либо будете выполнять цикл только один раз из-за оператора return "";.

3 голосов
/ 24 февраля 2012

В вашем случае приведенная ниже инструкция вызывает проблему, поскольку она выполняется безоговорочно и всегда будет выполняться при выполнении цикла for.Так что он никогда не достигнет i ++, поэтому его мертвый код.

return ""; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...