Hola aguml.
Cita:
Empezado por aguml
¿hay diferencia entre hacerlo de una manera o de otra a la hora de la comparación?
|
Depende como hayas declarado la macro.
De este modo:
Código:
#define ON_WRITE PAGE_EXECUTE_READ | PAGE_GUARD
podría arrojar resultados no deseados debido a la precedencia de operadores. Declarada de ese modo, al expandirse en una evaluación tenemos que:
Código:
if (Valor == ON_WRITE)
es equivalente a escribir:
Código:
if ( (Valor == PAGE_EXECUTE_READ) | PAGE_GUARD)
ya que el operador "==" tiene mayor precedencia que el operador "|". Y definitivamente no es lo que buscas...
La declaración que corresponde a tu propósito es:
Código:
#define ON_WRITE ( PAGE_EXECUTE_READ | PAGE_GUARD )
que al expandirse queda:
Código:
if (Valor == ( PAGE_EXECUTE_READ | PAGE_GUARD ) )
Comprobación:
Código:
#define ON_WRITE1 288
#define ON_WRITE2 (PAGE_EXECUTE_READ | PAGE_GUARD)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if ( ON_WRITE1 == ON_WRITE2)
ShowMessage("ON_WRITE1 es igual a ON_WRITE2");
else
ShowMessage("ON_WRITE1 es distinto a ON_WRITE2");
}
Saludos
