user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 10-03-2013 19:31:44

IceF0x
#! Gourou Linux

[Tuto] introduction a la programmation C sous Linux

Sous Linux nous n'avons pas besoin de logiciel particulier pour pourvoir programmer en C,
certain d'entre vous on déjà lu le tutoriel du site du zéro qui vous propose d'installer un IDE:
http://www.siteduzero.com/tutoriel-3-13920-ayez-les-bons-outils.html#ss_par…

Sous Linux majoritairement les outils nécessaire à la compilation du C sont déjà présent,
il s'agit de "GCC" et d'un éditeur de texte "nano", "vi" ou encore "Gedit" en passant par "kate".

On va plus particulièrement s'intéresser à "GCC", http://gcc.gnu.org/ qui est un outil sous licence GNU abréviation de GNU Compiler Collection.
Il s'agit d'une collection de logiciels libres intégrés capables de compiler divers langages de programmation, dont C, C++, Objective-C, Java, Ada et Fortran.
GCC est utilisé pour le développement de la plupart des logiciels libres.
Le noyau Linux qui est codé en C, dépend notamment étroitement des fonctionnalités de GCC.

Donc pour commencer à programmer sous Linux il ne vous faut que ces 2 outils,
GCC et un éditeur de texte (bloc-notes sous Windows).

donc pour commencer nous allons prendre un éditeur de texte et taper les célèbres ligne de code "Hello World!"

vim premier.c

J'utilise vim qui est une extension de vi installé par défaut dans Linux
le fichier source doit comporter une extension .c et nous l'appellerons premier.

c-2ba43a8.png

que l'on compile avec GCC

gcc -o hello premier.c

Étudion la commande de compilation gcc

On appelle le compilateur: gcc

On lui indique le nom du fichier de sortie qu'aura le binaire: -o hello

On lui précise le fichier source: premier.c

Si la commande ne retourne aucune erreur, c'est que la compilation c'est bien déroulée, vous devriez retrouver un fichier binaire qui se nomme hello dans le répertoire courant.

$ ls -l hello
-rwxr-xr-x 1 coyotus coyotus 7143 2011-08-09 08:04 hello

Nous allons maintenant tester notre exécutable, je sent votre impatience wink.
Pour lancer un exécutable sous Linux il faut l'appeler en le précédant d'un point et d'un slash, "./".

$ ./hello
Hello World !coyotus@debian ~ $

Vous remarquerez que lorsque vous avez lancer hello le prompt vous est rendu sans retour à la ligne.
Pour que cela se produise il faut optimiser le code en lui rajoutant une option de retour à la ligne "\n".

Ce qui donnera:

printf("Hello World !\n");

un autre moyen d'afficher du texte suivi d'un retour à la ligne est d'utiliser le code puts:

puts ("Hello World");

Autre problème, certaine distribution ne vont pas lancer le programme (hé oui on est pas tout assisté comme le fait Ubuntu smile).

Il s'agit d'une sécurité qui empêche l'exécution de programme malicieux au clic,
pour palier à ce problème, il faut rendre votre binaire exécutable avec la commande "chmod".

"chmod" qui veux dire "change mode" en terme simple il va changer le mode du fichier pour le rendre exécutable.

Parmi les modes disponibles il en existe 3 principale ce sont les mode de lecture, d'écriture et d'exécution de fichier, connu sous la simplification de rwx pour read write execute.

Donc la commande dans notre cas pour rendre un fichier exécutable sera:

chmod +x fichier

Après ce petit écart sur les droit, on en reviens à notre programme, analysons le un peu

dans notre code nous avons une première ligne: #include <stdio> , elle est destinée au préprocesseur, ce sont des lignes qui seront lues par un programme appelé préprocesseur.
Ces lignes inclue des librairie ou bibliothèques dans le programme, ces librairie sont déjà incluse par défaut dans votre système afin de comprendre la suite du programme.

la librairie <stdio> est donc incluse a notre programme, un peux comme une préface à un livre qui vous dirait de lire un autre pour comprendre la suite.
la librairie <stdio> veux dire littéralement (st)andar(d) (i)nput (o)utput en français entrées et sorties standard et le .h est simplement l'extension du fichier de librairie.

la librairie standart d'entrées et de sorties gère grosso modo les entrée au clavier (scanf) et les sorties à l'écran (printf) de votre programme, mais pas que, mais vous ne devez pas en savoir plus pour ce premiers cours sinon ça serais vous bourrer le crane.

Ensuite le code principal est placé entre des accolade appelé bloc, on conseille de mettre une tabulation au retour à la ligne après une accolade, puis de retiré cette tabulation pour l'accolade qui ferme le bloc

