In Keil demos, I find some definitions such as "#ifndef __C51__", what's the meaning for double '_'.
we have strayed from the original question... "2) There should never be any definition in a header file" Just to clarify, that means code or data definitions; type definitions and preprocessor #defines are good in headers.