Mise à Niveau Langage C III

Documents pareils
Programmation système I Les entrées/sorties

Le prototype de la fonction main()

Introduction au langage C

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Conventions d écriture et outils de mise au point

Outils pour la pratique

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation système de commandes en C

Arguments d un programme

Algorithmique et Programmation, IMA

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Rappels Entrées -Sorties

3IS - Système d'exploitation linux - Programmation système

INF 104 (SELC) Introduction au langage C

Cours Programmation Système

Bases de programmation. Cours 5. Structurer les données

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation en langage C

Programmation système en C/C++

Programmation impérative

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation C. J.-F. Lalande. 15 novembre 2012

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Chap III : Les tableaux

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

OS Réseaux et Programmation Système - C5

Java Licence Professionnelle CISII,

Une introduction à Java

Les fichiers. Chapitre 4

Compression de Données - Algorithme de Huffman Document de Conception

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Le système de gestion des fichiers, les entrées/sorties.

Les chaînes de caractères

Cours 14 Les fichiers

Initiation. àl algorithmique et à la programmation. en C

Le langage C. Séance n 4

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Programmation en langage C Eléments de syntaxe

Programmation Classique en langage C

Les débordements de tampons et les vulnérabilités de chaîne de format 1

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours Langage C/C++ Programmation modulaire

Testez votre installation. Créer un répertoire vide

Cours de Système : Gestion de Fichiers

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours de C/C++ par la pratique. Hugues Talbot

Programmer en JAVA. par Tama

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Chaîne de production d un programme

Derrière toi Une machine virtuelle!

Cours de programmation avancée. Le langage C. Université du Luxembourg

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Plan du cours. Historique du langage Nouveautés de Java 7

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

Langage Éric Guérin 5 octobre 2010

Exercice sur les Dockers

INITIATION A LA PROGRAMMATION

Exonet : sauvegarde automatisée d une base de données

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

ACTIVITÉ DE PROGRAMMATION

Le langage C. Introduction, guide de reference

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

as Architecture des Systèmes d Information

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if


Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Les structures. Chapitre 3

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Gestion de la mémoire

Langages et Concepts de Programmation Introduction à la programmation en langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programme Compte bancaire (code)

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programmation en C/C++

Cours 6 : Tubes anonymes et nommés

Construction de logiciel et packaging

Pensez à vous inscrire... si ce n est pas encore fait

Introduction à C++ et à wxwidgets

Support de Cours de Langage C. Christian Bac

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Utilisation d objets : String et ArrayList

Java Licence Professionnelle CISII,

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Cours d initiation à la programmation en C++ Johann Cuenin

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Introduction à l algorithmique et à la programmation M1102 CM n 3

Notes de Cours - Programmation Pascal Ferraro

Transcription:

Remise à Niveau Langage C III Mise à Niveau Langage C III - Entrées / Sorties - Passage d arguments - Instructions au pré-processeur - Débugger son programme source Le 21/09/05 Maupetit Julien M1 / M2

Entrées / Sorties #include <stdio.h> fopen() /* Ouverture d un fichier */ fprintf() /* Ecriture dans un fichier */ fscanf() /* Lecture dans un fichier */ fclose() /* Fermeture d un fichier */ void readfile( char * nom, int * a, int n ){ FILE * infile = fopen( nom, "r"); int i = 0; for( i = 0 ; i < n ; i++ ){ fscanf( infile, "%d\n", &(a[i]) ); fclose(infile); 21/09/05 M1/M2 CIII 2

