62
C Basics Chapter 2: C Basics C Programming Language ˇ Simon ˇ Reˇ rucha v3.2 February 11, 2016

Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Chapter 2: C BasicsC Programming Language

Simon Rerucha

v3.2 February 11, 2016

Page 2: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

C Basics

“There are only two kinds of programming languages: thosepeople always bitch about and those nobody uses.”Bjarne Stroustrup.

Page 3: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

General

small number of keywordsauto, break, case, char, const, continue, default, do, double, ese, enum, extern, float, for, goto, if, int,

long, register, return, short, signed, sizeof, static,struct, switch,typedef,union,unsigned, void, volatile, while

lot of arithmetical and logical operators

free-format, case sensitive

simple structure aimed at algorithmization

relies on libraries for a meaningfull operation

Page 4: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Variables

static typed, weakly-enforced (implicit type conversionpossible)

single namespace, no sigil (e.g. $var)

first class: accesible as a unitinteger, structurebut not array

compound types – array, enum, struct

lexical scope of visibility

allows user-defined types

Page 5: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Functions

C is procedure (function)-based

declaration syntax similar to usage syntax

fn definition outside functions

basic polymorphism

Page 6: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Other Features

low-level access to computer memory

basic modularity – separated compilation

preprocessor for macros, source text inclusion, conditionalcompilation

linker for pre-compiled objects inclusion

complex function delegated to (standard) library routines

Page 7: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

What is not included

object-oriented approach – but basic concepts are usable

exceptions, range checking, polymorphism

garbage collection – proper disposal of unused memory isleft to programmer

GUI library, multithreading, data persistence, lambdacalculus

Page 8: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Basic syntax

free-form, case sensitive

Page 9: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Lexical Conventions

case sensitive, keywords are lower case

comments: /* multiline */ // singleline

Page 10: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Lexical Conventions

case sensitive, keywords are lower case

comments: /* multiline */ // singleline

Page 11: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Source character ser

Letters: a - z, A - Z,

Digits: 0 -- 9

Punctuation: ~ ! @ # \% ^ & * ( ) - + = : ; " ’ < > , . ? | / \ { } [ ]

Whitespace: space, horizontal tab, vertical tab, form feed,newline

Others possible, hardly portable (ASCII 127+, UNICODE)

Page 12: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Integer Constants

decimal 0 - 9 (default type)minus sign - for negative numbersEx.: 15, 0, 1, -2

octal 0 - 7

begin with zeroEx.: 065, 015, 0, 01

hexadecimal 0 - 9, A - F

begin with 0x (case insensitive)Ex.: 0x12, 0xDeadBeef, 0Xcd

binary 0,1 non-standard!its support depends on compilertypically begin with 0b (case insensitive)Ex.: 0b10110010

~L, ~U suffixes to explicitly declare long / unsigned constant,e.g. 129u, 12345LU

Page 13: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Real Constants

decimal 15., 56.8, .84, 3.14

exponential 5e6, 7e23

double by default

~F, ~L suffixes to explicitly declare float / long doubleconstant, e.g. 3.14f, 12e3L

Page 14: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Character Constants

straight ’a’, ’x’, ’#’

octal backslash + 3 octal digits, e.g. \012, \x007

hexa \x + 2 hex digits, e.g. \x0A, \x00

Well known constants:

\n newline

\r carriage return

\t tab

\b backspace

\\ backslash

\’ apostrophe

\0 zero character (e.g. string termination)

Page 15: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

String Constants aka Literals

delimited by quotes: ""

ex. "A string","much longer string"

automatic concatenation (chaining), e.g."All this" " pieces"

"will turn into one string!"

Escape sequences used for input of special characters:"Be aware of \"nothing\" from girls’ mouth!"

"Do not mismatch slash ’/’ and backslash ’\’"

Page 16: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Variables

Variable is a memory-stored element of data, that features:

name (unique identifier)

data type (known at compile-time)

scope (visibility)

Page 17: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Identifiers

identifiers start with alphabetic or underscore character,may contain numbers

identifier begginging with underscore are often systemreserved, not recommended (e.g. _demo )

identifier length used to be limited (e.g. 8 or 32charactes)

Smart naming conventions

Use meaningfull names: long, self-descriptiveUse short names just for loop indices.

Page 18: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Basic datatypes

int integer, signed or unsigned, min 16-bit, typ.16–32-bit

char smallest unit, integer type, typ. 8-bit

long int min 32-bit, abbreviated as long

float single precision floating-point, typ

32-bit (sign + 8exp + 23man)

double double precision floating-point, typ

64-bit (1 + 11 + 53)

long double extended precision, typ 64--80-bit

C99: adds long long, bool

Page 19: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Basic datatypes: quiz

Pop quiz (correct/incorrect): Which declaration are correct?

int money\$owed; (incorrect: cannot contain \$)

int total_count (correct)

int score2 (correct)

int 2ndscore (incorrect: must start with a letter)

int long (incorrect: cannot use keyword)

Page 20: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Basic datatypes II.

all integer types either signed (implicit) or unsigned

signed range (−2(n−1), 2(n−1) − 1)

unsigned range (0, 2n − 1)

floating point types stored in form m × 2n

Page 21: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Examples

bool flag; // true = 1; c99 only

char c; // signed !

int i; // same as "signed int i"

unsigned int ui; // "unsigned ui" also valid

long int a; // "long a" also valid

long long int u; // c99 only

float f; //

long double xxx; // extended precision

Page 22: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Fixed-width datatypes (C99+)

intN t integer of exactly N-bits, e.g. int16

uintN t unsigned variant

int leastN t, uint leastN t (unsigned) integer at least

N-bits wide

int fastN t, uint fastN t fastest type of (unsigned)

integer at least N-bits wide

intmax t maximum width integer type

Ex: int16 t, uint fast32 t

Page 23: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Operators I.

basic assignment: =

arithmetics: +, -, *, /, %,

relations: ==, !=, <, >, <=, >=

logical: !, &&, ||

bitwise logic: ~, &, |, ^

shift operators: <<, >>

advanced assignment:+=, -=, *=, /=, %=, &=, |=, ~=, <<=, >>=

increment/decrement: ++, --

subexpresion: ()

Page 24: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Operators II.

conditional: ? :

calling function: ()

(de)referencing: *, &, []

sequencing: ,

type conversion: (type)

addressing: ., ->

misc: sizeof()

Page 25: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Operator Precedence

Page 26: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Operator Precedence II.

Page 27: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Assignment

Basic operator: =

Advanced ops: +=, *=, -=, ...

a = 1;

b = -2;

f = 1.34; // real number

f *= -2; // equal to f = f * -2;

a = max (1,3); // saving return value

Page 28: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Comparison operators

== ... equality

!= ... inequality

<, > ... less/bigger than

<=, >= ... less/bigger or equal to

Zero is treated as FALSE, non-zero as TRUE – newercompilers provide bool datatype, but any integer is feasible forlogic evaluation.

Page 29: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Assignment vs. Comparison

Caution!

Mismatching = and == is eternal source of error and grey hair.

E.g.:i == x is TRUE if i is equal to x.i = x is TRUE if x is nonzero.Now days are brighter, compiler often issues a warning.

Page 30: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Logic operators

int a = 0; // assignment

Page 31: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex.: Comparison + Logic

int i = 1, j = 1;

j = j && (i = 2); // true

j = j && (i == 3); // false

j = j || (i / 2); // true

j = !j && (i = i + 1); // false

Page 32: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Lazy Expression Evaluation

if ( y != 0 && x / y < z) ...

Generally, for y = 0, evaluation would end up with error. Dueto lazy evaluation, the result is known before second part isevaluated.

Page 33: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Bit operators

Important stuff for embedded!

int a = 1,b,c;

c = a << 2; // bitshift by 2 bits ~ multiply by 4

a = 0x3; // b = 0b011

b = 0x5; // b = 0b101

b = a & b // = 1; bit AND

b = a | b // = 0b111; bit OR

Page 34: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Bit operators

Important stuff for embedded!

char a = 1,b,c;

c = a << 2; // bitshift by 2 bits ~ multiply by 4

a = 0x3; // b = 0b011

b = 0x5; // b = 0b101

c = a & b // = 1; bit AND

c = a | b // = 0b111; bit OR

c = a ^ b // = 0b110; bit XOR

c = ~b // - 0b1111 1010; bit negation

Page 35: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex. Bit operators

// set x-th bit

a |= 1 << x;

// clear x-th bit

a &= ~(1 << x);

// toggle x-th bit

a ^= (1 << x);

// check value of x-th bit

bit = (a >> x) & 1;

Page 36: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex. Bit operators II.

char a = 0xA; // a = 10 = 0b1010

// check value of bits 3and4

val = (a >> 2) & 3;

// set value of bits 3and4

mask = 0xc; // = 0x1100 ~ bits 3+4

a &= ~mask; // clear bits with mask

val &= 0x3; // ensure val has max 2 bits

a |= (val << 2); // shift the value and set the bits

// or in a single command

a = (a & ~mask) | ((val & 0x3) << 2);

Page 37: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Functions

Function is a block of statements with defined arguments andreturn value. Any function features:

identifier

arguments (typed)

return value (typed)

scope

declaration, definition

Page 38: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Functions

Declaration:

tells the compiler that the function or variabl is defined(somewhere)

function or variabl must be (at least) declared before it isused

declaration of function specifies the name and type ofarguments and return value (also referred to as functionprototype)

declaration of variable specifies the name and type

Definition:

defines the function as a sequence of statements

defines the variable as the memory-stored element

Page 39: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex.: Functions

// declaration - fn prototype

double pi_times (int num);

// definition

double circ (int r){

return pi_times( 2 * r ) ;

}

double pi_times (int num){

return num * 3.14;

}

Page 40: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex.: Program w/ function

// declaration

double pi_times (int num);

// main

void main(void){

int a = 2; double d;

// function call

d = pi_times(a);

printf("Result: %d * pi = %lf",a,)

}

// definition

double pi_times (int num){

return num * 3.14;

}

Page 41: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Fn + Var Visibility: Lexical Scope

both functions and variables have limited visibility

both need to be known before first use

they are known via either declaration or definition

visibility related to modules, functions, blocks

Page 42: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Function Scope

A function might be called at a certain point in source textwhen:

the function is previously defined within same module

the function is previously declared within same module

i.e. the function is defined within same module, orthe function is defined in another module

The prototypes are typically kept in header files.

Page 43: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Variable Scope

A variable might be referenced at a certain point in sourcetext when:

it is previously defined within same function or globally

it is previously declared within same function or globally

that indicates the variable is defined within samemodule, orthat indicates the variable exists in another module andis made accessible to other modules.

The local variables are defined within functions (even in blocksby newer standards), global variables are typically definedwithin modules’ source text and declared in header files.

Page 44: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Void Type

useful e.g. for explicit declaration of empty parameters orempty return value

and more, as seen later

void print(int a); // fn that returns nothing

int rand(void); // fn w/ no parameters

Page 45: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Two-way Branching: IF

Syntax: if(condition) then expr1; orSyntax: if(condition) then expr1; else expr2;

if (a == 1) b = 2;

if (a == 1){

b = 2;

c = 1;

}else{

a = 1;

}

Page 46: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Multi-way Branching: SWITCH

case takes integer or character constant x

switch takes integer expression c

each case analogous to if(c == x) ...

int c;

switch(c){

case 1: ...

break;

case 2: ...

break;

default: ...

break;

}

Page 47: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Multi-way Branching: SWITCH II.

char c;

switch(c){

case ’f’: ... //

case ’F’: ...

break;

default: ...

break;

}

when break is ommited, evaluation continues in nextbranch

Page 48: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

While Loop

Syntax: while(condition) expr1;

loop while condition holds

condition evaluated before evaluating expr

a = 123;

while (a > 0){

b = cool_fn(a);

}

Page 49: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Do .. While Loop

Syntax: do expr1 while(condition);

loop while condition holds

condition evaluated after evaluating expr

a = 32;

do{

b = cool_fn(a);

}while (a > 0);

Page 50: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

FOR Loop

Syntax: for(e start; e end; e iter) expr;

predefined number of cycles

e start evaluated once at the beginning

e end evaluated every beginning of iteration

e iter evaluated every end of iteration

// iterate through 0 to 9

for (i = 0; i < 10; i++){

b = cool_fn(i);

}

Page 51: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

FOR Loop II.

any of e start, e end, e iter might be ommited

// same function as previous loop

i = 0;

for (; i < 10; ){

b = cool_fn(i);

i++;

}

// endless loop

for(;;){ ... }

Page 52: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex. More Loops

// empty loop

while (i < 1) ;

// nested loops

for(i = 0; i < 10; i++){

for(j = 0; j < 10; j++){

s = compute(i, j);

}

}

Page 53: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Loop Control

break – immediately finishes innermost looping

continue – skips rest of current iteration

// skip trendy_fn() if cool_fn() returns value below zero

for (i = 0; i < 10; i++){

b = cool_fn(i);

if(b < 0) continue;

c = trendy_fn(i,b);

}

// stop looping when cool_fn() returns zero

for(;;){

b = cool_fn(++i);

if(b = 0) break;

}

Page 54: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

GOTO command

Syntax: label: ... goto label;

be AWARE!

// trivial example -- to be AVOIDED

puentezero:

...

goto puentezero;

Page 55: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex.: Meaningfull use of GOTO

// escaping nested loops

for(i = 0; i < 10; i++){

for(j = 0; j < 10; j++){

for(k = 0; k < 10; k++){

if(a[j] == 0) goto error;

n = b[k] + a[i] / a[j];

}

}

}

goto allright;

// handle zero divisor

error:

...

allright:

...

Page 56: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex.: better without GOTO

// escaping nested loops

int error = 0;

for(i = 0; i < 10; i++){

for(j = 0; j < 10; j++){

for(k = 0; k < 10; k++){

if(a[j] == 0){

error = 1;

break;

}

n = b[k] + a[i] / a[j];

}

if(error) break;

}

if(error) break;

}

// handle zero divisor

if(error){...}

...

Page 57: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

RETURN statement

Syntax: return expr; orreturn(expr);

return; // return from void fn

return 1; // return constant, same as "return(1)"

return (a); // return value of a variable

return cool_fn(a); // return a return value of other fn

finishes current function

define the return value of function

in main() finishes entire program;

Page 58: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Conditional operator

Syntax: condition ? expr1 : expr2

corresponds to: if(condition) expr1; else expr2;

int i, k, j = 2;

i = (j == 2) ? 1 : 3;

k = (i > j) ? i : j;

k = ((i > j) ? do_it() : do_sth_else());

(i == 1) ? i++ ; j++;

Page 59: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Comma operator

Syntax: expr1, expr2

first expression is evaluated,

then second expression is evaluated,

its value is returned.

// equal to i = b;

i = (a, b);

// ... use in for loop

for (i = 0; i < 10; i++, j--)

...

Page 60: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Type Casting

implicit vs. explicit

declare that object of defined type should be treated asobject of another type

Implicit:

int -> unsigned -> long -> float -> double

int a;

unsigned b;

long l;

float f;

l = a + b; // cast to unsigned, then to long

f = l / a; // cast to long, then to float

Page 61: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Type Casting II.

void print_int(int a);

float f = 3.14195;

// f is implicitly casted to int

print_int(f);

// the same, explicitly

print_int((int) f);

Use explicit typecasting for better readability!

Page 62: Chapter 2: C Basics - C Programming Languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf · C Basics Basic datatypes intinteger, signed or unsigned, min 16-bit, typ. 16{32-bit

C Basics

Ex.: Type Casting

Where explicit typecasting matters:

int a = 20;

int b = 30;

long l;

double d;

d = a / b; // d = 0

d = a / (double)b; // d = 2/3

// for 2 byte in l = 360000 mod 65535

l = a * b * a * b

l = (long)a * b * a * b // l = 360000