Public vars live beyond the end of the program that creates them. That is the difference and it is a BIG difference. Imagine developing an app and then later deciding to call it from another. The public vars in that app will outlive it and possibly cause problems in the calling app, however privates will go out of scope as soon as the main routine for the app ends preventing accidental problems with calling apps.