The C17 standard says that
If a translation unit contains one or more tentative definitions for an identifier, and the translation unit contains no external definition for that identifier, then the behavior is exactly as if the translation unit contains a file scope declaration of that identifier, with the composite type as of the end of the translation unit, with an initializer equal to 0.
Wouldn't this cause problems for extern-linkage identifiers? For example, if you had int i4; // tentative definition, external linkage
in a header that was included by two files, without any definition anywhere. According to the way the clause is worded, it would seem that you would now effectively have a definition of int i4 = 0
in each translation unit, which would cause a multiple definition error. Nowhere does it mention that a variable defined in a different translation unit preventing this implied behavior.
I'm using msvc 2019 as the toolchain.