Ver Mensaje Individual
  #6  
Antiguo 05-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola aguml.
Cita:
Empezado por aguml Ver Mensaje
¿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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita