You are on page 1of 57

PB071 vod do C, 5.5.

2014
PB071 Programovn v jazyce C
Preprocesor, assert, varargs, zbvajc
klov slova C99, C11, diskuze
PB071 vod do C, 5.5.2014
Organizan
Tento tden posledn pednka i cvien
Dal tden pedtermny a nhrady odpadlch cvien
Zpotov pklad
na vaem cvien, obdobn jako pi ncviku
kad cvien bude mt jin pklad
je nutn spn vypracovat (nen bodovno)
bude vypsn opravn termn (pt tden)
Zkouka
vypsno v ISu, u pota v B130 (Linux) (+ B116&B117 Windows)
muste znt sv heslo na Aisu!
nutno mt zapsno v poznmkovm bloku ZAPOTENO (uhnjte svho
cvicho)
50 minut
Npl zkoukovho testu
40 bod otzky z prbnch testk (drill)
40 bod porozumn stvajcmu kdu (co vype program...)
PB071 vod do C, 5.5.2014
Preprocesor
PB071 vod do C, 5.5.2014
Peklad po stech
1. Preprocessing "gcc -E hello.c > hello.i"
rozvinut maker, expanze include
2. Kompilace "gcc -S hello.i"
syntaktick kontrola kdu, typicky chybov hlen
3. Sestaven "as hello.s -o hello.o"
assembly do strojovho kdu
4. Linkovn "gcc hello.o"
nahrazen relativnch adres absolutnmi
Pi bnm pekladu probhnou vechny kroky
automaticky, nemusme poutt kad zvl
PB071 vod do C, 5.5.2014
Preprocesor - motivace
Preprocesor pedzpracovn zdrojov kd pro peklada
Potebuje peklada zpracovvat poznmky?
ne, neovlivn nijak vsledn kd, lze odstranit
Musme mt veker kd v jedinm souboru?
ne, je vhodn dlit do podst (knihovny apod.)
a ped poskytnut pekladai jsou sti kdu spojen
Jak ct, e funkce printf() opravdu existuje, ale je definovan v jinm
zdrojovm souboru?
musme uvst hlaviku funkce pro peklada (deklarace)
zbyten uvdt manuln hlaviku funkce printf do kadho souboru
preprocesor nm umon snadno vkldat pomoc #include
Chceme vdy pekldat cel zdrojov kd?
ne, meme mt nap. platformov zvisl sti s podmnnm pekladem
PB071 vod do C, 5.5.2014
Preprocesor
Vtina pkaz preprocesoru zan znakem #
Znak # nemus bt na zatku dku, ale nesm
ped nm bt dn dal token
NE int a = 1; #define DEBUG
me bt odsazeno
Dl textov nhrady nad zdrojovm kdem
jazykov nezvisl, "nev" nic o syntaxi jazyka C
Pkazy preprocesoru jsou z pedzpracovanho
kdu odstranny
PB071 vod do C, 5.5.2014
Preprocesor - #include
#include "vlozMe.h"
namsto tto dky se vlo obsah souboru vlozMe.h
Typicky pouijeme pro vkldn hlavikovch soubor
(*.h)
#include <soubor> ... hled se ve standardnch hlavikovch
souborech
#include "soubor" ... hled se nejprve v aktulnm adresi
Meme pout i pro vkldn obsahu jakchkoli jinch
soubor
PB071 vod do C, 5.5.2014
Preprocessor makra bez parametr
#define JMNO_MAKRA hodnota_makra
jmno_makra se v kdu nahrad za hodnota_makra
Oznaen jmen maker velkmi psmeny je konvence
je zejm, co jsou makra a budou tedy nahrazena
asto pouvno nap. pro konstanty
#define ARRAYSIZE 10000



