I hear often this is for backward compatibility with C. But C does not have access specifiers, so how can they break compatibility?
And a related question, why do mixed access specifiers allow the compiler to change the order of the members of a struct in memory?