GCC警告字段未初始化使用

时间:2018-12-01 17:25:29

标签: c++ compiler-warnings

我有点想在没有很多资源的Atmel ATtiny85上使用I²C。 因此,我为C ++中的RTC模块DS1307编写了自己的实现。 我的班级定义如下:

class DS1307 {
public:
    DS1307();
    ~DS1307() = default;
    uint8_t getSeconds();
private:
    I2c i2c;
    const uint8_t address = 0b1101000; // Datasheet
};

对应的构造函数实现是:

#include "DS1307.h"

DS1307::DS1307(): i2c(address) {
}

在尝试编译时,编译器抱怨:

src/DS1307.cpp: In member function 'DS1307::DS1307()':
src/DS1307.cpp:7:29: warning: 'this_4(D)->address' is used uninitialized in this function [-Wuninitialized]
 DS1307::DS1307(): i2c(address) {
                 ~~~~~~^~~~~~~

为什么? 我并不怀疑GCC的正确性,但是我认为这就是初始化私有字段的方式。 I2c类将uint8_t作为构造函数的唯一参数。

1 个答案:

答案 0 :(得分:1)

我的两分钱:因为初始化列表的计算顺序与成员在类中出现的顺序相同。您可以尝试交换两条声明行,在I2C之前声明地址。

此外,在这样的小型设备上,将地址设为静态或使用预处理程序指令进行定义将更为有效。