SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
Cours de C

             Commandes Linux de base
               & introduction au C

                      Sébastien Paumier




paumier@univ-mlv.fr      Illustrations provenant du site http://tux.crystalxp.net/   1
Objectif du cours de C

●   apprendre le langage C
●   analyser un problème pour écrire le
    programme qui le résout, de façon
    élégante et modulaire
●   coder proprement
●   savoir respecter un cahier des charges
    lors de projets
●   être au niveau pour le cours de système
    en IR2
paumier@univ-mlv.fr                           2
Planning

●   Slot 0: stage de rentrée de 3 jours
●   Slot 1:
    –   5 cours, 5 TD sur machine
    –   1 examen
●   Slot 2:
    –   5 cours, 5 TD sur machine
    –   1 examen



paumier@univ-mlv.fr                       3
Objectif du stage de rentrée

●   mise à niveau sur:
    –   les commandes système de base
    –   l'écriture et la compilation propre d'un
        programme C simple
●   3 journées intensives:
    –   2h de cours, 2h de TD, 4h de TP (1 par poste)
●   dernière journée:
    –   TP noté pour évaluation


paumier@univ-mlv.fr                                4
Linux

●   système d'exploitation libre
    –   open source
    –   gratuit
●   multi-utilisateurs
●   support natif du réseau
●   interface graphique indépendante du
    système



paumier@univ-mlv.fr                       5
Différences principales avec
                   Windows
●   Pas de C:... D:...
    –   racine unique /
    –   périphériques vus comme des sous-
        répertoires. Ex: /mnt/floppy pour A:
●   Casse des noms de fichiers
    –   Hello.txt ≠ hello.txt ≠ HELLO.TXT
●   Droits d'accès sur les fichiers



paumier@univ-mlv.fr                             6
Compte utilisateur

●   identité = login+mot de passe
●   espace disque privé
    /home/ens/paumier ou ~paumier
    –   on y est par défaut quand on se loge
●   appartenance à un ou des groupe(s)




paumier@univ-mlv.fr                            7
Lister un répertoire

●   commande ls
    cogmu/   plp/     projet.html

●   option -l pour les détails
    total 16
    drwxr-xr-x   3 paumier igm 4096 sep 18   2006 cogmu/
    drwxr-xr-x   2 paumier igm 4096 jui 26   2006 plp/
    -rw-r--r--   1 paumier igm 4764 nov 20   2006 projet.html

●   jokers: ls *.html file?.bin



paumier@univ-mlv.fr                                             8
Fichiers spéciaux et cachés

. = répertoire courant
.. = répertoire parent
.xxxxx = fichier caché
   –    utiles pour des fichiers de configuration


Fichiers visibles avec ls -a
   ./    ../   .bashrc   cogmu/   plp/   projet.html




paumier@univ-mlv.fr                                    9
Répertoires

●   pwd affiche le répertoire courant
●   on change de répertoire avec cd
    –   relatif:
         ●   cd toto
         ●   cd ..
         ●   cd ../W3/prog
    –   absolu:
         ●   cd /tmp/test
    –   retour à la racine du compte:
         ●   cd ou cd ~ ou cd ~paumier
paumier@univ-mlv.fr                      10
Répertoires

●   créer un répertoire
    mkdir toto
●   détruire un répertoire
    rmdir toto si toto est vide
    rm -ri toto sinon
    rm -rf toto pour éviter de confirmer pour
     chaque fichier
●   rm marche aussi pour les fichiers

paumier@univ-mlv.fr                             11
Copie et renommage

●   copie de fichier:
    cp toto ../titi
●   copie de répertoire:
    cp -r toto/ tutu
●   renommage ou déplacement:
    mv toto tutu
    mv toto ../../test/toto.txt



paumier@univ-mlv.fr                   12
Droits d'accès
   -rwxrw-r--          1 paumier igm    0 jun 22 11:02 toto


              -        rwx     rw-     r--


                                             Droits de tous les
- = fichier                                  autres utilisateurs
d = répertoire
    (directory)
                                     Droits du groupe
                  Droits du          igm
                  possesseur
                  du fichier
                  (paumier)

 paumier@univ-mlv.fr                                         13
Droits d'accès

              fichier F         répertoire R
 r on peut lire F        on peut voir le contenu
                         de R
                         on peut créer des fichiers
 w on peut écrire dans F ou des répertoires
   ou le détruire
                         dans R
                         on peut rentrer dans R
 x on peut exécuter F si
   F est un exécutable avec cd


Pour pouvoir créer un fichier titi/tutu, on doit
avoir les droits w et x sur titi


paumier@univ-mlv.fr                                14
Changer les droits

●   chmod u=wx toto : fixe à wx les droits de
    l'utilisateur (user) pour le fichier toto, et
    laisse les autres inchangés:
    –   avant: -rw-r--r--
    –   après: --wxr--r--
●   g modifie les droits du groupe
●   o modifie ceux des autres (others)
●   a modifie tous les droits (all)

paumier@univ-mlv.fr                            15
Changer les droits

●   + ajoute les droits indiqués
    chmod a+x toto
    –   avant: -rw-r--r--
    –   après: -rwxr-xr-x
●   - enlève les droits indiqués
    chmod g-r,o-r toto
    –   avant: -rw-r--r--
    –   après: -rw-------

paumier@univ-mlv.fr                        16
Lancer une tâche de fond

●   anjuta dans un terminal lance un
    éditeur, mais la console n'a plus la main
●   pour garder la main:
    $>anjuta&
    [1] 2715
    –   lance un autre processus




paumier@univ-mlv.fr                             17
Voir les processus en cours

●   ps : affiche les processus du terminal
    courant
    PID     TTY           TIME CMD
    1962 pts5         00:00:00 bash
    3517 pts5         00:00:00 emacs
    3518 pts5         00:00:00 ps

●   ps -u paumier : affiche tous les
    processus de l'utilisateur paumier

paumier@univ-mlv.fr                          18
Tuer un programme

●   ctrl+c : tue le programme
●   ctrl+z : stoppe le programme
    –   on pourra y revenir avec fg
