We saw earlier how the static storage class keyword was used for variables. When used with function prototypes or function definitions, it takes on a different purpose. With function prototypes, the static keyword indicates that the function will also be defined later with the static specifier, as follows:
#include "nameList.h"
static NameList* CreateNameList();
static ListNode* CreateListNode( char* pNameToAdd );
static bool IsEmpty();
static void OutOfStorage( void );
NameList* CreateNameList( void ) {
...
Each of these functions needs to be defined with the static keyword, which is now part of its full prototype. The static keyword in the function definition means that the function will not be exported to the linker. In other words, the static keyword in both the prototype and definition prevents the function from ever being called globally from any other file; it can only be called from within the file...