On Fri, Dec 10, 2010 at 22:03, Paul Eggert <eggert@xxxxxxxxxxx> wrote: > On 12/10/10 09:33, Ben Pfaff wrote: >> Is it even necessary to drag the preprocessor into it? >> >> if (-1 >> 1 == 1) > > Yes, good point: in many cases that suffices, > and if it works it's typically better to avoid the > preprocessor. > > On 12/10/10 09:17, Andrew W. Nosenko wrote: > >> Why do you think that preprocessor should match the >> behavior of compiler??? > > Because in practice, when they don't, Bad Things Happen, > this being one of the least of the problems. Generally > speaking, it's not worth worrying about mismatches when > one mixes a preprocessor from source A (or for machine A) > with a compiler from source B (or for machine B). > > For example, if LONG_MAX from the preprocessor is less than the > actual maximum long int value supported by the compiler, then > it's better to treat the weird compiler+preprocessor behavior > as being buggy, and to fix the bug rather than contort the > code with some complicated Autoconf test. Alternatively, > if it's easy, it's even better to modify the code so that > it works regardless of whether LONG_MAX is truly the maximum > long int value; this avoids the need for any Autoconf > or other test. You mismatch the preprocessor function (find the LONG_MAX macro and replace it by it's definition found somewhere in header) with the function of compiler (inject proper search path to the preprocessor if compiler redefines some system's headers). > > The situation with -1 >> 1 is similar. > No, because replacement of macro by it's value is essentially search-and-replace, while evaluation of arithmetics expressions is essentially code interpretation. -- Andrew W. Nosenko <andrew.w.nosenko@xxxxxxxxx> _______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf