Librairie standard C
Le
Saïd
Bonjour,
La librairie standard C n'usurpe-t-elle pas son nom, etant donne qu'elle
n'est pas standard. J'ai ecrit un programme sous mac OS X 10.3.9 qui utilise
qsort_r. Le man dit que c'est une partie de ls Standard Library. Mais en
voulant compiler le meme programme sous linux, patatra! pas de qsort_r.
Comment faire pour programmer de maniere portable? Ne jamais utiliser une
fonction de la librairie "standard"?
Il n'est pas possible d'ecrire du code C portable sans le tester sur toutes
les architectures/compilateurs/OS possibles?
--
Saïd.
"Bless this, O Lord, that with it thou mayst blow thine enemies to tiny
bits, in thy mercy."
In the Book of Armaments, Chapter 4. (The Holy Hand Grenade)
La librairie standard C n'usurpe-t-elle pas son nom, etant donne qu'elle
n'est pas standard. J'ai ecrit un programme sous mac OS X 10.3.9 qui utilise
qsort_r. Le man dit que c'est une partie de ls Standard Library. Mais en
voulant compiler le meme programme sous linux, patatra! pas de qsort_r.
Comment faire pour programmer de maniere portable? Ne jamais utiliser une
fonction de la librairie "standard"?
Il n'est pas possible d'ecrire du code C portable sans le tester sur toutes
les architectures/compilateurs/OS possibles?
--
Saïd.
"Bless this, O Lord, that with it thou mayst blow thine enemies to tiny
bits, in thy mercy."
In the Book of Armaments, Chapter 4. (The Holy Hand Grenade)

Poser une question


Saïd
Il faut lire la page de man jusqu'au bout : seule la fonction 'qsort'
fait partie de la norme ISO C89 !
--
Paul Gaborit -
Ne pas confondre la "Standard C Library" avec une quelconque bibliothèque
implémentant totalement et uniquement le standard C. Toutes les
bibliothèques C standard des systèmes ne sont pas totalement conformes à la
norme C et implémentent de nombreuses fonctions ou extensions au langage C.
Il faut voir ensuite qu'il y a beaucoup de version du C, la dernière est la
C99 avec ses 2 corrections.
Faut dire aussi... C'est la bibliothèque C du GNU que tu utilises, pas
celles de Linux. Et c'est étonnant de voir une fonction qui ne soit pas dans
cette bibliothèque, vu que le GNU y met tout et n'importe quoi.
"qsort" est une fonction standard du C depuis le début (K&R), et donc aussi
C99, c'est aussi une fonction définie dans Posix, Unix 98, Unix 95, SVID3,
BSD... Bref c'est du standard de chez standard.
"qsort_r" n'est pas une fonction standard du C, ni Posix, ni Unix, ni rien
du tout. Elle doit venir de FreeBSD je suppose. Le man de Mac OS X le dit
bien : seul qsort est dans la norme C, pas les autres fonctions connexes.
Lire les standards. Celui sur le C99 est bien. Après tu peux regarder Posix.
Il faut déjà utiliser les fonctions C et pas les extensions d'un système
d'exploitation.
--
Éric Lévénez -- Unix is not only an OS, it's a way of life.
effectivement. Mais le debut du man est trompeur:
NAME
qsort, qsort_r, heapsort, mergesort - sort functions
LIBRARY
Standard C Library (libc, -lc)
--
Sind zu sein und es seiend in einem Schiff. Fällt zu sein hat das Wasser.
Wer bleibt er? -- Heidegger
extrait du man:
NAME
qsort, qsort_r, heapsort, mergesort - sort functions
LIBRARY
Standard C Library (libc, -lc)
Je ne savais pas que chaque systeme pouvait ajouter quelque chose a une
librarie qui porte le nom "Standard C Library". Dorenavant je ferai plus
attention en lisant un man.
--
Sind zu sein und es seiend in einem Schiff. Fällt zu sein hat das Wasser.
Wer bleibt er? -- Heidegger
Les mans sont regroupés par catégorie. Après il faut lire la suite.
La bibliothèque C est bien standard (elle veut respecter le C ISO, c'est le
but), mais ce n'est pas pour cela qu'il n'y a pas d'extensions. Il y a le
paragraphe STANDARDS qui explique clairement les choses :
STANDARDS
The qsort() function conforms to ISO/IEC 9899:1990 (``ISO C90'').
Rien n'est dit sur qsort_r, qui n'est donc pas standard.
Mais de toute façon il ne faut pas se fier aux mans (surtout les traductions
qui traînent) qui sont parfois vieux, pas à jour, voire démodés. Ici le C90
a été remplacé par le C99 il y a 7 ans déjà.
--
Éric Lévénez -- Unix is not only an OS, it's a way of life.