« Introduction au langage C/Premier programme » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
m Robot : Remplacement de texte automatisé (-(<|</)source([ \t>]) +\1syntaxhighlight\2)
Ligne 15 :
Coller le code ci-dessous dans un fichier nommé ''hello.c''.
 
<sourcesyntaxhighlight lang="c">
/*
Nom : hello.c
Ligne 34 :
return EXIT_SUCCESS;
}
</syntaxhighlight>
</source>
 
Sous Windows ou Unix, lancer la commande de compilation :
<sourcesyntaxhighlight lang=bash>
gcc hello.c -o hello
</syntaxhighlight>
</source>
Ensuite il suffit d'exécuter le fichier créé par cette opération (''hello'').
 
Ligne 49 :
* de façon classique en C, qui commence avec <code>/*</code> et finit avec <code>*/</code> :
 
<sourcesyntaxhighlight lang="c">
/* le commentaire commence ici
et se termine ici */
/* Un commentaire sur une seule ligne */
</syntaxhighlight>
</source>
 
* depuis C99, comme en C++ pour une seule ligne :
 
<sourcesyntaxhighlight lang="c">// commentaire</sourcesyntaxhighlight>
 
Conseils de codage à respecter : [[b:Conseils de codage en C/Lisibilité des sources#Cartouche d'entête (c_lis_1)|c_lis_1]], [[b:Conseils de codage en C/Lisibilité des sources#Indentation des commentaires (c_lis_3)|c_lis_2]], [[b:Conseils de codage en C/Facilité de modification#Écrire des commentaires fonctionnels (c_mod_2)|c_mod_2]].
Ligne 63 :
=== Include ===
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h>
</sourcesyntaxhighlight>
 
Lors d'un processus appelé "précompilation", un petit programme que l’on appelle [[Langage C/Le préprocesseur|préprocesseur]] ajoute, supprime et remplace des parties de votre source. Il traite les lignes commençant par le signe #. Cette précompilation fait partie de la chaine de compilation mais ce processus n’est pas lié directement à la compilation elle-même : le préprocesseur ne connait pas le langage C. C'est un programme qui manipule du texte.
Ligne 71 :
L'option -E du compilateur gcc permet de voir à l'écran le résultat de cette phase.
 
<sourcesyntaxhighlight lang="bash">
gcc -E hello.c | more
</syntaxhighlight>
</source>
 
Le code <code>#include <stdio.h></code> demande au préprocesseur d'inclure le fichier [[w:en:stdio.h|stdio.h]], qui contient le prototype (la description) de la fonction <code>puts</code>, utilisée plus tard dans le programme. Ce fichier d'extension '''.h''' est situé le plus souvent dans le dossier '''/usr/include''' ou dans un fichier de l'arborescence liée au compilateur, que nous aborderons [[Langage C/Le préprocesseur#Inclusion de fichier|plus tard dans le cours]].
Ligne 90 :
Si l’on ne veut pas récupérer de paramètres de la ligne de commande qui a permis de lancer l'exécutable :
 
<sourcesyntaxhighlight lang="c">
int main(void)
{
return EXIT_SUCCESS;
}
</syntaxhighlight>
</source>
 
ou en souhaitant utiliser les paramètres :
 
<sourcesyntaxhighlight lang="c">
int main(int argc, char *argv[])
{
return EXIT_SUCCESS;
}
</syntaxhighlight>
</source>
 
L'argument argc donne le nombre d'arguments reçus augmenté de un. L'argument argv donne la liste des arguments passés à l'appel de notre programme. C'est un tableau de chaines de caractères avec argv[0] : le nom du programme, argv[n] : valeur du paramètre numéro n.
Ligne 118 :
==== Retour de valeurs ====
 
<sourcesyntaxhighlight lang="c">
return EXIT_SUCCESS;
</syntaxhighlight>
</source>
 
Le '''return EXIT_SUCCESS''' est là pour signifier au système d'exploitation que le logiciel a été exécuté sans erreur. EXIT_SUCCESS est une constante qui vaut 0, elle est définie dans [[w:en:Stdlib.h|stdlib.h]].
Ligne 136 :
Si une fonction retourne une valeur que l’on souhaite stocker dans une variable, la syntaxe suivante est utilisée pour son appel :
 
<sourcesyntaxhighlight lang="c">
variable = nom_de_la_fonction(argument1, argument2);
</syntaxhighlight>
</source>
 
{{ Exemple
| contenu =
<sourcesyntaxhighlight lang="c">
/* Le prototype de la fonction fabs
se trouve dans l'include math.h */
Ligne 152 :
Cette fonction fabs attend un paramètre de type double
et retourne une valeur de type double. */
</syntaxhighlight>
</source>
}}
 
ou si on ne souhaite pas utiliser le code retour de la fonction :
 
<sourcesyntaxhighlight lang="c">
(void)nom_de_la_fonction(argument1, argument2);
</syntaxhighlight>
</source>
 
{{ Exemple
| contenu =
<sourcesyntaxhighlight lang="c">
(void)puts("Bonjour le monde");
</syntaxhighlight>
</source>
}}
 
Exemple de fonction bonjour qui n'accepte pas de paramètre et ne retourne pas de valeur :
 
<sourcesyntaxhighlight lang="c">
bonjour();
// C'est une fonction fictive qui afficherait bonjour par exemple.
</syntaxhighlight>
</source>
 
Le code retour, les paramètres (nombre et types) d'une fonction doivent être conformes à ceux définis dans son prototype sous peine d'erreur ou d'avertissement lors de la compilation. Si le compilateur est ancien ou rendu laxiste, cela pourra conduire à une erreur difficile à trouver lors de l'exécution du programme.
Ligne 215 :
Vous devriez voir s'afficher :
 
<sourcesyntaxhighlight lang="bash">
MacMini-TM:~/Documents/developpement/c thierry$ ./hello.exe
Bonjour le monde
MacMini-TM:~/Documents/developpement/c thierry$
</syntaxhighlight>
</source>
 
Conseil de codage à respecter : [[b:Conseils de codage en C/Robustesse des programmes#Compilation stricte et outils qualité (c_rob_1)|c_rob_1]].