Inclusions & dépendances. C compile texte > objet int main () … 0110010101010 1010101010100 1010101010001 0101010101000 1000001100.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

GEF 243B Programmation informatique appliquée
Premier programme en C :
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Patrick Reuter maître de conférences
Rappels C.
Développement logiciel sur micro-contrôleurs PIC en C
Formation universitaire à .NET: Introduction à C#
Introduction. Les pointeurs Bête noir des programmeurs Pas daide de Visual Studio Sauf en utilisant les « break point » Pas toujours intuitif Facile de.
Sémantique des déclarations pour le langage Z minimal
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
GEF 243B Programmation informatique appliquée
la programmation en langage C
C.
Le publipostage La fonction de fusion permet de créer des documents identiques dans les grandes lignes que l’on personnalise automatiquement à chaque destinataires.
Outils de développements
Introduction : Compilation et Traduction
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Langage C Licence Informatique 3ème année
Principes de programmation (suite)
Algorithmique et Programmation
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Question Comment le compilateur fait-il pour évaluer une expression telle que : A + B lorsque A et B sont des données de types arithmétiques différents.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Techniques de test Boulanger Jean-Louis.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Projet de C – Matrices creuses
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
IFT 6800 Atelier en Technologies d’information
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Procédures et fonctions
Structures de données IFT-2000
Les fichiers texte en C++
Structures des données
2.1 - Historique Chapitre 2 : Introduction au langage C++
Programmer en langage c
Programmation Système et Réseau (sous Linux)
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
Outils de gestion de réseau
La notion de type revisitée en POO
Les adresses des fonctions
ALGORITHMIQUE ET PROGRAMMATION C
Page 1 IR98 AutoconfAutomake Michel TRAN Ingénieurs 2000 Informatique - Réseaux Novembre 2000.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
Autres éléments du langage
Les modules. Modules Un module est un ensemble de définitions de constantes, de variables et de fonctions réutilisables de projet en projet. Le langage.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Le Préprocesseur. Sujets abordés: Préprocesseur –Qu’est ce? –Qu’est ce qu’une directive? Les macros –Les définir, les redéfinir, les dé-définir –Les macros.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
S. Domas Système d’Exploitation Make et la construction d’exécutables 1ère annéeIUT Belfort-Montbéliard.
Le Langage C MIAGE 2. Détails techniques Moniteur: Vincent Barreaud Responsable: Laurent.
CPI/BTS 2 Programmation Web Fonctions & Includes Prog Web CPI/BTS2 – M. Dravet – 02/11/2003 Dernière modification: 02/11/2003.
Automne 2002 Martin Dubois Programmation système IFT Semaine 02 Retour sur la semaine 01 Les outils de développement logiciel Les outils que nous.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Transcription de la présentation:

Inclusions & dépendances

C compile texte > objet int main () …

Cas de fichiers multiples int main () { toto() } … Calltoto void toto () … Icitoto toto est inconnu Icitoto Édition de liens: résout les adresses et crée l’exécutable

La résolution des adresses se fait par le nom de l’objet float toto; …. toto=-1.0; extern int toto; Format IEEE: signe(1), exposant(8) 1.mantisse Compilation et édition de liens fonctionnent, mais l’entier toto vaut Aucune erreur signalée

Fonctions repérées par leur seul nom int toto (float arg) { …/* définition */ }; float toto (float arg1, char arg2); … X = toto (2.3, ‘A’); La fonction sera appelée avec le mauvais nombre d’arguments (plantages à cause de mauvaise gestion de la pile) et les mauvais types d’arguments (données incohérentes). Aucune vérification.

Un outil et une pratique Un outil: lint. Voir docs diverses. Analyse statique des codes des sources et warnings divers si incohérence. Une pratique: faire un jeu de fichiers (extension.h par convention) qui seront inclus en tête des fichiers à compiler et forceront les vérifications.

Règles d’exportation - Tout fichier.c qui exporte des objets a un.h de même nom, et l’inclut par #include "toto.h " (si le chemin est absolu ou relatif) ou par #include (si le chemin est conventionnel, défini par une variable système) toto.c toto.h #include " toto.h " extern float fff; float fff = 2.0; int machin (char * s); int machin (char * s) { ……. } - Toute variable exportée (utilisée hors du fichier qui la définit) doit être déclaré « extern » dans le.h et définie dans le.c. - Toute fonction exportée doit être déclarée dans le.h et définie dans le.c

toto.c #include " toto.h " Règles d’importation Tout fichier qui se sert d’objets externes inclut le.h du module qui les définit. client.c toto.h #include " toto.h " Ainsi toute utilisation fautive ou redéclaration d’une variable sera vue par le compilateur. extern float fff; De même pour une utilisation erronée, ou une redéclaration d’une fonction int machin (char * s); char fff; fff=‘A’; machin(2.3);

Bénéfices Le.h déclare un objet Le.c correspondant inclut son propre.h et donc s’oblige à définir les objets déclarés conformément à leur déclaration dans le.h sinon erreur. Les clients incluent le.h et donc s’obligent à utiliser les objets conformément à leur déclaration sinon erreur. L’édition de liens va donc s’occuper de définitions cohérentes avec leur utilisation

Dangers Rien n’est vérifié par le compilateur: c’est une question de discipline! Hélas le compilateur prend des options par défaut quand il tombe sur une fonction non déclarée et la déclare « pour vous ». Le #include fait effectivement et physiquement une inclusion: aucune magie ne fait que le compilateur se souviendrait d’où viennent les portions de textes qu’il compile ensuite. En particulier ne pas oublier le « extern » dans les déclarations de variables: sinon résultats non définis, la variable étant déclarée (avec son adresse et la place mémoire réservée) dans plusieurs modules ensuite reliés par l’édition de liens!

Make Cible: dépendances commande shell La liste de dépendances pour construire la cible avec la commande shell contient en général: les fichiers utilisés directement par la commande et les fichiers.h utilisés toto : toto.c utils.c utils.h gcc toto.c utils.c -o toto Bref la construction d’un Makefile est un problème en soi nécessitant l’inspection des sources. Corrolaire: ne pas cacher les #include au milieu des fichiers.c, les mettre en tête!

Inclusions transitives Un fichier inclus peut lui-même en inclure d’autres. Par exemple une fonction exportée utilise le type FILE: on peut préférer inclure stdio.h dans toto.h (plutôt que dans toto.c avant l’inclusion de toto.h, ce qui crée une contrainte d’utilisation). On peut se retrouver avec des combinaisons compliquées où le même fichier est inclus plusieurs fois. Une technique utilisant le préprocesseur (utilisée dans les fichiers.h standard). #ifndef TOTO_DEJA_INCLU #define TOTO_DEJA_INCLU (ici les déclarations qui ne seront lues qu’une fois même si le fichier est inclus 10 fois) #endif