08.04.2014 Views

Algorithmique et Langage - Pages de Michel Deloizy - Free

Algorithmique et Langage - Pages de Michel Deloizy - Free

Algorithmique et Langage - Pages de Michel Deloizy - Free

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Fonctions à liste <strong>de</strong> paramètres<br />

variable<br />

! En C, on peut définir <strong>de</strong>s fonctions avec un<br />

nombre <strong>de</strong> paramètres inconnu :<br />

Exemples :<br />

void FctErr(int<br />

err, , …);<br />

int printf(const<br />

char *format, …);<br />

! Nécessité d'avoir au moins un paramètre connu<br />

! Gestion par va_list, va_start, va_arg, va_end<br />

→ définis dans stdarg.h<br />

M. <strong>Deloizy</strong> <strong>Langage</strong> C<br />

137<br />

Exemple<br />

void ErrPrintf(int ext, const char *fmt, …)<br />

{<br />

va_list ap;<br />

printf(ext ? "Erreur : " : "Avertissement : ");<br />

va_start(ap,fmt);<br />

vprintf(fmt,ap);<br />

va_end(ap);<br />

if(ext) exit(ext);<br />

}<br />

…<br />

F = fopen(nf="toto.dat","r");<br />

if(F==NULL) ErrPrintf(1,"Le fichier '%s' ne peut être<br />

ouvert.\n",nf);<br />

…<br />

M. <strong>Deloizy</strong> <strong>Langage</strong> C<br />

138<br />

Signal<br />

! Gestion d'événements exceptionnels<br />

! Défini dans signal.h<br />

void (*signal(int<br />

int sig, void (*handler<br />

handler)( )(int)))(int);<br />

Détermine la façon dont les signaux ultérieurs seront traités.<br />

handler : fonction <strong>de</strong> traitement du signal<br />

Fonctions prédéfinies :<br />

SIG_DFL : comportement par défaut<br />

SIG_IGN : le signal sera ignoré<br />

R<strong>et</strong>our : handler ou SIG_ERR en cas d'erreur<br />

M. <strong>Deloizy</strong> <strong>Langage</strong> C<br />

139<br />

Signaux :<br />

<strong>Langage</strong> C<br />

SIGABRT : arrêt anormal<br />

SIGFPE<br />

: erreur arithmétique<br />

SIGILL<br />

SIGINT<br />

: instruction illégale<br />

: appel au système invali<strong>de</strong><br />

SIGSEGV : accès mémoire interdit<br />

SIGTERM : <strong>de</strong>man<strong>de</strong> d'arrêt du programme<br />

Quand signal survient :<br />

1. Le comportement par défaut est rétabli<br />

2. La fonction handler est appelée<br />

3. Si la fonction rend la main, le programme se poursuit à<br />

l'endroit où il avait été interrompu<br />

M. <strong>Deloizy</strong> <strong>Langage</strong> C<br />

140<br />

35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!