●   kill -3 PID : tue le programme
●   kill -9 PID : tue le programme
    sauvagement (dernier recours)
●   xkill : permet de sélectionner une
    fenêtre

paumier@univ-mlv.fr                      19
Afficher un fichier

●   cat toto: affiche le contenu de toto
●   more toto: idem, avec défilement si toto
    ne tient pas sur l'écran
●   less toto: mieux que more (on peut
    remonter)
●   head -n 17 toto: affiche les 17
    premières lignes de toto
●   tail -n 17 toto : affiche les 17
    dernières lignes de toto
paumier@univ-mlv.fr                         20
Rediriger les sorties

●   ls > toto : redirige la sortie standard
    de ls dans le fichier toto
●   ls >> toto : idem, mais ajoute les
    données à la fin de toto
●   ls 2> toto : redirige la sortie d'erreur
    dans le fichier toto
●   ls 2>> toto : idem, avec ajout en fin



paumier@univ-mlv.fr                            21
Rediriger les sorties

 >$ ls -l
 total 8
 d---------      2 paumier igm 4096 jun 22 17:13 titi/
 -rw-r--r--      1 paumier igm   11 jun 22 17:13 tutu

 >$ ls * > list 2> err

 >$ cat list
 tutu

 >$ cat err
 ls: titi: Permission denied




paumier@univ-mlv.fr                                      22
Fichier spécial /dev/null

●   trou noir
●   si on veut ne voir que les sorties d'erreur
    de ls:
    ls > /dev/null




paumier@univ-mlv.fr                          23
Chercher dans des fichiers

●   grep xxx *.txt : affiche toutes les
    lignes des fichiers *.txt qui contiennent
    xxx

>$ grep passwd ind*
index:chpasswd             (8) - update password file in batch
index2:passwd [ssl-passwd] (1) - compute password hashes
ind:rpc.yppasswdd [rpc] (8) - NIS password update daemon




paumier@univ-mlv.fr                                          24
Obtenir de l'aide

●   man xxx : donne la page de manuel de la
    commande xxx
●   man -k xxx : donne les pages de manuel
    dont le titre contient xxx
●   xxx --help : convention pour toutes les
    commandes du système




paumier@univ-mlv.fr                       25
Introduction au C
                   ou
            comment compiler
               proprement
         son premier programme

paumier@univ-mlv.fr              26
Le langage C

●   C, parce qu'après le langage B :)
●   1972, Laboratoires Bell, Dennis Ritchie &
    Kenneth Thompson
●   1989: norme ANSI C
●   langage impératif
●   à la fois haut et bas niveau
●   programmation système (noyau Linux)


paumier@univ-mlv.fr                        27
Quelques références
●   B.W.Kernighan D.M.Ritchie, Le langage C
●   http://fr.wikibooks.org/wiki/Programmation_C


+ tous les livres qui prennent la poussière à la
    bibliothèque...


●   rendu: charte des projets
http://igm.univ-mlv.fr/~paumier/charte_des_projets.html



paumier@univ-mlv.fr                                   28
Qu'est-ce qu'un programme?

Instructions dans un
 langage lisible par
     un humain
                       }   .c   .c

                                            Compilation

    Fichiers objets    }   .o   .o   libs


                                            Édition de liens
         Programme
         exécutable    }

paumier@univ-mlv.fr                                        29
Les fichiers sources

●   fichiers textes contenant les instructions
●   extension spéciale .c
●   syntaxe très précise à respecter
●   séparateurs=espace+tab+retour à la
    ligne
●   programmation modulaire: un fichier par
    thème:
    –   bibliothèque mathématique, graphique, ...

paumier@univ-mlv.fr                                 30
Le premier programme


                                         Des commentaires
 /* HelloWorld.c
  * Le classique des classiques */

 #include <stdio.h>

 int main(int argc,char* argv[]) {
    printf("Hello world!n");
    return 0;
 }


                                     Inclusion de la bibliothèque
                                     contenant la fonction printf



paumier@univ-mlv.fr                                            31
Le premier programme
             main est toujours la fonction principale d'un
             programme C


                   /* HelloWorld.c
                    * Le classique des classiques */

                   #include <stdio.h>
Retourne un
                   int main(int argc,char* argv[]) {
entier                printf("Hello world!n");
                      return 0;
                   }



                               argc : nombre de paramètres
                               argv : les paramètres

 paumier@univ-mlv.fr                                         32
Le premier programme
                                     Début de bloc d'instructions


                    /* HelloWorld.c
                     * Le classique des classiques */
La fonction se
                    #include <stdio.h>
termine et
renvoie 0           int main(int argc,char* argv[]) {
                       printf("Hello world!n");
                       return 0;
                    }



                              Fonction affichant à l'écran
  Fin de bloc                 une chaîne de caractères
  d'instructions


  paumier@univ-mlv.fr                                           33
Le premier programme

●   compilation:
    $>gcc HelloWorld.c -c
    $>gcc HelloWorld.o -o HelloWorld
    ou, en une étape:
    $>gcc HelloWorld.c -o HelloWorld
●   exécution:
    $>./HelloWorld
    Hello world!


paumier@univ-mlv.fr                    34
Un autre exemple
                                      Constante
 #include <stdio.h>
 #define PI 3.14
                                       Variables globales
 float a,b;

 float sum(float x,float y) {
    return x+y;                          Une fonction
 }

 int main(int argc,char* argv[]) {
    float c,d;
    a=PI;
    b=1;
    c=sum(a,b);
    printf("%f + %f = %fn",a,b,c);
    printf("d=%fn",d);
                                        Le C permet l'utilisation
    return 0;                           de variables non
 }
                                        initialisées !!!


paumier@univ-mlv.fr                                             35
Le même en deux fichiers
  f1.c                                f2.c
 #include <stdio.h>                   float sum(float x,float y) {
 #define PI 3.14                         return x+y;
                                      }
 float a,b;

 extern float sum(float x,float y);

 int main(int argc,char* argv[]) {
    float c,d;                        Déclaration d'une
    a=PI;                             fonction définie
    b=1;
    c=sum(a,b);                       dans un autre fichier
    printf("%f + %f = %fn",a,b,c);
    printf("d=%fn",d);
    return 0;
 }




