🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15316

[FAQ] fr.comp.lang.c - partie 1/4

#15316
From: Guillaume Rumeau
Date: Sun, 02 Oct 2005 09:49
1479 lines
56498 bytes
Archive-Name: fr/comp/lang/faq-c-1

Archive-Name: fr/comp/lang/faq-c-1

---------------------------------------------------------------------------
     FAQ de fr.comp.lang.c

     18 avril 2003
     Partie 1/4 (sections 1 � 4)
---------------------------------------------------------------------------


Foire aux questions sur le langage C

R�sum� :

    Ce document regroupe les questions les plus fr�quemment pos�es
    (avec les r�ponses) du groupe de discussion francophone
    <news:fr.comp.lang.c> sur le langage C.
    Cette FAQ (voir la question 2.1)
    est bas�e sur celle de <news:comp.lang.c>
    maintenue par Steve Summit
    (<http://www.eskimo.com/~scs/C-faq/top.html>).

    
    Une version HTML de ce document est disponible � l'adresse suivante :
    <http://www.isty-info.uvsq.fr/~rumeau/fclc/>.
    
    
    Une version PDF de la FAQ est � nouveau disponible ici :
    <http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc.pdf>.
    Enfin, il existe aussi une version poscript :
    <http://www.isty-info.uvsq.fr/~rumeau/fclc/fclc.ps>.

    
    M�me si ce document n'est plus si r�cent que �a, il est 
    probable qu'il y traine encore quelques coquilles ou erreurs. 
    Aussi, si vous en trouvez, n'h�sitez pas � les indiquer aux 
    mainteneurs (voir la question 2.5).

Derniers changements : 

 - Version 2.15, le 18/04/2003 
    Quelques modifications mineures et corrections de liens morts.

 - Version 2.14, le 18/01/2003 
    Corrections dans le source XML
    Une version PDF est � nouveau disponible
    Modification de la question 14.3

 - Version 2.13, le 11/11/2002 
    Correction du code de la question 14.12
    Ajout de la question 14.8
    Correction des questions 3.10 et 15.10.

 - Version 2.12, le 27/08/2002 
    Correction de l'exemple dans la question 14.2.

 - Version 2.11, le 03/07/2002 
    Pr�cisions sur la question 13.9
    Et quelques corrections typographiques.

 - Version 2.10, le 09/04/2002 
    Compl�ments sur la question 3.6
    Ajout de la question 5.8
    Ajout de la question 11.10
    Ajout de la question 9.10
    De nombreuses autres corrections et modifications.


1. Copyright (Droits de reproduction)
    1.1 Copyright de la FAQ de comp.lang.c
    1.2 Qu'en est-il de ce document ?

2. Introduction
    2.1 Qu'est-ce qu'une FAQ ?
    2.2 Qui la maintient ?
    2.3 Qui y contribue ?
    2.4 O� puis-je la trouver ?
    2.5 J'ai trouv� une erreur !
    2.6 Et mes questions ?
    2.7 Dois-je poster sur fr.comp.lang.c ?
    2.8 Comment poster sur fr.comp.lang.c ?
    2.9 Comment comprendre le langage utilis� sur fr.comp.lang.c ?

3. Le langage C
    3.1 Qu'est-ce que le langage C ?
    3.2 � quoi �a sert ?
    3.3 D'o� vient le C ?
    3.4 Que peut-on faire en C ?
    3.5 Portabilit�, mat�riel, syst�me ...
    3.6 Et le C++ dans tout �a ?
    3.7 ISO, ANSI, K&amp;R, ..., qu'es aquo ?
    3.8 De quoi ai-je besoin pour programmer en C ?
    3.9 Quel(s) bouquin(s) ?
    3.10 O� trouver...

4. Outils, environnement de d�veloppement et autres gadgets
    4.1 Environnements de d�veloppement int�gr�s
    4.2 Compilateurs
    4.3 D�bogueurs
    4.4 Graphisme
    4.5 Biblioth�ques
    4.6 Outils divers
    4.7 O� trouver du code ?

5. D�clarations et initialisations
    5.1 Quels types utiliser ?
    5.2 Comment d�finir une structure qui pointe sur elle-m�me ?
    5.3 Comment d�clarer une variable globale ?
    5.4 Quelle est la diff�rence entre const et #define ?
    5.5 Comment utiliser const avec des pointeurs ?
    5.6 Comment bien initialiser ses variables ?
    5.7 Comment d�clarer un tableau de fonctions ?
    5.8 Comment conna�tre le nombre d'�l�ments d'un tableau ?
    5.9 Quelle est la diff�rence entre char a[] et char * a?
    5.10 Peut-on d�clarer un type sans sp�cifier sa structure ?

6. Structures, unions, �num�rations
    6.1 Quelle est la diff�rence entre struct et typedef struct ?
    6.2 Une structure peut-elle contenir un pointeur sur elle-m�me ?
    6.3 Comment impl�menter des types cach�s (abstraits) en C ?
    6.4 Peut-on passer des structures en param�tre de fonctions ?
    6.5 Comment comparer deux structures ?
    6.6 Comment lire/�crire des structures dans des fichiers ?
    6.7 Peut-on initialiser une union ?
    6.8 Quelle est la diff�rence entre une �num�ration et des #define ?
    6.9 Comment r�cup�rer le nombre d'�l�ments d'une �num�ration ?
    6.10 Comment imprimer les valeurs symboliques d'une �num�ration ?

7. Tableaux et pointeurs
    7.1 Quelle est la diff�rence entre un tableau et un pointeur ?
    7.2 Comment passer un tableau � plusieurs dimensions en param�tre d'une fonction ?
    7.3 Comment allouer un tableau � plusieurs dimensions ?
    7.4 Comment d�finir un type pointeur de fonction ?
    7.5 Que vaut (et signifie) la macro NULL ?
    7.6 Que signifie l'erreur � NULL-pointer assignment � ?
    7.7 Comment imprimer un pointeur ?
    7.8 Quelle est la diff�rence entre void * et char * ?

8. Cha�nes de caract�res
    8.1 Comment comparer deux cha�nes ?
    8.2 Comment recopier une cha�ne dans une autre ?
    8.3 Comment lire une cha�ne au clavier ?
    8.4 Comment obtenir la valeur num�rique d'un char (et vice-versa) ?
    8.5 Que vaut sizeof(char) ?
    8.6 Pourquoi sizeof('a') ne vaut pas 1 ?
    8.7 Pourquoi ne doit-on jamais utiliser gets() ?
    8.8 Pourquoi ne doit-on presque jamais utiliser scanf() ?

9. Fonctions et prototypes
    9.1 Pour commencer ...
    9.2 Qu'est-ce qu'un prototype ?
    9.3 O� d�clarer les prototypes ?
    9.4 Quels sont les prototypes valides de main() ?
    9.5 Comment printf() peut recevoir diff�rents types d'arguments ?
    9.6 Comment �crire une fonction � un nombre variable de param�tres ?
    9.7 Comment modifier la valeur des param�tres d'une fonction ?
    9.8 Comment retourner plusieurs valeurs ?
    9.9 Peut-on, en C, imbriquer des fonctions ?
    9.10 Qu'est-ce qu'un en-t�te ?

10. Expressions
    10.1 Le type Bool�en existe-t-il en C ?
    10.2 Un pointeur NULL est-il assimil� � une valeur fausse ?
    10.3 Que donne l'op�rateur ! sur un nombre n�gatif ?
    10.4 Que vaut l'expression a[i] = i++ ?
    10.5 Pourtant, i++ vaut i ?
    10.6 En est-il de m�me pour i++ * i++ ?
    10.7 Peut-on utiliser les parenth�ses pour forcer l'ordre d'�valuation d'une expression ?
    10.8 Qu'en est-il des op�rateurs logiques &amp;&amp; et || ?
    10.9 Comment sont �valu�es les expressions comprenant plusieurs types de variables ?
    10.10 Qu'est-ce qu'une lvalue ?

11. Nombres en virgule flottante
    11.1 J'ai un probl�me quand j'imprime un nombre r�el.
    11.2 Pourquoi mes extractions de racines carr�es sont erron�es ?
    11.3 J'ai des erreurs de compilation avec des fonctions math�matiques
    11.4 Mes calculs flottants me donnent des r�sultats �tranges et/ou diff�rents selon les plateformes
    11.5 Comment simuler == entre des flottants ?
    11.6 Comment arrondir des flottants ?
    11.7 Pourquoi le C ne dispose-t-il pas d'un op�rateur d'exponentiation ?
    11.8 Comment obtenir Pi ?
    11.9 Qu'est-ce qu'un NaN ?
    11.10 Faut-il pr�f�rer les double aux float ?

12. Allocation dynamique
    12.1 Doit-on ou ne doit-on pas caster malloc() ?
    12.2 Comment allouer proprement une variable ?
    12.3 Pourquoi mettre � NULL les pointeurs apr�s un free() ?
    12.4 Pourquoi free() ne met pas les pointeurs � NULL ?
    12.5 Quelle est la diff�rence entre malloc() et calloc() ?
    12.6 Que signifie le message � assignment of pointer from integer � quand j'utilise malloc() ?
    12.7 Mon programme plante � cause de malloc(), cette fonction est-elle bugg�e ?
    12.8 Que signifient les erreurs � segmentation fault � et � bus error � ?
    12.9 Doit-on lib�rer explicitement la m�moire avant de quitter un programme ?
    12.10 Du bon usage de realloc()

13. Le pr�-processeurs
    13.1 Quel est le r�le du pr�processeur ?
    13.2 Qu'est-ce qu'un trigraphe ?
    13.3 � quoi sert un backslash en fin de ligne ?
    13.4 Quelles sont les formes possibles de commentaires ?
    13.5 Comment utiliser #include ?
    13.6 Comment �viter l'inclusion multiple d'un fichier ?
    13.7 Comment d�finir une macro ?
    13.8 Comment d�finir une macro avec des arguments ?
    13.9 Comment faire une macro avec un nombre variable d'arguments ?
    13.10 Que font les op�rateurs # et ## ?
    13.11 Une macro peut-elle invoquer d'autres macros ?
    13.12 Comment red�finir une macro ?
    13.13 Que peut-on faire avec #if ?
    13.14 Qu'est-ce qu'un #pragma ?
    13.15 Qu'est-ce qu'un #assert ?
    13.16 Comment d�finir proprement une macro qui comporte plusieurs statements ?
    13.17 Comment �viter les effets de bord ?
    13.18 Le pr�processeur est-il vraiment utile ?
    13.19 Approfondir le sujet.

14. Fonctions de la biblioth�que
    14.1 Comment convertir un nombre en une cha�ne de caract�res ?
    14.2 Comment convertir une cha�ne en un nombre ?
    14.3 Comment d�couper une cha�ne ?
    14.4 Pourquoi ne jamais faire fflush(stdin) ?
    14.5 Comment vider le buffer associ� � stdin ?
    14.6 Pourquoi mon printf() ne s'affiche pas ?
    14.7 Comment obtenir l'heure courante et la date ?
    14.8 Comment faire la diff�rence entre deux dates ?
    14.9 Comment construire un g�n�rateur de nombres al�atoires ?
    14.10 Comment obtenir un nombre pseudo-al�atoire dans un intervalle ?
    14.11 � chaque lancement de mon programme, les nombres pseudo-al�atoires sont toujours les m�mes ?
    14.12 Comment savoir si un fichier existe ?
    14.13 Comment conna�tre la taille d'un fichier ?
    14.14 Comment lire un fichier binaire proprement ?
    14.15 Comment marquer une pause dans un programme ?
    14.16 Comment trier un tableau de cha�nes ?
    14.17 Pourquoi j'ai des erreurs sur les fonctions de la biblioth�que, alors que j'ai bien inclus les ent�tes ?

15. Styles
    15.1 Comment bien programmer en C ?
    15.2 Comment indenter proprement du code ?
    15.3 Quel est le meilleur style de programmation ?
    15.4 Qu'est-ce que la notation hongroise ?
    15.5 Pourquoi certains �crivent-ils if(0==x) et non if(x==0) ?
    15.6 Pourquoi faut-il mettre les '{' et '}' autour des boucles ?
    15.7 Pourquoi certains disent-ils de ne jamais utiliser les goto ?
    15.8 Pourquoi commenter un #endif ?
    15.9 O� trouver de la doc sur les diff�rents styles ?
    15.10 Comment bien structurer son programme ?

16. Autres
    16.1 Comment rendre un programme plus rapide ?
    16.2 Quelle est la diff�rence entre byte et octet ?
    16.3 Peut-on faire une gestion d'exceptions en C ?
    16.4 Comment g�rer le num�ro de version de mon programme ?
    16.5 Pourquoi ne pas mettre de `_' devant les identifiants ?
    16.6 � quoi peut servir un cast en (void) ?

17. En guise de conclusion


1. Copyright (Droits de reproduction)


1.1 Copyright de la FAQ de comp.lang.c


    � The comp.lang.c FAQ list is Copyright 1990-1999 by Steve Summit.
    Content from the book C Programming FAQs: Frequently Asked
    Questions is made available here by permission of the author
    and the publisher as a  service to the community.
    It is intended to complement the use of the published text and is
    protected by  international copyright laws.
    The content is made available here and may be accessed
    freely for personal use but may not be republished without
    permission. �


1.2 Qu'en est-il de ce document ?


    -  Steve Summit a r�dig� la version anglo-saxonne sur
   laquelle nous nous sommes bas�s. On en a traduit de longs passages,
   r�organis�, annot�, repens� une partie et r��crit compl�tement
   d'autres paragraphes, ce avec son consentemment.

    - Les auteurs comme les contributeurs de cette FAQ ne
   garantissent rien, ni que les conseils donn�s ici fonctionnent, ni
   que le code compile et fonctionne correctement, ni que votre
   machine ne va pas s'autod�truire instantan�ment apr�s lecture de ce
   message. Autrement dit, vous �tes enti�rement responsable de ce que
   vous faites des informations donn�es ici. En cas de p�pin, vous ne
   pouvez vous en prendre qu'� vous m�me.

    - Les copies conformes et versions int�grales de ce document
   sont autoris�es sur tout support pour peu que cette notice soit
   pr�serv�e. Une utilisation commerciale devra faire l'objet d'une
   autorisation pr�alable, notamment de Steve Summit.
   

2. Introduction


2.1 Qu'est-ce qu'une FAQ ?


    C'est une Foire Aux Questions (les anglos-saxons
    disent Frequent Asked Questions ou questions
    fr�quemment pos�es). Elle regroupe les r�ponses aux questions
    r�currentes sur <news:fr.comp.lang.c>.


2.2 Qui la maintient ?

    Elle est r�dig�e � l'initiative de Guillaume Rumeau
    (<mailto:guillaume.rumeau@wanadoo.fr>).


2.3 Qui y contribue ?


    Les r�dacteurs de la FAQ sont :
    
     -  Guillaume Rumeau (<mailto:guillaume.rumeau@wanadoo.fr>),
     -  Thomas Pornin (<mailto:Thomas.Pornin@ens.fr>),
     -  Pascal Cabaud (<mailto:pascal.cabaud@wanadoo.fr>),
    

    mais elle ne saurait exister sans les contributions de :

    
    � After �,
    � EpSylOn �,
    � ironfil �,
    � MacLord �,
    Edgar Bonnet,
    Erwan David,
    Thomas Deniau,
    Emmanuel Delahaye,
    Gabriel Dos Reis,
    Laurent Dupuis,
    Horst Kraemer,
    Antoine Leca,
    Vincent Lef�vre,
    Fabien Le Lez,
    �ric L�v�nez,
    Serge Paccalin,
    Yves Roman,
    Michel Simian,
    et tous les autres...

    
    Merci aussi � Thomas Baruchel pour ces nombreuses
    corrections orthographiques et typographiques, et � St�phane 
    Muller pour son script python qui permet d'avoir des
    versions postscript et pdf de la FAQ.

    
    et n'oublions pas bien s�r Steve Summit.

    Remarque : 
    Si vous pensez qu'un nom a �t� injustement omis, n'h�sitez pas �
    nous le faire savoir, nous nous ferons un plaisir de l'ajouter.


2.4 O� puis-je la trouver ?

    � la page de Guillaume Rumeau :
    <http://www.isty-info.uvsq.fr/~rumeau/fclc/>
    et deux fois par mois sur <news:fr.comp.lang.c>
    et <news:fr.usenet.reponses>.


2.5 J'ai trouv� une erreur !


    Ce document �tant r�dig� par des humains,
    il peut contenir des erreurs. Vous �tes vivement invit�s � les
    signaler soit en postant sur <news:fr.comp.lang.c>
    soit en �crivant � l'un des (aux) r�dacteurs.

    
    (voir aussi 2.3)


2.6 Et mes questions ?


    Il faut commencer par les reformuler le plus pr�cis�ment possible
    (par exemple les reformuler en questions moins ouvertes) ; d�crire
    les probl�mes aide beacoup.

    
    Quand on commence � avoir une id�e, chercher les mots clefs
    d�crivant le probl�me � l'aide de moteurs de recherche, par
    exemple <http://www.google.com/>.
    Regardez aussi ce que sait faire <http://www.copernic.com/fr>.

    
    Si vous n'avez toujours pas de reponse, analysez les diff�rents
    forums disponibles, et posez la question dans celui qui vous
    semblera le plus adapt� ; si il y a plusieurs questions qui
    semblent pouvoir aller dans plusieurs forums, r�digez plusieurs
    messages (il y aura plus de r�ponses, car les r�ponses seront
    moins longues � �crire ...).

    
    Si la question est tr�s technique et n'obtient pas de r�ponse
    valable, faites l'effort de la re-r�diger en anglais et/ou
    demandez gentiment une traduction si vous n'�tes pas s�r de votre
    anglais, il y a suffisament de francophones sur les groupes
    internationaux pour qu'une bonne �me vous rende service.

    
    Avant de poster (sur <news:fr.comp.lang.c>),
    mieux vaut se demander si :
    
         -  la question porte-t-elle sur le C ISO ?
            cf. 3.7.
         -  la r�ponse est-elle dans la doc' ? dans mon bouquin ?
            Bonne lecture !
         -  la r�ponse est-elle dans la FAQ ?
            Bonne lecture !
         -  la r�ponse a-t-elle d�j� �t� donn�e ?
            Pour le savoir, il faut chercher sur <http://groups.google.com/>.
    

    Comme il est dit et redit quotidiennement sur
    <news:fr.comp.lang.c>,
    le forum ne traite ni de graphisme, ni de Windows.

    
    � ce sujet, rappelons que la FAQ de
    <news:fr.comp.os.ms-windows.programmation>
    est disponible ici :
   <http://www.usenet-fr.news.eu.org/fr.usenet.reponses/comp/os/faq-winprog.html>.

    
    (Merci � Emmanuel Delahaye pour l'URL de copernic et �
    Antoine Leca de m'avoir pr�t� sa plume ;-)).


2.7 Dois-je poster sur fr.comp.lang.c ?


    Ainsi que le stipule la charte du groupe, les seules questions
    trait�es sur <news:fr.comp.lang.c> portent sur
    le C ISO. Pour ce qui a trait avec la programmation
    Be, DOS, Mac,
    Unix, Windows, il y a des forums
    d�di�s.

    
    En particulier,
    
     -  <news:fr.comp.os.ms-windows.programmation>
    pour la programmation sous Windows,
     -  <news:fr.comp.sys.mac.programmation>
    pour la programmation sous MacOS, MacOS X.
    

    Pour les autres syst�mes, il n'y a pas de forum sp�cifique dans la
    hierarchie <news:fr.*>.
    Pour ce qui concerne les Unix,
    <news:fr.comp.os.unix> et/ou
    <news:fr.comp.os.bsd>
    (ou encore <news:news:fr.comp.sys.next>)
    devraient faire l'affaire.

    
    Dans la hi�rarchie internationale, on trouve :
    
     -  <news:comp.os.msdos.programmer> pour DOS,
     -  <news:comp.unix.programmer> pour Unix,
     -  <news:comp.sys.be.programmer> pour Be,
     -  <news:comp.os.os2.programmer> pour OS/2,
    

    Enfin, en ce qui concerne la programmation graphique, il existe
    d�sormais un forum d�di� � ce sujet dans la hi�rarchie fr :
    <news:fr.comp.graphisme.programmation>


2.8 Comment poster sur fr.comp.lang.c ?

    En n'envoyant pas de pi�ce jointe, en postant en texte ASCII.
    Les accents (ISO-8859-1) sont accept�s.
    Outre les pi�ces jointes, le HTML, le quoted
    printable et tout ce qui n'est pas text/plain
    est � proscrire (pas mal de serveurs de news
    supprimeront ces contributions ind�sirables sans autre forme de
    proc�s).

    
    Plus la question est pr�cise, meilleure sera la r�ponse. On peut
    utiliser des balises dans le sujet, une liste est maintenue par
    Alexandre Lenoir, disponible l� :
    <http://www.planete.net/~alenoir/fcsm.html>. Ne
    donnez pas de noms propres dans les sujets !

    
    Il est de bon ton de poster les morceaux de code
    probl�matique. Veillez � poster du code qui compile (sauf s'il ne
    s'agit que de quelques lignes). Si le programme est trop gros,
    donnez une URL o� on peut le lire.

    
    Pour r�pondre, veillez � ne citer que le strict n�cessaire et �
    r�pondre apr�s le message ou passage cit�.

    
    Je vous rappelle qu'il est tr�s impoli, pour des raisons �videntes, de
    demander une r�ponse par mail ; et en g�n�ral vous n'aurez pas
    satisfaction. Si vraiment vous y tenez, tentez votre
    chance avec le service fourni ici : <http://francette.net/bdr.html>
    (je n'ai pas test�).


2.9 Comment comprendre le langage utilis� sur fr.comp.lang.c ?

    Ceci n'est pas une FAQ sur Usenet mais sur le langage C donc on va
    faire court :
    
     -  OEQLC signifie � O� Est la Question sur Langage
        C� autrement dit, votre question est hors-sujet (off
        topic),
     -  OT ou HS signifie � Hors-Sujet �
        autrement dit, c'est du bruit,
     -  RTFM signifie � Read The F*cking
        Manual � autrement dit, c'est dans tout bouquin digne
        de ce nom (voir 3.9 et 3.10).
        Pour les �mes sensibles, on traduit parfois par � Read
        The Fine Manual �, ou en fran�ais par � Regarde
        Ton Fichu Manuel �.
    

3. Le langage C


3.1 Qu'est-ce que le langage C ?


    Donner une d�finition du C est assez difficile, je vous propose
    celle-ci (avec laquelle je me suis le moins fait insult�
    ;-)) :

    
    C'est un langage structur�, g�n�ralement compil�, de haut niveau.
    

    Pour le � haut niveau �, cela d�pend un peu du point de vue en
    fait. � la fin des ann�es 70, les r�fractaires disaient de lui que
    c'�tait � encore un assembleur �. D'autres le trouvent donc de bas
    niveau ...
    On vous renvoie � l'introduction et aux avant-propos de K&R
    (cf. 3.9).

    
    Il dispose d'une biblioth�que standard (normes ANSI, ISO, IEEE,
    AFNOR,...) permettant un minimum d'interactions avec la machine.
    Il a �t� normalis� (cf. 3.7)
    ce qui permet de recompiler un source (n'utilisant que la
    biblioth�que standard) sur n'importe quelle machine disposant d'un
    compilateur respectueux de la norme.

    
    Cett derni�re ne porte que sur le langage proprement dit et sur le
    contenu de la biblioth�que standard. Cette derni�re ne contient
    que le strict minimum pour interagir avec la machine. Ainsi,
    peut-on manipuler du texte et des fichiers, d�terminer le temps de
    calcul ou g�rer la m�moire mais gu�re plus. Le reste est � la
    charge du programmeur, ou des biblioth�ques sp�cifiques du
    syst�me.

    
    Au vu de ce qui pr�c�de, on peut donc donner cette autre
    d�finition :

    
    Le C est un langage de programmation dont la structure est proche
    de la machine de Von Neumann.
    

    Donc ce qui importe, ce n'est pas tant qu'on puisse recompiler
    notre programme type sans modification sur toutes les
    plateformes, c'est la � s�mantique �. Le fait d'�crire en C
    standard n'implique nullement que le programme soit portable en ce
    sens qu'il a la m�me s�mantique sur tous les compilateurs. Il est
    important de noter que la d�finition de C d�finit une machine
    abstraite � param�tr�e � -- les param�tres variant d'un
    compilateur � un autre.

    
    Rappelons ici encore que le langage ne g�re ni la souris, ni
    l'�cran, ni votre store �lectrique (pardon, nucl�aire) dernier
    cri. Tout cela est du ressort de votre OS.

    
    Voir aussi 3.5.

    
    Merci � Emmanuel Delahaye, Gabriel Dos Reis, Vincent
    Lef�vre, Thomas Pornin et tous les autres pour
    la r�daction de cet article.


3.2 � quoi �a sert ?

    � cr�er ses propres logiciels, selon ses besoins, de mani�re
    portable ie. ind�pendemment de la machine et du
    syst�me d'exploitation.


3.3 D'o� vient le C ?


    Il a �t� cr�� par Brian Kernighan et Dennis
    Ritchie, sur les cendres du BCPL (Basic Combined
    Programming Language de Martin Richard, le BCPL
    �tant une simplification du CPL, Cambridge Programming
    Language) et du B (langage exp�rimental de Ken
    Thompson), dans les ann�es 70 lorsqu'ils �crivaient
    Unix.

    
    Voir aussi 3.7.


3.4 Que peut-on faire en C ?

    On peut tout faire ou presque. On peut cr�er son propre syst�me
    d'exploitation (les Unix-like sont encore �crits en C
    pour la majorit�), son interface graphique, sa base de donn�es,
    son driver (pilote) pour la derni�re machine � caf�
    USB, etc.

    
    Tout compilateur C est fourni avec une biblioth�que de fonctions,
    en principe standard.

    
    Voir aussi 3.5.


3.5 Portabilit�, mat�riel, syst�me ...


    Si la norme du C permet une bonne portabilit�, il faut noter que
    l'on peut faire des choses parfaitement d�pendantes de la
    cible. Ainsi, les Unix sont-ils �crits en C. Mais
    point n'est besoin d'utiliser des API [1]  exotiques pour perdre en
    portabilit�, pr�supposer qu'un char fait 8 bits est
    l'exemple le plus flagrant (cf. 16.2).
    Un autre exemple classique est de croire que toutes les machines
    supportent l'ASCII ...


3.6 Et le C++ dans tout �a ?


    Le C++ est un langage � objets bas� sur le C. Il y a des
    diff�rences suffisantes pour qu'il s'agisse d'un autre langage,
    ayant son forum propre :
    <news:fr.comp.lang.c++>.

    
    Il existe un autre langage � objets bas� sur le C. Il s'agit 
    d'Objective-C. Il est principalement utilis� dans Mac OS X 
    et dans GNUStep.
    Son forum est <news:fr.comp.lang.objective-c>.


3.7 ISO, ANSI, K&R, ..., qu'es aquo ?


    Les origines : 
    Le langage C est le fruit des efforts conjoints de Brian 
    Kernighan, Denis Ritchie et Ken Thompson.
    Le dernier dirigeait le projet de r��criture de
    Multics (un OS multi-utilisateurs, projet abandonn�)
    et il voulait cr�er un OS qui soit portable r�pondant � ses
    attentes, permettant un acc�s simple aux p�riph�riques. De fil en
    aiguille, c'est devenu un syst�me largement ind�pendant du
    hardware. � l'�poque les plateformes �taient toutes
    si diff�rentes qu'il �tait commun de donner ses sources et la
    moindre recompilation d'une machine � une autre demandait souvent
    un effort de portage.

    
    Pour faire ce syst�me, il en est venu � penser Unix
    de sorte que les deux seuls �l�ments qui d�pendent du
    hardware se r�sument au strict minimum � savoir le
    compilateur et le noyau. Il lui fallait un langage d'assez bas
    niveau et simple. Se basant sur le BCPL,  Thompson a donc
    mis au point le langage B (pour Unics, 1969-1972)
    puis Ritchie l'a am�lior� pour en faire le langage C
    (Unix, 1973).

    
    Voir aussi 3.3 et surtout le papier de
    Dennis Ritchie :
    <http://cm.bell-labs.com/cm/cs/who/dmr/chist.html> pour plus
    de d�tails.

    
    La popularit� du C tient alors autant � sa simplicit� qu'� la
    p�n�tration d'Unix (et donc l'apparition de
    compilateurs C sur les machines ie. la nouvelle
    portabilit� des programmes). Des compilateurs sont alors assez
    vite apparus sur d'autres plateformes qu'Unix,
    contribuant ainsi � la diffusion (un peu anarchique) du langage.

    
    En 1978, Brian W. Kernighan et Denis M. Ritchie
    ont publi� The C Programming Language
    (ISBN:0131101633) (On trouve tous les num�ros ISBN des diff�rentes
    �ditions sur <http://cm.bell-labs.com/cm/cs/cbook/index.html>).

    D�s lors, les compilateurs ont commenc� � suivre les
    recommandations et indications des auteurs. Cet ouvrage a fait
    office de norme pendant longtemps, le langage qui y est d�crit
    s'appelle le C K&R, en r�f�rence aux 2 auteurs.

    La normalisation : 
    Devant la popularit� du C, l'American National Standard
    Institut (<http://www.ansi.org>) charge en 1983 le
    comit� X3J11 de standardiser le langage C. On parle � ce moment-l�
    de C pr�-ANSI. Apr�s un processus long et complexe, le travail du
    comit� a finalement �t� approuv� :
    le 14 d�cembre 1989, le standard ANSI X3.159-1989 (ou C89) est
    n�. Il est publi� au printemps 1990.

    
    Entre-temps, en 1988, durant la p�riode de travail du comit�, la
    deuxi�me �dition du K&R a �t� publi�e (ISBN: 0131103709). Elle
    a �t� compl�tement r��crite et on y a ajout� des exemples et des
    exercices afin de clarifier l'impl�mentation de certaines
    constructions complexes du langage.

    
    Dans sa plus grande partie, le standard C ANSI de 1989 officialise
    les pratiques existantes, en ajoutant quelques nouveaut�s
    provenant du C++ comme les prototypes de fonctions et le support
    de jeux de caract�res internationaux (notamment les tr�s
    controvers�es s�quences trigraphes). Le standard C ANSI d�crit
    aussi les routines pour le support des biblioth�ques d'ex�cution
    du C.

    
    L'International organization for standardization
    (<http://www.iso.ch>) a adopt� en 1990 ce standard en tant
    que standard international sous le nom de ISO/IEC 9899:1990 (ou
    C90). Ce standard ISO remplace le pr�c�dent standard ANSI (C89)
    m�me � l'int�rieur des USA, car rappelons-le, ANSI est une
    organisation nationale, et non internationale comme l'ISO. Aux
    USA, on parle alors de ANSI/ISO 9899-1990 [1992], en France de
    ISO/CEI 9899:1990.

    D�tails sur la normalisation : 
    Durant les ann�es 1990, lorsqu'on parle de C89 (C ANSI) ou de C90
    (C ISO), ce sont deux appellations diff�rentes pour en fait une
    seule et m�me norme. Il existe aussi une norme europ�enne et une
    fran�aise (AFNOR) dont on entend beaucoup moins parler, qui sont
    aussi semblables � la norme ISO. Noter que la norme fran�aise
    (AFNOR) est parfaitement identique � l'ISO, l'AFNOR se contentant
    de publier l'ISO (en anglais) en guise de norme fran�aise (le site
    du groupe de normalisation du C � l'AFNOR :
    <http://forum.afnor.fr/afnor/WORK/AFNOR/GPN2/Z65B/>, ne pas
    se fier aux apparences, il s'agit du groupe sur le C, la page est
    un peu vieille et le groupe --- r�duit pass� un temps � Antoine
     Leca --- a �t� recueilli par le groupe charg� du C++).

    
    Les standards ISO, en tant que tel, sont sujets � des r�visions,
    par la diffusion de � Technical Corrigenda �
     [2]  et de � Normative
    Addenda � [3] . C'est ainsi qu'en
    1995, le Normative Addendum 1 (NA1)
    (<http://www.lysator.liu.se/c/na1.html>) parfois appel�
    Amendment 1 (AM1) fut approuv� en 1995. Il ajouta
    environ 50 pages de sp�cifications diverses concernant notamment
    de nouvelles fonctions dans la biblioth�que standard pour
    l'internationalisation, et les s�quences digraphes pour le jeu de
    caract�res ISO 646, autorisant ainsi les terminaux ne poss�dant
    pas certains caract�res � utiliser une �criture alternative
    (<% %> pour { et } ou
    encore <: :> pour [ et
    ]).

    
    Peu de temps apr�s, toujours en 1995, le Technical
    Corrigendum 1 (TCOR1) (<http://anubis.dkuug.dk/JTC1/SC22/WG14/www/docs/tc1.htm>)
    fut approuv� et modifia le standard ISO en environ 40 points, la
    plupart d'entre eux �tant des corrections mineures ou des
    clarifications. En 1996, on publia aussi le TCOR2
    (<http://anubis.dkuug.dk/JTC1/SC22/WG14/www/docs/tc2.htm>)
    qui apporta des changements encore plus mineurs que le
    TCOR1. TCOR2 reformulait certains points abscons.

    
    � partir de 1997, on d�signe par C95 l'ensemble des documents
    TCOR1, TCOR2 et AMD1 et de la norme C90. Le terme C95 est utilis�
    dans le � rationale � de C99.

    
    En fait ce n'est pas directement l'ISO qui travaille sur les
    standards, elle ne fait que les approuver conjointement avec l'IEC
    (<http://www.iec.ch>). C'est pour cette raison que les
    standards ISO du C commencent par ISO/IEC... De plus, l'ISO charge
    des comit�s techniques de travailler dans tels et tels
    domaines. En l'occurrence, le JTC1 (<http://www.jtc1.org>)
    est le comit� sp�cialis� dans le domaine informatique. Le JTC1 �
    son tour r�partit le travail dans plusieurs sous-comit�s : celui
    qui nous int�resse est le SC22, dont le but est la standardisation
    des technologies de l'information. Or le SC22 lui-m�me est
    subdivis� en Working Groups, le WG14 �tant celui qui
    est en relation avec le C.

    
    Finalement, c'est le ISO/IEC JTC1/SC22/WG14 qui r�dige la norme
    ISO du C, le SC2  approuve alors le projet final (FDIS), puis le
    transmet au JTC1 qui approuve la nouvelle norme ISO.

    
    En r�alit�, le groupe de travail WG14 est compos� d'organismes
    nationaux --- tels ANSI (le plus actif), AFNOR, BSI, CSA, DS,
    ... --- repr�sentants les pays prenant part � la normalisation (je
    vous passe les d�tails de pays votants, observateurs, et
    autres). Chacun de ces organismes travaille sur le langage. L'ANSI
    dispose elle aussi d'un comit� sp�cialis� dans le domaine
    informatique : le X3 (<http://www.x3.org>), qui depuis 1996
    s'appelle NCITS (prononcez insights en anglais)
    (<http://www.ncits.org>) pour National comittee for
    Information Technology Standards. Lui aussi dispose de
    comit�s techniques qui travaillent chacun dans un domaine
    particulier : le J11 (<http://www.ncits.org/tc_home/j11.htm>)
    a en charge le langage C. C'est donc le X3J11 qui d�veloppe la
    norme C ANSI aux USA, et qui travaille avec le WG14.

    
    Il se trouve qu'en 1993, lors des r�unions bi-annuelles entre le
    WG14 (ISO) et le X3J11 (ANSI), tout le monde s'est accord� pour
    dire,

    
     -  que la r�vision (pr�vue dans les textes ISO) de 1995 ne
    se ferait pas, et
     -  que la r�vision de 2000 environ aboutirait � une
    nouvelle version de la norme (le futur C9X).
    

    L'id�e a alors �merg�e de cr�er un nouveau standard du C qui
    regrouperait le C90, le NA1, le TCOR1 et le TCOR2, apporterait
    d'autres modifications afin de maintenir le C en phase avec les
    techniques de programmation d'aujourd'hui, et qui minimiserait
    les incompatibilit�s avec le C++, sans pour autant vouloir
    transformer le C en C++. Ce projet de nouveau standard du C a pris
    le nom de code C9X avec l'intention qu'il serait publi� dans la
    fin des ann�es 1990
    (<http://anubis.dkuug.dk/JTC1/SC22/WG14/www/charter.html>).

    
    Vers la fin de la normalisation de C99, SC22/WG21 -- le groupe de
    travail qui s'occupe de C++ -- a adress� une requ�te formelle (par
    l'interm�diaire du bureau SC22) � SC22/WG14 pour documenter les
    �ventuelles incompatibilit�s introduites par C99 par rapport � C++
    (SC22/WG21 l'avait fait par rapport � C90).  SC22/WG14
    a r�pondu qu'il n'avait ni le temps n�cessaire ni la comp�tence
    pour faire cela.

    
    Cependant, un tel travail (inspir� partiellement de ce que C++ a
    d�j� fait) a �t� entrepris � titre personel par
    David Tribble dont la contribution se trouve ici :
    <http://www.david.tribble.com/text/cdiffs.htm>.

    
    Tout au long du projet C9X, des � drafts �
    (brouillons) du projet sont distribu�s afin que tout le monde
    puisse donner son avis et, le cas �ch�ant, revoir certaines
    parties. Le dernier draft disponible est le document
    n869 (<http://www.dkuug.dk/jtc1/sc22/wg14/www/docs/n869/>) datant de
    janvier 1999. Ce document est celui le plus proche de la norme et
    que l'on peut obtenir gratuitement: il d�finit C9X, le projet de
    la norme.

    Derni�res nouvelles : 
    Tr�s r�cemment, le 1er d�cembre 1999, la norme officielle a �t�
    adopt�e par l'ISO sous le nom de ISO/IEC 9899:1999, ou plus
    simplement C99. Elle a aussi �t� publi�e par l'ANSI, qui travaille
    conjointement avec l'ISO, sous le nom de ANSI/ISO/IEC 9899-1999,
    mais que l'on appelle C2k.

    
    � l'heure actuelle, C99, qui est �quivalent � C2k,
    n'est pas encore totalement support�e par les compilateurs. Il faut
    un certain temps pour impl�menter toutes les nouvelles
    fonctionnalit�s de C99. Tout ce dont on peut �tre s�r, c'est que
    n'importe quel bon compilateur supporte au moins la norme C90.

    
    Voici d'ailleurs au passage quelques unes des nouveaut�s de C99:
    
     -  tableau � longueur variable,
     -  support des nombres complexes gr�ce � complex.h,
     -  types long long int et unsigned long long
    int d'au moins 64 bits,
     -  famille de fonctions vscanf(),
     -  les fameux commentaires �-la-C++ //,
     -  les familles de fonctions snprintf(),
     -  le type bool�en,
     -  etc.
    

    Th�oriquement, ISO r�vise les normes tous les cinq (5) ans. Les
    groupes de travail n'ont pas besoin d'attendre les cinq ans avant
    de commencer � travailler sur les �ventuelles
    extensions. Cependant le travail de normalisation prend un certain
    temps --- pensez par exemple que ANSI a d�but� le travail de
    normalisation de C89 en 1983 et n'a fini qu'en 1989. Il est
    possible qu'un C04 soit publi� en 2004, ce serait C99 augment� de
    quelques amendements. Le travail de normalisation est long et
    p�nible par moment.

    
    Un grand merci � � After � pour le brouillon de cet article et �
    Gabriel Dos Reis, �ric L�v�nez et Antoine
    Leca pour leurs relectures avis�es.


3.8 De quoi ai-je besoin pour programmer en C ?


    D'un �diteur de texte basique,
    d'un compilateur (voir 4.2),
    d'un bon bouquin (voir 3.9),
    d'un d�bogueur et de beaucoup de patience.
    En principe, compilateur, biblioth�que(s), (d�bogueurs)
    et doc' sont fournis ensembles.

    
    Pour apprendre le C, il vous faudra un bon compilateur,
    de la doc' papier, un bon dictionnaire d'anglais et un stock
    d'aspirine ;-)


3.9 Quel(s) bouquin(s) ?


    Le livre que tout programmeur C se doit de conna�tre et d'avoir
    sur son bureau est Kernighan B.W. & Ritchie
    D.M. (1997), Le langage C Norme ANSI, 2�me �dition,
    Dunod, Paris.

    
    On trouvera les exercices corrig�s du pr�c�dent dans :
    Tondo C.L. & Gimpel S.E. (2000),
    Exercices corrig�s sur le langage C, Dunod, Paris.

    
    En compl�ment, Braquelaire J.-P. (2000),
    M�thodologie de la programmation en C, Biblioth�que
    standard, API POSIX, 3�me �dition, Dunod, Paris.
    sera une excellente ressource.

    
    Enfin, citons l'excellent
    Kernighan B.W. & Pike R., (1999)
    The Pratice of Programming, Addison-Wesley, Reading.
    (<http://cm.bell-labs.com/cm/cs/tpop/index.html>).

    
    Il arrive souvent au programmeur de devoir r�soudre des probl�mes
    d'Algorithmique. Il peut se reporter � la bible en la mati�re :
    
    Knuth D.E. (1997), The Art of Computer
    Programming, third edition, Addison-Wesley, Reading.
    (commun�ment abr�g� en TAoCP). Il y a aussi :
    Sedgewick R. (1991), Algorithmes en
    langage C, Inter�ditions, Paris.
    ou cet autre :
    Loudon K. (2000), Ma�triser les Algorithmes en
    C,  O'Reilly, Paris.

    
    Une bonne introduction � l'Analyse Num�rique en C est :
    Press W.H., Flannery B.P., Teukolsky
    S.A.,  Vetterling W.T. (1992), Numerical Recipes in
    C, The Art of Scientific Computing, second edition,
    Cambridge University Press. (commun�ment abr�g� en NR, PFTW ou
    Numerical Recipes selon). C'est disponible en ligne
    (voir 4.5).

    
    Il existe aussi :
    Engeln-M�llges G. & Uhlig F.
    (1996), Numerical Algorithms with C, Springer,
    Berlin. (fourni avec les sources et djgpp, pour
    plateformes Wintel, sur CD).


3.10 O� trouver...


    de la doc' ? : 
    
    L� par exemple : <http://cm.bell-labs.com/cm/cs/who/dmr/>,
    c'est la page de Denis Ritchie.
    Il y a aussi celle de Brian Kernighan :
    <http://cm.bell-labs.com/cm/cs/who/bwk/>.

    
    On trouve des cours de C sur le web en fran�ais sur
    les sites universitaires. Ainsi, on peut citer :
    <ftp://ftp.ltam.lu/TUTORIEL/COURS-C/COURS-C.ZIP>,
    <http://www.enseignement.polytechnique.fr/profs/informatique/Eric.Goubault/poly/cours.ps.gz>,
    <http://www.loria.fr/~mermet/CoursC/coursC.ps>,
    <http://www.enseignement.polytechnique.fr/profs/informatique/Jean-Jacques.Levy/poly/polyx-cori-levy.ps.gz>,
    <http://www-inf.int-evry.fr/COURS/COURSC/>

    
    On lira aussi tr�s attentivement :
    <ftp://ftp.laas.fr/pub/ii/matthieu/c-superflu/c-superflu.pdf>
    qui contient tout ce qu'il faut savoir pour commencer � programmer
    proprement en C. Il contient aussi une grosse bibliographie.

    
    Un CD complet en ligne sur le C : <http://www.infop6.jussieu.fr/cederoms/Videoc2000/>

    
    Les sources du bouquin de Braquelaire (derni�re �dition :
    la 3�me, 2�me tirage...) :
    <http://dept-info.labri.u-bordeaux.fr/~achille/MPC-3/2T/MPC-3-2t.tar.gz>

    
    Les sources du bouquin de Loudon :
    <http://www.editions-oreilly.fr/archives/algoc.zip>.

    
    La biblioth�que standard : <http://www.dinkumware.com/htm_cl/index.html#Table-of-Contents>

    
    Le IOCCC est un concours de hackers qui r�compense
    chaque ann�e le pire programme C :
    <http://www.ioccc.org/index.html>

    
    Un freezzine en anglais :
    <http://www.gmonline.demon.co.uk/cscene/>

    
    Sur les sites universitaires on trouve toujours des cours en
    ligne, du code, etc ...

    
    Signalons aussi (m�me si c'est hors-sujet) le fichier
    <ftp://ftp.laas.fr/pub/ii/matthieu/tpp/tpp.ps.gz>
    qui explique comment utiliser make.
    Je recommande aussi vivement l'utilisation d'outils tels que
    CVS : 
    <http://www.cvshome.org/docs/>
    <http://www.idealx.org/fr/doc/cvs/cvs.html>
    <http://matrix.samizdat.net/serveurs/cvs/tut_cvs.html>

    la norme ? : 
    L� : <http://wwwold.dkuug.dk/jtc1/sc22/open/n2794/n2794.txt>
    On peut aussi l'acheter soit aupr�s de l'AFNOR (tr�s cher) soit en
    ligne aux USA (environ 20 $ US), �a se passe ici :
    <http://www.cssinfo.com/ncitsgate.html> ou encore l�
    <http://webstore.ansi.org/ansidocstore/product.asp?sku=ANSI%2FISO%2FIEC+9899%2D1999>

    
    (Merci � Antoine Leca).

    la FAQ de comp.lang.c ? : 
    L� : <http://www.eskimo.com/~scs/C-faq/top.html>

    les pages des manuels Unix en fran�ais ? : 
    On peut trouver les pages de manules en Fran�ais pour la plupart des Unix,
    sous la forme de packages du syst�me. Pour Linux, vous les trouverez ici :
    <http://perso.club-internet.fr/ccb/>
    ou encore l� :
    <http://www.delafond.org/traducmanfr/>

    Le C et les CGI ? : 
    Tout ce qui concerne le C � propos des CGI est l� :
    <http://www.chez.com/nospam/cgi.html>
    Il y a aussi une FAQ ici :
    <http://www.htmlhelp.com/faq/cgifaq.html>

    
    (informations bienvenues � <mailto:pascal.cabaud@wanadoo.fr>)

    La Programmation Objet en C ? : 
    Oui, on peut programmer Orient� Objet en C. Voici un document qui
    pr�sente ces techniques :
    <http://ldeniau.home.cern.ch/ldeniau/html/oopc/oopc.html>


4. Outils, environnement de d�veloppement et autres gadgets


    Note : 
    Cette section a du mal � vivre sans l'aide des
    lecteurs. Par soucis d'�quit� et pour limiter un peu le volume
    d'informations, on s'en tient aux logiciels, programmes, codes,
    etc. libres, gratuits ou du domaine public.


4.1 Environnements de d�veloppement int�gr�s


    Apple : 
    Sur Mac OS, MPW combin� avec le terrible
    MacsBug
    vous donneront enti�re satisfaction.
    Pour Mac OS X, Project Builder est l'IDE de choix 
    utilisant GNU CC.
    <http://developer.apple.com/tools/projectbuilder/>

    Unix : 
    Sur Unix-like, vi[m] et
    [x]emacs, combin�s avec make, GNU
    CC et GNU DB  forment un environnement de
    d�veloppement int�gr�.

    Wintel : 
    Borland fournit l'environnement
    Turbo complet avec �diteur, d�bogueur,
    etc. Mais c'est
    passablement vieux : la version 2.0 distribu�e sur les sites de
    Borland date de 1988, il s'agit donc d'un compilateur
    pr�-ANSI (cf. 3.7). Si
    l'on tient � utiliser du mat�riel Borland,
    Turbo C++ 1.01 sera plus confortable et plus conforme
    � la norme (en ayant r�cup�r� l'archive BC20P2.ZIP
    qui tra�ne un peu partout).

    
    Mieux vaut se rabattre sur le couple
    djgpp-RHIDE (tentez votre chance ici :
    <http://www.rhide.com>), qui d'ailleurs existe sous Linux.
    Il y a aussi Source Navigator disponible ici :
    <http://sources.redhat.com/sourcenav/>.

    
    On pourra aussi utiliser NTemacs
    (cf.
    <http://www.linux-france.org/article/appli/emacs/Gnus+Emacs/Windows/emacs.html>).

    
    Signalons enfin l'existence d'un IDE assez complet, gratuit et
    open-source : Dev-C++ ; il est bas� sur
    MinGW (mais peut aussi utiliser Cygwin)
    pour la compilation et le debugger. On le retrouvera � l'adresse :
    <http://www.bloodshed.net/devcpp.html>.

    
    (voir aussi 4.2).


4.2 Compilateurs


    Le choix d�pend du syst�me d'exploitation et du processeur cible.

    Apple : 
    Pour les machines sous Mac OS, le compilateur
    d'Apple est gratuit, il est l� :
    <ftp://ftp.apple.com/devworld/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./>.
    Pour les machines sous Mac OS X, le compilateur est GNU 
    CC

    Unix : 
    Pour Unix-like, le GNU C Compiler (
    alias GNU
    CC ou gcc) est fourni avec toute
    distribution *BSD ou  GNU/Linux.

    Wintel : 
    Pour machines Wintel, il existe un portage du c�l�bre
    GNU C Compiler :
    <http://www.delorie.com/djgpp/>.

    
    Un autre portage existe pour Windows :
    <http://sources.redhat.com/cygwin/>.

    
    MinGW (Minimalist-GnuWin32), encore un portage
    Win32 de
    gcc.
    Frustre mais puissant, optimise bien, adapt� si
    l'on conna�t bien l'environnement de programmation UNIX :
    <http://mingw.sourceforge.net/>

    
    Borland a aussi mis en
    t�l�chargement gratuit certains de ses compilateurs l� :
    <http://www.borland.com/bcppbuilder/freecompiler/>
    ou l� :
    <http://www.borland.fr/download/compilateurs/>.

    
    Il y a aussi lcc-win32, qui est un d�riv� du
    lcc originel de Chris Fraser et David
    Hanson.
    lcc-win32 vient avec un �diteur int�gr�, et
    contient ce qu'il faut comme documentation et biblioth�ques pour
    ouvrir des fen�tres sous Windows. Il est plus l�ger
    en termes de consommation m�moire et de CPU que GNU
    CC; il produit un code d�cent (mais n�anmoins pas optimal) :
    <http://www.cs.virginia.edu/~lcc-win32/>


4.3 D�bogueurs


    Apple : 
    Allez l� : <http://devworld.apple.com/tools/debuggers/>.
    Pour Mac OS X, le d�boggeur fourni avec le syst�me 
    est GNU DB.

    Unix : 
    GNU DB (alias gdb) est
    fourni avec les distributions *BSD et
    GNU/Linux.

    Wintel : 
    � part celui de l'environnement Turbo
    (cf. 4.1), regardez du c�t� de
    <http://sources.redhat.com/insight/>.


4.4 Graphisme


    Apple : 
    Pour Mac OS classique, il vous faut r�cup�rer
    QuickDraw, fournie par Apple :
    <http://devworld.apple.com/macos/quickdraw.html>
    Pour Mac OS X, l'environnement graphique s'appelle 
    Quartz et il utilise OpenGL : 
    <http://developer.apple.com/techpubs/macosx/CoreTechnologies/graphics/Quartz2D/quartz2d.html>

    Unix : 
    Pour environnement Unix, il existe un environnement
    graphique libre, reproduisant le syst�me X11 (dit
    aussi X-Window). Il est fourni avec toute
    distribution *BSD ou GNU/Linux. Allez le
    voir sur <http://www.xfree86.org/>.

    Wintel : 
    Pour du graphisme sous DOS avec djgpp,
    il y a Allegro qui se trouve l� :
    <http://www.talula.demon.co.uk/allegro>


4.5 Biblioth�ques


    Calcul scientifique : 
    
    Pour du calcul scientifique, ici : <http://www.netlib.org/>
    (mis � jour tr�s r�guli�rement).

    
    Ajay Shah maintenait un index de codes libres et/ou du
    domaine public impl�mentant diverses routines de calcul. On le
    trouve par exemple l� :
    <ftp://ftp.math.psu.edu/pub/FAQ/numcomp-free-c>
    mais �a date.

    Numerical Recipes in C : 
    
    L� :
    <http://www.ulib.org/webRoot/Books/Numerical_Recipes/bookcpdf.html>.
    Les sources ont �t� incluses dans la distribution
    Linux pour les plateformes � base de
    PowerPC :
    � LinuxPPC 1999 �. Les sources ont disparu des
    miroirs et � LinuxPPC 2000 � ne l'int�gre plus mais
    les miroirs ont encore (en septembre 2000) le package
    de binaires (pour PPC uniquement) et certains sont pr�ts � envoyer
    les sources.

    G�n�rateurs de nombres pseudo-al�atoires : 
    
    (Les anglo-saxons disent Pseudo-Random Numbers
    Generators et abr�gent en PRNG)

    
    Par exemple l� :
    <http://www.io.com/~ritter/NETLINKS.HTM#RandomnessLinks>,
    <http://burtleburtle.net/bob/rand/isaacafa.html> ou
    <http://random.mat.sbg.ac.at/>.
    Voir aussi <http://www.netlib.org/> et cherchez enfin
    r250, RANLIB et FSULTRA.

    Calcul multi-pr�cision : 
    
    On trouve le code des fonctions quad() de
    BSD quelque part l� :
    <ftp://ftp.uu.net/systems/unix/bsd-sources/> dans
    un r�pertoire src/lib/libc/quad/.

    
    Il y a aussi la biblioth�que GNU MP (GNU Multiple
    Precision ou GMP) que l'on trouve ici :
    <http://www.swox.com/gmp/>.

    Enfin, il y a le package
    MIRACL (voir <http://indigo.ie/~mscott/>).

    Les sources de la biblioth�que standard : 
    Le livre
    Plauger P.J. (1994), La biblioth�que C
    standard chez Masson, r�impl�mente la plupart des
    fonctions. Attention, les sources ne sont pas libres. On peut
    aussi consulter les sources des Unix-based libres
    *BSD ou encore celles du projet GNU.

    
    (informations bienvenues �
    <mailto:pascal.cabaud@wanadoo.fr>).


4.6 Outils divers


    Notez que la majorit� des outils cit�s ici ont initialement �t�
    �crits pour des plateformes Unix. Il existe assez
    souvent des portages sur d'autres OS, que l'on cite
    parfois. Il arrive fr�quemment que je ne donne pas d'URL ; une
    recherche par exemple avec le merveilleux <http://www.google.com/>
    vous donnera des liens � ne plus savoir qu'en faire ...

    
    Certains sont l� :
    <ftp://gatekeeper.dec.com/pub/usenet/comp.sources.unix/>
    ou sur le mirroir :
    <ftp://ftp.uu.net/usenet/comp.sources.unix/>.

    
    Pour les outils
    GNU, voir sur le site du projet : <http://www.gnu.org/>.

    Indentation et mise en forme : 
     Cherchez cb, enscript,
    indent, lgrind, vgrind.

    V�rification de sources : 
    Cherchez lint et regardez
    <http://www.elirion.com/lintpage.html>. 
    On trouve splint(anciennement LCLint) l� :
    <ftp://www.splint.org>.

    G�n�ration de r�f�rences crois�es : 
    Cherchez cflow, cxref,
    calls, cscope, xscope, ou
    ixfw. C'est pratique pour voir les graphes de
    d�pendances des fonctions.

    D�g�n�ration de code C : 
    Cherchez obfus, shroud, ou
    opqcp. Ce gadget sert � rendre un source parfaitement
    illisible.

    Interpr�tation des d�clarations : 
    Cherchez cdecl dans le volume 14, �
    <http://www.uu.net/usenet/comp.sources.unix/>. �a sert
    essentiellement � comprendre des d�clarations ou � en g�n�rer.

    G�n�ration de d�pendances : 
    Cherchez makedepend ou tentez cc -M ou
    cpp -M.

    Gestion de projets : 
    Cherchez GNU make. Voir aussi 3.10.

    Contr�le de versions : 
    Cherchez CVS, RCS et SCCS.
    Voir aussi 3.10.

    Traducteurs Fortran/C et Pascal/C : 
    Cherchez ftoc et f2c pour le Fortran.
    On trouve f2c sur
    <http://www.netlib.org/>. Il existe une version pour
    MacOS :
    <http://www.alumni.caltech.edu/~igormt/Mac_F2C.html>.
    Pour le Pascal, �a se trouve l� :
    <ftp://csvax.cs.caltech.edu/pub/p2c-1.20.tar.Z>.
    Cherchez aussi ptoc.

    Calcul d'unit�s : 
    Cherchez ccount, Metre, lcount,
    csize,
    <http://www.qucis.queensu.ca/>.

    Calcul du nombre de lignes d'un fichier source : 
    Utilisez les commandes wc ou grep -c ";".

    G�n�ration de prototypes : 
    Cherchez cproto (<http://www.vex.net/~cthuang/cproto/>)
    et cextract.

    Gestion correcte des appels � malloc : 
    Cherchez dbmalloc, MallocDebug,
    JMalloc.c  et JMalloc.h, zieutez la page
    <http://www.cs.colorado.edu/homes/zorn/public_html/MallocDebug.html>
    et regardez :
    <ftp://ftp.crpht.lu/pub/sources/memdebug>. Ceci
    fait, il vous reste � compiler et installer dmalloc
    provenant de l� :
    <http://dmalloc.com/>.

    G�n�ration de documentation � partir de code comment� : 
    Il existe divers outils dont doc++ et
    doxygen. Le dernier g�re le format LaTeX2e, HTML et
    nroff et se trouve ici :
    <http://www.stack.nl/~dimitri/doxygen/>.

    
    Voir aussi 4.7.

    Pr�processeur s�lectif : 
    Cherchez unifdef, rmifdef et
    scpp. Ils suppriment les directives
    #ifdef inutiles, rendant ainsi un code plus lisible.

    Gestion des expressions r�guli�res : 
    Le projet GNU propose rx.
    Il y a aussi regexp sur
    <ftp://ftp.cs.toronto.edu/pub/regexp.shar.Z>.

    Profileur : 
    Le projet GNU d�veloppe gprof (
    cf. 16.1).
    Il existe aussi FunctionCheck : 
    <http://www710.univ-lyon1.fr/~yperret/fnccheck/profiler.html>


4.7 O� trouver du code ?


    L� : <http://www.gnu.org> par exemple.
    Les logiciels GNU, les Unix-like
    *BSD et
    GNU/Linux sont distribu�s (ils sont
    libres) avec les sources. La pluparts d'entre eux
    �tant �crits en C, cela en fait une tr�s grande collection de
    code.

    
    On trouvera du code (du domaine public) l� :
    <ftp://ftp.cdrom.com>.
    Il y a aussi
    <ftp://ftp.brokersys.com/pub/snippets> et sur le
    web � <http://www.brokersys.com/snippets/> ou
    <http://www.ping.de/sites/systemcodes/> ou encore par
    ftp par exemple �
    <ftp://ftp.funet.fi/pub/languages/C/Publib/>.

    
    Les serveurs <ftp://ftp.uu.net/>,
    <ftp://archive.umich.edu/>,
    <ftp://oak.oakland.edu/>,
    <ftp://sumex-aim.stanford.edu/>, et
    <ftp://wuarchive.wustl.edu/>,
    h�bergent une grande quantit� de logiciels, code et documentation
    libres et/ou gratuits. le serveur princicpal du projet
    GNU est <ftp://prep.ai.mit.edu/>.

    
    Voir aussi 4.6 et 4.5.

    
    (informations bienvenues �
    <mailto:pascal.cabaud@wanadoo.fr>)
Technical Details
Message-ID: <fr.comp.lang.faq-c-1-1128246580.268605@calva.glou.org>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!feed.ac-versailles.fr!nocworld.net!news.valadon.net!ircam.fr!fr-chartes!maintfaq

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,aca0a623bfdc735a,start
X-Google-Thread: 102e92,aca0a623bfdc735a,start
X-Google-Attributes: gidf9822,gid102e92,public
X-Google-Language: FRENCH,ASCII
From: Guillaume Rumeau <guillaume.rumeau@wanadoo.fr>
Newsgroups: fr.comp.lang.c,fr.usenet.reponses
Subject: [FAQ] fr.comp.lang.c - partie 1/4 
Supersedes: <fr.comp.lang.faq-c-1-1126950679.138257@calva.glou.org>
Followup-To: fr.comp.lang.c
Date: Sun, 2 Oct 2005 09:49:38 GMT
Organization: FCLC
Approved: fr-reponses@frmug.org
User-Agent: MaintFaq version 2.1b
Message-ID: <fr.comp.lang.faq-c-1-1128246580.268605@calva.glou.org>
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit
Summary: Faq de fr.comp.lang.c
X-No-Productlink: yes
Lines: 1480
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!proxad.net!feed.ac-versailles.fr!nocworld.net!news.valadon.net!ircam.fr!fr-chartes!maintfaq