Не знаю, как кого, но сборка с warnings лично меня сильно напрягает.
Поэтому, я решил причесать их немного.
Одно из проблемыных мест было множественно сообщение компилятора
"deprecated conversion from string constant to 'char *'".
Раньше модули собирались gcc версии 3.4, а сейчас 4.2, поэтому сборка была более тихая.
Код оказался винегредом из С и С++, причем для строк использовался именно char *,
менять на std::string было бы долго и неоправданно. Как оказалось, проблема была в следующем:
void addpack(std::vector<uint8_t>& c, char * formatt,...) { // большой switch, проверяющий посимвольно значение ключей } void addPack64(std::vector<uint8_t> &c, uint64_t iValue) { addpack(c, "N", (uint32_t)(iValue >> 32) ); addpack(c, "N", (uint32_t)(iValue & 0xffffffffUL)); }
Как видно из кода, функции addpack передавался указатель на локальную константную строку с возможностью изменения ее содержимого.
В качестве решения, параметр char * formatt был заменен на const char * formatt.
Комментариев нет:
Отправить комментарий