Предупреждение C / C ++: временный адрес с библиотекой Bluetooth BDADDR_ANY - PullRequest
4 голосов
/ 17 марта 2012

У меня есть некоторые проблемы с g ++ и процессом компиляции для программы на C / C ++, которая использует библиотеки Bluetooth под Ubuntu.

Если я использую gcc, он работает без предупреждения;напротив, если я использую g ++, я получаю это предупреждение:

предупреждение: получение временного адреса

, даже если программа компилируется нормально и работает.

Строки, сообщающие об ошибке:

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

В обоих случаях задействован BDADDR_ANY.

Как я могу устранить это предупреждение?

BDADDR_ANY isопределяется в 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}})

Ответы [ 2 ]

4 голосов
/ 17 марта 2012
(&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})

Создает временный объект и использует его адрес. Это не разрешено в C ++.

Это можно исправить, создав именованную временную переменную и указав в ней bacpy и bacmp:

bdaddr_t tmp = { };

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

и

while (bacmp(bdaddr, &tmp)) {
    //
}
2 голосов
/ 17 марта 2012

Создайте переменную (в любой удобной области), а не временную ...

bdaddr_t my_bdaddr_any = { 0 };
while (bacmp(bdaddr, my_bdaddr_any))
    ...
...