paumier@univ-mlv.fr                                              36
Le même en trois fichiers
  f1.c                                 f2.c
 #include <stdio.h>                   float sum(float x,float y) {
 #include "f2.h"                         return x+y;
 #define PI 3.14                      }

 float a,b;

 int main(int argc,char* argv[]) {
                                       f2.h
    float c,d;
                                       float sum(float x,float y);
    a=PI;
    b=1;
    c=sum(a,b);
    printf("%f + %f = %fn",a,b,c);
    printf("d=%fn",d);
    return 0;
 }
                                      Inclusion du fichier
                                      header qui contient la
                                      définition de sum


paumier@univ-mlv.fr                                                  37
Sources et headers

●   .c: code
    –   on n'inclut pas les .c !
●   .h:
    –   définitions des fonctions visibles de
        l'extérieur du .c
    –   définitions de constantes
    –   description de la bibliothèque
    –   licence du code


paumier@univ-mlv.fr                             38
Fichiers .h

●   ne doivent pas être compilés avec gcc
●   problème de doubles définitions
    ⇒ protection avec des macros

                      f2.h
                  #ifndef f2_H
                  #define f2_H

                  float sum(float x,float y);

                  #endif




paumier@univ-mlv.fr                             39
Un beau .h
         /*
          * Copyright (C) 2007 Sébastien Paumier <paumier@univ-mlv>
          *
          * This library is free software; you can redistribute it and/or
          * modify it under the terms of the GNU Lesser General Public
          * License as published by the Free Software Foundation; either
          * version 2.1 of the License, or (at your option) any later version.
          *
          * ...
          *
          * You should have received a copy of the GNU Lesser General Public
          * License along with this library; if not, write to the Free Software
          * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307   USA.
          *
          */

        #ifndef ANGLES_H_
        #define ANGLES_H_

        /**
         * This library provides implementations of trigonometric functions.
         */

        #define PI 3.14

        float cosinus(float angle);
                                              Inutile de commenter
        float sinus(float angle);             les choses évidentes
        #endif




paumier@univ-mlv.fr                                                                      40
Options de compilation

 ●   -ansi : norme qui garantie la portabilité
 ●   -Wall : affiche des avertissements
                                               warnings.c
                                               main(int argc,char* argv[]) {
                                                  int a,b;
                                                  printf("a=%dn",a);
                  (se méfier des traductions   }
$>gcc warnings.c  très mauvaises)
$>gcc warnings.c -Wall -ansi
Warnings.c:1: AVERTISSEMENT:   le défaut choisi du type retourné est « int »
Warnings.c: Dans la fonction   « main »:
Warnings.c:3: AVERTISSEMENT:   déclaration implicite de la fonction « printf »
Warnings.c:2: AVERTISSEMENT:   variable inutilisée « b »
Warnings.c:4: AVERTISSEMENT:   contrôle a atteint la fin non void de la
fonction


  paumier@univ-mlv.fr                                                      41
Messages d'erreurs

●   Possibilité d'erreurs en cascade
    –   toujours commencer par la première erreur
                                                 cascade.c
                                                int sum(int anint b) {
                                                   return a+b;
                                                }

$>gcc -Wall -ansi cascade.c
cascade.c:1: erreur d'analyse syntaxique avant « b »
cascade.c: Dans la fonction « sum »:
cascade.c:2: « a » non déclaré (première utilisation dans cette fonction)
cascade.c:2: (Chaque identificateur non déclaré est rapporté une seule fois
cascade.c:2: pour chaque fonction dans laquelle il apparaît.)
cascade.c:2: « b » non déclaré (première utilisation dans cette fonction)




 paumier@univ-mlv.fr                                                     42
Les fichiers Makefile
●   instructions pour faciliter la compilation
●   utilisables avec make
●   nom = Makefile ou makefile
                         all: trigo

cible: dépendances       trigo: main.o angles.o
                            gcc main.o angles.o -o trigo
TAB   action1               @echo Compilation finie.

TAB   action2            clean:
                            rm -f trigo main.o angles.o
...                      %.o: %.c
                            gcc -c -Wall -ansi $<

paumier@univ-mlv.fr                                  43
Les fichiers Makefile

                        Cible par défaut

Cible usuelle pour
effacer les fichiers          all: trigo
produits par le               trigo: main.o angles.o
Makefile                         gcc main.o angles.o -o trigo
                                 @echo Compilation finie.

                              clean:
                                 rm -f trigo main.o angles.o
  Règle pour créer
                              %.o: %.c
  les fichiers objets            gcc -c -Wall -ansi $<


 paumier@univ-mlv.fr                                       44
Les fichiers Makefile

●   détection des modifications basée sur les
    dates de fichiers
●   make ne reconstruit que le nécessaire

    $> make
    gcc -c -Wall -ansi main.c
    gcc -c -Wall -ansi angles.c
    gcc main.o angles.o -o trigo
    Compilation finie.
    $> make
    make: Rien à faire pour « all ».


paumier@univ-mlv.fr                         45
Propreté du code

1) indenté proprement (utiliser indent si
 nécessaire)

int    foo(   void)                   int foo(void) {
                                          int i,j=0,u;
{                                         for (i=0;i<10;i++) {
     int i,                                   j=j+i;
    j=0;                                      u=u+j;
                                          }
                                          return u;
int u;                                }
   for (i=0; i < 10 ;i ++) { j=j+i;
u=u+j;
       }
 return   u;
   }



paumier@univ-mlv.fr                                              46
Propreté du code
2) commenté judicieusement
   on ne commente pas la syntaxe!
    /* Affiche un tableau passé en paramètre */
    void affiche_tableau(int tableau[],int taille) {
    int i; /* déclaration d'une variable i */
    for (i=0;i<taille;i++) { /* on parcourt le tableau */
       printf("%d ",tableau[i]); /* en affichant chaque case */
    }
    }


    /* Alloue et retourne un tableau de 'taille' entiers, ou NULL en
      * cas d'erreur. Chaque case d'indice i du tableau est initialisée
      * avec f(i), où f est une fonction passée en argument de f_alloc. */
    int* f_alloc(int taille,int (*f)(int)) {
    int* t=(int*)malloc(taille*sizeof(int));
    if (t==NULL) return NULL;
    int i;
    for (i=0;i<taille;i++)
        t[i]=f(i);
    return t;
    }


