Upload
arabelle-josse
View
106
Download
0
Embed Size (px)
Citation preview
Introduction
Langage très répanduNoyau LinuxVLC…
Des avantages indéniables mais aussi des contraintes !
Ceci n’est qu’un rapide tour d’horizon
Ca s’apprend par la pratique !
Sources de documentation Internet
http://www.developpez.com/Google…
Bouquins divers et variés(mais ca coûte cher et utilitévariable)
Cédricstilgar sur IRC
Ce qu’il faut savoir à tout prix !
La Compilation - 1
Traduire un fichier texte brut compréhensible par l’humain en un fichier exécutable par la machine
Un peu plus complexe en fait …
MonCodeSource.c MonProgramme.exe
La Compilation - 2
Compilation != édition de liens
source1.c source1.o
source2.csource2.o
executable
Premier Programme !#include <stdio.h>
int main(void){ /* Pas de “Hello World !” pour nous
on a plus de classe quand même */ printf(“Tagazok !\n");
return( 0 );}
Structure d’un programme Des commentaires Des directives de précompilation Des déclarations de variables Des déclarations de fonctions Des déclarations de types personnalisés Des instructions Des appels de fonctions
Commentaires
/* Ceci est
un commentaire sur
plusieurs lignes */
// Celui-ci
// aussi !
// Sur une seule ligne !
Types de données – 1 :Les entiers
char short long int short ≤ int ≤ long signed / unsigned …
Types de données – 2 :Les flottants
float double signed / unsigned …
Définition de variablestype mavariable;type mavariable = valeur;type montableau[taille];type montableau[taille1]…[tailleN];
int i;int j = 31337;char a, b='c';char chaine[]= "Ceci est une chaîne de
caractères\n";
float tab[3];tab[0]=1.0; tab[2]=6.9; tab[1]=5.1;
Instructions / Opérateurs
arithmétique+, -, /, *, %
affectation=+=, -=, /=, *=, %=
comparaison==, >, >=, <,<=, !=
logique&&, ||, !
binaire&, ~, |, >>, <<
Une instruction se termine par un ;
Printf (dans stdio.h)
printf("chaine de format",paramètres…);
printf("une %s dans une autre !", "chaîne");
printf("un entier : %d, un float : %f",42, 51.0/69.0);
printf("le format ? : %0.2f%%\n", 51.0/69.0);
Structures conditionnellesif(condition) {
instructions;
} else {
instructions;
}
switch(variable ou valeur) {case valeur1:
instructions;break;
case valeur2:instructions;break;
default:instructions;
}
Forme condensée de If/Else :(condition)?inst_true:inst_false;
Structures de boucleswhile( condition ){ instructions}
do{ instructions} while( condition );
for( instruction ; condition; instruction ){ instructions}
break / continue
Exemple#include <stdio.h>
int main(void){ int i;
for( i = 0; i < 12; i++ ) { printf( "i vaut %d\n", i ); } return 0;}
« Equivalence » while / for
for( int i = 0; i < 12; i++ ){
printf( "i vaut %d\n", i );}
int i = 2;while( i < 12 ){ printf( "i vaut %d\n", i ); i++;}
do - while != whileint i = 42;do { printf( "i vaut %d\n", i ); i++;} while( i < 12 )
int i = 42;while( i < 12 ){ printf( "i vaut %d\n", i ); i++;}
Définition de fonctionstype nom_de_fonctions(paramètres)
{
variables locales
code en C
}
return signature et prototype variables locales et portée
Exempleint carre(int x)
{
return x*x;
}
void affiche(float x)
{
int variable_inutile;
printf("%f\n",x);
}
void plusun(void)
{
int i = 2;
}
int main(void)
{
int i = 1;
printf("i = %d\n",i);
plusun();
printf("i = %d\n",i);
return 0;
}
Directives de pré compilation Inclusion de header :
#include <headerstd.h>#include " monheader.h "stdio.hmath.hstring.hassert.h…
librairie standard ! #define
Aie aie aie Caramba !
Les pointeurs
Faisons simple:
un pointeur c’est une adresse. Ca se définit avec le symbole *. Un pointeur pointe vers une variable. On peut modifier le pointeur ou la
variable pointée
Démonstration en image :
Exemple pointeurint i=51, j=69;
int *pointeur;
pointeur = &i;
*pointeur = 31337;
Exemple pratique
void echange( int *p_x, int *p_y ){ int tmp;
tmp = *p_x; *p_x = *p_y; *p_y = tmp;}
int a,b;echange( &a, &b );
void echange( int x, int y ){ int tmp;
tmp = x; x = y; y = tmp;}
int a,b;echange( a, b );
Avantage et inconvénients C’est cool, rapide et efficace surtout ! Gain en performances considérables
notamment lors des appels de fonctions
Cependant, au début, on mélange et c’est rapidement le bronx.
la class ! enfin presque (voir en C++)
Structuresstruct nom_structure {
type1 champs1;
type2 champs2;
};
struct point {int x,y;}
struct point p1, p2, *p_p3;
p1.x = 12;
p1.y = 42;
p2 = p1;
p_p3 = &p1;
p_p3->x = 51;
p_p3->y = 69;
Union
Comparable à un struct, mais les variables sont situées au même endroit en mémoire.
union mon_union { int a;
char tab[4]; /* sur une machine 32 bits */
};
union mon_union zone;
Enum
Liste de valeur énumérée entières constantes
enum couleur { rouge , bleu , vert , jaune};
enum mois { janvier = 1 , fevrier , mars , …
enum couleur variable = rouge;
variable = vert;
Types personnaliséstypedef type_existant nouveau_type;
typedef struct point point_t;
typedef int mon_entier;
mon_entier a = 42;
point_t pt;
pt.x = 51;
pt.y = 69;
Les enfants, ne faites pas cela chez vous !
Malloc / Free
Allouer/Désallouer dynamiquement de la mémoire pour des zones ou des variables
typedef struct point { int x,y; } point_t;point_t *p_pt;p_pt = malloc( sizeof( point_t ) );p_pt->x = 7; ......free( p_pt );
La fuite mémoire vous guette Toujours désallouer les zones mémoire
allouées
while(1) {
malloc(size_of(int));
}
Durée de vie du système ?
Apres cette courte présentation …A vos compilateurs !