{
    votre code;
}

En réalité on pourrais écrire le code sur une seule ligne, mais cela deviendrais vite illisible.

int main(){     printf("Hello World !");        getchar();}

En C la tabulation à moins d'importance qu'en python ou une erreur d'indentation provoque des erreur à l'exécution du code.

Les commentaire dans un code C est simplement placé entre un slash et une astérisque.

/*votre commentaire*/

Notez que si il tien que sur une seule ligne vous pouvez utilisez le double slash comme en C++.

//votre commentaire sur une seule ligne.

maintenant nous allons voir comment valider la fermeture du programme par l'appui sur une touche par exemple [ENTER], il suffit de rajouter "getchar"

Exemple concret:

#include <stdio.h>
int main()
{
    printf("Hello World !\n");
    getchar();
}

Désormais lorsque vous lancerez votre programme vous devrez appuyer sur une touche pour que la console vous rende la main.

Autre point à ajouter, est l'ajout de return 0, tout programme dois renvoyer une valeur de retour, cette valeur de retour permet de savoir si le programme qu'on exécute s'est correctement terminé.
En général 0 veux dire que le programme s'est terminé sans erreur.

#include <stdio.h>
int main()
{
    printf("Hello World !\n");
    getchar();
    return 0;
}

[size=18]Les variable, ça varie tongue[/size]

Afin de pouvoir stocker une valeur, on déclarera une variable, une variable comme son nom l'indique ça varie en fonction du code qui l'utilisera,
par exemple une variable qui vaudra 1 pourra devenir 2 si le code l'incrémente, +1.
On déclare une variable de cette façon, son type suivi de son nom, et ensuite son nom suivi de sa valeur.

Exemple

int i;
i = 0;

Pour afficher la variable avec printf on peux préciser si c'est un caractère, ou sa valeur, par exemple si l'on veux afficher indépendamment i ou 1.

On procédera donc de la sorte, on affichera la valeur de la variable grâce à ce code %d qui veux dire qu'on veux afficher une décimale donc un chiffre en base10,
on devra  préciser en fin de code quelle variable on veux voir afficher en décimale,
celà permet d'avoir plusieurs variable a, b, c, d qui valent 1, 2, 3, et 4.

Exemple:

#include <stdio.h>

int main()
{
int i;
i = 1;
        printf("i vaut %d\n", i);
        getchar();
}

Ce qui donnera en réponse:

$ ./hello
i vaut 1

maintenant qu'on à affiché une décimale, on voudrais afficher une virgule flottante.
pour afficher une virgule il faut lui préciser que c'est une valeur à virgule, %f (float).

Vous vous imaginerai qu'il suffit de mettre un code de ce genre:

include <stdio.h>

int main()
{
int i;
i = 1;
        printf("i vaut %d\n", i); //entier
        printf("i vaut %f\n", i); //à virgule
        getchar();
}

Mais à la compilation, une surprise vous attend smile

$ gcc -o hello premier.c
premier.c: In function ‘main’:
premier.c:8: warning: format ‘%f’ expects type ‘double’, but argument 2 has type ‘int’

Hé oui, lorsqu'on à déclaré la variable, nous l'avons déclaré de type int (entier) et non de type double.

Malgré cela, le programme va se compiler et s'exécuter.
Le Warning est en cela différent de l'Error.

$ ./hello
i vaut 1
i vaut 0.000000

Maintenant si on veux afficher des caractères, "a", "b", "c", on définira une variable de type caractère "char" du mot anglais "characters"

car-2bc33f4.png

La connaissance de base de l'anglais vous aidera beaucoup en programmation, tout les bon programmeurs savent lire et écrire en anglais.

Donc pour revenir à nos moutons, pour déclarer une variable de type caractères on utilisera non pas "int" mais "char".

#include <stdio.h>
int main()
{
    char cara;
    char carb;
    cara = 'a';
    carb = 'b';
   
    printf("l'alphabet commence par %c et %c\n",cara,carb);
    return 0;
}

Ce qui donne:

$ ./hello
l'alphabet commence par a et b

Juste pour appuyer sur un point important en C et C++ toujours initialisé vos variable notamment les entiers sinon vous risquez d'avoir des soucis  smile

Exemple faite :

#include <stdio.h>

int main()
{
int i;

        printf("i vaut %d\n", i);
        getchar();
} 
 

Il y a des chances pour que le résultat soit du grand n'importe quoi  smile  Pour preuve un test que j'ai fait sur mon PC avec le code a gauche et l'exécution en console à droite.

capture-1-2c4b3d1.png