Passage d'arguments int main(void){ blah, blah devient argc : le nombre d'arguments argv : un tableau de chaînes de caractères int main(int argc, char *argv[]){ int i=0, k=0; printf("there are %d arguments in the command line.\n",argc); NB : les arguments sont des chaînes de caractères, même si elles contiennent des valeurs réelles, entières for( i=0 ; i<argc ; i++ ){ printf("%d %s\n",i,argv[i]); k = atoi(argv[1]); printf("the first arg is an integer => %d\n",k); atoi : convertit une chaîne ASCII en entier atof : convertit une chaîne ASCII en float En savoir plus : man atoi 21/09/05 M1/M2 CIII 3

Les instructions au pré-processeur (I) COMPILATION = 3 étapes - pré-compilation : ajouter des informations (fichiers en-tête, remplacer les macro-constantes ) - code-source -> code objet : passer en langage machine le(s) source(s) - lier tous les objets qui donnent un exécutable final Vous connaissez déjà : #define LSEQ 10 int main(void){ char seq[lseq]; int i=0; for( i=0 ; i<lseq ; i++ ){ /* Blah blah */ int main(void){ char seq[10]; int i=0; Pré-processeur #include <math.h> for( i=0 ; i<10 ; i++ ){ /* Blah blah */ 21/09/05 M1/M2 CIII 4

Les instructions au pré-processeur (II) #define DEBUG /* #undefine DEBUG */ - On peut faire des tests sur des macro-constantes. Si le test est vrai, le bloc de code compris entre #ifdef et #endif sera inclus dans l'exécutable final. void myfunction(double x){ #ifdef DEBUG printf("[debug: myfunction] blah, blah \n"); #endif return exp(x*m_pi); - On peut définir des macroconstantes en ligne de commande via les options de compilation de gcc. gcc toto.c -o Toto -D DEBUG ou gcc toto.c -o Toto -D DEBUG=2 -D NAME=DEFINITION 21/09/05 M1/M2 CIII 5

Mon super programme plante Aaarghll!! D'où vient mon erreur? - Ecriture à une adresse non autorisée (pointeur non alloué, indice d'un tableau > taille tableau, vous ne passez pas une adresse à fscanf() ou scanf() ) - Libération de mémoire non allouée par vous - Appel à une mauvaise adresse mémoire (printf() ou fprintf() qui tente d'afficher une chaîne alors que vous lui passez un caractère, lecture d'un flux qui n'existe pas car non ouvert ) - Appel à une fonction non déclarée ou mal déclarée (compilation séparée ) 21/09/05 M1/M2 CIII 6

Debugger son programme Plusieurs solutions : Afficher des infos : printf("coucou1"); printf("myvar = %d",myvar); gdb : GnuDeBugger multi-plateformes valgrind : uniquement pour Linux. copie et analyse la mémoire du programme exécution très ralentie renvoie les lignes du source où il existe des erreurs et le type de l'erreur ne laisse passer aucune erreur N'oubliez pas : options de compilation : Wall pedantic g : pour gdb segmentation fault (core dumped) : génération d'un fichier core décrivant l'état de la mémoire pouvant être donné en entrée de gdb. valgrind --tool=memcheck commande 21/09/05 M1/M2 CIII 7

GDB : GNU DeBugger (I) syntaxe: gdb./myprog core run lancer l'exécution (NB: vous pouvez mettre les arguments, faire des redirections ) Ex: run 1 toto.txt > log.txt break insérer des points d'arrêt dans l'exécution (gdb) break myfunction (gdb) run marche aussi avec un numéro de ligne: (gdb) break 66 info obtenir des infos Ex: (gdb) info break retourne tous les points d'arrêt delete effacer un point d'arrêt (gdb) delete 3 efface le 3ème break enable / disable activer / désactiver un point d'arrêt if ajouter une condition au point d'arrêt (gdb) break myfunction if a==2 step une fois l'exécution stoppée, si la ligne à exécuter contient une fonction à exécuter, step vous met en début de fonction next une fois l'exécution stoppée, si la ligne à exécuter contient une fonction à exécuter, next exécute la fonction 21/09/05 M1/M2 CIII 8

GDB : GNU DeBugger (II) continue poursuit l'exécution jusqu'au prochain point d'arrêt where affiche la ligne des appels de fonctions qui vous ont amené à l'endroit où le debugger vous a donné la main whatis, ptype affiche le type d'une variable ; préférer ptype pour les structures (gdb) whatis myvar quit quitter gdb list affiche quelques lignes avant et après le point d'arrêt (gdb) list (gdb) list 40,45 (gdb) list main Bon courage! print affiche le contenu d'une variable (gdb) print myvar 21/09/05 M1/M2 CIII 9