C programming is a general-purpose, procedural, imperative computer programming language developed in 1972 by Dennis M. Ritchie at the Bell Telephone Laboratories to develop the UNIX operating system. C is the most widely used computer language.
In Linux systems: 1. Open up a terminal 2. Create the program: nano nameProgram.c 3. Write the program and save it 4. gcc -o nameExecutable nameProgram.c
- main
- Include Files
- Preprocessor directives
- Reserved words
- Basic types
- modifiers, prefix for basic types
- Storage Types
- Operators
- sizeof
- Operator precedence
- The main() function is the starting point of the program: int main (int argc, char *argv[])
- The return type of the main() function is an integer (type int) and it is known as the return value of the program.
- As a rule of thumb, value 0 means success while non-zero means an error conditions.
- The purpose of these files is to tell the compiler about the existence of external functions which the source code will make use of.
#include "mine.h" search current working directory first
#include <stdio.h> search command line directory then system
#define TRUE 1 macro substitution, usually use capitals
#define min(a,b) (a<b)?(a):(b) macro substitution with parameters
#define abs(a) (a<0)?(-(a)):(a) macro substitution
#define note /* comment */ this comment gets inserted every time note appears */
backslash \ at end of a line means continue
#undef TRUE undefines a previously defined macroname
#error stop compiling at this point
#if expression conditional compilation, start if structure
#elif expression else if expression != 0 compile following code
#else else compile following code
#endif end of conditional compiling
#ifdef macroname like #if, compiles if macroname defined
#ifndef like #if, compiles if macroname undefined
#line number [filename] set origin for LINE and FILE
#pragma gives the compiler commands
| Term | Description |
|---|---|
| optional local declaration | |
| break | used to exit loop and used to exit switch |
| case | choice in a switch |
| char | basic declaration of a type character |
| const | prefix declaration meaning variable can not be changed |
| continue | go to bottom of loop in for, while and do loops |
| default | optional last case of a switch |
| do | executable statement, do-while loop |
| double | basic declaration double precision floating point |
| else | executable statement, part of "if" structure |
| enum | basic declaration of enumeration type |
| extern | prefix declaration meaning variable is defined externally |
| float | basic declaration of floating point |
| for | executable statement, for loop |
| goto jump within function to a label | |
| if | executable statement |
| int | basic declaration of integer |
| long | prefix declaration applying to many types |
| register | prefix declaration meaning keep variable in register |
| return | executable statement with or without a value |
| short | prefix declaration applying to many types |
| signed prefix declaration applying to some types | |
| sizeof | operator applying to variables and types, gives size in bytes |
| static | prefix declaration to make local variable static |
| struct | declaration of a structure, like a record |
| switch executable statement for cases | |
| typedef | creates a new type name for an existing type |
| union | declaration of variables that are in the same memory locations |
| unsigned | prefix declaration applying to some types |
| void | declaration of a typeless variable |
| volatile | prefix declaration meaning the variable can be changed at any time |
| while | executable statement, while loop or do-while loop |
| Type | Description |
|---|---|
| char | character type, usually one byte ( a string is array of char ) |
| int | integer type, usually 2 or 4 bytes ( default ) |
| float | floating point type, usually 4 bytes |
| double | floating point type, usually 8 bytes |
| void | no type, typeless |
| enum | enumeration type ( user defines the type name ) |
| Modifiers | Description |
|---|---|
| unsigned | no sign bit in variable |
| long | longer version of type (short or long alone means short int or |
| short | shorter version of type long int because int is the default) |
| const | variable can not be stored into |
| Prefix | Description |
|---|---|
| auto | local variable ( default ) |
| static | permanent when function exits, not auto |
| volatile | can change from outside influence |
| extern | variables are defined elsewhere, externally |
| register | assign variable to register |
| ( ) | grouping parenthesis, function call |
|---|---|
| [ ] | array indexing, also [ ][ ] etc. |
| -> | selector, structure pointer |
| . | select structure element |
| ! | relational not, complement, ! a yields true or false |
| ~ | bitwise not, ones complement, ~ a |
| ++ | increment, pre or post to a variable |
| -- | decrement, pre or post to a variable |
| - | unary minus, - a |
| + | unary plus, + a |
| * | indirect, the value of a pointer, * p is value at pointer p address |
| & | the memory address, & b is the memory address of variable b |
(type) a cast, explicit type conversion, (float) i, (fun)(a,b), (int)x
| * | multiply, a * b |
|---|---|
| / | divide, a / b |
| % | modulo, a % b |
| + | add, a + b |
| - | subtract, a - b |
| << | shift left, left operand is shifted left by right operand bits |
| >> | shift right, left operand is shifted right by right operand bits |
| < | less than, result is true or false, a %lt; b |
| <= | less than or equal, result is true or false, a <= b |
| > | greater than, result is true or false, a > b |
| >= | greater than or equal, result is true or false, a >= b |
| == | equal, result is true or false, a == b |
| != | not equal, result is true or false, a != b |
| & | bitwise and, a & b |
| ^ | bitwise exclusive or, a ^ b |
| && | relational and, result is true or false, a < b && c >= d |
| ? | exp1 ? exp2 : exp3 result is exp2 if exp1 != 0, else result is exp3 |
| = | store |
| += | add and store |
| -= | subtract and store |
| *= | multiply and store |
| /= | divide and store |
| %= | modulo and store |
| <<= | shift left and store |
| >>= | shift right and store |
| &= | bitwise and and store |
| ^= | bitwise exclusive or and store |
| = | bitwise or and store |
| , | separator as in ( y=x,z=++x ) |
More precedence
| LR | ( ) [ ] -> . x++ x-- |
|---|---|
| RL | ! ~ - + ++x --x * & sizeof (type) |
| LR | * / % |
| LR | + - |
| LR | << >> |
| LR | < <= > >= |
| LR | == != |
| LR | & |
| LR | ^ |
| LR | |
| LR | && |
| LR | |
| RL | ? : |
| RL | = += -= *= /= %= >>= <<= &= ^= |
| LR | , |