Bonjour,
Je suis tomber sur le code d'une fonction memset en téléchargeant la libelf (http://directory.fsf.org/wiki/Libelf).
Voila a quoi ca resemble :
Je voulais savoir, quel interret de faire ca, alors que la fonction pourrait ressembler a ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 #if HAVE_CONFIG_H # include <config.h> #endif /* HAVE_CONFIG_H */ #ifndef lint static const char rcsid[] = "@(#) $Id: memset.c,v 1.10 2005/05/21 15:39:24 michael Exp $"; #endif /* lint */ #include <stddef.h> /* for size_t */ #include <sys/types.h> void* _elf_memset(void *s, int c, size_t n) { char *t = (char*)s; if (n) { switch (n % 8u) { do { n -= 8; default: case 0: *t++ = (char)c; case 7: *t++ = (char)c; case 6: *t++ = (char)c; case 5: *t++ = (char)c; case 4: *t++ = (char)c; case 3: *t++ = (char)c; case 2: *t++ = (char)c; case 1: *t++ = (char)c; } while (n > 8); } } return s; }
J'imagine que le mec qui a écrit ça avait une bonne raison de le faire, mais je comprend pas l'avantage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void *memset(void *s, int c, size_t n) { char *m; size_t i; c = m; i = 0; while (i < n) { m[i] = (char)c i++; } return (s); }
Si quelqu'un a l'explication![]()
Partager