C/C++ 警告:BDADDR_ANY 蓝牙库的临时地址

Mar*_*net 5 c c++ ubuntu bluetooth temporary

我在 g++ 和在 Ubuntu 下使用蓝牙库的 C/C++ 程序的编译过程中遇到了一些问题。

如果我使用 gcc,它工作正常,没有任何警告;相反,如果我使用 g++ 我会收到此警告:

警告:正在获取临时地址

即使程序编译良好并且可以工作。

报告错误涉及的行是:

        bdaddr_t *inquiry(){
       // do some stuff.. 
    bacpy(&result[mote++], BDADDR_ANY);
    return result;
}
//...
void zeemote(){
while (bacmp(bdaddr, BDADDR_ANY)){
/..
}
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,都涉及 BDADDR_ANY。

我该如何解决这个警告?

BDADDR_ANY 在 bluetooth.h 中定义如下:

/* BD Address */
typedef struct {
    uint8_t b[6];
} __attribute__((packed)) bdaddr_t;

#define BDADDR_ANY   (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
Run Code Online (Sandbox Code Playgroud)

Set*_*gie 5

(&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
Run Code Online (Sandbox Code Playgroud)

构造一个临时对象并使用其地址。这在 C++ 中是不允许的。

您可以通过创建一个命名临时变量并在其上使用bacpyand来解决此问题bacmp

bdaddr_t tmp = { };

bacpy(&result[mote++], &tmp);
Run Code Online (Sandbox Code Playgroud)

while (bacmp(bdaddr, &tmp)) {
    //
}
Run Code Online (Sandbox Code Playgroud)