It's a naming convention, this means that violating this rule will not immediately and directly lead to breaking your program, but it's a really really really really really really [ + infinite times ] a good idea to follow the convention.
The essence of the convention is to reserve :
- naming starting with
_ for the language entities, which includes the standard library
- naming starting with
__ for the compiler internals
it's also a really platform specific topic most of the times, many vendors respect this convention but they also have their own naming conventions and guidelines .
You can find more by search for c double underscore naming convention