extern Applied to a function definition, has global scope (and is redundant)
Applied to a variable, defined elsewherevoid As the return type of a function, doesn't return a value
In a pointer declaration, the type of a generic pointerIn a parameter list, takes no parameters* The multiplication operator
Applied to a pointer, indirectionIn a declaration, a pointer& Bitwise AND operator
Address-of operator=
==
Assignment operatorComparison operator<=
<<=
Less-than-or-equal-to operatorCompound shift-left assignment operator<
<
Less-than operatorLeft delimiter in #include directive
() Enclose formal parameters in a function definition
Make a function callProvide expression precedenceConvert (cast) a value to a different typeDefine a macro with argumentsMake a macro call with argumentsEnclose the operand of the sizeof operator when it is a typename
[1] You're probably wondering what possible reason there could be for re-using the static keyword with
these wildly different meanings. If you find out, please let us know, too.
There are other symbols that are also confusingly similar. One flustered programmer once puzzled
over the statement if (x>>4) and asked, "What does it mean? Is it saying 'If x is much greater
than 4?'"
The kind of place where overloading can be a problem is in statements like: