chapter 2: c basics - c programming languagesrc.athaj.cz/_media/teaching/rev/ch2_basics_v3b.pdf ·...
TRANSCRIPT
![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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/49.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/50.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/52.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/53.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/59.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/60.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/61.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022060305/5f0973167e708231d426e326/html5/thumbnails/62.jpg)
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