Portable macros in base/macros.h

Fix #216.
Lint, not caught because the build failed.