Merci Inazo pour la précision.

Les conditions, à condition que tongue

Les conditions en programmation C, permette de par exemple faire des choix en fonction d'une action,
par exemple "si mon architecture est en 32 bit affiche ceci ou sinon si mon architecture est en 64 bit affiche cela ou quitte le programme" par exemple.

Exemple:

#include <stdio.h>

int main()
{
  char drive;
  printf("Choisissez le lecteur source: ");
  scanf("%c" ,&drive);

  int arch = 0;

  printf("choisissez votre architechture: ");
  scanf("%d" ,&arch);
    if (arch == 32)
    {
    printf("votre lecteur est %c  et votre architecture est %d\n bit", drive, arch);
    }
    else if (arch == 64)
    {
    printf("votre lecteur est %c et votre architecture est %d\n bit", drive, arch);
    }
    else
    {
    printf("veuillez entrez votre architechture\n");
    }
  return 0;
}

Suite du tuto au fur et à mesure.


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#2 10-03-2013 21:57:58

s.v.0.t
Membre

Re : [Tuto] introduction a la programmation C sous Linux

Merci !  smile

Edit: une question, tu écris "char cara" et "char carb" pour les caractères 'a' et 'b'

 #include <stdio>
int main()
{
    char cara;
    char carb;
    cara = 'a';
    carb = 'b';
   
    printf("l'alphabet commence par %c et %c\n",cara,carb);
    return 0;
}

On ne peut pas écrire ?

#include <stdio>
int main()
{
    char a;
    char b;
    a = 'a';
    b = 'b';
   
    printf("l'alphabet commence par %c et %c\n",a,b);
    return 0;
}

Ou la mention car est une abréviation obligatoire de "caractère" ?

Dernière modification par s.v.0.t (10-03-2013 22:05:31)


Ce ne sont pas les années de vie qui comptent, mais la vie qu'il y a dans ces années

Hors ligne

#3 10-03-2013 22:11:34

IceF0x
#! Gourou Linux

Re : [Tuto] introduction a la programmation C sous Linux

C'était pour faire comprendre qu'il s'agit bien de caractères.


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#4 03-08-2016 21:50:02

noYopt
Membre

Re : [Tuto] introduction a la programmation C sous Linux

Je te conseil d'ajouter les conditions, ça reste basique et plutôt simple à retenir, un exemple fabriqué juste pour toi :

1470253661-c-01.png

Si tu estime que tu dois l'intégrer à l'article plus haut (ou à un autre concernant les Conditions), au lieu de tout recopier à la main, voiçi un C/C :

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int age = 19; // Mise en place de la variable age

    printf("Quel âge avez-vous ? "); // Question
    scanf("%d", &age); // On utilise scanf pour poser la question

    if(age >= 18); // Si l'age est supérieur à 18
    {
        printf("Vous avez %d ans, vous pouvez continuer votre passage.\n", age); // La personne pourra continuer
    }
    else if (age < 18); // Sinon si son age est inférieur à 18
    {
        printf("Vous n'avez que %d ?! Vous ne passerez pas !\n", age); // La personne devra quitter les lieux
    }
    else (age == 17);  // L'age étant de quasiment 18, on le laisse passer par compation
    {
        printf("Une petite exception, mais juste cette fois !\n"); // La personne peut passer, mais de justesse
    }

    return 0;
}

Voilà pour toi !
Je n'ai à aucun moment voulu paraître arrogant en te donnant ce conseil. wink

noYopt.

Dernière modification par noYopt (03-08-2016 21:50:59)

Hors ligne

#5 04-08-2016 07:55:13

IceF0x
#! Gourou Linux

Re : [Tuto] introduction a la programmation C sous Linux

Désolé la réponse était pour ailleurs lol


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#6 04-08-2016 11:44:24

noYopt
Membre

Re : [Tuto] introduction a la programmation C sous Linux

Simpliste. big_smile

Hors ligne

#7 15-03-2019 05:55:31

petitegirafe
Membre

Re : [Tuto] introduction a la programmation C sous Linux

Merci IceFox  , mais je comprend mieux pourquoi je prefére le python  siffle  guantas
edit: eet oui je déterre des sujet ... dsl j'arrive pas à dormir  big_smile

Dernière modification par petitegirafe (15-03-2019 05:57:12)

Hors ligne

#8 15-03-2019 10:41:43

ZeR0-@bSoLu
Membre

Re : [Tuto] introduction a la programmation C sous Linux

Tu as pensé à prendre du somnifère pour girafe ? big_smile


Mess With The Bests
Die Like The Rest

Hors ligne

Pied de page des forums