register is used to direct the compiler to use a register for storing this value, modern compilers optimize to use this during for-loops and the like.
volatile are varaibles that can be changed by an external process or during multithreaded application runtimes.
extern tells the linker that the variable is defined in a different file.
explicit directs the compiler not to allow implicit conversions of type.