簡體   English   中英

我收到一條警告,說我已達到非空函數的結尾

[英]I am getting a warning saying I have reached end of non-void function

我有一個函數可以確定一年是否是閏年,並且我收到警告,但我不確定警告在哪里。 如果是閏年則返回 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;
        }
    }
}

其他人指出了您的錯誤並提供了其他編碼方法。 讓我提供另一個。 這是一種早期返回方法,可以使代碼更扁平、更短且更易於理解:

bool is_leap(int y) {
    if (y % 400 == 0) return true;
    if (y % 100 == 0) return false;
    return y % 4 == 0;
}

如果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);
}

根據您編寫此函數的方式,可以退出而不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值並且更易於閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM