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\abell (audio)\bbackspace\fform feed- new page
\nnewline\rcarriage return\thorizontal tab\vvertical 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