Adresses mémoires








télécharger 55.01 Kb.
titreAdresses mémoires
date de publication28.04.2018
taille55.01 Kb.
typeAdresse
ar.21-bal.com > loi > Adresse

Présentation

Télécharger tous les modules de toutes les filières de l'OFPPT sur le site dédié à la formation professionnelle au Maroc : www.marocetude.com

Pour cela visiter notre site www.marocetude.com et choisissez la rubrique : MODULES ISTA
C est qualifié de langage de bas niveau dans le sens où il est conçu pour permettre la manipulation directe des mots machine. Il propose un éventail de types entiers et flottants qui correspondent directement aux types supportés par le processeur. Il fait en outre un usage intensif des adresses mémoires avec la notion de pointeur. Il a une notion de type composé, mais ne propose aucune opération qui traite directement des objets de plus haut niveau (fichier informatique, chaîne de caractères, liste…). Ces types plus évolués doivent être traités en manipulant des pointeurs et des types composés. De même, le langage ne propose pas en standard la gestion de la programmation orientée objet, ni de système de gestion d'exceptions, ni la programmation parallèle. Il existe des fonctions standards pour gérer les entrées-sorties et les chaînes de caractères, mais contrairement à d'autres langages, aucun opérateur spécifique pour améliorer l'ergonomie. Ceci rend aisé le remplacement des fonctions standards par des fonctions spécifiquement conçues pour un programme donné.

Le langage C a été utilisé pour rendre le système d'exploitation UNIX plus portable. Il a conservé de cela une très grande efficacité pour tout ce qui concerne le développement système. Ainsi la majorité des grands systèmes d'exploitation entre les années 1975 et 1993 ont été développés en C.

Ces caractéristiques en font un langage privilégié quand on cherche à maîtriser les ressources utilisées, le langage machine généré par les compilateurs étant relativement prévisible et parfois même optimal sur les machines d'architecture RISC à grand nombre de registres. Ce langage est donc extrêmement utilisé dans des domaines comme la programmation embarquée sur microcontrôleurs, les calculs intensifs, l'écriture de systèmes d'exploitation et tous les modules où la rapidité de traitement est importante. Il constitue une bonne alternative au langage d'assemblage dans ces domaines, avec les avantages d'une syntaxe plus expressive et de la portabilité du code source.

En contrepartie, la mise au point de programmes en C, surtout s'ils utilisent des structures de données complexes, est plus difficile qu'avec des langages de plus haut niveau. En effet, dans un souci de performance, le langage C impose à l'utilisateur de programmer certains traitements (libération de la mémoire, vérification de la validité des index sur les tableaux…) qui sont pris en charge automatiquement dans les langages de haut niveau.

Évolution du langage / Historique :


Le langage C est apparu au cours de l'année 1972 dans les Laboratoires Bell. Il était développé en même temps que UNIX par Dennis Ritchie et Ken Thompson. Ken Thompson avait développé un prédécesseur de C, le langage B, qui est lui-même inspiré de BCPL. Dennis Ritchie a fait évoluer le langage B dans une nouvelle version suffisamment différente pour qu'elle soit appelée C. Par la suite, Brian Kernighan aida à populariser le langage. Il procéda aussi à quelques modifications de dernière minute. En 1978, il fut notamment le principal auteur du livre The C Programming Language décrivant le langage enfin stabilisé ; Ritchie s'était occupé des appendices et des exemples avec Unix. On parle encore de C K&R, K&R C en anglais (pour Kernighan and Ritchie C) lorsqu'on se réfère au langage tel qu'il existait à cette époque.

Caractéristiques :


  • Langage structuré, conçu pour traiter les tâches d'un programme en les mettant dans des blocs.

  • Il produit des programmes efficaces : il possède les mêmes possibilités de contrôle de la machine que l'assembleur et il génére un code compact et rapide..

  • Déclaratif : normalement, tout objet C doit être déclaré avant d'être utilisé. S'il ne l'est pas, il est considéré comme étant du type entier.

  • Format libre : la mise en page des divers composants d'un programme est totalement libre.

