« Langage C/Rencontre avec le C » : différence entre les versions

Contenu supprimé Contenu ajouté
m Révocation des modifications de 5.48.68.197 (discussion) vers la dernière version de 196.75.151.186
Balise : Révocation
Ligne 11 :
== Ce que l’on va réaliser ==
 
Avant d'écrire un programme, il faut être au courant de ce que l’on veux et peux faire. Or, pour l'instant nos connaissances en programmation sont plus que limitées, et il est vain de croire que vous allez pouvoir créer le dernier jeu vidéo à la mode, ou un logiciel révolutionnaire en quelques jours de pratique. En effet, l'apprentissage du C est long, et il vous faudra entre quelques semaine et quelques mois selon votre assiduité et votre sérieux pour réaliser des programmes dit «  graphiques  ». Il existe en effet deux types de programmes : les programmes '''graphiques''' et les programmes en '''console'''.
 
=== Les programmes graphiques ===
Ligne 25 :
Voici un exemple de programme en console :
 
<sourcesyntaxhighlight lang="text">
12 - 7 = 5
Right!
Ligne 52 :
 
Press RETURN to continue...
</syntaxhighlight>
</source>
 
Dans un premier temps, ce sera le seul type de programme que nous allons créer. Rassurez-vous, vous pourrez bien entendu créer des programmes dotés d'une interface graphique en suivant ce cours car vous saurez utiliser d’autres bibliothèques, et pourrez ainsi créer tout ce qui vous passe par la tête.
Ligne 62 :
Je remets ce code ici pour que tout le monde aie le même :
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
 
Ligne 71 :
return 0;
}
</syntaxhighlight>
</source>
 
Si le code présent dans votre éditeur est différent de celui-ci, remplacer le, il est important que nous ayons le même. N'oubliez pas de sauvegardez même si le projet ne contient pas grand chose, c’est une bonne habitude à prendre et ça vous éviteras un bon nombre de mésaventures.
Ligne 79 :
On retrouve la ligne suivante tout en haut du programme :
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
</syntaxhighlight>
</source>
 
C'est une '''directive de préprocesseur''', facilement reconnaissable car elles commencent toutes par un '''#'''. Dans le cas présent, elle permet de charger des fichiers contenant des «  morceaux de code  » tout prêt qui permettent de réaliser de nombreuses actions basiques (afficher un message à l'écran, lire un fichier externe, quitter le programme, etc). En effet, sans ces morceaux de code, appelés '''fichiers d’en-tête''' (en anglais, on parle de ''headers''), le C ne sait pratiquement rien faire. On dit que c’est un ''langage modulaire''.
 
