About the habit of starting variable names with an underscore:
Brian W. Kernighan, Dennis M. Ritchie, The C programming Language second edition, 1988, Chapter 2.1 Variable Names:
Don’t begin variable names with underscore, however, since library routines often use such names
Bjarne Stroustrup, Programming: Principles and Practice Using C++, 2014, Chapter 3.7 names:
If you read system code or machine-generated code, you might see names starting with underscores, such as _foo. Never write those yourself; such names are reserved for implementation and system entities. By avoiding leading underscores, you will never find your names clashing with some name that the implementation generated.
Also, all identifiers that contain a double underscore __ in any position and each identifier that begins with an underscore followed by an uppercase letter is always reserved and all identifiers that begin with an underscore are reserved for use as names in the global namespace.