paumier@univ-mlv.fr                                                          47
Propreté du code

3) des identificateurs judicieux

    a f(a b,c d) {
        if (b==NULL) return NULL;
        if (b->e==d) return b;
        return f(b->s,d);
    }


     ColorList find_color(ColorList l,Color c) {
         if (l==NULL) return NULL;
         if (l->color==c) return l;
         return find_color(l->next,c);
     }




paumier@univ-mlv.fr                                48
Propreté du code

4) du code lisible par tous (mondialisation
 oblige...)
     listacores achacor(listacores l,cor c) {
         if (l==NULL) return NULL;
         if (l->cor==c) return l;
         return achacor(l->proxima,d);
     }


     ColorList find_color(ColorList l,Color c) {
         if (l==NULL) return NULL;
         if (l->color==c) return l;
         return find_color(l->next,c);
     }




paumier@univ-mlv.fr                                49
Propreté du code

5) éviter le style gourou
   –   bon pour l'ego, peut-être
   –   mauvais pour le code, sûrement


 int* pstrand(int* p) {
    while (!*p++);
    return (*p++&=0xE8)?p:0;
 }



i,j;main(n){for(;i<1E4;j||printf("%d ",n,++i))for(j=n++;n%j--;);)}




paumier@univ-mlv.fr                                              50
Propreté du code

  6) cohérence de présentation avec:
      –   le reste du code               /**
                                           * This function looks for the given
      –   celui du binôme                  * color in the given color list.
                                           */
                                         ColorList find_color(ColorList l,Color c) {
      –   celui de l'équipe                   if (l==NULL) {return NULL;}
                                              if (l->color == c) {return l;}
                                              return find_color(l->next,c);
/* This function looks for the given     }
   color in the given color list. */
ColorList
  findColor(ColorList l, Color c) {
if (l==NULL) {                         /* This function looks for the given color */
   return NULL;                        /* in the given color list.                */
}                                      ColorList find_Color(ColorList l , Color c)
if (l->color==c) {                     {
   return l;                           if (l == NULL) return NULL ;
}                                      if (l->color == c) return l ;
return findColor(l->next,c);           return find_Color(l->next , c) ;
}                                      }


  paumier@univ-mlv.fr                                                           51

Weitere ähnliche Inhalte

Andere mochten auch

Projeto Marvin
Projeto MarvinProjeto Marvin
Projeto Marvinmarvinproj
 
Open knowledge brasil | inovaday
Open knowledge brasil | inovadayOpen knowledge brasil | inovaday
Open knowledge brasil | inovadayCetem
 
CrossCheck presentation - ABEC 2012
CrossCheck presentation - ABEC 2012CrossCheck presentation - ABEC 2012
CrossCheck presentation - ABEC 2012Edilson Damasio
 
What If?
What If?What If?
What If?mikisew
 
Cartilha de redação web
Cartilha de redação webCartilha de redação web
Cartilha de redação webSamuel Lima
 
Informàtica erika y carolina
Informàtica erika y carolinaInformàtica erika y carolina
Informàtica erika y carolinaErika Flores
 
Universidad de la salle
Universidad de la salleUniversidad de la salle
Universidad de la salleflordeliz76
 
LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015
LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015
LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015LATEC - UFF
 
narcoestetica y narcocultura en narcolombia
narcoestetica y narcocultura en narcolombianarcoestetica y narcocultura en narcolombia
narcoestetica y narcocultura en narcolombiaXDXD11
 
FMCS grant application- Ellen Druce
FMCS grant application- Ellen DruceFMCS grant application- Ellen Druce
FMCS grant application- Ellen Druceellen_elizabeth
 
Использование и развитие мультимедиа в современном образовании
Использование и развитие мультимедиа в современном образованииИспользование и развитие мультимедиа в современном образовании
Использование и развитие мультимедиа в современном образованииEvgeny Dronov
 

Andere mochten auch (20)

Inadi
InadiInadi
Inadi
 
Diz Jornal - Edição 164
Diz Jornal - Edição 164Diz Jornal - Edição 164
Diz Jornal - Edição 164
 
Projeto Marvin
Projeto MarvinProjeto Marvin
Projeto Marvin
 
Ismt Renovavel
Ismt RenovavelIsmt Renovavel
Ismt Renovavel
 
Open knowledge brasil | inovaday
Open knowledge brasil | inovadayOpen knowledge brasil | inovaday
Open knowledge brasil | inovaday
 
Чемпионат по ТЭК для компаний
Чемпионат по ТЭК для компанийЧемпионат по ТЭК для компаний
Чемпионат по ТЭК для компаний
 
Arquivista.org conarq-isdiah
Arquivista.org conarq-isdiahArquivista.org conarq-isdiah
Arquivista.org conarq-isdiah
 
Carlos Oswald
Carlos OswaldCarlos Oswald
Carlos Oswald
 
CrossCheck presentation - ABEC 2012
CrossCheck presentation - ABEC 2012CrossCheck presentation - ABEC 2012
CrossCheck presentation - ABEC 2012
 
What If?
What If?What If?
What If?
 
Cartilha de redação web
Cartilha de redação webCartilha de redação web
Cartilha de redação web
 
Informàtica erika y carolina
Informàtica erika y carolinaInformàtica erika y carolina
Informàtica erika y carolina
 
Universidad de la salle
Universidad de la salleUniversidad de la salle
Universidad de la salle
 
Biografia
BiografiaBiografia
Biografia
 
Pdf 1
Pdf 1Pdf 1
Pdf 1
 
LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015
LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015
LATEC - UFF .XI CONGRESSO NACIONAL DE EXCELÊNCIA EM GESTÃO & II INOVARSE -2015
 
narcoestetica y narcocultura en narcolombia
narcoestetica y narcocultura en narcolombianarcoestetica y narcocultura en narcolombia
narcoestetica y narcocultura en narcolombia
 
FMCS grant application- Ellen Druce
FMCS grant application- Ellen DruceFMCS grant application- Ellen Druce
FMCS grant application- Ellen Druce
 
Duque
DuqueDuque
Duque
 
Использование и развитие мультимедиа в современном образовании
Использование и развитие мультимедиа в современном образованииИспользование и развитие мультимедиа в современном образовании
Использование и развитие мультимедиа в современном образовании
 

Ähnlich wie C1 linux et intro c

LPIC1 11 02 sécurité système
LPIC1 11 02 sécurité systèmeLPIC1 11 02 sécurité système
LPIC1 11 02 sécurité systèmeNoël
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redoThierry Gayet
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére filsSelman Dridi
 
0079-cours-linux-base.ppt
0079-cours-linux-base.ppt0079-cours-linux-base.ppt
0079-cours-linux-base.pptMahdiHERMASSI1
 
0079-cours-linux-base.ppt
0079-cours-linux-base.ppt0079-cours-linux-base.ppt
0079-cours-linux-base.pptAugustoMoundoh1
 
Présentation unix linux
Présentation unix linuxPrésentation unix linux
Présentation unix linuxEmmanuel Florac
 
Présentation Unix/Linux (mise à jour 2016)
Présentation Unix/Linux (mise à jour 2016)Présentation Unix/Linux (mise à jour 2016)
Présentation Unix/Linux (mise à jour 2016)Emmanuel Florac
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieLoic Yon
 
Shell sans les coquilles
Shell sans les coquillesShell sans les coquilles
Shell sans les coquillesÉdouard Lopez
 
les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)Souhaib El
 
