PR_EXTERN is used for definitions of external functions or variables.
PR_IMPLEMENT is used for declarations of external functions or variables.
PR_CALLBACK is used for definitions and declarations of functions that are called via function pointers. A typical example is a function implemented in an application but called from a shared library.