Cette possibilité doit être exploitée pour rendre les programmes lisibles.

  • Modulaire : une application pourra être découpée en modules qui pourront être compilés séparément.

Un ensemble de programmes déjà opérationnels pourra être réuni dans une librairie. Cette aptitude permet au langage C de se développer de lui même.

  • Souple et permissivité : peu de vérifications et d'interdits, hormis la syntaxe. Il est important de remarquer que la tentation est grande d'utiliser cette caractéristique pour écrire le plus souvent des atrocités.

  • Transportable : les entrées/sorties sont réunies dans une librairie externe au langage.

Qualités et défauts :

C'est un des langages les plus utilisés car :

Ses principaux inconvénients sont :

  • la première version du langage (K&R C) offre particulièrement peu de vérifications lors de la compilation, et il n'offre aucune vérification pendant l'exécution, ce qui fait que des erreurs qui pourraient être automatiquement détectées lors du développement ne le sont que plus tard, souvent au prix d'un plantage du logiciel ;

  • il ne facilite pas le développement de concepts informatiques plus modernes comme la programmation orientée objet ou la gestion d'exceptions qui exigent effort de rigueur supplémentaire de la part du développeur.

  • il est difficile d'écrire des programmes portables car le comportement exact des exécutables dépend de l'ordinateur cible ;

  • le support de l'allocation de mémoire et des chaînes de caractères est minimaliste, ce qui oblige les programmeurs à s'occuper de détails fastidieux et sources de bugs ; il n'y a notamment pas de ramasse-miettes standard ;

  • des bugs communs comme le débordement de tampon constituent une faille de sécurité informatique et peuvent être exploités par des logiciels malveillants si le développeur ne fais pas attention.

  • plusieurs genres d'erreurs ne peuvent être détectés automatiquement qu'à l'aide d'outils supplémentaires et non standardisés, comme lint puis splint.


Structure d'un programme C


Un programme C est composé de :

  • Directives du préprocesseur : elles permettent d'effectuer des manipulations sur le texte du programme source avant la compilation :

    • inclusion de fichiers,

    • substitutions,

    • macros,

    • compilation conditionnelle.

