two classes of language translation proccess: Interpreters and Compliers
type checking: test for the proper use of arguments in functions and prevents many kinds of programming errors.
dynamic type checking: perform type check at runtime.
static type checking: type checking occurs during compilation instead of when the program is running.
Declearations and Definitions:
A declaration introduces a name - an identifier - to the complier. It tells the complier "This function or this variable exists somewhere, and here is what it should look like."
A definition, on the other hand , says:" Make this variable here" or "Make this function here." It allocates storage for the name.
You can declear a varable or a function in many different places, but only one definition can be made in C and C++
ODR: one - definition - rule.
concatenation 串联