Часть кода:
void func0(xxx* obj)
{
void* ptr;
size_t size;
obj->getBuffer(ptr, size); // Init ptr & size
while(size) // ERROR: may be used uninitialized
{
// processing buffer
}
}
'xxx.h'
#include <cstddef>
class xxx
{
public:
xxx();
xxx(void* p, size_t s);
void getBuf(void*& p, size_t& s);
private:
void* pp;
size_t ss;
};
'xxx.cpp'
#include "xxx.h"
xxx::xxx()
{
pp = (void*)0xFFFF;
ss = 0x100;
}
xxx::xxx(void* p, size_t s)
{
pp = p;
ss = s;
}
void xxx::getBuf(void*& p, size_t& s)
{
p = pp;
s = ss;
}
GCC генерирует 'может использоваться неинициализировано в этой функции' ошибка.
Версия GCC: 'aarch64-elf-g ++ (GNU Toolchain для архитектуры A-профиля 8.2-2018-08 (arm-rel-8.23)) 8.2.1 20180802 '
Есть ли способ , чтобы намекнуть компилятору, что переменные фактически инициализируются без явного присвоения им некоторых значений по умолчанию в объявлении?
PS: ошибка приходит с новой версией набора инструментов.
пожалуйста, не советуйте «переписать все» / «плохой дизайн».