main() Function * 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. Include Files * The purpose of these files is to tell the compiler about the existence of external functions which the source code will make use of. Preprocessor directives: #include "mine.h" search current working directory first #include search command line directory then system #define TRUE 1 macro substitution, usually use capitals #define min(a,b) (a 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 sizeof size in bytes, sizeof a or sizeof (int) (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 | bitwise or, a | b && relational and, result is true or false, a < b && c >= d || relational or, 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 ) Operator precedence More precedence LR ( ) [ ] -> . x++ x-- RL ! ~ - + ++x --x * & sizeof (type) LR * / % LR + - LR << >> LR < <= > >= LR == != LR & LR ^ LR | LR && LR || RL ? : RL = += -= *= /= %= >>= <<= &= ^= |= LR , Less precedence Conditional branching if ( condition ) statement ; else statement_2 ; /* optional else clause */ Switch statement switch ( expression ) /* constants must be unique */ { case constant_1: /* do nothing for this case */ break; case constant_2: /* drop through and do same as constant_3*/ case constant_3: statement_sequence /* can have but does not need { } */ break; case constant_4: statement_sequence /* does this and next */ /* statement_sequence also*/ case constant_5: statement_sequence break; default: /* default executes if no constant equals*/ statement_sequence /* the expression. This is optional */ } Function definition type function_name(int a, float b, const char * ch,...) { function_body } /* only parameters passed by address can are modified*/ /* in the calling function, local copy can be modified*/ char * strcpy( char * s1, const char * s2 ) { statements } Declarations forms basic_type variable; type variable[val][val]...[val]={data,data,...}; /*multidimensional array*/ struct struct_name { /* struct_name is optional */ type variable_1; /* any declaration */ … /* all variable names must be unique*/ } variable_1, ... ; /* variables are optional */ struct struct_name { /* struct_name is optional */ type variable_1: length; /* any declaration : length in bits */ ... /* type is int, unsigned or signed */ } variable_1, ... ; /* variables are optional, they can also be arrays and pointers */ union union_name { /* union_name is optional */ type variable_1; /* variable_1 overlays variable_2 */ type variable_2; ... } variable_a, ...; /* variables are optional */ enum enum_type /* enum_name is optional */ { enumeration_name_1, /* establishes enumeration literals */ enumeration_name_2=number,/* optional number, */ ... /* default is 0, 1, 2, ... */ } variable, ...; /* variables are optional */ /* use dot notation to select a component of a struct or union */