On 01-Mar-00 Masayuki Etoh wrote: > Dear ROOTers, > > I tried the following macro on ROOT-2.23/11 and cint, I got "FALSE". > It should be "TRUE", right? C++ reference manuals state that && has precedence over ||, so (a==0 && a==0 || a==1) means ((a==0 && a==0) || a==1) and the expression should be evaluated to TRUE (since a is 1). I see the following (wrong) behaviour on ROOT: root [1] int a=1; root [2] if (a==0 && a==0 || a==1) printf("TRUE\n"); else printf("FALSE\n"); FALSE root [3] if (a==0 && (a==0 || a==1)) printf("TRUE\n"); else printf("FALSE\n"); FALSE root [4] if ((a==0 && a==0) || a==1) printf("TRUE\n"); else printf("FALSE\n"); TRUE The same program compiled with GNU g++ gives the correct sequence: TRUE FALSE TRUE Stefano Bettelli ---------------------------------------------------------- E-Mail: Stefano Bettelli <bettelli@tn.infn.it> WWW : http://meitner.tn.infn.it/~bettelli
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:20 MET