Device-specific headers (ie: p18fxxx.h files) contain variable declarations and constant definitions. This may lead to clashes with your own declarations. For example
struct Z { int a,b ; } ;
will lead to unexpected and hard to understand error message. The reason is simple: Z is defined by a macro as a numeric constant so your code will be expanded by the preprocessor to something like:
struct 2 { int a,b ; } ;which is hard to understand for the compiler. Hopefully, this situation is simple to avoid because the headers define uppercase only symbols. Do not use this kind of symbols yourself.