Nahrad se jen samostatn tokeny, nikoli podsti tokenu
int arraySize = ARRAYSIZE;
int arraySize = ARRAYSIZEBAD; => bez zmny
int array [ARRAYSIZE]; => int array [10000];
jmno makra
hodnota makra
Pozn.: pro konstanty ale radji const int ARRAYSIZE = 10000;
PB071 vod do C, 5.5.2014
Rozsah platnosti makra
Makro je v kdu platn od dku jeho uveden
nahrazen probhne a pro nsledujc dky
pozor, makro me bt platn i v dalch souborech (#include)
Platnost makra lze zruit pomoc #undef jmno_makra




Makro lze definovat v kdu nebo jako pepna pekladu
#define DEBUG
gcc Djmno_makra => gcc DDEBUG
gcc Djmno_makra=hodnota_makra => gcc DARRAYSIZE=100
int value = X;
#define X 100
value = X;
#undef X
value = X;
int value = X;

value = 100;

value = X;
PB071 vod do C, 5.5.2014
Makro - redefinice
Makro me bt pedefinovno
asto spe nezmrn chyba, proto varovn
pekladae
warning: "VALUE" redefined
Pokud potebujete pedefinovat, oddefinujte
nejprve pedchoz


Hodnota makra me bt przdn
#define DEBUG
asto pouito pro podmnn peklad (viz. nsledujc)
#define VALUE 100
#define VALUE 1000
#define VALUE 100
#undef VALUE
#define VALUE 1000
PB071 vod do C, 5.5.2014
Preprocesor podmnn peklad
Chceme vdy peloit cel zdrojov kd?
ne nutn, st kdu me vynechat
chceme mt zrove jedin zdrojov kd, ne nsobn
(nekonzistentn) kopie
Nap. v ladcm reimu chceme dodaten vpisy
#ifdef DEBUG printf("Just testing")
Nap. mme sti program zvisl na platform
little vs. big endian, Unix vs. Windows
#ifdef _WIN32
Pkazy preprocesoru pro podmnn peklad
#if, #ifdef, #ifndef, #else, #elif, #endif
Podmnky se vyhodnot v dob pekladu!
PB071 vod do C, 5.5.2014
Ukzka #ifdef

#include <stdlib.h>
#include <stdio.h>

#define VERBOSE

int main(void) {
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
#ifdef VERBOSE
printf("a=%d b=%d\n", a, b);
#endif
printf("a+b=%d\n", a + b);

return 0;
}

Zakomentovnm odstranme
dl vpis
Pokud nen VERBOSE
definovn, tento dek
nebude vbec ptomn ve
vsledn binrce
Namsto definice VERBOSE v kdu
meme pout:
Pepna pekladae
gcc DVERBOSE
Nastaven v QT Creator:
DEFINES += VERBOSE
PB071 vod do C, 5.5.2014
Zamezen opakovanmu vkldn souboru
Opakovan vloen hlavikovho souboru je nepjemn
peklada hls nsobnou deklaraci funkc apod.
obtn pohldat vkldn souboru jen jednou "manuln"
S pomoc podmnnho pekladu lze eit
vloen souboru podmnme (ne-)existujc definic makra
#ifndef JMENOSOUBORU_H
ve vkldanm souboru makro definujeme
#define JMENOSOUBORU_H
Pi prvnm vkldn se obsah souboru vlo a zadefinuje
makro JMENOSOUBORU_H, kter zamez dalmu
vloen
U soubor *.c se typicky nepouv
nepouvme #include "soubor.c" ale #include "soubor.h"
#ifndef _STDIO_H_
#define _STDIO_H_
// obsah souboru stdio.h
#endif
PB071 vod do C, 5.5.2014
Preprocesor makra s parametry
Makra meme pout pro nhradu funkc
tzv. function-style macro
#define JMNO_MAKRA (argumenty) tlo_makra
Preprocesor nahrad (rozvine) vskyty makra vetn jejich
zadanch argument
argumenty makra v definici se nahrad za reln argumenty pi
pouit makra

#define ADD(a, b) (a + b)
int main(void) {
int x = 0;
int y = 0;
int z = ADD(x, y);
z = ADD(x, 3.4);

return 0;
}
#define ADD(a, b) (a + b)
int main(void) {
int z = ADD(5, 7) * 3;
return 0;
} int main(void) {
int z = (5 + 7) * 3;
return 0;
}
PB071 vod do C, 5.5.2014
#define ADD(a, b) (a + b)
int add(int a, int b) {
return a + b;
}
int main(void) {
int x = 0;
int y = 0;
int z = ADD(x, y);
z = add(x, y);

return 0;
}
Preprocesor makra s parametry

23 int z = ADD(x, y);
0x00401399 <+85>: mov 0x48(%esp),%eax
0x0040139d <+89>: mov 0x4c(%esp),%edx
0x004013a1 <+93>: lea (%edx,%eax,1),%eax
0x004013a4 <+96>: mov %eax,0x44(%esp)

24 z = add(x, y);
0x004013a8 <+100>: mov 0x48(%esp),%eax
0x004013ac <+104>: mov %eax,0x4(%esp)
0x004013b0 <+108>: mov 0x4c(%esp),%eax
0x004013b4 <+112>: mov %eax,(%esp)
0x004013b7 <+115>: call 0x401d5c <_Z3addii>
0x004013bc <+120>: mov %eax,0x44(%esp)
PB071 vod do C, 5.5.2014
Funkce inline
Makra s parametry typicky zavedeny z dvodu rychlosti
pokud je standardn funkce, mus se pipravit zsobnk...
nap. jednoduch seten dvou sel me znateln zpomalovat
Pi pouit makra vloen pmo kd funkce namsto voln
Optimalizujc peklada ale me sm vloit kd funkce
namsto voln (tzv. inlining)
rychlostn optimalizace na kor pamti (del kd)
pekladae jsou obecn v optimalizaci velice dobr!
Pomoc klovho slova inline signalizujeme funkci
vhodnou pro vloen
peklada ale me ignorovat (jen doporuen)
Vrazn snaz ladn ne v ppad maker!
inline int add(int a, int b) {
return a + b;
}
// ...
int z = add(x, y);
PB071 vod do C, 5.5.2014
Makra problmy s typem
Makro nem dn typ
jde o textovou nhradu bhem preprocessingu
velmi nchyln na textov peklepy
Nap. pozor na

hodnotou makra je zde 10000; // int array[10000;];
=> chyba, ale odhal u peklada
Peklada neme kontrolovat typovou sprvnost
zvyuje se riziko nesprvn interpretace dat
asto problm dky automatickm implicitnm konverzm
dky automatick konverzi peklada neohls chybu
pam s konstantou 100 je interpretovna jako etzec
#define VALUE 100
printf("%s", VALUE);
#define ARRAYSIZE 10000;
int array[ARRAYSIZE];
PB071 vod do C, 5.5.2014
Makra problmy s rozvojem
Velk pozor na pesn vsledek rozvoje
#define ADD(a, b) a + b
int main(void) {
int z = ADD(5, 7) * 3;
return 0;
}
int main(void) {
int z = 5 + 7 * 3;
return 0;
}
#define ADD(a, b) (a + b)
int main(void) {
int z = ADD(5, 7) * 3;
return 0;
}
int main(void) {
int z = (5 + 7) * 3;
return 0;
}
pouvejte preventivn
uzvorkovn
PB071 vod do C, 5.5.2014
Makra - shrnut
Makra se vyhodnocuj pi pekladu, nikoli pi bhu
Snate se minimalizovat jejich pouvn
#include OK
#ifndef SOUBOR_H OK
#define MAX 10 ... radji const int MAX = 10;
#define VALUE_T int ... lpe typedef int VALUE_T;
Pouvejte inline funkce namsto funknch maker
inline int add(int, int); namsto #define ADD(a,b) (a+b)
Podmnn peklad ast pi vyuit platformov
zvislch operac
PB071 vod do C, 5.5.2014
<assert.h>
PB071 vod do C, 5.5.2014
<assert.h> pomocnk pi ladn
Pi psan kdu pedpokldme platnost nkterch podmnek
invarianty / konzistence stavu
nap. energie Avatara nikdy neklesne pod 0
nap. pokud je zavolna funkce attack(), tak by Avatar ml bt iv
Pro poteby snazho ladn lze tyto invarianty hldat
a snadno zskat lokalizaci msta, pokud je invariant poruen
void assert(int expression)
pokud se expression vyhodnot na false (0), tak vype identifikaci
dku s assert() na standardn chybov vstup a program skon
nkter vvojov nstroje umon pipojen debuggeru
nap. MS Visual Studio
Pozor, vyuit jen pro ladc reim!
PB071 vod do C, 5.5.2014
Assert - ukzka

#include <assert.h>
#include <string.h>
int main() {

assert(1 + 1 == 2);
assert(strlen("Hello world") == 11);

int value = 0;
assert(value == 0);
assert(value != 0);
assert(false);

return 0;
}
PB071 vod do C, 5.5.2014
Assert vhodnost pouit
Nejedn se o oetovn uivatelskho vstupu
tam je nutn pout bnou podmnku v kdu
jde o stav (promnn...) uvnit naeho kdu, kter nen typicky
pmo nastavovna uivatelem
pokud je ale podmnka poruena, zna to nekorektn chovn
naeho kdu chceme rychle najt
Nepouv se pro detekci chyby v produknm kdu
zde je makro odstranno podmnky se nevyhodnocuj
#define assert(ignore)((void) 0)
Pozor na assert(foo()) !!!
v Debug reimu funguje dobe
v Release reimu se foo() vbec nevol je odstranno!
PB071 vod do C, 5.5.2014
Vatek z <assert.h>

#ifdef NDEBUG
/*
* If not debugging, assert does nothing.
*/
#define assert(x) ((void)0)

#else /* debugging enabled */
/*
* CRTDLL nicely supplies a function which does the actual output and
* call to abort.
*/
_CRTIMP void __cdecl __MINGW_NOTHROW _assert(const char*,const char*,int)
__MINGW_ATTRIB_NORETURN;

/*
* Definition of the assert macro.
*/
#define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))

#endif /* NDEBUG */
Pokud je makro
NDEBUG (Release), tak
nedlej nic
Pokud se e vyhodnot na
true, tak nedlej nic
e vyhodnoceno na false
=> reaguj
PB071 vod do C, 5.5.2014
Assert peklad pro Release

#define NDEBUG
#include <assert.h>
#include <string.h>
int main() {

((void) 0);
((void) 0);

int value = 0;
((void) 0);
((void) 0);
((void) 0);

return 0;
}
#include <assert.h>
#include <string.h>
int main() {

assert(1 + 1 == 2);
assert(strlen("Hello world") == 11);

int value = 0;
assert(value == 0);
assert(value != 0);
assert(false);

return 0;
}
PB071 vod do C, 5.5.2014
Funkce s promnnm potem
argument
PB071 vod do C, 5.5.2014
Funkce s promnnm potem argument
Nkter funkce m smysl pouvat s rznmi poty a typy
argument
printf("Hello 4 world");
printf("%s%c %d %s", "Hell", 'o', 4, "world");
nem smysl definovat funkce pro vechny mon kombinace
Argumenty na konci seznamu lze nahradit vpustkou ...
int printf ( const char * format, ... );
prvn argument je formtovac etzec, dle 0 a N argument
Vslovn uveden argumenty jsou pouity normln
Argumenty pedan na pozici vpustky jsou pstupn
pomoc dodatench maker
hlavikov soubor stdarg.h
va_start, va_arg a va_end
PB071 vod do C, 5.5.2014
Pstup k argumentm
1. Definujeme ve funkci promnnou typu va_list
va_list arguments;
2. Naplnme promnnou argumenty v promnn
sti
va_start(arguments, number_of_arguments);
3. Opakovan zskvme jednotliv argumenty
va_arg(arguments, type_of_argument);
4. Ukonme prci s argumenty
va_end(arguments);
PB071 vod do C, 5.5.2014
Poznmky k argumentm
Seznam argument lze zpracovat jen sten a
pedat dal funkci (kter me zpracovat zbytek)
Jazyk C neumouje zjistit poet argument pi
voln funkce
lze pmo pedat prvnm parametrem:
void foo(int num, ...);
lze odvodit z prvnho argumentu:
int printf(const char* format, ...);
format = "%s%c %d %s" -> 4 args, char*,char,int,char*


PB071 vod do C, 5.5.2014
Promnn poet argument - pklad

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
void varFoo(int number,...) {
va_list arg;
va_start(arg,number);
int valueInt = va_arg(arg,int);
char* valueChar = va_arg(arg,char*);
printf("%d dynamic params are: %d, %s\n",
number,valueInt,valueChar);
va_end(arg);
return;
}
int main(void) {
varFoo(2,123,"end");
return 0;
}
PB071 vod do C, 5.5.2014
Zbvajc klov slova jazyka C
PB071 vod do C, 5.5.2014
Klov slova C99
_Bool
_Complex
_Imaginary
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
inline
long
register
restrict
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while

http://www.georgehernandez.com/h/xComputers/Cs/ReservedKeywords.asp
PB071 vod do C, 5.5.2014
Problm s goto
Goto peru bh kdu a sko na msto oznaen
nvtm (nepodmnn skok)
Syntaxe: goto jmno_nvt;
Nvt znte z pkazu switch
jmno_nvt:

for (/*anything*/) {
if (error_occured) {
goto error;
// step outside all nested blocks
}
}
error:
// do some error handling

PB071 vod do C, 5.5.2014
Goto styl programovn
Strukturovan programovn
pemlme o funkcch, kter maj vstup a vstup
problm eme jejich vhodnm poskldnm
Vyuit goto typicky vede ke pagetovmu kdu
dlouh kusy kdu, siln provzan, jen obtn
dliteln na podfunkce

PB071 vod do C, 5.5.2014
Goto dal informace
Kd s goto typicky sniuje itelnost a ztuje ladn
z pohledu na kd lze tko ct, kter sti se provedou
Kd s goto lze vdy pepsat na kd bez nj
Dijkstra. Go To Statement Considered Harmful.
Communications of the ACM 11(3),1968
http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_C
onsidered_Harmful.html
Problm nen v samotnm slovu, ale ve zpsobu pouit
a stylu programovn, ke ktermu svd
http://blog.julipedia.org/2005/08/using-gotos-in-c.html

PB071 vod do C, 5.5.2014
Goto korektn pouit
C nepodporuje vjimky (na rozdl od C++, Java...)
goto me poskytnout rozumn zpsob oeten
chyb pi nsobnm vnoen blok
Celkov se ale nedoporuuje pouvat
protoe lze vdy pepsat bez nj
speciln zatenky svd k nevhodnmu stylu
programovn
PB071 vod do C, 5.5.2014
Korektn pouit goto

for (/*anything*/) {
// any code
for (/*anything*/) {
// any code
if (error_occured) {
goto error;
// step outside all nested blocks
}
// any code
}
}
error:
// error handling

PB071 vod do C, 5.5.2014
Modifiktory u promnnch
PB071 vod do C, 5.5.2014
Koncept umstn hodnot v pamti
Procesor (registry CPU)
vykonn instrukce procesoru potebuje argumenty v
registrech
RAM (zsobnk)
register ESP ukazuje na aktuln pozici v zsobnku
lokln promnn
RAM (halda)
dynamicky alokovan pam
Ostatn pam (HDD, ...)
umstn dat mimo pam aktulnho programu
nap. soubory na disku
PB071 vod do C, 5.5.2014
Motivace seten dvou sel z/do souboru



1. Naten hodnot z HDD do RAM pamti
fscanf(file, "%d", &value);
2. Pesun hodnot z RAM pamti do registru CPU
MOV 0x48(%esp),%eax
MOV 0x44(%esp),%edx
3. Proveden instrukce procesoru (nap. ADD)
ADD %edx,%eax
4. Uloen vsledku registru CPU do RAM
MOV %eax, 0x48(%esp)
5. Uloen vsledku z RAM do souboru
fprintf(file, "%d", value);

out.txt
"30"
10
20
30
30
20
in.txt
"10 20"
10
v
a
l
u
e

=

v
a
l
u
e

+

v
a
l
u
e
2
;

PB071 vod do C, 5.5.2014
Klov slovo auto
Defaultn pamov tda pro lokln promnn
automatick vznik na zsobnku
automatick odstrann pi konci bloku
V kdu se tedy explicitn neuvd
(pozor, v C++11 jin vznam)
void foo() {
auto int a = 10;
printf("%d\n", a);
a += 10;
}

int main(void) {
foo(); // => 10
foo(); // => 10
foo(); // => 10
return 0;
}
auto int a = 10;
PB071 vod do C, 5.5.2014
Klov slovo static
Promnn deklarovan se static zachov svou
hodnotu i po konci bloku s deklarac
Statick promnn jsou inicializovny v dob
pekladu
trval msto pro promnnou stejn jako pro globln
promnn
pi novm "vzniku" promnn obsahuje posledn
pedelou hodnotu
Zachovn hodnoty promnn je jen v rmci
jednoho sputn programu
Promnn se static je lokln v rmci souboru
static int a = 10;
PB071 vod do C, 5.5.2014
Klov slovo static - ukzka

void foo() {
static int a = 10;
printf("%d\n", a);
a += 10;
}
int main(void) {
foo(); // => 10
foo(); // => 20
foo(); // => 30
return 0;
}
PB071 vod do C, 5.5.2014
Klov slovo volatile
Promnn me bt mnna i mimo n kd
rutinou peruen, sdlen pam...
z analzy zdrojovho kdu nelze urit msta zmny
promnn
Vynut nahrn hodnoty promnn ze zsobnku
do registru CPU ped kadou operac
nelze provst optimalizaci pedpokldajc ptomnost
hodnoty promnn v registru z pedchoz operace
pokud by dolo ke zmn mimo n kd, hodnota by
nebyla aktuln

volatile int a = 10;
PB071 vod do C, 5.5.2014
Klov slovo register
Doporuen pro peklada, aby byla promnn
uloena pmo v registru CPU
ped vykonnm instrukce mus bt hodnoty do registru
peneseny (instrukce mov atp.)
pokud je ale ji v registru ptomn => zrychlen
CPU m ale jen omezen poet registr
register je jen doporuen, peklada me ignorovat
Nkter promnn mohou bt umstny v registru
i bez specifikace register
peklada sm analyzuje a vybere asto pouvan
promnn
register int a = 10;
PB071 vod do C, 5.5.2014
Klov slovo register - ukzka

void foo4() {
register int value = 10;
printf("%d\n", value);
value += 12;
}
34 register int value = 10;
0x004013c6 <+7>: mov $0xa,%ebx

35 printf("%d\n", value);
0x004013cb <+12>: mov %ebx,0x4(%esp)
0x004013cf <+16>: movl $0x402034,(%esp)
0x004013d6 <+23>: call 0x401ca0 <printf>

36 value += 12;
0x004013db <+28>: add $0xc,%ebx

Pro promnnou value
byl vyhrazen registr ebx
slo 10 (0xa) je pmo
uloeno do registru ebx
slo 12 (0xc) je pmo
piteno k registru ebx
PB071 vod do C, 5.5.2014
Klov slovo restrict
Pamov tda pouze pro ukazatel
slibujeme pekladai, e na danou pam ukazuje jen tento a
dn jin pouvan ukazatel
pokud bude pam mnna, tak pouze pes tento ukazatel
Peklada me generovat optimalizovanj kd
nap. nemus nahrvat opakovan hodnotu do registru, pokud je
zejm, e nebyla zmnna
pklad viz. http://en.wikipedia.org/wiki/Restrict
Pokud pedpoklad porume, me dojt k
nedefinovanmu chovn
zvate, zda pnos rychlostn optimalizace vyv riziko zanesen
chyby
void foo(int* restrict pA, int* restrict pB, int* restrict pVal);
PB071 vod do C, 5.5.2014
Klov slovo extern
Promnn nebo funkce je definovan jinde, typicky v
jinm zdrojovm souboru
Defaultn volba pro funkn prototyp
po vloen hlaviky s prototypem me peklada pokraovat, ani
by znal implementaci funkce
A bhem linkovn se hled implementace funkce resp.
umstn promnn
Pro promnn se pouv v ppad globln promnn
dostupn z nkolika zdrojovch kd
obecn by se nemlo vyskytovat moc asto (nap. mutex)
file1.c

int globalValue = 10;
main.c

extern int globalValue;
int main(void) {
printf("%d\n", globalValue);
return 0;
}
10
extern int globalValue;
PB071 vod do C, 5.5.2014
Modifiktory u promnnch - shrnut
Dodaten modifiktory mohou pomoci:
optimalizovat rychlost (register,restrict,const)
zamezit chybm z optimalizace (volatile)
zamezit chybm programtora (const)
ovlivnit ivotn cyklus promnn (auto,static)
zmnit umstn promnn (register,extern)
Nkter modifiktory jsou jen doporuen pro
peklada
Nejprve pit korektn kd, optimalizujte a pot!
PB071 vod do C, 5.5.2014
ISO/IEC 9899:2011 (C11)
PB071
ISO/IEC 9899:2011 (C11)
Nejnovj verze standardu (2011)
http://en.wikipedia.org/wiki/C11_(C_standard_revision)
pidny drobn rozen jazyka
pidny nkter funkce dve dostupn jen v POSIXu
Pkn souhrn motivac a zmn
http://www.jauu.net/data/pdf/c1x.pdf
Vyzkouen na Aise:
module add gcc-4.7.2
gcc -std=c11
GCC zatm nepodporuje vechny nov vlastnosti
(Zatm nejrozenj zstv pouit C99)
vod do C, 5.5.2014
PB071 vod do C, 5.5.2014
Co dl po PB071?
PB071 vod do C, 5.5.2014
Mon nvaznosti PB071
Programovn v jazyce C++ (PB161)
principy objektov orientovanho programovn
zklady jazyka C++ (STL, ablony...)
Programovn v jazyce Java (PB162)
vod do vvoje v C#/.NET (PV178)
Tmatick vvoj aplikac v C/C++ (PB173)
zamen na een praktickch programtorskch problm v
oblasti vaeho zjmu
tmatick skupiny: Zpracovn obrazu, Systmov programovn
Linux a Windows, Ovladae jdra Linux, Aplikovan kryptografie a
bezpenost...
lze zapisovat opakovan (rzn seminrn skupiny)
Seznam programovacch pedmt na FI
http://www.cecko.eu/public/code@fimu

PB071 vod do C, 5.5.2014
Mon nvaznosti PB071 (pokraovn)
Programovn se nenaute na cviench ve kole
Najdte si zajmav open source projekt
zkuste v nm odstranit reportovanou chybu
zkuste implementovat njakou TODO funknost
Vyberte si zajmavou laborato na kole
sta chu se uit novm vcem
Programtoi jsou (jet pod) slun placen
zvate pi vbru brigdy
Nebojte se jinch jazyk
schopnost programovat je platformov nezvisl
PB071 vod do C, 5.5.2014
Diskuze
PB071 vod do C, 5.5.2014
Debata
1. rove slid, hloubka zbru?
2. Tmata chybjc na pednkch?
3. Co je pro vs nejvt pnos ze cvien?
4. Co vm chyb na cviench?
5. Nronost domcch kol?
6. Zpsob bodovn domcch kol?
7. Pnos odevzdn naneisto?
8. Pnos krtkch testk ped cvienm?
9. Cokoli dalho?
Pit prosm do ankety + i -
PB071

vod do C, 5.5.2014

You might also like