Une directive du préprocesseur est une ligne de programme source commençant par le caractère dièse (#).

Le préprocesseur (/lib/cpp) est appelé automatiquement, en tout premier, par la commande /bin/cc.

  • Déclarations/définitions :

    • Déclaration : la déclaration d'un objet C donne simplement ses caractéristiques au compilateur et ne génère aucun code.

    • Définition : la définition d'un objet C déclare cet objet et crée effectivement cet objet.

  • Fonctions : Ce sont des sous-programmes dont les instructions vont définir un traitement sur des variables.

  • Des commentaires : éliminés par le préprocesseur, ce sont des textes compris entre /* et */.

On ne doit pas les imbriquer et ils peuvent apparaître en tout point d'un programme (sauf dans une constante de type chaîne de caractères ou caractère).

Pour ignorer une partie de programme il est préférable d'utiliser une directive du préprocesseur (#if 0 ... #endif)

Structure d'une fonction


Une fonction est un bloc de code d'une ou plusieurs instructions qui peut renvoyer une valeur à l'expression qui l'utilise.

  • Elle peut retourner une valeur à la fonction appelante.

  • Le programme principal est une fonction dont le nom doit impérativement être main.

  • Les fonctions ne peuvent pas être imbriquées.


La bibliothèque standard

La bibliothèque standard normalisée, disponible avec toutes les implémentations, présente la simplicité liée à un langage bas-niveau. Voici une liste de quelques en-têtes déclarant des types et fonctions de la bibliothèque standard :

  •  : pour un diagnostic de conception lors de l'exécution (assert)

  •  : tests et classification des caractères (isalnum, tolower)

  •  : gestion minimale des erreurs (déclaration de la variable errno)

  •  : fonctions mathématiques de base (sqrt, cos) ; nombreux ajouts en C99

  •  : gestion des signaux (signal et raise)

  •  : définitions générales (déclaration de la constante NULL)

  •  : pour les entrées/sorties de base (printf, scanf)

  •  : fonctions générales (malloc, rand)

  •  : manipulation des chaînes de caractères (strcmp, strlen)

  •  : manipulation du temps (time, ctime)

La bibliothèque standard normalisée n'offre aucun support de l'interface graphique, du réseau, des entrées/sorties sur port série ou parallèle, des systèmes temps réel, des processus ou des threads, ou encore de la gestion avancée des erreurs (comme avec des exceptions structurées). Cela pourrait restreindre d'autant la portabilité pratique des programmes qui ont besoin de faire appel à certaines de ces fonctionnalités, sans l'existence de très nombreuses bibliothèques portables et palliant ce manque ; dans le monde UNIX, ce besoin a aussi fait émerger une autre norme, POSIX.1.

Règles d'écriture des programmes C


Afin d'écrire des programmes C lisibles, il est important de respecter un certain nombre de règles de présentation :

  • ne jamais placer plusieurs instructions sur une même ligne

  • utiliser des identificateurs significatifs

  • grâce à l'indentation des lignes, on fera ressortir la structure syntaxique du programme.

Les valeurs de décalage les plus utilisées sont de 2, 4 ou 8 espaces.

  • on laissera une ligne blanche entre la dernière ligne des déclarations et la première ligne des instructions.

  • une accolade fermante est seule sur une ligne (à l'exception de l'accolade fermante du bloc de la structure do ... while) et fait référence, par sa position horizontale, au début du bloc qu'elle ferme.

  • aérer les lignes de programme en entourant par exemple les opérateurs avec des espaces.

  • il est nécessaire de commenter les listings. Eviter les commentaires triviaux.

Affichages et saisies :

La fonction printf :


  • Syntaxe :



  • #include



  • #int printf (const char *format [, arg [, arg]...]);



  • Description :

Elle permet l'écriture formatée sur le flux standard de sortie stdout (l'écran par défaut).

La chaîne de caractères format peut contenir à la fois :

    1. Des caractères à afficher,

    2. Des spécifications de format.

Il devra y avoir autant d'arguments à la fonction printf qu'il y a de spécifications de format

La fonction puts :


  • Syntaxe :

  • #include



  • int puts(const char *s);



  • Description :

Elle permet d'écrire, à la position courante, la chaîne de caractères pointée par s sur la sortie standard.

  • Valeur retournée :

    • En cas de succès : une valeur non négative

    • En cas d'erreur : la constante EOF (-1) et positionne errno pour indiquer l'erreur.

  • Exemple :

  • #include



  • main () {

  • char msg = "Merci d'avoir lu complètement cette page\n";



  • puts (msg);

  • return 0;

  • }

La fonction scanf :


  • Syntaxe :

  • #include



  • int scanf (const char *format [, arg. [, arg]...]);



  • Description :

La fonction scanf permet de faire une lecture formatée du flux standard d'entrée (le clavier par défaut).

Elle lit les caractères en entrée, les interprète en concordance avec les spécifications de format décrites dans la chaîne format, et place les résultats dans les arguments arg.

Pour pouvoir retourner les valeurs ainsi saisies, les arg. doivent être obligatoirement des pointeurs.

  • Valeur retournée :

le nombre de valeurs convenablement introduites ou EOF (-1)en cas d'erreur.

La fonction Gets :


  • Syntaxe :

  • #inclue



  • char *gets(char *s);



  • Description :

Elle permet la lecture d'une chaîne de caractères, terminée par \n (newline), sur l'entrée standard et place le résultat dans le tableau pointé par s.

  • Valeur retournée :

Cette fonction retourne :

    • En cas d'erreur : le pointeur NULL et positionne errno pour indiquer l'erreur.

    • en cas de succès : le pointeur s.


Structures de contrôle

L'instruction if


  • Syntaxe :

  • if (expression)

  • instruction1

  • [else

  • instruction2]

  • Description :

La valeur de l'expression est évaluée et, si elle est non nulle, instruction1 est exécutée sinon c'est instruction2 qui est exécutée (si elle existe).

