B-PROG2 Syntax jazyka C

Prehľad syntaxe jazyka C


Základný prázdny program


Základná syntax funkcií


Základné I/O


Viac info: https://en.wikipedia.org/wiki/Printf_format_string

Základné dátové typy


Typ Popis Konštanta Formátovací reťazec
int celé číslo: 32 bitové alebo 16 bitové, so znamienkom 189 %d
0x189 %x
unsigned kladné celé číslo bez znamienka 189 %u
long long 64-bitové číslo so znamienkom 189LL %lld
float desatinné číslo s malou presnosťou 1.89f %f
double desatinné číslo s väčšou presnosťou 1.89 %lf
7.3e-4 %.1le
char 8-bitové číslo, jeden znak ‚a‘ %c

Konverzia dátových typov


Implicitná:

  • binárne operátory: A op B
    • konvertuje na „väčší typ“
    • int / double konvertuje na double / double, výsledok je double
    • int + char konvertuje na int + int, výsledok je int
  • priradenie: A = B
    • konvertuje na cieľový typ, môže nastať strata presnosti
    • int = double konvertuje na int, stratí sa desatinná časť/hrozí pretečenie
    • char = int konvertuje na char, stratia sa bity (zostane posledných 8 bitov, zvyšok po delení 256)
  • volanie funkcie: f(A)
    • snaží sa skonvertovať A na typ deklarovaný v zozname parametrov funkcie
    • void f(int): f(3.3) -> stratí presnosť, volá sa f s parametrom 3

Explicitná:

  • pomocou operátora (cielovy_typ)
  • pozor na združovanie (x,y sú double):
    • (int) (x/y) -> delia sa double čísla, výsledok je orezaný na int

    • (int) x/y -> x sa oreže na int, ale potom sa opäť skonvertuje na double a delenie je s double číslami (a teda aj výsledok)

Výrazy


Základná aritmetika:

Priradenie spojené s operáciou:

Zvýšenie hodnoty o 1:

Združovanie operátorov


Riadi sa (zväčša) štandardnými matematickými zápismi:

  • Unárne operátory majú najvyššiu priorit

  • Násobenie/delenie má vyššiu prioritu ako sčítanie/odčítani

  • Rovnaká priorita sa zátvorkuje matematicky (zväčša zľava)

  • Priradenia sa zväčša zátvorkujú posledné a zprava doľava

Plná tabuľka a popis: http://en.cppreference.com/w/c/language/operator_precedence

Pri zápise je kvôli čitateľnosti vhodné zložité výrazy rozdeliť, a manuálne ozátvorkovať netriviálne časti.

Vetvenie


Podmienky a logické operátory


Vetvenie if


Vetvenie switch


Cykly


Polia


Polia predstavujú postupnosť za sebou v pamäti uložených údajov sprístupniteľných cez index.

Viac detailov k inicializácii: http://en.cppreference.com/w/c/language/array_initialization

Viacrozmerné polia

Štandardné polia, ktorých prvkami sú iné polia.

Reťazce

Pole znakov, na ktorých konci je znak '\0'.

S reťazcami sa dá robiť v jazyku C veľa vecí cez knižničné funkcie, viď príslušné cvičenie a literatúru.

Smerníky


Adresa premennej sa získa cez operátor &.

Smerník je premenná obsahujúca pamäťovú adresu:

  • beztypový: iba vieme uložiť a prečítať adresu ľubovoľného typu
  • typový: obsahuje adresu prvku nejakého typu, dá sa nepriamo získať hodnota cez operátor *, dá sa robiť smerníková aritmetika
  • na funkciu: obsahuje adresu funkcie, funkcia sa dá zavolať

Smerníková aritmetika:

Štruktúry


Štruktúry logicky združujú viacero údajov do 1 celku. Syntax deklarácie:

Často sa spája deklarácia s vytvorením nového typu:

Operácie so štruktúrou:

Enumerácie


Enumerácie združia pomenovanie konštánt do 1 typu. Namiesto:

vytvoríme typ

Tento typ môžeme používať ďalej ľubovoľne v kóde. Hodnoty sa správajú ako int, ale ako konštanty môžem použiť pomenované názvy:

Dynamické polia (aj viacrozmerné)


  • Dynamické polia sa vytvárajú pomocou funkcií malloc (neinicializované pole, t.j. nie je definovaný obsah), alebo calloc (naplní pole nulami). Funkcia vráti adresu alokovanej pamäte, ktorú si uložíme do smerníkovej premennej.
  • Dynamické pole je možné zmenšiť alebo zväčšiť podľa potreby pomocou funkcie realloc.
  • Po skončení práce s dynamickým poľom musíme pamäť uvoľniť pomocou funkcie free. Po volaní free je vhodné smerník vynulovať, ak sa s ním nebude ďalej pracovať.

Viacrozmerné dynamické polia

Typicky ich reprezentujeme poľom smerníkov (dynamickým, alebo aj statickým), pričom každý smerník odkazuje na dynamicky alokované pole.