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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
#include <stdio.h>
/* -ed- ajoute pour controles... */
#include <assert.h>
/* -ed-
#define byte unsigned char
Preferer le style 'typedef'. En fait, probablement inutile...
*/
/* -ed-
Il n'est pas utile de separer le prototype
si la fonction est dans la meme unite de compilation.
Il suffit de respecter le principe 'definir avant d'utiliser'.
void bclr(byte n, byte &octet);
*/
/* -ed- Deplace...
void bclr(byte n, byte *octet) {
octet = octet & (~(0x01 << n));
}
byte etant un type char, cette fonction gerere du code unutilement
complexe. En effet, en C, les parametres de type char sont automatiquement
convertis en int. Il est donc inutile de perdre son temps a utiliser char,
car ca ne fait qu'ajouter du code inutile.
De plus, il serait bien plus rentable d'utiliser le retour de la fonction...
*/
unsigned bclr (unsigned octet, unsigned n)
{
/* -ed- simple precaution. La methode est barbare mais efficace... */
assert (n < 8);
return octet & (~(0x01u << n));
}
/* -ed-
void main(void)
main() retourne int. Toujours...
*/
int main (void)
{
unsigned data = 255;
unsigned num;
/* -ed- un affichage en hexadecimal est plus clair quand on manipule
des bits...
La place du '\n' est en fon de ligne, pas en debut...
*/
printf ("data = %02X\n", data);
/* -ed- la logique de ce code est absurde...
bclr(5,data);
scanf("%hd",&num);
printf("\n data = %d",data);
*/
scanf ("%u", &num);
/* -ed- scanf () est une fonction difficile a utiliser correctement.
Il faudrait traiter les cas d'erreur...
Le C, n'est pas un langage de debutant. Trop de subtilites...
*/
/* -ed- il faudrait s'assurer qu'on ne va pas decaler de plus 7 ... */
data = bclr (data, num);
printf ("data = %02X\n", data);
return 0;
} |
Partager