Before an identifier can be used in C, it must be declared: the compiler needs to know what that name represents. Keywords are different; the language defines them, so they are not declared. TAKEAWAY: Declare identifiers before using them. section 2.2
int main(int, char*[]); int argc; [[maybe_unused]] char* argv[]; double A[5]; size_t I;
These declarations associate names with types and shapes. Parentheses mark main as a function; brackets mark A and argv as arrays. In double A[5], the five elements have indices 0 through 4. The attribute on argv indicates that it may go unused. section 2.2
A declaration does not, by itself, tell you an object's concrete value or where it is stored. That is the role of a definition. In the introductory cases, adding an initializer to a variable declaration also defines its object and provides an initial value. A function declaration becomes a definition when followed by a body in braces. TAKEAWAY: Declarations specify identifiers; definitions specify objects. section 2.3 section 2.1
Declaring and initializing an object
`size_t i = 0;` gives `i` a type and an initial value. For an array, `double A[5] = {[0] = 9.0, [1] = 2.9, [4] = 3.E+25, [3] = .00007};` designates individual elements; the omitted element at index 2 is initialized to 0.0. section 2.3

