Kihagyás

3. előadás

Tokenek

Token: Tovább nem bontható nyelvi elem

Típusai

  • Kulcsszavak (keyword)
  • Azonosítók (Identifier)
  • Konstansok (literal, constant)
  • Operátorok (operator)
  • Egyebek, C-ben szeparátorok (separator)

Kulcsszavak

Beépített szavak, jellemzően utasítás nevek és vezérlési szerkezet-indikátorok.

Pl. utasítások nevei (if, while); az alaptípusok nevei (int, double). C-ben csupa kis betűvel írandók.

Azonosítók

Azok a nevek, amit mi adunk egyes programelemeknek: változóknak, függvényeknek, új típusoknak, stb.

  • Betűvel kezdődnek (a _ még mindig betű)
    • utána számok és betűk
  • Kis- és nagybetű érzékeny
  • Kulcsszavak használata TILOS

Írásukkor érdemes használni névkonvenciókat. Például:

  • camelCaseNotation
  • CTypenamesStartsWithUppercase
  • under_score_notation (snake_case)
  • Érdekesség: Hungarian Notation
    • A névbe belerakta a típussal és használatával kapcsolatos alapvető információkat.
    • Kitalálója: Charles Simonyi

Konstansok / literálok

Megnevezés Példa Típus Érték
decimális egész 25 int 25
oktális egész 031 int 25
hexadecimális egész 0x19 int 25
hosszú egész 12L long int 12
C99 méghosszabb egész 12LL long long int 12
előjel nélküli egész 12u unsigned int 12

Egész számok

Kettes komplemens leírás (számrend jegyzet?) Méretük (az is megvan valahol máshol ffs)

Karakterek

Platformfüggő, hogy alapból signed vagy unsigned

Escape Codes
  • \' single quote
  • \" double quote
  • \? question mark
  • \\ backslash
  • \a bell (audio)
  • \b backspace
  • \f form feed
    • new page
  • \n newline
  • \r carriage return
  • \t horizontal tab
  • \v vertical tab

Lebegő pontos számok

A valós számokkezelése a számítástechnikában:

  • Fixpontos
    • Előre rögzítjük, hogy a rendelkezésre álló memóriaterületen hány biten ábrázoljuk az egész és hányon a tört részt.
  • Lebegőpontos
    • Lebeg, de nem túl pontos
    • matissza (egy előjeles szám)
    • karakterisztika (az exponenciális rész, a szám nagyságrenjét adja meg, azaz egy bázis kitevője)

Komplex számok

  • C99 óta része a nyelvnek
  • # include <complex.h>

Stringek

  • C-ben nem elemi típus
  • Karaktertömbök
  • A string immutábilis érték (lehet velük műveleteket végezni, de magukat a stringeket nem tudjuk megváltoztatni)
  • A C nyelvben a stringek nem elemi típusok, nem tudunk közvetlenül műveleteket alkalmazni rájuk.
  • NUL karakter zárja le

Void

  • Az üres halmaznak felel meg.
  • Ezzel a típussal nem lehet értékeket visszaadni. (return)
  • Visszatérő érték nélküli függvények deklarációjához és a paraméter nélküli függvények jelölésére is használjuk.
  • Void típusú pointerek (általános, típustalan mutatókként használhatók) (void *)

Operátorok

  • Műveleti jelek
  • Különböző precedenciák (kötési erősség)
    • pl. a szorzás nagyobb precedenciájú, mint az összeadás, tehát előbb kell kiértékelni
  • Asszociativitás
    • ÁLTALÁBAN azonos precedenciájú operációkat balról jobbra "zárójelezi"
    • DE egyes operátorok jobbról balra. Pl: x = (y = (z = 5)), ! (-- (* (++p)))
  • Függvényhívás is egy operátor
  • x++: x növelése 1-el, de előtte használd fel az értékét
  • ++x: x növelése 1-el, és UTÁNA használd az értékét
Precedencia Operátor Leírás Assoc
Posztfix ++ posztfix növelés L->R
– – posztfix csökkentés
() függvényhívás
[] tömb index
. struct/union tag elérés
-> tag elérés mutatóval
(type){list} összetett literál (C99)
Unáris ++ prefix növelés R->L
– – prefix csökkentés
+ pozitívlőjel
negatív előjel
! logikai negáció
~ bitenkénti negáció
(type) típus konverzió
* pointer indiekció
& címoperátor
sizeof típus/objektum mérete
_Alignof igazítási követelmény (C11)
Multiplikatív * / % szorzás, osztás, maradék L->R
Additív + – összeadás, kivonás L->R
Léptetés « » bitenkénti bal/jobb léptetés L->R
Relációs < <= > >= relációs műveletek L->R
Egyenlőség == != egyenlő, nem egyenlő L->R
Bitenkénti & bitenkénti és (AND) L->R
^ bitenkénti kizáró vagy (XOR) L->R
| bitenknti vagy (OR) L->R
Logikai && logikai és AND L->R
|| logikai vagy OR L->R
Terciális ? : feltételes kifejezés R->L
Értékadás = értékadás R->L
+= –= összetett értékadások
*= /= %=
«= »=
&= |= ^=
Szekvencia , vessző (szekvencia) operátor L->R

Megjegyzések

Bináris vagy/és precedenciája

Értékadás vs. egyenlőségvizsgálat

  • Értékadás és az egyenlőségvizsgálat különbsége
  • Yoda conditions: konstanssal való összehasonlításkor írjuk balra a konstanst
    • szintaktikai hibát kapunk, ha elhagyunk egy karaktert
    • Compare two numbers, I do
      • ===, my master