I would try to add as much I know about externs
Its something like declaration of global variable which can be referenced across files.
Say you have declared a variable x in file1.c and would like to use the same variable ( Not just the variable name ) into some other file then in that other file you need to use the word extern to use the first variable declared in file1.
Same is the case with the functions / structures
Default size of enum is the maximum contained element size.