Использование dmalloc с последним g ++

Я пытаюсь использовать dmalloc с g ++ 4.7.

Я получаю сообщение об ошибке:

/usr/include/dmalloc.h:457:32: error: declaration of 'char* strdup(const char*)' has a different exception specifier
/usr/include/string.h:130:14: error: from previous declaration 'char* strdup(const char*) throw ()'
  1. Почему функции C генерируют исключения?
  2. Могу ли я как-то сказать компилятору игнорировать спецификатор throw () во время компиляции?

…или я должен как-то исправить патч dmalloc?

1

Решение

Функции C не генерируют исключения, но исключения могут распространяться по фреймам C-функции. Спецификация throw () сообщает компилятору, что из этой функции не может возникнуть исключение, независимо от того, сгенерировано ли оно функцией или сгенерировано какой-либо другой функцией в цепочке.

В этом случае вы компилируете исходный код C ++, который содержит внешнее объявление функции со связью C. Одно это не позволяет компилятору делать выводы ни о библиотеке, которая содержит функцию, ни о языке, используемом для реализации этой функции, таким образом, компилятор не может предполагать что-либо об исключениях и должен консервативно компилировать код, если бы выполнялся бросок ( ) Спецификация там не ставилась.

Вы должны обновить и / или патч dmalloc.

1

Другие решения

Удалить объявление strdup от dmalloc.h, Кажется, что с трюками с библиотекой С больше не работает.

0

По вопросам рекламы [email protected]