PDA

View Full Version : [C] operazioni sui bit


JohnMarco
28-11-2013, 20:07
Salve a tutti, vi scrivo per sottoporvi una questione :cercando di costruire delle maschere di bit mi sono imbattuto in un errore da cui non riesco a venir fuori. Io dichiaro due costanti
#define CREATE 00001000;
#define OPEN 00002000;

e poi ad un certo punto nel codice, per sperimentare, faccio
flag = (CREATE | OPEN);
flag ho provato a dichiararla int, short e unsigned short, sempre con lo stesso risultato. Il compilatore, su quella riga, mi risponde
error: expected ‘)’ before ‘;’ token

Mentre, sostituendo nella stessa espressione l'operatore "|" con "&" mi viene risposto
error: lvalue required as unary ‘&’ operand

Come posso risolvere questa cosa?

Grazie

||ElChE||88
28-11-2013, 20:23
Il tuo codice viene espanso in:
flag = (00001000; | 00002000;);

PS: sei sicuro di voler definire le flag in ottale (02000) e non in esadecimale (0x2000)?

JohnMarco
28-11-2013, 21:03
Innanzitutto grazie per la risposta. Il tentativo l'ho fatto anche in esadecimale, con lo stesso esito. Ho preso quella definizione guardando le definizioni di Linux per i flag nelle aperture dei file o nell'utilizzo dei semafori. Quindi l'errore sarebbe nell'espansione, ma ciò deriva dalla definizione. Mi basta rimuovere il punto e virgola finale?

Oceans11
28-11-2013, 21:18
Quindi l'errore sarebbe nell'espansione, ma ciò deriva dalla definizione. Mi basta rimuovere il punto e virgola finale?

esatto!
Questo perchè con la direttiva #define stai dando istruzioni al preprocessore, istruzioni che non sono proprie del linguaggio.

bancodeipugni
28-11-2013, 21:28
le parentesi non sono necessarie

JohnMarco
29-11-2013, 10:29
Grazie mille.. Effettivamente era una banalità, però è uno di quei casi in cui cerchi l'errore più assurdo e non ti concentri sul semplice!! :) Grazie ad entrambi per le risposte