Instruction1 et instruction2 peuvent être des instructions simples ou des blocs.

La clause else peut être omise et se rapporte toujours au dernier if visible.

  • Diagramme syntaxique du if :


L'instruction while :


Cette instruction permet de répéter une instruction (ou un bloc) tant qu'une condition est vraie.

  • Syntaxe :

  • while (expression)

  • instruction ou bloc d'instructions



  • Description :

Instruction est exécutée de façon répétitive aussi longtemps que le résultat de expression est non nul.

Expression est évaluée avant chaque exécution d’instruction.

  • Diagramme syntaxique :


L'instruction do ... while :


  • Syntaxe :

  • do

  • instruction ou bloc d'instructions

  • while (expression != 0);



  • Description :

Cette instruction est similaire à la précédente, le test a lieu après chaque exécution de l'instruction, de fait l'instruction est au moins exécutée une fois.

  • Diagramme syntaxique :


L'instruction for :


  • Syntaxe :

  • for ([expression1] ; [expression2] ; [expression3])

  • instruction ou bloc d'instructions



  • Description : instruction est répétée tant que la valeur d’expression2 est non nulle.

Avant la première itération, expression1 est évaluée;
En général elle sert à initialiser les variables de la boucle.


Après chaque itération de la boucle, expression3 est évaluée.
En général elle sert à incrémenter le compteur de la boucle.


La boucle for est équivalente à la structure suivante :

expression1;

While (expression2) {

Instruction

expression3;

}


  • Diagramme syntaxique :


L'instruction Switch :


L'instruction Switch permet un choix multiple en fonction de l'évaluation d'une expression.

  • Syntaxe :

  • Switch (expression) {

  • case e1 : instruction1 ...

  • case e2 : instruction2 ...

  • ...

  • case e3 : instruction3 ...

  • default : instruction_default ...

  • }



  • Description :

L'évaluation de expression doit donner pour résultat une valeur de type Int.

e1, e2, e3 ... sont des expressions constantes qui doivent être un entier unique de type Int ou char.

La valeur d’expression est recherchée successivement parmi les valeurs des différentes expressions constantes e1, e2, e3.
En cas d'égalité les instructions (facultatives) correspondantes sont exécutées jusqu'à une instruction break ou jusqu'à la fin du bloc du Switch (et ceci indépendamment des autres conditions case).


S'il n'y a pas de valeur correspondante, on exécute les instructions du cas default (s'il existe).

  • Diagramme syntaxique :


Les pointeurs :

Définition d'une variable pointeur


  • La spécificité du langage C vient de son traitement des pointeurs. Leur utilisation est donc très importante.

  • Un pointeur est une variable qui contient l'adresse d'une autre variable de n'importe quel type. Sa taille dépend de l'implémentation et est, en général, de la taille d'un { int.

  • La syntaxe générale d'une définition ou déclaration de variable pointeur est de la forme :

  • classe modificateur type *identificateur ;

La classe, le modificateur et le type sont ceux de la variable pointée.

  • Exemple :

  • char *pt1;

Pt1 est une variable pointeur sur un char. Elle contiendra donc l'adresse d'une zone mémoire capable de contenir elle même un objet de type char.

  • Un pointeur sur un type void pointe sur une zone sans type.


similaire:

Adresses mémoires iconAdresses d’envoie

Adresses mémoires iconAdresses utiles p. 41

Adresses mémoires iconAdresses professionnelles

Adresses mémoires iconAdresses utiles p. 41

Adresses mémoires iconAdresses et téléphones utiles p. 11

Adresses mémoires iconFormulaire de demande d’adresses ip publiques

Adresses mémoires iconComme convenu un échantillon de quelques Adresses d’Hôtels sur Gap

Adresses mémoires iconSignataires des courriers adressés à Léon rousseau entre 1867 et 1880

Adresses mémoires iconCe laboratoire étudie les firewalls (pare-feu) et la translation d'adresses nat

Adresses mémoires iconMémoires mortes








Tous droits réservés. Copyright © 2016
contacts
ar.21-bal.com