Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jun 2001 12:36:12 -0500
From:      Mike Meyer <mwm@mired.org>
To:        j mckitrick <jcm@FreeBSD-uk.eu.org>
Cc:        questions@freebsd.org
Subject:   Re: what does this define do?
Message-ID:  <15152.57100.616134.239729@guru.mired.org>
In-Reply-To: <21323580@toto.iv>

next in thread | previous in thread | raw e-mail | index | archive | help
j mckitrick <jcm@FreeBSD-uk.eu.org> types:
> at the risk of making a fool of myself (one which i am never hesitant to
> take  ;-) could someone explain to me how this macro
> 
> #define n(flags) (~(flags) & (flags))
> 
> is different from this one?
> 
> #define n(flags) 0

The first one can evaluate flags twice. If flags changes between the
evaluations, the value can be something other than zero. Here's a QAD
example:

#include <stdio.h>

#define n(flags) (~(flags) & (flags))

int x ;
int
f() {

  return x++ ;
}

main() {
  int c ;

  for (c = 0; c < 64; c += 1) {
    x = c ;
    printf("n(%d) is %d\n", c, n(f())) ;
  }
}

This isn't a practice I'd recommend, though.

	<mike
--
Mike Meyer <mwm@mired.org>			http://www.mired.org/home/mwm/
Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15152.57100.616134.239729>