670 likes | 780 Views
C from A to Z. Robert Rinker and Richard Wall University of Idaho. Characteristics of C. Structured and very modular language Versatile data types and structures Comprehensive set of operators Cryptic – “programmers shorthand”
E N D
C from A to Z Robert Rinker and Richard Wall University of Idaho University of Idaho
Characteristics of C • Structured and very modular language • Versatile data types and structures • Comprehensive set of operators • Cryptic – “programmers shorthand” • Not optimizing itself but contains features that allow optimization • Originally developed for small computers • Simultaneously crude and elegant University of Idaho
General Programming Rules • All C Statements are free-form • Can begin and end on any line and in any column • C statements are always terminated with a semicolon “;”. • Blank lines are ignored • Following discussion is targeted for IAR compilers University of Idaho
General Programming Rules • White space (blanks, tabs and newlines) must separate keywords from other things • Comments – • All text enclosed within “/* ----- */” • Text on the same line following “//” • Examples: // This is a comment /* So is this. */ University of Idaho
Key words in C University of Idaho
C Data Types • int standard integer (16 bits / 2 bytes) • short short integer (8 bits / 1 byte) 1 • long long integer (32 bits / 4 bytes) 1 • unsigned unsigned integer • char character (8 bits / 1 byte) • float real number 1 • double double precision real 1 Note 1: platform dependent University of Idaho
C Data Typesint constant forms • 123 standard integer constant • 123L long constant (also any integer too larger to fit in standard integer size • 123Q integer constant expressed in octal • 0X123 integer constant expressed in hexadecimal • $123 integer constant expressed in hexadecimal • 101B byte constant expressed in binary University of Idaho
Variable Declarations in C • All variables must be declared before using them in a program • Variable declarations can also be used to initialize the variable. (not good practice) • int lower, upper, step; • float fahr, celsius; • int i=0; • char backslash = ‘\\’ University of Idaho
Symbolic Constants in C • Constants can be defined using the #define construct • #define LOWER 0 • #define UPPER 300 • #define STEP 20 • Convention – constants in upper case, variables in lower case University of Idaho
Register class in C • The register class informs the compiler that it should try to allocate this variable in a CPU register rather in memory. • The actual allocation of register variables is system dependent. If the compiler cannot comply with the register designation for whatever reason, it is ignored. • Example: register int a; University of Idaho
Register class in IAR C • IAR C does not use the register designation but rather the sfr designation. • Examples • sfrw ax = 0x40; • sfrb al = 0x40; • sfrl axx = 0x40; University of Idaho
Operators in C • Arithmetic operators • + Addition • - Subtraction • * Multiplication • / Division • % Modulus (remainder) University of Idaho
Operators in C • Relational Operators • > Greater than • >= Greater than or equal to • < Less than • <= Less than or equal to • == Identically equal to • != Not identically equal University of Idaho
Operators in C • Connective operators • && Connective AND • || Connective OR University of Idaho
Boolean Values in C • There is no separate Boolean data types in C • Any variable can be treated as a Boolean value • Rules of evaluation • A numerical value of 0 (zero) represents FALSE • A numerical value other than zero represents TRUE • When a Boolean expression is evaluated, it returns: • 0 for FALSE • 1 for TRUE University of Idaho
Operators in C • Bit wise logical operators • & bit wise AND • | bit wise inclusive OR • ^ bit wise exclusive OR • << left shift • >> right shift • ~ one’s complement University of Idaho
Operators in C • Increment and decrement • ++n pre-increment • n++ post increment • --n pre-decrement • n-- post decrement University of Idaho
Operators in C • Assignment operations • True for the following operators + - * / % << >> & ^ | • Espression of the form: e1 op = e2 is equivalent to e1 = e1 op e2 • Examples • j += 4; is the same as j = j + 4; • x *= y+1; is equivalent to x = x*(y+1) University of Idaho
Quiz • What will the value of x be after executing the following code? a = 5; b = 6 if (a = b) x = 1; else x=2; University of Idaho
Rules of Associatively University of Idaho
The COMMA Expression The comma expression evaluates exp1 first, then exp2 second. The value of the expression is the value of the last evaluated. Example: int i=4; int j=2 j = (i++, i-j) //j = 5 - 2 University of Idaho
Statements in C • Any expression can be used as a program statement by following the expression with a ‘;’ (semicolon). • Examples • fahr = celsius*9/5 + 32; • rpm = 1234*tach; omega = rpm*360/60; University of Idaho
C Control Structure Sequence • Compound Statements University of Idaho
C Control Structure Decision University of Idaho
C Control Structure Looping University of Idaho
The if – else Statement • Structure if (expression) statement_1 else statement_2 • The else part is optional • The expression is evaluated: if expression is TRUE (I.e. non zero) then statement_1. If expression is FALSE (i.e. zero) then statement_1 is executed if present. For multiple if’s, the else goes with the closest if without an else condition. University of Idaho
The if – else Statement- Examples University of Idaho
The switch-case Statement • Structure switch (expression) { case I1: statements; case I2: statements; case I3: statements; case In: statements; default: statements; // optional } University of Idaho
The switch-case Statement con’t • Operation: the expression is evaluated; then execution continues at the statements following the case statement that matches the result or after the label default if there are no matches. If the default case does not exist, then execution continues after the last case statement. University of Idaho
The switch-case Statement con’t • Execution continues through remaining cases in the switch structure unless the break instruction is encountered. If a break is encountered, then execution continues after the present switch-case instance. University of Idaho
The while Statement • Structure while(expression) statement; or while(expression) { statement_1; statement_2; } University of Idaho
The while Statement con’t • Operation: expression is evaluated and if TRUE then statement (or statement_1 and statement_2) is executed. The evaluation and executions sequence is repeated until the expression evaluates to be FALSE. If the expression is initially FALSE then statement is not executed at all. University of Idaho
The while Statement Example while(a <= b) { a *= 4; // a = a*4; b -= 2; // b = b-2 } University of Idaho
The do-while Statement • Structure do { statement; } while(expression); • Operation: Similar to the while control except that statement is executed before the expression is evaluated. This guarantees that statement is always executed at least one time even if expression is FALSE. University of Idaho
The for Statement • Structure: for(expr1; expr2; expr3) { statement; } • Operation: Identical to the following sequence: expr1; while(expr2) { statement; expr3 } University of Idaho
Auxiliary Control Statements • Break – Causes the innermost control structure to be exited immediately. Execution continues with the statement immediately following the control structure just exited. • Continue – Causes immediate execution of the next loop to begin. University of Idaho
Anatomy of a C Array • int a[10]; Arrays always start with subscript 0. Name of array used without a subscript is a pointer-constant to the first element of the array. (What is a pointer? Hint: what is a label in assembler?) University of Idaho
Functions in C – ANSI • Every function in C has the form type name (argument list, // if any) { declarations, statements, and/or expressions } University of Idaho
Subroutine Arguments in C • Single variables are always passed by value • Makes a copy of the variable and passes that copy • Changing the value of the copy does not result in a changing the value of the original variable. • Example: x = get_square(y); // “y” remains unchanged int get_square(int num) { num *= num; return(num); } University of Idaho
Subroutine Arguments in C • Arrays are always passed by reference • References == address of element [0]. • Example: int a[10] x = get_square(a); // or x = get_square(&a[0]); void get_square(int *num) { return(*num * *num); } University of Idaho
Data Attributes in C • Scope • Internal (local) variables are only known within the module where they are declared. • External (global) variables known by by several modules (functions). University of Idaho
Data Attributes in C • Longevity • automatic – internal (local) variables only – variable is “created” (instantiated) when the routine (function) is invoked and disappears when the routine is finished. • static – permanent storage allocation University of Idaho
Rules of Scope • 1. Automatic variables – only exist as long as the function where they are declared is executing • 2. Arguments – same as automatic over the function to which they are passed • 3. External variables – scope extends from point within the file where they are declared to end of file. University of Idaho
Function Prototypes (CS perspective) • Function prototypes allow compiler to “help” us by specifying what functions calls should look like when they are called. The compiler can then compare the prototype with the actual function call and complain if they don’t match. University of Idaho
Function Prototype (COE perspective) • Prototypes tell the compiler how to arrange the variables passed to the function and how to extract data passed back from the function. Prototypes are not required if the function appears in the code before the function is called the first time. University of Idaho
Function Prototypes: Example int func(int, char, int) void main(void) { : i = func(10,’a’,27) : University of Idaho
C Program Structure #include < stdio.h > // default directory #include <my_headder> // project directory // Global Data Variables // Function prototypes void main(void) { // local variables University of Idaho
C Program Structure con’t statement_1; statement_2; : statement_n } // end of main function // other functions University of Idaho
Pointers in C • Declaration: int *ptr; // ptr is a pointer to an integer int x, y; ptr = &x; // & ... say address of x y = *ptr; // * ... say value pointed to by above two statements same as x = y; University of Idaho
Pointer Variables in C • A pointer variable is a variable whoes value is the address of another variable • A pointer points to another variable • The pointer concept in C is like but more general than the concept of pointers in Pascal • A pointer is not an int; it is a completely separate data type. University of Idaho