C Programming/Reference Tables
Contents |
List of Keywords[edit]
ANSI C (C89)/ISO C (C90) keywords:
|
|
|
|
Keywords added to ISO C (C99) (Supported only in new compilers):
|
|
Specific compilers may (in a non-standard-compliant mode) also treat some other words as keywords, including asm, cdecl, far, fortran, huge, interrupt, near, pascal, typeof.
Very old compilers may not recognize some or all of the C89 keywords const, enum, signed, void, volatile as well as the C99 keywords.
See also the list of reserved identifiers.
List of Standard Headers[edit]
ANSI C (C89)/ISO C (C90) headers:
Very old compilers may not include some or all of the following headers:
Headers added to ISO C (C94/C95) in Amendment 1 (AMD1):
Headers added to ISO C (C99) (Supported only in new compilers):
Table of Operators[edit]
Operators in the same row of this table have the same precedence and the order of evaluation is decided by the associativity (left-to-right or right-to-left). Operators closer to the top of this table have higher precedence than those in a subsequent group.
| Operators | Description | Example Usage | Associativity |
|---|---|---|---|
| Postfix operators | Left to right | ||
| () | function call operator | swap (x, y) | |
| [] | array index operator | arr [i] | |
| . | member access operator for an object of struct/union type or a reference to it |
obj.member | |
| -> | member access operator for a pointer to an object of struct/union type |
ptr->member | |
| Unary Operators | Right to left | ||
| ! | logical not operator | !eof_reached | |
| ~ | bitwise not operator | ~mask | |
| + -[1] | unary plus/minus operators | -num | |
| ++ -- | post-increment/decrement operators | num++ | |
| ++ -- | pre-increment/decrement operators | ++num | |
| & | address-of operator | &data | |
| * | indirection operator | *ptr | |
| sizeof | sizeof operator for expressions | sizeof 123 | |
| sizeof() | sizeof operator for types | sizeof (int) | |
| (type) | cast operator | (float)i | |
| Multiplicative Operators | Left to right | ||
| * / % | multiplication, division and modulus operators |
celsius_diff * 9.0 / 5.0 | |
| Additive Operators | Left to right | ||
| + - | addition and subtraction operators | end - start + 1 | |
| Bitwise Shift Operators | Left to right | ||
| << | left shift operator | bits << shift_len | |
| >> | right shift operator | bits >> shift_len | |
| Relational Inequality Operators | Left to right | ||
| < > <= >= | less-than, greater-than, less-than or equal-to, greater-than or equal-to operators |
i < num_elements | |
| Relational Equality Operators | Left to right | ||
| == != | equal-to, not-equal-to | choice != 'n' | |
| Bitwise And Operator | Left to right | ||
| & | bits & clear_mask_complement | ||
| Bitwise Xor Operator | Left to right | ||
| ^ | bits ^ invert_mask | ||
| Bitwise Or Operator | Left to right | ||
| | | bits | set_mask | ||
| Logical And Operator | Left to right | ||
| && | arr != 0 && arr->len != 0 | ||
| Logical Or Operator | Left to right | ||
| || | see Logical Expressions | arr == 0 || arr->len == 0 | |
| Conditional Operator | Right to left | ||
| ?: | size != 0 ? size : 0 | ||
| Assignment Operators | Right to left | ||
| = | assignment operator | i = 0 | |
| += -= *= /= %= &= |= ^= <<= >>= |
shorthand assignment operators (foo op= bar represents foo = foo op bar) |
num /= 10 | |
| Comma Operator | Left to right | ||
| , | i = 0, j = i + 1, k = 0 | ||
Table of Operators Footnotes[edit]
[1]Very old compilers may not recognize the unary + operator.
Table of Data Types[edit]
| Type | Size in Bits | Comments | Alternative Names |
|---|---|---|---|
| Primitive Types in ANSI C (C89)/ISO C (C90) | |||
| char | ≥ 8 |
|
— |
| signed char | same as char |
|
— |
| unsigned char | same as char |
|
— |
| short | ≥ 16, ≥ size of char |
|
short int, signed short, signed short int |
| unsigned short | same as short |
|
unsigned short int |
| int | ≥ 16, ≥ size of short |
|
signed, signed int |
| unsigned int | same as int |
|
unsigned |
| long | ≥ 32, ≥ size of int |
|
long int, signed long, signed long int |
| unsigned long | same as long |
|
unsigned long int |
| float | ≥ size of char |
|
— |
| double | ≥ size of float |
|
— |
| long double | ≥ size of double |
|
— |
| Primitive Types added to ISO C (C99) | |||
| long long | ≥ 64, ≥ size of long |
|
long long int, signed long long, signed long long int |
| unsigned long long | same as long long |
|
unsigned long long int |
| intmax_t | the maximum width supported by the platform |
|
— |
| uintmax_t | same as intmax_t |
|
— |
| User Defined Types | |||
| struct | ≥ sum of size of each member |
|
— |
| union | ≥ size of the largest member |
|
— |
| enum | ≥ size of char |
|
— |
| typedef | same as the type being given a name |
|
— |
| Derived Types[5] | |||
| type* (pointer) |
≥ size of char |
|
— |
| type [integer[6]] (array) |
≥ integer × size of type |
|
— |
| type (comma-delimited list of types/declarations) (function) |
— |
|
— |
Table of Data Types Footnotes[edit]
| [1] -128 can be stored in two's-complement machines (i.e. most machines in existence). Very old compilers may not recognize the signed keyword. | ||
| [2] -32768 can be stored in two's-complement machines (i.e. most machines in existence). Very old compilers may not recognize the signed keyword. | ||
| [3] -2147483648 can be stored in two's-complement machines (i.e. most machines in existence). Very old compilers may not recognize the signed keyword. | ||
| [4] -9223372036854775808 can be stored in two's-complement machines (i.e. most machines in existence). | ||
| [5] The precedences in a declaration are: | ||
| [], () (left associative) — Highest | ||
| * (right associative) — Lowest | ||
|
[6] The standards do NOT place any restriction on the size/type of the integer, it's implementation dependent. The only mention in the standards is a reference that an implementation may have limits to the maximum size of memory block which can be allocated, and as such the limit on integer will be size_of_max_block/sizeof(type). |
||