Algorithmique et Langage - Pages de Michel Deloizy - Free
Algorithmique et Langage - Pages de Michel Deloizy - Free
Algorithmique et Langage - Pages de Michel Deloizy - Free
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