2011-02-12 1 views
2

J'utilise la bibliothèque de tri d'Ariel Faigon, trouvé ici: http://www.yendor.com/programming/sort/OS X heapsort contient en stdlib.h qui est en conflit avec heapsort dans la bibliothèque de tri

J'ai pu obtenir tout mon code de travail sous Linux, mais malheureusement , en essayant de compiler avec GCC sur Mac, son fichier stdlib.h par défaut contient un autre heapsort, ce qui entraîne malheureusement une erreur de types conflictuels.

Voici la page de manuel pour Apple heapsort: http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/heapsort.3.html

Commentant la heapsort dans l'en-tête bibliothèque de tri provoque un tas de problèmes. (pardonnez le jeu de mots)

J'ai aussi brièvement pensé à commenter mon utilisation de stdlib.h, mais j'utilise malloc et realloc, donc ça ne marchera pas du tout.

Des idées?

Répondre

5

Isolez votre utilisation de la fonction d'Ariel Faigon dans un seul petit fichier qui n'a pas besoin d'utiliser <stdlib.h>. Assurez-vous de lier la bibliothèque d'Ariel Faigon à la bibliothèque C standard.

+0

Cela semble beaucoup de se pencher en arrière pour que cela fonctionne. –

+0

@Chris - oui, et non. Le fichier peut être constitué de deux lignes '#include', l'une pour les déclarations du projet, l'autre pour les déclarations de heapsort désirées, et une fonction pouvant occuper 4 lignes. Plus les commentaires, etc. La fonction elle-même relaie simplement les appels. Franchement, cela peut être plus facile que de modifier le processus de construction pour faire varier les drapeaux de compilation utilisés pour compiler différents fichiers source. Et, une fois terminé, le code aura rarement besoin de changer. Si vous avez une solution plus simple, proposez-la. –

+0

Semble un peu kludgy, mais cela fonctionne. Je vous remercie! –

4

Vous pouvez définir _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 

Espérons _POSIX_C_SOURCE ne supprimera pas tout ce que vous avez besoin.

Vous pouvez souvent contourner ces sortes de problèmes avec une combinaison de _POSIX_C_SOURCE, _BSD_SOURCE, _XOPEN_SOURCE, _KEEP_YOUR_STUPID_EXTENSIONS_OUT_OF_STANDARD_HEADERS, ... Parfois, ils se battent entre eux mais si vous êtes de gauche avec les schémas de partitionnement source comme le suggère Jonathan Leffler.

+0

Mieux serait de compiler avec '-ansi -pedantic' ou toutes les options de ligne de commande désactiver les déclarations non standard dans les en-têtes standard. –

+0

@Chris: la plupart des gens ** veulent ** des fonctions POSIX déclarées dans les en-têtes C, mais pas de pollution supplémentaire. –

Questions connexes