The C way to deal with variables that are not supposed to be used by client programmers is by using the static keyword in global space. In this way the variables are not available to external files, so that, even if an implementation file imports the header that contains such private variables, they are unavailable (name-definition-unaware, or more technically: out of scope).
If I can recall correctly, extern variables are declared in the header and defined in the implementation file.
What disadvantages are there from e.g. C++'s private class members?