Bonjour,
je travaille avec Borland C++ 5.0 et j'ai un petit problème d'effet de bord du apparemment à un passage de paramètre.
Je veux travailler sur des bytes et modifier et tester des bits.
Je joins un bout de programme qui met en évidence mon problème.
La fonction bclr fait un "bit clear" du bit N°n de octet.
Le problème: avant le scanf, data vaut bien 0xdf et au retour, si je rentre 7 pour num, data vaut maintenant 0 et num = 7
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 #include <stdio.h> #define byte unsigned char void bclr(byte n, byte &octet); void main(void) { byte data = 255; byte num; printf("\n data = %d",data); bclr(5,data); scanf("%hd",&num); printf("\n data = %d",data); } void bclr(byte n, byte &octet) { octet = octet & (~(0x01 << n)); }
Si maintenant je rentre 260 pour num, num vaut 4 et data vaut 1. sachant que 260 = 0x104, il apparait que bien que je manipule des unsigned char, le scan remonte une valeur sur 16 bits qui écrase donc data.
Si je ne fais pas l'appel de la fonction bclr, tout fonctionne bien.
Pouvez-vous m'expliquer ou je me suis planté?
Merci
Partager