Unexpected behavior ? what am I missing?

HIGH and LOW are #defines in wiring.h, so the compiler replaces them by 1 and 0 when you compile:

#define HIGH 0x1
#define LOW 0x0

The same is true for INPUT and OUTPUT.

As far as I know, the Arduino software is not compiling your code, the GCC C/C++ compiler is.

  • Ben

Quite correct. The Ardino IDE is, essentially, a "pre-processor" which takes the various Arduino 'defines' and command directives and builds a .cpp file which then gets fed to the gcc compiler.

cheers ... BBR