====== Note de préparation d'atelier pour débuter en langage C/C++ ====== //Si un peu de musique vous aide à vos concentrer : https://www.musicforprogramming.net // ===== Pré-requis ===== * un ordinateur focntionnant sous Linux/Debian * Une connexion internet, du moins pour le temps d'installer les nécessaires si manquants * 1h de temps à partager :!: ET C'EST TOUT :!: ===== Intro ===== ==== ? ==== ==== Nécessaires ==== Pour compiler un programme C ou C++ sur n'importe quelle distribution Linux comme Ubuntu, Red Hat, Fedora, Debian et autres distributions Linux : * Compilateurs avec collection C et C++ de [[wp>fr:GNU]] * Outils de développement * Bibliothèques de développement * IDE ou éditeur de texte pour écrire des programmes > « //[[https://gcc.gnu.org/|GNU Compiler Collection]] inclut des applications (front ends) pour C, C++, Objective-C, Fortran, Ada, Go, et D, ainsi que des bibliothèques pour ces langages (libstdc++,...). GCC a été écrit à l'origine comme compilateur pour le système d'exploitation GNU. Le système GNU a été développé pour être 100% libre, libre en ce sens qu'il respecte la liberté de l'utilisateur.// » GCC peut être installé par défaut sur votre machine Linux/Debian, exemple ouvrez votre terminal habituel et tapez la commande : $ gcc --version gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Ensuite regardons le manuel fourni avec gcc en utilisant la commande $ man gcc {{ man_gcc.png }} Le manuel gcc étant très conséquent, nous pouvons utliser [[https://tldr.sh/|tldr]] {{ tldr_gcc.png }} ===== C ===== * [[https://wiki.sei.cmu.edu/confluence/display/c/SEI+CERT+C+Coding+Standard|SEI CERT C Coding Standard]] ==== Pourquoi utiliser C ==== * Langage souple et puissant ; ex : système d'exploitation, traitement de texte, des graphiques, des tableurs ou compilateurs pour d'autres langage * Lors de l' apparition d'un nouvelle architecture, le premier langage dispo est couvent C car il est facilement portable. * Grace à la norme ANSI il peut être conçu pour un système et focntionner sur d'autres systèmes grace à la compilation. * Il contient peut de mots, expressions réservées appelées mots clés. * Le C est modulaire, son code s'écrit sous forme se sous programme appelé fonction. Ces fonctions peuvent être utilisées sur d'autres programmes. Si vous passez des informations à ces fonctions vous obtenez du code réutilisable. * C aide à comprendre le C++ ==== Avant de programmmer ==== - Identifier un problème à résoudre - Définir les objetcifs du programme - Choisir une méthode pour l'écrire - Créer le programme - Compiler et lier - Corriger - Exécuter et observer les résultats ==== Structure du programme ==== **Fonction ''main()''** C'est le seul bloc obligatoire en C. Ainsi le programme le plus court que l'on peut écrire en C est main(){ } Ou encore sous cette forme main() { } **Appel d'un fichier ''#include''** L'instcrution d'appel ''#include'' indique au compilateur C qu'il doit inclure le contenur d'un fichier pendant la compilation du programme. Il sont aussi appelé //fichiers d'en tête//. Plusieurs de ces fichiers sont livrés avec le compilateur, comme par exemple ''stdio.h'', extension de ces fichiers est ''.h''. Dans notre code cela prendra la forme #include int main() { /* nos sous-programmes aussi appelés fonctions */ } Ou encore #include int main() { /* Ce programme affiche Hello World! */ printf ("Hello World!\n"); } En ''C'' les espaces blancs n'ont pas d'incidence dans l'execuation du proramme, comme cela est le cas en ''python'', on peut mettre ''tab'', ''space'', ''newline'', presque n'importe où. **La définition de variable** Une //variable// est un nom donnée à une zone mémoire qui est nécessaire au programme pour stocker ses données en cours d'exécution. En C une varibale doit être définie avant d'être utlisée ; cette définition indique son nom au compilateur et le type de données que l'on pourra y stocker. #include int main() { int a,b,c; /* nos sous-programmes aussi appelés fonctions */ } Dans cette exemple la variable définie ''int a, b, c;'' définit trois variables appelées a, b et c, qui contiendront chacune une //valeur entière//. **La déclaration de fonction** Une //déclaration de fonction// ne doit pas être confondue avec //définition de fonction//. La //déclaration de fonction// indiuqe au compilateur **le nom et les arguments** d'une fonction qui sont à utiliser dans le programme. La //définition de fonction// contient les instructions propres à cette fonction. La déclaration peut être facultative si la fonction peut être définie avant tout appelà elle. **Les instructions** Elles contiennent le travail réalisé par le programme. Elles affichent les informations sur l'écran, lisent les données saisies au clavier, efectuent des opérations mathématiques, lisent les fichiers... Chaque //instruction// occupe générale **une ligne** et **se termine par '';''**. ===== Écire un programme « qui répète » une entrée standard ===== Soit un programme nommé ''perroquet.c'' /* perroquet.c : programme qui répète ce qu'il vient de lire au clavier */ #include #include int lire_clavier(char *str, int taille) { int i; fgets(str, taille, stdin); str[taille-1] = '\0'; for(i=0; str[i]; i++) /* supprime le retour chariot */ { if(str[i] == '\n') { str[i] = '\0'; break; } } return(i); /* Renvoie 0 si la chaine est vide */ } int main() { char buffer[80]; printf("Entrez une ligne et validez avec Entrée\n"); lire_clavier(buffer, sizeof(buffer)); printf("Vous avez écrit : '%s'\n", buffer); exit(EXIT_SUCCESS); } ===== C++ ===== langage de programmation créé par Bjarne Stroustrup et son équipe aux Laboratoires Bell en 1979. Quarante ans plus tard, c'est l'une des language les plus utilisées dans le monde. C++ est dérivé du langage de programmation C ; le ++ est l'opérateur d'incrémentation en C. Le but de Bjarne était d'ajouter une programmation orientée objet au langage C, qui était et est toujours un langage bien respecté pour sa portabilité et ses fonctionnalités de bas niveau. Parmi d'autres choses : * Il est rapide et flexible. * Il est bien appuyé. * Elle vous force à penser de manière nouvelle et créative. {{ c++.png }} Chaque variable a un type, qui représente le type d'information que vous pouvez y stocker. Cela indiqueau compilateur la quantité de mémoire à mettre de côté pour la variable et sert à définir exactement ce que vous pouvez faire avec la variable. En C++, les noms de variables se composent uniquement de lettres majuscules/minuscules, de chiffres et/ou de traits de soulignement. C++ est connu comme un langage fortement typé. Si vous essayez de donner un nombre décimal à une valeur entière, vous obtiendrez des résultats non désirés, des avertissements ou des erreurs. ==== Écire « Bonjour » ==== Ouvrons un fichier ''hello.cpp'', l'extension ''.cpp'' signifaint C++, dans un terminal avec l'éditeur de votre choix // g++ 7.3.0 #include int main() { std::cout << "Hello World!\n"; } ''Compilation time: 0.33 sec, absolute running time: 0.07 sec, cpu time: 0.01 sec, memory peak: 3 Mb, absolute service time: 0,41 sec'' * ''#include '' est la librairie de code inclue dans notre fichier * ''std::cout'' est le "flux de sortie des caractères". Il se prononce "see-out". * ''<<<'' est un opérateur qui vient juste après lui. * ''"Hello World !"'' c'est ce qui est sorti ici. Vous avez besoin de guillemets doubles autour du texte. ''\n'' est un caractère spécial qui indique une nouvelle ligne. * '';'' est une ponctuation qui indique à l'ordinateur que vous êtes à la fin d'une instruction. C'est semblable à une phrase === Les commenatires dans le code pour faciliter la collaboration === Il y a deux types de commentaires de code en C++ : Un commentaire d'une seule ligne commente une seule ligne et est indiqué par deux barres obliques avant ''%%//%%'' : // Imprime "bonjour !" sur le terminal std::cout <<< "hi!" ou encore std::cout <<< "hi !"; // Imprime "bonjour" dans le terminal ! Un commentaire de plusieurs lignes commencera par plusieurs lignes et sera indiqué par ''/*'' pour commencer le commentaire, et ''*/'' pour terminer le commentaire : /* Tout ceci est commenté. std::cout <<< "hi" ! Rien de tout ça ne sera interprété par le code ! */ ==== Compilons puis lançons notre « Bonjour » ==== Pour compiler avec ''gcc'' -(~/c-c++_test)------------------------------------------------(user@ubiome0)- `--> g++ hello.cpp -o hello .-(~/c-c++_test)------------------------------------------------(user@ubiome0)- `--> make hello make: « hello » est à jour. Puis lançons notre programme .-(~/c-c++_test)------------------------------------------------(user@ubiome0)- `--> ./hello Hello World! ==== Testons le standard de notre code ==== ==== Autres solutions ==== === Solution 1 === //g++ 7.3.0 #include int main(void) { printf("Hello, world!\n"); return 0; } '' Compilation time: 0.13 sec, absolute running time: 0.07 sec, cpu time: 0.01 sec, memory peak: 3 Mb, absolute service time: 0,2 sec'' === solution 2 === //g++ 7.3.0 #include using namespace std; int main() { cout << "Hello, world!" << endl; return 0; } ''Compilation time: 0.43 sec, absolute running time: 0.1 sec, cpu time: 0.02 sec, memory peak: 3 Mb, absolute service time: 0,53 sec'' ===== Ref et biblio ===== * [[wp>fr:C_(langage)|Langage C]] * [[https://www.cyberciti.biz/faq/howto-compile-and-run-c-cplusplus-code-in-linux/|How To Compile And Run a C/C++ Code In Linux]], last updated December 11, 2017 * [[https://rextester.com/l/c_online_compiler_gcc|RexTester, online compiler gcc]] * [[wp>List_of_tools_for_static_code_analysis#C,_C++|List of tools for static code analysis C, C++]]