|Is a preprocessor token: the compiler itself will never see it.||Is a compiler token: the preprocessor does not care about it.||Obeys scoping rules just like variables.||Stays valid until the end of the file (or until a matching undef).||Is a preprocessor directive used to define macros or general pattern substitutions. For eg. #define MAX 100, substitutes all occurrences of MAX with 100||Creates an "alias" to an existing data type. For e.g. typedef char chr;||
#define INTPTR int* ... INTPTR a, b;After preprocessing, that line expands to
int* a, b;Only a will have the type int *; b will be declared a plain int (because the * is associated with the declarator, not the type specifier).
typedef int *INTPTR; ... INTPTR a, b;In this case, both a and b will have type int *.