0

我试图理解一个不提供所需参数但似乎有效的函数调用。该代码位于名为 RTClib 的 Arduino 库中。为什么/如何工作????

调用函数:

uint8_t DateTime::dayOfWeek() const {    
    uint16_t day = date2days(yOff, m, d);
    return (day + 6) % 7; // Jan 1, 2000 is a Saturday, i.e. returns 6
}

被调用的函数:

static uint16_t date2days(uint16_t y, uint8_t m, uint8_t d) {
    if (y >= 2000)
        y -= 2000;
    uint16_t days = d;
    for (uint8_t i = 1; i < m; ++i)
        days += pgm_read_byte(daysInMonth + i - 1);
    if (m > 2 && y % 4 == 0)
        ++days;
    return days + 365 * y + (y + 3) / 4 - 1;
}

完整库:https ://github.com/adafruit/RTClib

4

1 回答 1

1

所需的变量来自 DateTime 类。它们是受保护的变量,因此 DateTime 类中的所有方法都可以访问它们。

RTClib.h 第 27 行所示:

protected:
    uint8_t yOff, m, d, hh, mm, ss;

这些变量由RTClib.cpp 中的各种函数设置,例如首先初始化它们的构造函数:

DateTime::DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) {
    if (year >= 2000)
        year -= 2000;
    yOff = year;
    m = month;
    d = day;
    hh = hour;
    mm = min;
    ss = sec;
}
于 2013-08-23T02:31:57.677 回答