Changes between Version 180 and Version 181 of Archi-1-TP9


Ignore:
Timestamp:
Jan 14, 2022, 3:18:35 PM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v180 v181  
    182182- If faut arrêter le programme, car il n'y a plus de code, mais on ne sait pas arrêter le processeur,
    183183  alors on le faire tourner en rond.
     184''
     185}}}
     1861. Quelle est la différence entre `#include "file.h"` et `#include <file.h>` ? Quelle option du compilateur C permet de spécifier les répertoires lesquels se trouvent les fichiers include ? Si vous ne savez pas interrogez Internet !
     187{{{#!protected ------------------------------------------------------------------------------------
     188''
     189Cours 9 / slides 18 et 58\\\\
     190Ce sont toujours des connaissances connues en principe, mais comme c'est utilisé dans le code, ce n'est pas inutile d'en parler rapidement.
     191* Avec `#include "file.h"`, le préprocesseur recherche le fichier dans le répertoire local.
     192* Avec `#include <file.h>`, le préprocesseur recherche le fichier dans les répertoires standards tel que `/usr/include` et dans les répertoires spécifiés par l'option `-I` du préprocesseur. Il peut y avoir plusieurs fois `-I` dans la commande, par exemple `-Idir1 -Idir2 -Idir3`.
     193* C'est donc l'option `-I` qui permet de définir les répertoires de recherche.
     194''
     195}}}
     1961. Comment définir une macro-instruction C uniquement si elle n'est pas déjà définie ? Écrivez un exemple. Si vous ne savez pas regardez l'usage de `#ifndef`
     197{{{#!protected ------------------------------------------------------------------------------------
     198''
     199Cours 9 / slides 9 et 58\\\\
     200Cette déclaration est présente à plusieurs endroits dans le code. Elle permet de définir des valeurs de paramètres par défaut, s'ils ne sont pas déjà définis ailleurs, soit plus haut dans le code, ou dans un fichier inclu, ou encore passé en paramètre du compilateur par l'option `-D`.
     201* En utilisant, une directive `#ifndef` :
     202{{{#!c
     203#ifndef MACRO
     204#define MACRO
     205#endif
     206}}}
     207''
     208}}}
     2091. Comment être certain de ne pas inclure plusieurs fois le même fichier `.h` ? Vous devriez avoir trouvé l'explication en répondant à la question précédente.
     210{{{#!protected ------------------------------------------------------------------------------------
     211''
     212Cours 9 / slides 9 et 58\\\\
     213C'est un usage de ce qui a été vu dans la question précédente. C'est utilisé dans tous les fichiers .h (sauf oubli).
     214* En utilisant ce que nous venons de voir dans la question précédente : on peut définir une macro instruction différente au début de chaque fichier `.h` (en utilisant le nom du fichier comme nom de macro pour éviter les collisions de nom). On peut alors tester l'existence de cette macro comme condition d'inclusion du fichier.
     215{{{#!c
     216————————————————————— debut du fichier filename.h
     217#ifndef _FILENAME_H_
     218#define _FILENAME_H_
     219
     220[... contenu du fichier ...]
     221
     222#endif
     223————————————————————— fichier de fichier filename.h
     224}}}
    184225''
    185226}}}