Introduction au langage C : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Pour la décimation de maillage (les couacs du canard!))
(.o fournis)
Ligne 81 : Ligne 81 :
 
     MAX_LOOP n'est pas défini
 
     MAX_LOOP n'est pas défini
  
==== .o fournis ====
+
==== Erreur interne gdb/ddd sur les modules list.o et/ou collapse.o ====
  
https://ensiwiki.ensimag.fr/images/7/7a/List_collapse_o.tgz
+
* Si vous utilisez gdb/ddd et que vous rencontrez l'erreur suivante :
 +
<pre>
 +
Internal error : dwarf2 record block etc...
 +
</pre>
 +
* Récupérer cette nouvelle version des modules list.o et collapse.o : https://ensiwiki.ensimag.fr/images/7/7a/List_collapse_o.tgz
  
 
=== Séance d'introduction à Git {{Ancre|tutogit}} ===
 
=== Séance d'introduction à Git {{Ancre|tutogit}} ===

Version du 24 mai 2016 à 08:29

Formation au langage C

Retours sur la formation / Remontée de bugs

  • Il faudrait que les réponses au test "j'ai réussi" ou "je suis bloqué" soient dans le même ordre pour tous les tests.
  • Le niveau de difficultés des exercices devrait être affiché dans les sommaires
  • Il faudrait pouvoir consulter les résultats d'évaluation après coup. Chamilo les fait disparaître au bout d'une seconde.
  • [palindrome] Il manque l'appel à la fonction est_palindrome sur le main et l'affichage s'il s'agit ou pas d'un palindrome. (./palindrome fait rien).
  • [listes] La solution ne compile pas:
listes.c:142:19: error: ‘tmp’ undeclared (first use in this function)
         p->suiv = tmp->suiv;

Il faut changer le nom de la variable tmp en style (ce qui est beaucoup plus joli pour l'appel à free! Ok, ç'aurait été mieux de changer tmp dans les trois lignes et pas dans deux...).

  • [ddd] l'utilisation du débogueur graphique ddd pose problème en raison des accents dans les commentaires des fichiers sources (alors qu'il c'est parfois bien pratique, par exemple dans un exercice comme listes avec du chainage). Vous pouvez alors convertir le fichier pour éliminir tous les accents. Deux solutions:
iconv -f UTF-8 -t ASCII//TRANSLIT toto.c > toto_no_accents.c
unaccent UTF-8 < toto.c > toto.no_accents.c

A l'Ensimag seule la première solution fonctionne car unaccent n'est pour l'instant pas installé.

  • [triche] L'exercice ne fonctionne pas à tout les coups. Lors d'une allocation suite à une dés-allocation l'espace mémoire alloué peut changé. Ainsi Toto ne récupère pas forcement la moyenne.
  • [capitaine] Si le capitaine a 60 ans et qu'il regrette le moment où il avait 20 ans, ce sont ceux de moins de 40 ans qui ne peuvent pas connaître (ceux de moins de 20 ans non plus mais ce n'est pas exhaustif ;) )
  • [capitaine] suggestion : dans l'aide fournie si on est bloqué, conseiller de trouver la différence entre i++ et ++i
  • [big-brother] si on n'a pas les droits en écriture sur log-secret.txt, on a une erreur de segmentation et le message d'erreur ne s'affiche pas
  • cheatsheet : peut être ajouter les fonctions C liées aux entrées/sorties fichiers binaires
  • [makemorse] : avec gcc on peut passer -Wl,-rpath,CHEMIN pour demander au linker de préciser que la lib dynamique peut être trouvée dans CHEMIN. (vérifiable avec ldd ./test_morse_LD). Comment obtenir ce résultat avec clang ?

Erratta

  • [encoder] Complément de spécification : La clé doit être écrite sur un octet et non sous la forme d'une chaîne ASCII. Sans cela, l'exécutable decoder ne fonctionnera pas
  • [slab] Coquille lors de la définition de la structure "data" qui est marquée "datav" -> git pull
  • [daddy-cool] Le fichier daddy.txt à lire est absent du répertoire -> git pull
  • Problème fiche allocation dynamique kit de base : uint16_t *somme = calloc(n, sizeof(uint8_t)); ==> corrigez en uint16_t *somme = calloc(n, sizeof(uint16_t));


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;
}
  • Dans les salles E100, 101, 102, 104 geomview doit être utilisé avec l'option -noopengl pour fonctionner correctement :
geomview -noopengl
  • 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