In VS I am told this function “does not return a value in all control paths.” A bot told me specifically the issue is with this line: else if (letter + key <= 90). It said that if the outcome results in letter + key equally exactly 90 then a value is not returned, but I thought that was covered where ‘<=’ means ‘less than or equals.’

char rotate(char letter, int key)
{
    if (isalpha(letter) == true)
    {
        if (letter + key > 90)
        {
            int overage = letter + key - 90;
            letter = 64 + overage;

            while (letter > 90)
            {
                overage = letter - 90;
                letter += overage;
            }

            return letter;
        }

        else if (letter + key &lt;= 90)
        {
            letter += key;
            return letter;
        }
    }

    else if (isalpha(letter) == false)
    {
        return letter;
    }
  • CameronDev@programming.dev
    link
    fedilink
    arrow-up
    6
    ·
    1 年前

    I second the early return suggestions, but the other thing you should be aware of is that isalpha() is being evaluated twice unnecessarily. If its cheap and not call frequently, not a real big problem, but it is a waste of cycles. If you want to document the else, you could try:

    ...
    }
    else  // isAlpha() == false
    {
    ...
    

    Also, if isAlpha was something that could change between evaluation, such as isTuesday, you are at risk of the first call returning false, and then the second call returning true, which would skip both cases.