Я получаю предупреждение о том, что я достиг конца не пустой функции - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть функция, которая определяет, является ли год високосным, и я получаю предупреждение, но я не уверен, где это предупреждение. Возвращает 1, если это високосный год, и 0, если это не так.

int isLeapYear(int yyyy) {
    if (yyyy % 4 == 0) {
        if (yyyy % 100 = 0) {
            if (yyyy % 400 == 0) {
                return 1;
            }
            else {
                return 0;
            }
        }
        else {
           return 1;
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 28 февраля 2020

Другие указали на вашу ошибку и предложили альтернативные способы ее кодирования. Позвольте мне предложить другое. Это метод раннего возврата, который делает код более ровным, коротким и легким для понимания:

bool is_leap(int y) {
    if (y % 400 == 0) return true;
    if (y % 100 == 0) return false;
    return y % 4 == 0;
}
1 голос
/ 28 февраля 2020

Если yyyy % 4 == 0 оценивает false, if (yyyy % 4 == 0) { ... } тело пропускается, вы ничего не возвращаете. Добавьте return 0; в самый конец.

Вот другая реализация:

#include <stdbool.h>

bool isLeapYear(int const year) {
  if (year % 4) return false;
  if (year % 100) return true;
  return !(year % 400);
}
0 голосов
/ 28 февраля 2020

Как вы написали эту функцию, можно выйти без return ничего.

int isLeapYear(int yyyy) {
    if (yyyy % 4 == 0) {
        ...
    }

    <--- Nothing Is Returned Here
}

Вы должны сделать что-то вроде:

bool isLeapYear(int yyyy)
{
    bool leapYear = false;

    if (yyyy % 4 == 0) {
        // If Leap Year Set leapYear To true
    }

    return leapYear;
}

Преимущество это только одна точка выхода, которая позволяет установить значение по умолчанию return, и его легче читать.

...