[so] [Laborator 2]

Darius Mihai dariusmihaim at gmail.com
Thu Apr 4 00:31:02 EEST 2019


On Thu, Apr 4, 2019 at 12:14 AM Paul-Stelian Olaru via so
<so at cursuri.cs.pub.ro> wrote:
>
> În Windows, BOOL nu e chiar un boolean. În Windows FALSE este 0, TRUE este 1 și BOOL este de fapt int și poate avea valori diferite (dar orice valoare nenulă trebuie tratată ca true). Yeah, IKR, not exactly intuitive. Winapi is weird.
>
>
>
> Sent from Mail for Windows 10
>
>
>
> From: Lepadatu Tiberiu Andrei via so
> Sent: Thursday, April 4, 2019 12:12 AM
> To: so at cursuri.cs.pub.ro
> Subject: [so] [Laborator 2]
>
>
>
> Salut!
>
>
>
> De ce in laboratorul2 [1] la exemplul de la Trunchierea fișierelor pe windows
>
> este comparat dwRet cu FALSE. Nu trebuia sa fie un BOOL intrucat
>
> ReadFile intoarce un BOOL?
>
>
>
> Stima,
>
> Tiberiu Lepadatu
>

Salut,

În C în general nu există tipul boolean, dacă te uiți oriunde, o să
constați că tipurile bool sau boolean în C sunt definite fie cu un
typedef, fie cu un enum. Dacă încerci, chiar dacă ai ceva de genul
`enum numbers { ZERO, ONE, TWO}; ` în C, și încerci să faci `enum
numbers n = 3;`, nu o să te oprească nimic. În cele din urmă, orice
tip este tradus de compilator în ceva care ocupă 1/2/4/8 bytes, deci
care clar poate să reprezinte mai mult decât dimensiunea inițială.

Dacă în C++ se face verificarea (presupun că se face, dar nu am prea
lucrat foarte mult în C++), este pentru că acolo tipul există definit
în limbaj de la început, iar compilatorul se ocupa de verificări
pentru tine, dar în cele din urmă true și false tot în 1 și 0 se
traduc (probabil poți face ușor un snippet care să modifice un bool la
o valoare diferită de 0 și 1 prin dereferențiere astfel încât să nu te
prindă compilatorul). Ce este drept, compilatorul "ar putea" să
verifice dacă încerci să atribui o valoare care nu este prin
define-urile unui enum și în C, dar probabil nu are niciun rost la
sfârșitul zilei.

Revenind la întrebarea inițială, Tiberiu, ai uitat să trimiți link-ul
către snippet. Mai exact cu ce te-ai aștepta să se compare? Pentru
claritate, sigur există undeva în cod `#define TRUE 1` și `#define
FALSE 0`, sau `enum BOOL { FALSE, TRUE};`, deci valorile sunt corecte
(se traduc la 0 și 1, cum este comportamentul așteptat).

All the best,
Darius


More information about the so mailing list