L’ensemble de ces fichiers d'en-tête est appelé '''bibliothèque''' de l'anglais « ''library'' » (Le mot «  library  » se traduit bien par «  bibliothèque  », et non «  librairie  »).
 
Dans notre cas, nous ne chargeons qu'un seul fichier d'en-tête : '''stdio.h''', qui signifie « '''St'''andar'''d i'''nput '''o'''utput », soit « Entrée-sortie standard ». Ce fichier d'en-tête va nous permettre de communiquer avec l'utilisateur en affichant des messages à l'écran et en récupérant les informations que celui-ci pourrait entrer.
Ligne 93 :
La partie suivante constitue le cœur du programme :
 
<sourcesyntaxhighlight lang="c">
int main(void)
{
}
</syntaxhighlight>
</source>
 
Ce bout de code constitue une '''fonction''', dans le cas présent, c’est la fonction '''main''' (prononcez «  mèïne  ») qui est représentée. Un programme en C se compose en grande majorité de fonctions, qui sont un ensemble d'instructions que l’on peux appeler à n’importe quel moment dans le programme. La fonction main est la fonction principale de tout programme écris en C, le programme commence en suivant les instructions contenues dans cette fonction et se termine après avoir atteint la fin de celle-ci. En théorie, il donc possible d'écrire tout notre programme dans cette fonction '''main''', néanmoins, les programmes que vous allez réaliser vont très rapidement se complexifier, et il sera alors primordial d'organiser son code en plusieurs fonctions intelligemment choisies. Par exemple, si notre programme nécessite à plusieurs reprises de calculer la racine carrée d'un nombre, il peut-être judicieux de créer une fonction '''calculer_racine_carree''' à qui l’on transmettra un nombre et qui nous renverra la racine carrée de celui-ci.
 
Une fonction est délimitée par des accolades ('''{''' et '''}'''), et toutes les instructions d'un programme en C se trouvent à l’intérieur d'une fonction. Dans un premier temps, nos programmes seront uniquement constitués de cette seule fonction, il est donc très important de ne rien écrire en dehors des accolades. De plus, un programme en C doit toujours se terminer par une ligne vide, faites donc toujours l'effort d’en ajouter une après l'accolade fermante.
 
Notre fonction main contient le mot «  '''void'''  » entre parenthèses, ce qui signifie que l’on ne donne aucun paramètre à la fonction main, il est en effet possible de le faire mais ce n’est pas de notre niveau.
 
=== Les instructions ===
Ligne 110 :
À l’intérieur de notre fonction main, on retrouve deux '''instructions''', ce sont des ordres donnés à l’ordinateur pour exécuter une tâche précise. Dans le cas présent, ces instructions sont les suivantes :
 
<sourcesyntaxhighlight lang="c">
printf("Hello world!\n");
return 0;
</syntaxhighlight>
</source>
 
La première de nos deux instructions est celle-ci :
 
<sourcesyntaxhighlight lang="c">
printf("Hello world!\n");
</syntaxhighlight>
</source>
 
Cette instruction appelle une fonction qui permet d'afficher le message entre guillemets à l'écran, dans notre cas, elle affiche donc le message «  '''Hello world!'''  ». Le symbole «  \n  » placé à la fin permet de demander à la fonction de faire un retour à la ligne. Cette instruction se termine par un point-virgule, c’est le cas de toutes les instructions en C (il existe néanmoins certaines exceptions que nous aurons l’occasion de voir des les chapitres suivants), l'oubli d'un point-virgule à la fin d'une instruction ferra systématiquement échouer la compilation. Ne pas mettre de point-virgule est une erreur courante chez les débutants en C, soyez donc particulièrement vigilant la dessus.
 
Revenons un instant sur ce qui a été dit plus haut : « cette instruction appelle une fonction », pourtant, il avait été stipulé précédemment que le programme était uniquement constitué de la fonction '''main'''. En fait, '''printf''' est une fonction toute prête, inclue et utilisable grâce aux directives de préprocesseur dont je vous ai parlé. La fonction principale '''main''' fait donc appel à la fonction '''printf''' afin d'afficher un message à l'écran. C’est comme ça que chaque programme C est conçu : '''main''' appelle des fonctions qui à leur tour vont appeler d’autres fonctions, et ainsi de suite.
Ligne 127 :
La deuxième instruction est la suivante :
 
<sourcesyntaxhighlight lang="c">
return 0;
</syntaxhighlight>
</source>
 
Cette instruction permet, comme son nom l'indique, de '''retourner une valeur'''. C'est cette même instruction qui clôt une grande majorité de fonctions en C. Dans notre cas elle retourne 0, donc si la valeur 0 est renvoyée à la fin de l'exécution du programme, cela signifie que celui-ci a fonctionné. Par convention, les programmeurs utilisent la valeur 0 pour signifier que tout a fonctionné, et une autre valeur pour indiquer une erreur.
Ligne 141 :
Les '''mots-clés''' sont des mots spéciaux, réservés par le compilateur, que l’on ne peut pas utiliser à notre guise. Ils permettent entre autres la déclaration de fonctions, le renvois de valeurs, etc. 32 mots-clés sont réservés par le langage C, ceux-ci sont répertoriés dans la liste suivante (voir la norme C89 - A.1.1.2 Keywords) :
 
<sourcesyntaxhighlight lang="c">
auto double int struct
break else long switch
Ligne 150 :
default goto sizeof volatile
do if static while
</syntaxhighlight>
</source>
 
Nous aurons l’occasion d'étudier leur utilité en temps voulu tout au long de ce cours. Vous remarquerez que ces mots-clés sont automatiquement colorés par votre IDE ou votre traitement de texte si celui-ci gère la coloration syntaxique.
Ligne 160 :
Les opérateurs en C sont répertoriés dans la liste suivante (voir la norme C89 — A.1.1.6 Operators) :
 
<sourcesyntaxhighlight lang="c">
[ ] ( ) . ->
++ -- & * + - ~ ! sizeof
Ligne 167 :
= *= /= %= += -= <<= >>= &= ^= |=
, # ##
</syntaxhighlight>
</source>
''Vous noterez que '''sizeof''' est à la fois un mot-clé et un opérateur.''
 
En C, les opérateurs peuvent être classés parmi sept catégories  :
 
# les opérateurs arithmétiques
Ligne 191 :
! Instruction en C !! ''Traduction'' en français
|-
| <sourcesyntaxhighlight lang="c">
printf("Hello world!");
</sourcesyntaxhighlight> || Affiche le message «  Hello world!  ».
|-
| <sourcesyntaxhighlight lang="c">
return 2 + 5;
</sourcesyntaxhighlight> || Renvoie la valeur 2 + 5.
|}
Comme dis plus haut dans le chapitre, les instructions doivent toujours se terminer par un point-virgule, à quelques exceptions près sur lesquelles nous reviendrons plus tard dans le cours.
Ligne 209 :
! Expression en C !! Place de l’expression dans une ''phrase''
|-
|<sourcesyntaxhighlight lang="c">
"Hello world!"
</sourcesyntaxhighlight> || COD dans la phrase «  Affiche le message "Hello world!".  »
|-
|<sourcesyntaxhighlight lang="c">
2 + 5
</sourcesyntaxhighlight> || COD dans la phrase «  Renvoie la valeur 2 + 5.  »
|}
 
Ligne 223 :
La différence entre les deux notions d'instruction et d'expression est un peu subtile et conduit parfois à des confusions, afin d’être sûr que vous les avez bien assimilés, voici un dernier exemple reprenant les deux notions :
 
<sourcesyntaxhighlight lang="c">
x = 2 + 3;
</syntaxhighlight>
</source>
 
Il s'agit bien d'une instruction puisqu'on donne un ordre à l’ordinateur (« Affecte la valeur 2 + 3 à x »), mais on y retrouve aussi une expression qui produit la valeur 5 comme résultat. Vous verrez qu’en C, la majorité des lignes de code sont des instructions contenant des expressions. C’est ce qui s’appelle la '''programmation impérative'''. C’est le choix des concepteurs du langage, mais ce n’est pas le seul «  type  » de programmation, il en existe bien d'autres qui ne nous concernent pas directement en tant qu’utilisateurs du C.
 
=== Les blocs d’instructions ===
Ligne 241 :
Lorsque l’on écrit un texte en français, on laisse de l'espace entre deux paragraphes afin de faciliter la lecture, il en va de même pour la programmation. On insère donc des retours à la ligne dans un code source pour le rendre plus clair et plus lisible. Par exemple, les deux codes ci-dessous sont identiques pour le compilateur, mais le second est plus lisible pour le programmeur que le premier.
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
int main(void)
Ligne 247 :
printf("How are you?\n");
return 7-(3+4);}
</syntaxhighlight>
</source>
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
 
Ligne 258 :
return 7-(3+4);
}
</syntaxhighlight>
</source>
 
Si l'ajout d'espace permet de gagner en lisibilité, cela est rarement suffisant, et il est important d'indenter son code. L’'''indentation''' permet de faire ressortir des blocs de code par l’ajout de tabulations ou d’espaces dans un code source. Un code bien indenté est un code clair et agréable à lire. Il existe de [[w:Style d'indentation|nombreux styles d’indentation]] différents. C'est à vous de choisir celui que vous préférez, et de vous y tenir. Ce cours utilisera quant à lui le style Allman (ou style ANSI).
Ligne 264 :
Pour bien illustrer cela, voici le code précédent, puis ce même code espacé et indenté :
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
int main(void)
Ligne 270 :
printf("How are you?\n");
return 7-(3+4);}
</syntaxhighlight>
</source>
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
 
Ligne 281 :
return 7 - (3 + 4);
}
</syntaxhighlight>
</source>
 
Il faut aussi que vous sachiez qu’il existe une ''règle'' qui limite le nombre de caractères par ligne à 80. C'est néanmoins un principe très ancien et vous n’êtes pas du tout obligé de l'adopter, ce ne seras d'ailleurs pas le cas dans ce cours. Mais sachez que certains l’utilisent encore, et ne soyez pas surpris si certains codes suivent cette règle.
Ligne 291 :
Un commentaire en C est écrit entre les signes ''/*'' et ''*/'' :
 
<sourcesyntaxhighlight lang="c">
/* Ceci est un commentaire */
</syntaxhighlight>
</source>
 
Un commentaire peut très bien s'étendre sur plusieurs lignes :
 
<sourcesyntaxhighlight lang="c">
/* Ceci est un commentaire qui
prend plusieurs lignes. */
</syntaxhighlight>
</source>
 
Si les commentaires sont important, en mettre trop risque de rendre le code encore plus compliqué à comprendre. Il faut donc trouver un juste milieu, c'est-à-dire commenter les points importants du programme sans pour autant commenter chaque ligne. De nombreuses instructions sont évidentes, et les commenter serais superflu. Par ailleurs, il est conseiller d'expliquer l'utilité d'une suite d'instruction de manière générale plutôt que de commenter chaque ligne une à une.
Ligne 308 :
Voilà à quoi ressemblerait notre code minimaliste (excessivement) commenté :
 
<sourcesyntaxhighlight lang="c">
/* Directive de préprocesseur qui permet de charger des fonctions utiles */
#include <stdio.h>
Ligne 323 :
 
/* Fin du code, le programme s’achève ici, après une ligne vide */
</syntaxhighlight>
</source>
 
{{Bas de page