Históricamente BOOL
se usó como anything-not-0 = TRUE tipo. Por ejemplo, un procedimiento de diálogo devolvió un BOOL
, que podría llevar mucha información. La firma abajo es de Microsoft's own documentation:
BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
El resultado de la firma y la función combinó varios problemas, por lo que es in the modern API lugar
INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
Esta declaración de última moda tiene que seguir siendo compatible con el antiguo. Lo que significa que INT_PTR
y BOOL
tienen que ser del mismo tamaño. Lo que significa que en la programación de 32 bits, BOOL
es de 32 bits.
En general, desde BOOL
puede ser cualquier valor, no solo 0 y 1, es una idea muy poco buena para comparar un BOOL
a TRUE
. Y a pesar de que funciona para compararlo contra FALSE
, generalmente también es una mala práctica porque puede dar a la gente la impresión de que comparar con TRUE
sería correcto. Además, porque es bastante innecesario.
Por cierto, hay más tipos booleanos en el API de Windows, en particular VARIANT_BOOL
que es de 16 bits y donde lógico TRUE se representa como todo 1 la bitpattern, es decir -1
como un valor firmado y hellip;
Esa es una razón adicional por la que no es una buena idea comparar directamente con FALSE lógico o VERDADERO.
érase una vez, 'bool' no era del tipo C. Ver http://stackoverflow.com/questions/1608318/is-bool-a-native-c-type – dyp
oman Soy tan tonto, soy real dum real – y2k
. Sabía que PERO bool se había agregado a C, entonces, ¿qué es el HOLDUP? AQUÍ – y2k