Ikariya@via.ecp.fr. Introduction Langage très répandu Noyau Linux VLC … Des avantages...

Preview:

Citation preview

ikariya@via.ecp.fr

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 !

Recommended