´ vod do jazyka C U 1 Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarovy´ch technologiı´
12. rˇ´ıjna 2009
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Organizace vy´uky
Prˇedna´sˇky Teoreticke´ za´klady dle normy jazyka C Cvicˇenı´ Prakticke´ u´lohy odprˇedna´sˇene´ la´tky Prostrˇednı´ Visual Studio 2005/2008 Povinna´ minima´lnı´ u´cˇast 60% Za´pocˇet Vypracova´nı´ semestra´lnı´ pra´ce ´ speˇsˇne´ slozˇenı´ za´pocˇtove´ho testu U
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Organizace vy´uky Literatura Prˇedna´sˇky Herout, P.: Ucˇebnice jazyka C Schildt, H.: Naue se sa´m C Kernighan, B. W., Ritchie, D. M.: The C Programming Language Prˇedpokla´dane´ znalosti za´klady algoritmu, promeˇnna´, prˇirˇazenı´, vy´raz ˇr´ıdı´cı´ struktury funkce a jejı´ vola´nı´: hodnotou odkazem
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Cı´le a historie Cı´le zvla´dnout za´klady programova´nı´ v jazyce C vytvorˇit za´klady pro objektove´ programova´nı´ v C++ porozumeˇt pointeru˚m Historie prˇedchu˚dce byl jazyk B 1972 – Dennis M. Ritchie, AT&T Bell Labs – jazyk C (odstraneˇnı´ proble´mu jazyka B) masovy´ u´speˇch – UNIX prˇepsa´n cely´ do C 1978 - K&R Standard (“Pre-ANSI C”) 1982 - pocˇa´tek standardizace jazyka a knihoven 1989 – American National Standard X3.159-1989 = “ANSI C”(u´prava jazyka dle prakticky´ch zkusˇenostı´) 1990 – prˇevzata pod ISO/IEC 9899-1990 nejnoveˇjsˇ´ı ISO/IEC 9899-1999 – C99 Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Charakteristika jazyka
Klady multiplatformnı´ prˇenositelne´ zdrojove´ ko´dy napoı´e OS a CPU – stacˇı´ pouze C kompila´tor
nı´zkou´rovnˇovy´ prˇ´ımy´ prˇ´ıstup do pameˇti, bitove´ operace
rychly´, vhodny´ pro syste´move´ programova´nı´ vy´voj OS, Linux napsa´n kompletnı´ v C
Za´pory “nebezpecˇny´” slaba´ typova´ kontrola, nejednoznacˇna´ syntaxe
neumozˇnˇuje prˇ´ımou pra´ci s rˇeteˇzci
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Zpu˚sob zpracova´nı´ programu
Editor – vyva´rˇenı´ a editaci ko´du Preprocesor – prˇedzpracova´va´ ko´d (vynecha´va´ komenta´rˇe, linkuje .h soubory, makra) vy´sledkem je opeˇt textovy´ soubor Compiler – prˇeklad zdrojove´ho ko´du do relativnı´ho ko´du (jazyk rel. adres), vznika´ soubor *.obj , podmı´neˇneˇ mu˚zˇe vzniknout *.lis (protokol o prˇekladu) Linker – prˇideˇlı´ relativnı´m adresa´m adresy absolutnı´, najde adresy na ostatnı´ identifika´tory (knihovny *.lib), vy´sledkem je *.exe Debugger – pro nale´za´nı´ chyb, vsˇe probı´ha´ v cyklu ´ vod do jazyka C Ing. Jan Fikejz (KST, FEI) U Editor-Compiler-Linker-Debugger
Charakteristika programu v jazyce C
vsˇechny programy se skla´dajı´ z jedne´ nebo vı´ce funkcı´ povinna´ funkce kazˇde´ho programu main() prˇ´ıkazy koncˇı´ strˇednı´kem - ; blok programu ve slozˇeny´ch za´vorka´ch - {} ˇete ˇzec” rˇeteˇzce v uvozovka´ch ”r
znaky v apostrofech ’x’
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Obecny´ forma´t funkce a funkce main Obecny´ forma´t funkce na ´vratovy ´Typ jme ´noFce(seznamParametru ˚) { blok pr ˇı ´kazu ˚ }
Funkce main() musı´ by´t vzˇdy vstupnı´ mı´sto programu nejjednodusˇsˇ´ı funkce main void main(void) { } Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Fce s na´vratovou hodnotou a parametry
fce s na´vratovou hodnotou a parametry int main(int argc, char* argv[]) { return 0; }
na´vratova´ hodnota parametry argc – pocˇet parametru˚ argv[] – pole parametru˚
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Spusˇteˇnı´ z prˇ´ıkazove´ rˇa´dky s parametry
Prˇ´ıklad pzˇ´ıkazove´ rˇa´dky C:\program.exe par1 par2
Argumenty prˇenesene´ do programu argc = 3 argv[0] = ”C:\program.exe” argv[1] = ”par1” argv[2] = ”par2”
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Komenta´rˇe zacˇa´tek /* konec */ Prˇ´ıklady komenta´rˇu˚ /* komentar na vice radcich s vynechanim jednoho radku */ /* komnetar na jednohom radku */ vysledek = a /* promenna */ + b;
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Komenta´rˇe
podle C99 lze navı´c pouzˇ´ıt pro jednorˇa´dkove´ komenta´rˇe // Prˇ´ıklad komenta´rˇu˚ II vysledek = a + b; // souc ˇet a,b
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Za´kladnı´ datove´ typy Celocˇı´selne´ char 8b -c ˇtenı ´ jednoho znaku/male ´ho c ˇı ´sla short int 16b int 16/32b -za ´visle ´ na prostr ˇedı ´ long int 32b
vsˇe bud’ unsigned - bez zname´nka – rozsah od 0 do 2n − 1 signed – se zname´nkem (implicitneˇ) – rozsah od - 2n−1 do
2n−1 − 1 prˇ´ıklad unsigned char 0 - 255 signed char -128-127 Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Za´kladnı´ datove´ typy
Celocˇı´selne´ - ekvivalentnı´ za´pisy short = short int = signed short int long = long int = signed long int = signed int int
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Za´kladnı´ datove´ typy Rea´lne´ float 32 b double 64 b long double 64 b
Logicke´ prˇ´ımo nejsou poskytova´ny nenulova´ hodnota (nejcˇasteˇji 1) = true nulova´ hodnota (0) = false azˇ od normy C99 zaveden typ _Bool ˇ eteˇzce R prˇ´ımo nejsou poskytova´ny pomocı´ pole znaku˚ Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Velikost datove´ho typu
opera´tor sizeof(Typ) vracı´ velikost datove´ho typu v B Prˇ´ıklad sizeof(char); // = 1B sizeof(double); // = 8B
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Klı´cˇova´ slova
Celkem 32 klı´cˇovy´ch slov Klı´cˇova´ slova auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
Ing. Jan Fikejz (KST, FEI)
struct switch typedef union unsigned void volatile while
´ vod do jazyka C U
Identifika´tory
case sensitive (Pocet 6= POCET 6= pocet) pouze prvnı´ch 31 znaku˚ nesmı´ zacˇı´nat cˇı´slem
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U
Bı´le´ znaky zahrnujı´ du˚lezˇite´ znaky nejsou na obrazovce videˇt \ = escape sekvence Bı´le´ znaky \n – nova´ rˇa´dka (linefeed – LF) \r – na´vrat na zacˇa´tek rˇa´dky (carriage return – CR) \f – nova´ stra´nka (formfeed – FF) \t – tabela´tor (tab – HT) \b – posun doleva (backspace – BS) \a – pı´sknutı´ (alert BEEL) \\– zpeˇtne´ lomı´tko (backslash) \’ – apostrof (sigle quote) \0 – nulovy´ znak (null character – NULL)
Ing. Jan Fikejz (KST, FEI)
´ vod do jazyka C U