OS X содержит heapsort в stdlib.h, который конфликтует с heapsort в библиотеке сортировки - PullRequest
2 голосов
/ 12 февраля 2011

Я использую библиотеку сортировки Ариэля Фейгона, найденную здесь: http://www.yendor.com/programming/sort/

Мне удалось заставить весь мой код работать на Linux, но, к сожалению, при попытке скомпилировать с GCC на Mac его стандартный stdlib.h содержит другой heapsort, который, к сожалению, приводит к ошибке конфликтующих типов.

Вот справочная страница для Apple Heapsort: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/heapsort.3.html

Комментирование heapsort в заголовке библиотеки сортировки вызывает кучу проблем. (простите за каламбур)

Я также кратко подумал о том, чтобы прокомментировать мое использование stdlib.h, но я использую malloc и realloc, так что это не будет работать вообще.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2011

Изолируйте использование функции Ариэля Фейгона в одном крошечном файле, который не нужно использовать <stdlib.h> Убедитесь, что вы связали библиотеку Ариэля Фейгона до стандартной библиотеки C.

4 голосов
/ 12 февраля 2011

Вы можете попытаться определить _POSIX_C_SOURCE:

$ gcc -E /usr/include/stdlib.h | grep heap
int heapsort(void *, size_t, size_t,
int heapsort_b(void *, size_t, size_t,

$ gcc -E -D_POSIX_C_SOURCE /usr/include/stdlib.h | grep heap
# No output at all this time

Надеюсь, _POSIX_C_SOURCE не подавит все, что вам нужно.

Вы часто можете обойти подобные проблемы с некоторымикомбинация _POSIX_C_SOURCE, _BSD_SOURCE, _XOPEN_SOURCE, _KEEP_YOUR_STUPID_EXTENSIONS_OUT_OF_STANDARD_HEADERS, ... Иногда они сражаются друг с другом, хотя у вас остаются схемы разбиения источника, как предлагает Джонатан Леффлер.

...