Firstly, neither the first not the second is a "statement". In C language declarations are not statements. Declarations are declarations, statements are statements - in C these are two independent non-intersecting worlds.
Secondly, every definition is a declaration at the same time. Definition is just a particular kind of declaration. So it is not correct to contrapose declarations and definitions is such a mutually exclusive way.
Thirdly, what the comments say is correct and you are wrong. The first is a non-defining declaration. The second one is a definition.
Fourthly, the second one is a so called tentative definition - a C-specific feature. It has some peculiar properties. In general case, it does not necessarily define a variable with external linkage. The linkage of the variable it defines might depend on context. In your specific example, taken literally, it does indeed define a variable with external linkage. You can search on the term tentative definition to learn more about it.
Fifthly, Shildt's books are ripe with massive amount of terminological errors (and not just terminological ones). This is actually what they are mostly known for.