首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C/C++警告: BDADDR_ANY蓝牙库临时地址

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

Stack Overflow用户
提问于 2012-03-17 16:33:43
回答 3查看 5K关注 0票数 5

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

如果我使用gcc,它可以在没有警告的情况下工作;相反,如果我使用g++,我会得到以下警告:

警告:获取临时地址

即使程序编译得很好而且工作正常。

报告错误的相关行是:

代码语言:javascript
运行
复制
        bdaddr_t *inquiry(){
       // do some stuff.. 
    bacpy(&result[mote++], BDADDR_ANY);
    return result;
}
//...
void zeemote(){
while (bacmp(bdaddr, BDADDR_ANY)){
/..
}
}

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

我该怎么解决这个警告呢?

BDADDR_ANY是用蓝牙定义的,类似于:

代码语言:javascript
运行
复制
/* BD Address */
typedef struct {
    uint8_t b[6];
} __attribute__((packed)) bdaddr_t;

#define BDADDR_ANY   (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-17 16:35:56

代码语言:javascript
运行
复制
(&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})

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

您可以通过创建一个命名的临时变量并在其上使用bacpybacmp来修复这个问题:

代码语言:javascript
运行
复制
bdaddr_t tmp = { };

bacpy(&result[mote++], &tmp);

代码语言:javascript
运行
复制
while (bacmp(bdaddr, &tmp)) {
    //
}
票数 5
EN

Stack Overflow用户

发布于 2012-03-17 16:40:26

创建一个变量(在任何方便的范围内),而不是临时的.

代码语言:javascript
运行
复制
bdaddr_t my_bdaddr_any = { 0 };
while (bacmp(bdaddr, my_bdaddr_any))
    ...
票数 2
EN

Stack Overflow用户

发布于 2019-08-04 17:54:37

如果您查看蓝牙.h文件,您将看到您只需在C++中通过以下操作就可以做到这一点

代码语言:javascript
运行
复制
bdaddr_t bdaddr_any =  {{0, 0, 0, 0, 0, 0}};

sockaddr_rc server;
server.rc_family = AF_BLUETOOTH;
server.rc_bdaddr = bdaddr_any;
server.rc_channel = (uint8_t)1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9751710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档