Quelques prérequis à la compréhension du C

Alala les erreurs de segmentation, quelle plaie, n’est-ce pas? Heureusement nous n’allons pas commencer par là, même si nous y viendrons bien vite, alors ne nous pressons pas trop. Voyons pour l’instant les quelques prérequis de base: Nous allons tout d’abord évoquer rapidement le fonctionnement de base d’un ordinateur, avant d’évoquer la manière dont le C fonctionne. Enfin nous expliquerons en détail le fonctionnement de certaines commandes épineuses.

a) Fonctionnement de l’ordinateur:

Comme chacun le sait, les ordinateurs ne sont pas magiques, bien qu’on puisse en avoir un peu l’impression tellement les effets que l’on obtient actuellement sont extraordinaires. Et je crois qu’il est bon de le garder à l’esprit car trop souvent on est porté à les considérer comme des artefacts au pouvoir mystérieux.

Pour faire simple, un ordinateur marche grâce à un microprocesseur, de la mémoire, et un ensemble de composants permettant la communication avec l’environnement extérieur. Il y a deux types de mémoires : les mémoires de stockage, tels les disques dur, clés USB, et CDs, et les mémoires de travail aussi appelées mémoires RAM dans lesquelles sont chargées les données dont le microprocesseur a besoin pour travailler. Le microprocesseur est une puce qui contient des millions de transistors. Il effectue les calculs et traite les requêtes. Pour cela il va chercher les instructions dans la mémoire de travail, et y stocke les résultats qu’il obtient. Diverses cartes également bourrées de transistors interprètent ces résultats pour l’utilisateur. Les mémoires de stockages sont des éléments externes au microprocesseur. Chaque fois qu’il a besoin d’y lire ou d’y stocker des données, il est donc ralenti, c’est pourquoi on s’efforce généralement de limiter ces besoins en loadant une bonne fois pour toute les données requises dans la mémoire de travail.

b) Introdution au C

Ce n’est pas transparent pour l’utilisateur lambda, mais lorsque l’on demande à un ordinateur d’additionner deux entiers a et b, le microprocesseur doit connaitre l’endroit où se trouvent les entiers a et b, sur combien d’octets ils sont stockés et où il doit écrire le résultat. C’est pourquoi en C on déclare les variables que l’on va utiliser en spécifiant quel est leur type. Ainsi lors de la déclaration d’une variable (par exemple : « int var; » ) le microprocesseur réserve quelque part dans la mémoire de travail les octets nécessaire pour le stockage d’une variable de type int, il retient l’adresse de ces octets, et prend note que chaque fois que l’utilisateur utilise ou modifie la variable var, c’est à cet endroit là qu’il devra aller voir.

Mais en général on ne parle pas de microprocesseur directement mais de compilateur. C’est tout simplement parce que le microprocesseur ne sait parler qu’en binaire ou a la rigueur en hexadécimal, tandis que l’utilisateur programme dans un langage spécifique. Il est donc nécessaire d’utiliser un programme appelé compilateur qui va traduire tout ce que l’utilisateur a demandé pour que le microprocesseur puisse le comprendre. Il arrive malheureusement que l’utilisateur ait demandé quelque chose qui n’est pas logique, ou qui n’est pas compréhensible, et le compilateur est alors très malheureux car il ne sait pas quoi dire au microprocesseur. En général il réagit en demandant des précisions à l’utilisateur (il marque « erreur de quelque chose dans le fichier truc.c en ligne n »), mais parfois il fait à son idée, ce qui peut générer des erreurs assez cocasses à l’exécution.

c) Quelle différence entre int t[5]; et int t[n]; ?

Cet exemple va vous permettre de voir si vous avez bien tout compris. Le compilateur qui voit « int t[5]; » est content. En effet il sait qu’il doit dire au microprocesseur de réserver la place nécessaire au stockage de 5 entiers. Par contre lorsque le compilateur voit « int t[n]; », il est tres malheureux. En effet il sait qu’il doit dire au microprocesseur de réserver la place nécessaire pour stocker des entiers, mais il ne sait pas combien. Donc il en fait part à l’utilisateur qui doit donc s’y prendre autrement lorsqu’il veut réserver un tableeau d’un nombre indéterminé d’entiers. C’est l’objet du prochain aticle.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s