Introduction au langage C

De Ensiwiki
Aller à : navigation, rechercher

Formation au langage C

Retours sur la formation / Remontée de bugs

  • [FIXED] Sur la page Projet logiciel en C : Compilation -> Mon premier programme C, le lien "document de référence" concernant le coding-style du noyau linux en bas de page ne marche pas( renvoie vers une page "Access forbidden!" )
    • Lien corrigé, page redéployée sur chamilo, un simple rafraichissement de page et c'est bon!
  • [FIXED] Liens morts sur les exos à télécharger de la fiche Makefile
    • Archives makefile_exercice*.tgz réuploadées
  • [FIXED] exo "statphabet" du parcours de base : il manque les fichiers .txt de l'énoncé dans le dépôt.
    • git pull pour récupérer les fichiers manquants
  • [FIXED] exo "lexico" du parcours de base : la correction est buggée! test_comparaison("lexico", "lexicoo") retourne que les deux chaines sont égales.
    • Corrigé et déployé sur chamilo, avec en prime une petite vidéo pour ceux qui ne connaitraient pas Luis Mariano
  • [FIXED] La correction de l'exercice undefined-reference ne semble pas correspondre à l'exercice
    • Corrigé et uploadé sur chamilo
  • [FIXED] Le TP base_gribouille est donné avec les sources complétées.
    • git pull pour récupérer un squelette tout propre
  • [FIXED] Sur la page Type/Transtypage : Dans le 2ème exemple du Transtypage implicite: La variable s est donnée en Hexadécimal (et non binaire comme écrit)....
    • Corrigé et déployé sur chamilo
  • Sur la page Allocation mémoire et durée de vie d'une variable, l'utilisation du terme static n'est pas explicitée :/

Errata

  • Compilation C99: la "variante" du standard C dans ce cours est C99 (norme de 1999). Par défaut clang utilise cette norme, mais ce n'est pas le cas d'autres compilateurs comme gcc. Par exemple, le code suivant n'est pas correct sans cette norme:
for (uint16_t i = 1; i < N + 1; i++) {
    somme += i;
}

La déclaration de l'indice de boucle i dans le for n'est autorisée qu'à partir de C99. Vous devez donc utiliser l'option de compilation -std=c99:

clang -std=c99 mon_programme.c -o mon_programme.o

Les fiches de cours sur la compilation ont été mises à jour.

Documentation annexe

Langage C
Makefile


Précisions/Erreurs sur les mini-projets (canard, patchwork)

Quelques erreurs se sont glissées pour la réalisation des mini-projets.

Pour la décimation de maillage (les couacs du canard!)
  • Undefined reference sur is_correct: le module fourni collapse.o fait référence à une fonction is_correct qui doit en fait être dans votre module mesh (pour une raison que j'ignore, la déclaration de cette fonction n'est plus dans le fichier mesh.h distribué). Vous devez donc ajouter dans mesh.h:
/* Check la validite du maillage (reciprocite des pairs, maillage ferme, liens, ...)
extern bool is_correct(const struct mesh*);

Dans un premier temps, vous pouvez écrire dans mesh.c une fonction qui est toujours d'accord!

bool is_correct(const struct mesh* m)
{
    return true;
}
  • L'outil "geomview" n'étant plus installé sur les machines de l'ENSIMAG, il faut se servir de "meshlab" pour visualiser les fichier OFF :
meshlab file.off
  • Selon le viewer utilisé, le maillage octahedron.off peut apparaitre tout noir (c'est le vilain petit canard!). En fait l'ordre des indices dans une face définit l'orientation de sa normale extérieure. Ici l'ordre est inversé, ce qui signifie que les facettes sont toutes orientées vers l'intérieur de l'objet; à l'affichage, beaucoup de viewers n'affichent pas les facettes vues de dos (backface culling) ou bien les dessinent en noir. Vous pouvez juste inverser l'ordre des faces:
OFF
...
3 1 0 2       -> 3 0 1 2
3 1 2 3       -> 3 2 1 3
3 1 3 4       ...
3 1 4 0 
3 2 0 5 
3 3 2 5 
3 4 3 5 
3 0 4 5

Dans print_mesh.c:

   Il manque un include de stdio.h
   MAX_LOOP n'est pas défini
Erreur interne gdb/ddd sur les modules list.o et/ou collapse.o
  • Si vous utilisez gdb/ddd et que vous rencontrez l'erreur suivante :
Internal error : dwarf2 record block etc...

Séance d'introduction à Git

Une présentation de l'outil de développement collaboratif Git (pour travailler dans de bonnes conditions à plusieurs sur le même projet), aura lieu par demi-groupe le lundi 2 février 2015 11h15-12h45, ou le mardi 3 février 2015 11h15-12h45. Consultez ADE pour connaître votre demi-groupe ainsi que les salles.

Outils intéressants

Utilisation de votre éditeur pour le C

Outils pour (bien) développer en C

  • Valgrind : trouver les problèmes liés à la gestion mémoire à l'exécution d'un programme.
  • GDB : un débogueur, pour exécuter pas-à-pas un programme et comprendre son fonctionnement ou non-fonctionnement.
  • Makefile : pour compiler rapidement un projet.
  • GCC : Le compilateur utilisé à l'Ensimag. Regardez les options de compilations, certaines (comme -Wall) peuvent vous aider à écrire du code de meilleure qualité.

Pour organiser votre travail en groupe

Styles de codage