LPIC1 10 01 logs
LPIC1 10 01 logsLPIC1 10 01 logs
LPIC1 10 01 logsNoël
 
Formation Linux - Initiation
Formation Linux - InitiationFormation Linux - Initiation
Formation Linux - Initiationrobertpluss
 
Petit precis des_commandes_unix_utiles_a_ubuntu
Petit precis des_commandes_unix_utiles_a_ubuntuPetit precis des_commandes_unix_utiles_a_ubuntu
Petit precis des_commandes_unix_utiles_a_ubuntuEl7fe Eternal
 
0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.ppt0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.pptDenisKouakou1
 
cours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdfcours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdfSouha Bennani
 
03 01 intervention sur le système de fichier
03 01 intervention sur le système de fichier03 01 intervention sur le système de fichier
03 01 intervention sur le système de fichierNoël
 

Ähnlich wie C1 linux et intro c (20)

LPIC1 11 02 sécurité système
LPIC1 11 02 sécurité systèmeLPIC1 11 02 sécurité système
LPIC1 11 02 sécurité système
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére fils
 
0079-cours-linux-base.ppt
0079-cours-linux-base.ppt0079-cours-linux-base.ppt
0079-cours-linux-base.ppt
 
0079-cours-linux-base.ppt
0079-cours-linux-base.ppt0079-cours-linux-base.ppt
0079-cours-linux-base.ppt
 
Présentation unix linux
Présentation unix linuxPrésentation unix linux
Présentation unix linux
 
s de base
s de bases de base
s de base
 
Présentation Unix/Linux (mise à jour 2016)
Présentation Unix/Linux (mise à jour 2016)Présentation Unix/Linux (mise à jour 2016)
Présentation Unix/Linux (mise à jour 2016)
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
Shell sans les coquilles
Shell sans les coquillesShell sans les coquilles
Shell sans les coquilles
 
les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)
 
LPIC1 10 01 logs
LPIC1 10 01 logsLPIC1 10 01 logs
LPIC1 10 01 logs
 
PHP5 et les fichiers
PHP5 et les fichiersPHP5 et les fichiers
PHP5 et les fichiers
 
Formation Linux - Initiation
Formation Linux - InitiationFormation Linux - Initiation
Formation Linux - Initiation
 
Boot
BootBoot
Boot
 
Petit precis des_commandes_unix_utiles_a_ubuntu
Petit precis des_commandes_unix_utiles_a_ubuntuPetit precis des_commandes_unix_utiles_a_ubuntu
Petit precis des_commandes_unix_utiles_a_ubuntu
 
0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.ppt0081-cours-systemes-exploitations.ppt
0081-cours-systemes-exploitations.ppt
 
cours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdfcours-gratuit.com--id-3443.pdf
cours-gratuit.com--id-3443.pdf
 
03 01 intervention sur le système de fichier
03 01 intervention sur le système de fichier03 01 intervention sur le système de fichier
03 01 intervention sur le système de fichier
 
Android NDK
Android   NDKAndroid   NDK
Android NDK
 

Kürzlich hochgeladen

Semaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptxSemaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptxMartin M Flynn
 
Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024frizzole
 
Formation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changementFormation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changementM2i Formation
 
Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...
Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...
Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...Technologia Formation
 
Rapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFERapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFEAhmam Abderrahmane
 
Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2JeanLucHusson
 
Présentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 Toulouse
Présentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 ToulousePrésentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 Toulouse
Présentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 ToulouseYvonGervaise
 

Kürzlich hochgeladen (7)

Semaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptxSemaine de la Passion de Jésus-Christ.pptx
Semaine de la Passion de Jésus-Christ.pptx
 
Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024Planning de la semaine du 25 mars au 2 avril 2024
Planning de la semaine du 25 mars au 2 avril 2024
 
Formation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changementFormation M2i - Femmes entrepreneures : soyez actrices du changement
Formation M2i - Femmes entrepreneures : soyez actrices du changement
 
Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...
Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...
Webinaire Cohésion | Le pouvoir du mentorat au travail : pour qui, pourquoi, ...
 
Rapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFERapport projet de fin d'études licence PFE
Rapport projet de fin d'études licence PFE
 
Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2Présentation de lancement de la SAE203 - MMI S2
Présentation de lancement de la SAE203 - MMI S2
 
Présentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 Toulouse
Présentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 ToulousePrésentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 Toulouse
Présentation à Séminaire IA de la Fédération Gay Lussac , 25/03/24 Toulouse
 

C1 linux et intro c

  • 1. Cours de C Commandes Linux de base & introduction au C Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1
  • 2. Objectif du cours de C ● apprendre le langage C ● analyser un problème pour écrire le programme qui le résout, de façon élégante et modulaire ● coder proprement ● savoir respecter un cahier des charges lors de projets ● être au niveau pour le cours de système en IR2 paumier@univ-mlv.fr 2
  • 3. Planning ● Slot 0: stage de rentrée de 3 jours ● Slot 1: – 5 cours, 5 TD sur machine – 1 examen ● Slot 2: – 5 cours, 5 TD sur machine – 1 examen paumier@univ-mlv.fr 3
  • 4. Objectif du stage de rentrée ● mise à niveau sur: – les commandes système de base – l'écriture et la compilation propre d'un programme C simple ● 3 journées intensives: – 2h de cours, 2h de TD, 4h de TP (1 par poste) ● dernière journée: – TP noté pour évaluation paumier@univ-mlv.fr 4
  • 5. Linux ● système d'exploitation libre – open source – gratuit ● multi-utilisateurs ● support natif du réseau ● interface graphique indépendante du système paumier@univ-mlv.fr 5
  • 6. Différences principales avec Windows ● Pas de C:... D:... – racine unique / – périphériques vus comme des sous- répertoires. Ex: /mnt/floppy pour A: ● Casse des noms de fichiers – Hello.txt ≠ hello.txt ≠ HELLO.TXT ● Droits d'accès sur les fichiers paumier@univ-mlv.fr 6
  • 7. Compte utilisateur ● identité = login+mot de passe ● espace disque privé /home/ens/paumier ou ~paumier – on y est par défaut quand on se loge ● appartenance à un ou des groupe(s) paumier@univ-mlv.fr 7
  • 8. Lister un répertoire ● commande ls cogmu/ plp/ projet.html ● option -l pour les détails total 16 drwxr-xr-x 3 paumier igm 4096 sep 18 2006 cogmu/ drwxr-xr-x 2 paumier igm 4096 jui 26 2006 plp/ -rw-r--r-- 1 paumier igm 4764 nov 20 2006 projet.html ● jokers: ls *.html file?.bin paumier@univ-mlv.fr 8
  • 9. Fichiers spéciaux et cachés . = répertoire courant .. = répertoire parent .xxxxx = fichier caché – utiles pour des fichiers de configuration Fichiers visibles avec ls -a ./ ../ .bashrc cogmu/ plp/ projet.html paumier@univ-mlv.fr 9
  • 10. Répertoires ● pwd affiche le répertoire courant ● on change de répertoire avec cd – relatif: ● cd toto ● cd .. ● cd ../W3/prog – absolu: ● cd /tmp/test – retour à la racine du compte: ● cd ou cd ~ ou cd ~paumier paumier@univ-mlv.fr 10
  • 11. Répertoires ● créer un répertoire mkdir toto ● détruire un répertoire rmdir toto si toto est vide rm -ri toto sinon rm -rf toto pour éviter de confirmer pour chaque fichier ● rm marche aussi pour les fichiers paumier@univ-mlv.fr 11
  • 12. Copie et renommage ● copie de fichier: cp toto ../titi ● copie de répertoire: cp -r toto/ tutu ● renommage ou déplacement: mv toto tutu mv toto ../../test/toto.txt paumier@univ-mlv.fr 12
  • 13. Droits d'accès -rwxrw-r-- 1 paumier igm 0 jun 22 11:02 toto - rwx rw- r-- Droits de tous les - = fichier autres utilisateurs d = répertoire (directory) Droits du groupe Droits du igm possesseur du fichier (paumier) paumier@univ-mlv.fr 13
  • 14. Droits d'accès fichier F répertoire R r on peut lire F on peut voir le contenu de R on peut créer des fichiers w on peut écrire dans F ou des répertoires ou le détruire dans R on peut rentrer dans R x on peut exécuter F si F est un exécutable avec cd Pour pouvoir créer un fichier titi/tutu, on doit avoir les droits w et x sur titi paumier@univ-mlv.fr 14
  • 15. Changer les droits ● chmod u=wx toto : fixe à wx les droits de l'utilisateur (user) pour le fichier toto, et laisse les autres inchangés: – avant: -rw-r--r-- – après: --wxr--r-- ● g modifie les droits du groupe ● o modifie ceux des autres (others) ● a modifie tous les droits (all) paumier@univ-mlv.fr 15
  • 16. Changer les droits ● + ajoute les droits indiqués chmod a+x toto – avant: -rw-r--r-- – après: -rwxr-xr-x ● - enlève les droits indiqués chmod g-r,o-r toto – avant: -rw-r--r-- – après: -rw------- paumier@univ-mlv.fr 16
  • 17. Lancer une tâche de fond ● anjuta dans un terminal lance un éditeur, mais la console n'a plus la main ● pour garder la main: $>anjuta& [1] 2715 – lance un autre processus paumier@univ-mlv.fr 17
  • 18. Voir les processus en cours ● ps : affiche les processus du terminal courant PID TTY TIME CMD 1962 pts5 00:00:00 bash 3517 pts5 00:00:00 emacs 3518 pts5 00:00:00 ps ● ps -u paumier : affiche tous les processus de l'utilisateur paumier paumier@univ-mlv.fr 18
  • 19. Tuer un programme ● ctrl+c : tue le programme ● ctrl+z : stoppe le programme – on pourra y revenir avec fg ● kill -3 PID : tue le programme ● kill -9 PID : tue le programme sauvagement (dernier recours) ● xkill : permet de sélectionner une fenêtre paumier@univ-mlv.fr 19
  • 20. Afficher un fichier ● cat toto: affiche le contenu de toto ● more toto: idem, avec défilement si toto ne tient pas sur l'écran ● less toto: mieux que more (on peut remonter) ● head -n 17 toto: affiche les 17 premières lignes de toto ● tail -n 17 toto : affiche les 17 dernières lignes de toto paumier@univ-mlv.fr 20
  • 21. Rediriger les sorties ● ls > toto : redirige la sortie standard de ls dans le fichier toto ● ls >> toto : idem, mais ajoute les données à la fin de toto ● ls 2> toto : redirige la sortie d'erreur dans le fichier toto ● ls 2>> toto : idem, avec ajout en fin paumier@univ-mlv.fr 21
  • 22. Rediriger les sorties >$ ls -l total 8 d--------- 2 paumier igm 4096 jun 22 17:13 titi/ -rw-r--r-- 1 paumier igm 11 jun 22 17:13 tutu >$ ls * > list 2> err >$ cat list tutu >$ cat err ls: titi: Permission denied paumier@univ-mlv.fr 22
  • 23. Fichier spécial /dev/null ● trou noir ● si on veut ne voir que les sorties d'erreur de ls: ls > /dev/null paumier@univ-mlv.fr 23
  • 24. Chercher dans des fichiers ● grep xxx *.txt : affiche toutes les lignes des fichiers *.txt qui contiennent xxx >$ grep passwd ind* index:chpasswd (8) - update password file in batch index2:passwd [ssl-passwd] (1) - compute password hashes ind:rpc.yppasswdd [rpc] (8) - NIS password update daemon paumier@univ-mlv.fr 24
  • 25. Obtenir de l'aide ● man xxx : donne la page de manuel de la commande xxx ● man -k xxx : donne les pages de manuel dont le titre contient xxx ● xxx --help : convention pour toutes les commandes du système paumier@univ-mlv.fr 25
  • 26. Introduction au C ou comment compiler proprement son premier programme paumier@univ-mlv.fr 26
  • 27. Le langage C ● C, parce qu'après le langage B :) ● 1972, Laboratoires Bell, Dennis Ritchie & Kenneth Thompson ● 1989: norme ANSI C ● langage impératif ● à la fois haut et bas niveau ● programmation système (noyau Linux) paumier@univ-mlv.fr 27
  • 28. Quelques références ● B.W.Kernighan D.M.Ritchie, Le langage C ● http://fr.wikibooks.org/wiki/Programmation_C + tous les livres qui prennent la poussière à la bibliothèque... ● rendu: charte des projets http://igm.univ-mlv.fr/~paumier/charte_des_projets.html paumier@univ-mlv.fr 28
  • 29. Qu'est-ce qu'un programme? Instructions dans un langage lisible par un humain } .c .c Compilation Fichiers objets } .o .o libs Édition de liens Programme exécutable } paumier@univ-mlv.fr 29
  • 30. Les fichiers sources ● fichiers textes contenant les instructions ● extension spéciale .c ● syntaxe très précise à respecter ● séparateurs=espace+tab+retour à la ligne ● programmation modulaire: un fichier par thème: – bibliothèque mathématique, graphique, ... paumier@univ-mlv.fr 30
  • 31. Le premier programme Des commentaires /* HelloWorld.c * Le classique des classiques */ #include <stdio.h> int main(int argc,char* argv[]) { printf("Hello world!n"); return 0; } Inclusion de la bibliothèque contenant la fonction printf paumier@univ-mlv.fr 31
  • 32. Le premier programme main est toujours la fonction principale d'un programme C /* HelloWorld.c * Le classique des classiques */ #include <stdio.h> Retourne un int main(int argc,char* argv[]) { entier printf("Hello world!n"); return 0; } argc : nombre de paramètres argv : les paramètres paumier@univ-mlv.fr 32
  • 33. Le premier programme Début de bloc d'instructions /* HelloWorld.c * Le classique des classiques */ La fonction se #include <stdio.h> termine et renvoie 0 int main(int argc,char* argv[]) { printf("Hello world!n"); return 0; } Fonction affichant à l'écran Fin de bloc une chaîne de caractères d'instructions paumier@univ-mlv.fr 33
  • 34. Le premier programme ● compilation: $>gcc HelloWorld.c -c $>gcc HelloWorld.o -o HelloWorld ou, en une étape: $>gcc HelloWorld.c -o HelloWorld ● exécution: $>./HelloWorld Hello world! paumier@univ-mlv.fr 34
  • 35. Un autre exemple Constante #include <stdio.h> #define PI 3.14 Variables globales float a,b; float sum(float x,float y) { return x+y; Une fonction } int main(int argc,char* argv[]) { float c,d; a=PI; b=1; c=sum(a,b); printf("%f + %f = %fn",a,b,c); printf("d=%fn",d); Le C permet l'utilisation return 0; de variables non } initialisées !!! paumier@univ-mlv.fr 35
  • 36. Le même en deux fichiers f1.c f2.c #include <stdio.h> float sum(float x,float y) { #define PI 3.14 return x+y; } float a,b; extern float sum(float x,float y); int main(int argc,char* argv[]) { float c,d; Déclaration d'une a=PI; fonction définie b=1; c=sum(a,b); dans un autre fichier printf("%f + %f = %fn",a,b,c); printf("d=%fn",d); return 0; } paumier@univ-mlv.fr 36
  • 37. Le même en trois fichiers f1.c f2.c #include <stdio.h> float sum(float x,float y) { #include "f2.h" return x+y; #define PI 3.14 } float a,b; int main(int argc,char* argv[]) { f2.h float c,d; float sum(float x,float y); a=PI; b=1; c=sum(a,b); printf("%f + %f = %fn",a,b,c); printf("d=%fn",d); return 0; } Inclusion du fichier header qui contient la définition de sum paumier@univ-mlv.fr 37
  • 38. Sources et headers ● .c: code – on n'inclut pas les .c ! ● .h: – définitions des fonctions visibles de l'extérieur du .c – définitions de constantes – description de la bibliothèque – licence du code paumier@univ-mlv.fr 38
  • 39. Fichiers .h ● ne doivent pas être compilés avec gcc ● problème de doubles définitions ⇒ protection avec des macros f2.h #ifndef f2_H #define f2_H float sum(float x,float y); #endif paumier@univ-mlv.fr 39
  • 40. Un beau .h /* * Copyright (C) 2007 Sébastien Paumier <paumier@univ-mlv> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * ... * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * */ #ifndef ANGLES_H_ #define ANGLES_H_ /** * This library provides implementations of trigonometric functions. */ #define PI 3.14 float cosinus(float angle); Inutile de commenter float sinus(float angle); les choses évidentes #endif paumier@univ-mlv.fr 40
  • 41. Options de compilation ● -ansi : norme qui garantie la portabilité ● -Wall : affiche des avertissements warnings.c main(int argc,char* argv[]) { int a,b; printf("a=%dn",a); (se méfier des traductions } $>gcc warnings.c très mauvaises) $>gcc warnings.c -Wall -ansi Warnings.c:1: AVERTISSEMENT: le défaut choisi du type retourné est « int » Warnings.c: Dans la fonction « main »: Warnings.c:3: AVERTISSEMENT: déclaration implicite de la fonction « printf » Warnings.c:2: AVERTISSEMENT: variable inutilisée « b » Warnings.c:4: AVERTISSEMENT: contrôle a atteint la fin non void de la fonction paumier@univ-mlv.fr 41
  • 42. Messages d'erreurs ● Possibilité d'erreurs en cascade – toujours commencer par la première erreur cascade.c int sum(int anint b) { return a+b; } $>gcc -Wall -ansi cascade.c cascade.c:1: erreur d'analyse syntaxique avant « b » cascade.c: Dans la fonction « sum »: cascade.c:2: « a » non déclaré (première utilisation dans cette fonction) cascade.c:2: (Chaque identificateur non déclaré est rapporté une seule fois cascade.c:2: pour chaque fonction dans laquelle il apparaît.) cascade.c:2: « b » non déclaré (première utilisation dans cette fonction) paumier@univ-mlv.fr 42
  • 43. Les fichiers Makefile ● instructions pour faciliter la compilation ● utilisables avec make ● nom = Makefile ou makefile all: trigo cible: dépendances trigo: main.o angles.o gcc main.o angles.o -o trigo TAB action1 @echo Compilation finie. TAB action2 clean: rm -f trigo main.o angles.o ... %.o: %.c gcc -c -Wall -ansi $< paumier@univ-mlv.fr 43
  • 44. Les fichiers Makefile Cible par défaut Cible usuelle pour effacer les fichiers all: trigo produits par le trigo: main.o angles.o Makefile gcc main.o angles.o -o trigo @echo Compilation finie. clean: rm -f trigo main.o angles.o Règle pour créer %.o: %.c les fichiers objets gcc -c -Wall -ansi $< paumier@univ-mlv.fr 44
  • 45. Les fichiers Makefile ● détection des modifications basée sur les dates de fichiers ● make ne reconstruit que le nécessaire $> make gcc -c -Wall -ansi main.c gcc -c -Wall -ansi angles.c gcc main.o angles.o -o trigo Compilation finie. $> make make: Rien à faire pour « all ». paumier@univ-mlv.fr 45
  • 46. Propreté du code 1) indenté proprement (utiliser indent si nécessaire) int foo( void) int foo(void) { int i,j=0,u; { for (i=0;i<10;i++) { int i, j=j+i; j=0; u=u+j; } return u; int u; } for (i=0; i < 10 ;i ++) { j=j+i; u=u+j; } return u; } paumier@univ-mlv.fr 46
  • 47. Propreté du code 2) commenté judicieusement on ne commente pas la syntaxe! /* Affiche un tableau passé en paramètre */ void affiche_tableau(int tableau[],int taille) { int i; /* déclaration d'une variable i */ for (i=0;i<taille;i++) { /* on parcourt le tableau */ printf("%d ",tableau[i]); /* en affichant chaque case */ } } /* Alloue et retourne un tableau de 'taille' entiers, ou NULL en * cas d'erreur. Chaque case d'indice i du tableau est initialisée * avec f(i), où f est une fonction passée en argument de f_alloc. */ int* f_alloc(int taille,int (*f)(int)) { int* t=(int*)malloc(taille*sizeof(int)); if (t==NULL) return NULL; int i; for (i=0;i<taille;i++) t[i]=f(i); return t; } paumier@univ-mlv.fr 47
  • 48. Propreté du code 3) des identificateurs judicieux a f(a b,c d) { if (b==NULL) return NULL; if (b->e==d) return b; return f(b->s,d); } ColorList find_color(ColorList l,Color c) { if (l==NULL) return NULL; if (l->color==c) return l; return find_color(l->next,c); } paumier@univ-mlv.fr 48
  • 49. Propreté du code 4) du code lisible par tous (mondialisation oblige...) listacores achacor(listacores l,cor c) { if (l==NULL) return NULL; if (l->cor==c) return l; return achacor(l->proxima,d); } ColorList find_color(ColorList l,Color c) { if (l==NULL) return NULL; if (l->color==c) return l; return find_color(l->next,c); } paumier@univ-mlv.fr 49
  • 50. Propreté du code 5) éviter le style gourou – bon pour l'ego, peut-être – mauvais pour le code, sûrement int* pstrand(int* p) { while (!*p++); return (*p++&=0xE8)?p:0; } i,j;main(n){for(;i<1E4;j||printf("%d ",n,++i))for(j=n++;n%j--;);)} paumier@univ-mlv.fr 50
  • 51. Propreté du code 6) cohérence de présentation avec: – le reste du code /** * This function looks for the given – celui du binôme * color in the given color list. */ ColorList find_color(ColorList l,Color c) { – celui de l'équipe if (l==NULL) {return NULL;} if (l->color == c) {return l;} return find_color(l->next,c); /* This function looks for the given } color in the given color list. */ ColorList findColor(ColorList l, Color c) { if (l==NULL) { /* This function looks for the given color */ return NULL; /* in the given color list. */ } ColorList find_Color(ColorList l , Color c) if (l->color==c) { { return l; if (l == NULL) return NULL ; } if (l->color == c) return l ; return findColor(l->next,c); return find_Color(l->next , c) ; } } paumier@univ-mlv.fr 51