[devel] gcc4&multisync0.90

Sergey N. Yatskevich =?iso-8859-1?q?syatskevich_=CE=C1_altlinux=2Eru?=
Пн Май 29 18:05:20 MSD 2006


В Пнд, 29/05/2006 в 16:26 +0400, Alexey Shabalin пишет:
> День добрый
> помогите собрать multisync0.90
> gcc3.4 собирает, а gcc4 ругается на следующий участок.
> 
> ===============================
> static void msync_fs_make_config(fs_options *options, char **data, int *size)
> {
>         xmlDocPtr doc;
> 
>         doc = xmlNewDoc((xmlChar*)"1.0");
>         doc->children = xmlNewDocNode(doc, NULL, (xmlChar*)"config", NULL);
> 
>         xmlNewChild(doc->children, NULL, (xmlChar*)"path",
> (xmlChar*)options->path);
>         xmlNewChild(doc->children, NULL, (xmlChar*)"recursive",
> (xmlChar*)(options->recursive ? "TRUE" : "FALS
> 
>         xmlDocDumpMemory(doc, (xmlChar **)data, size);
>         *size++;
> }
> ===================================
> skip
> ===================================
> msync_fs_make_config(options, &config, &size);
> 
> 
> file_sync.c: In function 'msync_fs_make_config':
> file_sync.c:129: warning: value computed is not used
> 
> file_sync.c:129 - это   *size++;
> 
> Если убрать * - ругань исчезает. коректно ли это?
Нет, не корректно. Всё дело в приоритете операций разыменования
указателя (*) и увеличения на единицу (++).
Если развернуть данную конструкцию (*size++), то получится
следующее:

int* tmp = size;
size = size + 1;
*tmp; // вот здесь и ругается

Судя по коду здесь просто к вычисленному xmlDocDumpMemory размеру
добавляется единица (наверное для того, чтобы учесть завершающий
'\0'), так что правильно должно быть так: (*size)++

-- 
Sergey N. Yatskevich <syatskevich на altlinux.ru>




Подробная информация о списке рассылки Devel