Débuter avec le langage C

Bonjour le monde

Pour créer un programme C simple qui affiche “Hello, World” à l’écran, utilisez un éditeur de texte pour créer un nouveau fichier (par exemple, “hello. c— l'extension de fichier doit être.c`) contenant le code source suivant :

Bonjour c

#include <stdio.h>

int main(void)
{
    puts("Hello, World");
    return 0;
}

Démo en direct sur Coliru

Regardons ce programme simple ligne par ligne

#include <stdio.h>

Cette ligne indique au compilateur d’inclure le contenu du fichier d’en-tête de la bibliothèque standard “stdio.h” dans le programme. Les en-têtes sont généralement des fichiers contenant des déclarations de fonctions, des macros et des types de données, et vous devez inclure le fichier d’en-tête avant de les utiliser. Cette ligne inclut stdio.h afin qu’elle puisse appeler la fonction puts().

En savoir plus sur les en-têtes.

int main(void)

Cette ligne commence la définition d’une fonction. Il indique le nom de la fonction (main), le type et le nombre d’arguments qu’elle attend (void, signifiant aucun), et le type de valeur que cette fonction renvoie (int). L’exécution du programme commence dans la fonction main().

{
    …
}

Les accolades sont utilisées par paires pour indiquer où un bloc de code commence et se termine. Ils peuvent être utilisés de nombreuses façons, mais dans ce cas, ils indiquent où la fonction commence et se termine.

    puts("Hello, World");

Cette ligne appelle la fonction puts() pour afficher le texte sur la sortie standard (l’écran, par défaut), suivi d’une nouvelle ligne. La chaîne à sortir est incluse entre parenthèses.

"Hello, World" est la chaîne qui sera écrite à l’écran. En C, chaque valeur littérale de chaîne doit être entre guillemets "…".

En savoir plus sur les chaînes.

Dans les programmes C, chaque instruction doit être terminée par un point-virgule (c’est-à-dire ;).

    return 0;

Lorsque nous avons défini main(), nous l’avons déclaré comme une fonction renvoyant un int, ce qui signifie qu’il doit renvoyer un entier. Dans cet exemple, nous renvoyons la valeur entière 0, qui est utilisée pour indiquer que le programme s’est terminé avec succès. Après l’instruction return 0;, le processus d’exécution se terminera.

Édition du programme

Les éditeurs de texte simples incluent vim ou gedit sous Linux, ou Notepad sous Windows. Les éditeurs multiplateformes incluent également Visual Studio Code ou Sublime Text.

L’éditeur doit créer des fichiers en texte brut, et non RTF ou tout autre format.

Compilation et exécution du programme

Pour exécuter le programme, ce fichier source (hello.c) doit d’abord être compilé dans un fichier exécutable (par exemple, hello sur le système Unix/Linux ou hello.exe sur Windows). Cela se fait à l’aide d’un compilateur pour le langage C.

En savoir plus sur la compilation

Compiler avec GCC

GCC (GNU Compiler Collection) est un compilateur C largement utilisé. Pour l’utiliser, ouvrez un terminal, utilisez la ligne de commande pour accéder à l’emplacement du fichier source, puis exécutez :

gcc hello.c -o hello

Si aucune erreur n’est trouvée dans le code source (hello.c), le compilateur créera un fichier binaire, dont le nom est donné par l’argument de l’option de ligne de commande -o ( bonjour). Ceci est le fichier exécutable final.

Nous pouvons également utiliser les options d’avertissement -Wall -Wextra -Werror, qui aident à identifier les problèmes pouvant entraîner l’échec du programme ou produire des résultats inattendus. Ils ne sont pas nécessaires pour ce programme simple mais c’est une façon de les ajouter :

gcc -Wall -Wextra -Werror -o hello hello.c

Utilisation du compilateur clang

Pour compiler le programme à l’aide de clang, vous pouvez utiliser :

clang -Wall -Wextra -Werror -o hello hello.c

De par leur conception, les options de ligne de commande clang sont similaires à celles de GCC.

Utilisation du compilateur Microsoft C depuis la ligne de commande

Si vous utilisez le compilateur Microsoft cl.exe sur un système Windows prenant en charge Visual Studio et si toutes les variables d’environnement sont définies, cet exemple C peut être compilé à l’aide de commande suivante qui produira un exécutable hello.exe dans le répertoire dans lequel la commande est exécutée (il existe des options d’avertissement telles que /W3 pour cl, à peu près analogues à -Wall etc pour GCC ou clang).

cl hello.c

Exécution du programme

Une fois compilé, le fichier binaire peut alors être exécuté en tapant ./hello dans le terminal. Lors de l’exécution, le programme compilé affichera “Hello, World”, suivi d’une nouvelle ligne, à l’invite de commande.

[1] : https://en.wikipedia.org/wiki/C99

Original “Hello, World!” dans K&R C

Ce qui suit est l’original “Hello, World!” programme du livre [The C Programming Language] [1] de Brian Kernighan et Dennis Ritchie (Ritchie était le développeur original du langage de programmation C chez Bell Labs), appelé “K&R”:

#include <stdio.h>

main()
{
    printf("hello, world\n");
}

Notez que le langage de programmation C n’était pas standardisé au moment de la rédaction de la première édition de ce livre (1978), et que ce programme ne se compilera probablement pas sur la plupart des compilateurs modernes à moins qu’ils ne reçoivent l’instruction d’accepter le code C90.

Ce tout premier exemple du livre K&R est maintenant considéré comme de mauvaise qualité, en partie parce qu’il manque un type de retour explicite pour main() et en partie parce qu’il manque une instruction return. La 2e édition du livre a été écrite pour l’ancienne norme C89. Dans C89, le type de main serait par défaut int, mais l’exemple K&R ne renvoie pas de valeur définie à l’environnement. Dans les normes C99 et ultérieures, le type de retour est requis, mais il est prudent d’omettre l’instruction return de main (et uniquement main), en raison d’un cas particulier introduit avec C99 5.1.2.2.3 — cela équivaut à renvoyer 0, ce qui indique le succès.

La forme recommandée et la plus portable de main pour les systèmes hébergés est int main (void) lorsque le programme n’utilise aucun argument de ligne de commande, ou int main(int argc, char **argv) lorsque le programme utilise utilisez les arguments de la ligne de commande.

C90 §5.1.2.2.3 Arrêt du programme

Un retour de l’appel initial à la fonction main équivaut à appeler la fonction exit avec la valeur renvoyée par la fonction main comme argument. Si la fonction main exécute un retour qui ne spécifie aucune valeur, l’état de terminaison renvoyé à l’environnement hôte est indéfini.

C90 §6.6.6.4 L’instruction return

Si une instruction return sans expression est exécutée et que la valeur de l’appel de fonction est utilisé par l’appelant, le comportement n’est pas défini. Atteindre le } qui termine une fonction est équivalent à l’exécution d’une instruction return sans expression.

C99 §5.1.2.2.3 Arrêt du programme

Si le type de retour de la fonction main est un type compatible avec int, un retour de la l’appel initial à la fonction main équivaut à appeler la fonction exit avec la valeur renvoyé par la fonction main comme argument ; atteignant le } qui termine le La fonction main renvoie une valeur de 0. Si le type de retour n’est pas compatible avec int, la l’état de terminaison renvoyé à l’environnement hôte n’est pas spécifié.

[1] : https://en.wikipedia.org/wiki/The_C_Programming_Language [2] : https://www.wikiod.com/fr/c/comportement-indefini