GNT sans publicité, site mobile, fonctionnalitées exclusives...

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)
Lire les 14 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #471851
À (at) 17 Feb 2006 17:18:56 GMT,
Saïd
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.


Il faut lire la page de man jusqu'au bout : seule la fonction 'qsort'
fait partie de la norme ISO C89 !

--
Paul Gaborit -
Eric Levenez
Le #471850
Le 17/02/06 18:18, dans
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.


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.

Mais en
voulant compiler le meme programme sous linux, patatra! pas de qsort_r.


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.

Comment faire pour programmer de maniere portable? Ne jamais utiliser une
fonction de la librairie "standard"?


Lire les standards. Celui sur le C99 est bien. Après tu peux regarder Posix.

Il n'est pas possible d'ecrire du code C portable sans le tester sur toutes
les architectures/compilateurs/OS possibles?


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.

Saïd
Le #471849
Paul Gaborit :

À (at) 17 Feb 2006 17:18:56 GMT,
Saïd
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.


Il faut lire la page de man jusqu'au bout : seule la fonction 'qsort'
fait partie de la norme ISO C89 !



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


Saïd
Le #471848
Eric Levenez :
Il n'est pas possible d'ecrire du code C portable sans le tester sur toutes
les architectures/compilateurs/OS possibles?


Il faut déjà utiliser les fonctions C et pas les extensions d'un système
d'exploitation.



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


Eric Levenez
Le #471847
Le 17/02/06 20:22, dans
effectivement. Mais le debut du man est trompeur:

NAME
qsort, qsort_r, heapsort, mergesort - sort functions


Les mans sont regroupés par catégorie. Après il faut lire la suite.

LIBRARY
Standard C Library (libc, -lc)


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.

Publicité
Suivre les réponses
Poster une réponse
Anonyme