In formal C term specifiers, such as extern , static , register , etc., storage class specifiers are called, but the actual properties of the objects that they control the qualifiers are called storage duration and association.
In your question, you seem to be confusing these two unrelated concepts: storage duration and communication. This is actually a relationship that describes the appearance of an object.
All variables defined in the file area have a static retention period (regardless of whether the declaration used the static ). It just means that they live forever, but do not say anything about their appearance. Meanwhile, variables defined with the static have an internal connection, and variables defined without any keywords or with the extern keyword have an external connection.
In your example, the Road variable has a static storage duration and external link, so you can access it directly from other translation units. The Count variable has a static storage duration and internal communication, so you cannot access it directly from other translation units.
If you declare a variable without a storage class specifier (for example, Road in your example), it will be considered as a so-called preliminary definition and, finally, it will allow (in your example) a variable with static storage time and external communication, Thus, from this point view, we can say that the default class specifier (implied) for file scope variables is actually extern , not static .
source share