7.6 Operatory rovnosti.
Tak ako v inych kompilatoroch nulovy (nil or null) pointer
je skutocne 0 (nula) ako koncepcne tak i v dosledku pointrov,
ktore mozu ukazovat na adreasu 0 v pamati, nemoze byt jednoducho
porovnavany s NIL.
7.8 Bitovy (bitwise) AND operator.
7.9 Bitovy exclusive OR operator.
7.10 Bitovy inclusive OR operator.
7.11 Logicky AND operator.
7.12 Logicky OR operator.
7.13 Podmienkovy operator.
7.14 Operatory oznacenia.
Kompilador nedovoluje oznacenie pointrov v integer alebo naopak
okrem oznacenia 0 (nuly) ako pointer NIL. Toto obmedzenie je ur-
cene na to, aby nespravne hodnoty neoznacovali pointer (ako napr
chybanie * alebo & operatora) a v dosledku toHo neprepisali pa-
mat. Je mozne pouzit explicItny typ konverzie, aby pointer
ukazoval na prislusne miesto v pamati:
typedef integer *adresa ;
adresa ptr ; ptr = cast(adreca) 0xBC00 ;
7.15 Operator ciarky.
Nie je implementovany.
8. Deklaracie.
V zhode s normalnym sposobom programovania v jazyku C lubovolny
specifikator pamatovej triedy musi byt deklarovany pred specifi-
katormi typu. Tak syntax pre decl-specifier je:
decl-specifiers:
sc-specifier
opt decl-specifiers type-specifier
8.1 Specifikatory pamatovej triedy.
'extern' specifikator ma obmedzene pouzitie nakolko tu nie su
ziadne oddelene subory. Je pouzivany v specialnom pripade funk-
cii kniznice nie typu int. Tieto funkcie nie su definovane pri
pouziti v programe, pretoze sa definuju az ked sa kniznicny
subor najde na konci programu (vid cast 12.2).
Ich typy, pravdaze, musia byt deklarovane pred ich pouzitim,
inak su deklarovane implicitne ako funkcia, ktorej vysledok je
typu int (function returning-int). Takze externa deklaracia musi
byt urobena na zaciatku programu. Tato deklaracia je v subore
hlavicky kniznice pre standardne funkcie kniznice. Tato
deklaracia nesposobi nahranie funkcie z kniznice, len
aktualizuje pouzitie funkcie.
Specifikator registra sa akceptuje ale ignoruje kym kompilator
nema ziadne pristupne registre pre premenne.
8.2 Specifikatory typu.
Specifikatory long a short su akceptovane, ale su ignorovane.
'long int' a 'short int' su rovnake ako int (16 bitov).
8.3 Deklaracie.
8.4 Vyznam deklaracii.
8.5 Struktura a norma deklaracii.
Polia, casto nazyvane bitove polia (bitfields), nie su implemen-
tovane. Na dosiahnutie jednotlivych bitov v byte je nutne pouzit
bitove operatory a posuvy.
Mena struktur i clenov zdielaju spolocny priestor nazvov, takze
jednoduch premenne ako aj struktury nesmu mat rovnake mena -
ako napriklad integer.
8.6 Inicializacia.
Inicializatory su zavedene pre staticke a externe premenne, nie
vsak pre automaticke premenne. Inicializacia automatickej skal-
arnej premennej je vykonana puhym uvedenim urcujeceho vztahu.
Inicializacia automatickych agregatov (lokalne polia a struktury
na baze stacku) nie je dovolene v jazyku C; avsak HISOFT - C u-
moznuje "move()" v kniznici funkcii, co moze byt pouzite na
inicializaciu lokalneho pola alebo struktury skopirovanim obsahu
statickeho pola. Vsimnite si, ze staticka premenna je vyhodnej-
sia nez automaticka, ledaze funkcia je rekurzivna alebo urcenie
miesta predpisuje automaticku. Inicializator struktury je seriou
konstant, ktore generuju byty ako pri "inline" (vid 9.14). Nie
su zoradene na hraniciach poli. Inicializacia sa vykonava v kaz-
dom case pri behu kompletneho programu. Nebezi vsak v direct
mode.
8.7 Mena typov.
Jedine povolene mena typov su predefinovane typy a tie, ktore
boli deklarovane v 'typedef' deklaracii. Abstraktne deklaracie
nie su dovolene. mozu byt umiestnene pomocou typedef deklaracie,
ak sa maju vyskytovat v danom programe s vysledkom zvysenia pre-
hladnosti a zabezpecenia typu.
8.8 Typedef
9. Prikazy.
9.1 Prikazy vyjadrenia vyrazov.
9.2 Zlozene prikazy.
Deklaracie su povolene iba v hlavicke bloku funkcie, nie su po-
volene v inych zlozenych vyrazoch.
9.3 Podmienkove prikazy.
9.4 Prikaz 'while'.
9.5 Prikaz 'do'.
9.6 Prikaz 'for'.
9.7 Rozdelovaci (switch) prikaz.
Nesmie obsahovat deklaracie v hlavicke vyrazov, ktore zahrna.
9.8 Prikaz prerusenia. (break)
9.9 Prikaz pokracovania (continue).
9.10 Prikaz navratu (return).
9.11 Prikaz 'goto'.
9.12 Vyraz 'label'.
9.13 Nulovy prikaz.
9.14 Prikaz 'inline'. (NOVY DIEL)
Hisoft C zabezpecuje moznost zabudovania strojoveho kodu do pro-
gramu v jazyku C. Novy typ prikazu, ktory sa pouziva (podoba sa
na volanie funkcie) je:
inline ( k1, k2, k3, ... ) ;
kde k1, k2, atd. je vypis konstantnych vyjadreni, ktore budu
vlozene do cieloveho programu. Vyrazy, ktorych hodnota lezi v
rozsahu 0 az 255 vcitane budu obsadzovat jeden byte, ine cisla
sposobia obsadenie dvoch bytov. Moze byt pouzity lubovolny kon-
stantny vyraz. Priklad - skok na adresu 0:
inline(0xC3,0,0); /* 0xC3 je 'JP' instrukcia Z80 */
alebo volanie adresy 1601 (hex) s cislom 3 v registri A (otvara
kanal -stream 3):
#define CHAN_OPEN 0x1601
#define 1d_a_with 0x3E
#define call 0xCD
inline( 1d_a_with,3, call,CHAN_OPEN );
a zapamatanie vstupneho znaku do globalnej premennej "c":
#define 1d_mem_from_hl 0x22
inline( call,getchar, 1d_mem_from_hl, &c );
Treba byt opanrny pri vyuzivani tychto moznosti. Prestudujte si
cast "Low-Level" (nizka uroven) v tomto manuali na vyhladanie
registrov, ktore je potrebne uschovat atd.
10. Externe definicie.
10.1 Externe definicie funkcii.
Toto je pridavok k syntaxu definicie funkcii, co vytvara sposob
definovania funkcii, ktore beru premenny pocet skutocnych argu-
mentov (nazyvaju sa "variadic" funkcie). Rezervovane slovo
"auto" moze nasledovat deklarator funkcie pred telom funkcie
(medzi "f(...)" a "int arg;{...}"). Cielom je sposobit, aby kom-
pilator umiestnil pocet bytov skutocnej premennej ako pridavny
argument na konci. Funkcia ma tento argument k dispozicii a pod-
la neho zistuje, kolko dalsich argumentov tam ma. Standardne
funkcie kniznice "min" a "max" funguju s pouzivanim tychto
moznosti a zdrojovy kod v subore hlavicky (HEADER) kniznice
"stdio.h" poskytuje priklad ako treba taku funkciu pisat.10.2 Externe definicie dat.
11. Pravidla prehladu (scope rules).
V Hisoft C je cely program kompilovany naraz, takze tu nie treba
linkovat skor kompilovane podprogramy (routines). Namiesto toho
system poskytuje moznosti zdrojovej kniznice a o tom pojednava
cast 12.2.
11.1 Lexikalny prehlad.
Identifikatory priradene k jednoduchym premennym a tiez prira-
dene struktutam a jednotnym clenom nie su oddelene.
11.2 Prehlad externych prvkov.
12. Kontrolne riadky kompilatora.
12.1 Tokenizovanie.
12.2 Zahrnutie suborov
Subory mozu byt zahrnute. Pomenovany subor je hladany,dve formy
su identicke.Uvodzovky ''alebo zatvorky < > mozeme vynechat.
Teda nasledujuce prikazove riadky su identicke:
# include "meno suboru"
# include <meno suboru>
# include meno suboru
Okrem toho je moznost prehladania kniznice.Prikazovy riadok
#include ? meno suboru ?
vyvola citanie a hladanie pomenovaneho suboru. Subor sa moze
skladat s postupnosti externych definicii funkcii. Kazda funkcia
bude kompilovana len, ked uz bola volana v programe ( t.j. ak
existuje pre nu FORWARD REFERENCE ).Tak je mozne mat kniznicu
suborov funkcii a automaticky zahrnut len tie, ktore su potrebne
v programe. Zapamatajte si, ze ak nejake funkcie v kniznici
(povedzme f() ) vlaju ine funkcie v kniznici (povedzme g()
),potom f() musi byt pred g(). Inak by bolo prehladat kniznicu
znovu. Ako priklad takehoto typu kniznice pozrite kniznicu
standartnych funkcii dodavanu s kompilatorom. Ina variacia - bez
mena suboru sa pouziva na kompilaciu zdroja, ktory bol
pripraveny editorom a je teraz v pamati textoveho bufferu:
# include
# include moze byt zahrnute raz, lebo je limitovane priestorom
bufferu. Teda z priameho vstupu je mozne pouzit # include pre
program, ktory opat pouziva #include pre hlavickovy subor alebo
pre funkcie,ale tieto subory nemozu pouzivat # include.
Vsimnite si ze pretoze je k dispozicii len jeden magnetofon, nie
je mozne jeden subor na paske zahrnut do druheho suboru na paske
12.3. Podmienena kompilacia
Prikazy podmienenej kompilacie nie su implementovane.
12.4. Line control
Prikazy # line control nie su implementovane.
12.5. Kontrola listingu (nova cast)
Hisoft C poskytuje dalsiu moznost kontroly produkcie listingu
kompilatorom. Kompilator normalne produkuje listing, ale prikaz:
# list -
ho vypina.Na opatovne zapnutie pouzijeme:
# list +
Ak subor obsahuje rovnaky pocet # list - a # list + nema to
vplyv na listing programu, ktory ho obsahuje.
12.6. Priamy vypocet (nova cast)
Hisoft C dovluje priamy vypocet vyrazov kompilovanych
kompilatorom. Niekedy ho volame bezprostredny vypocet a je to
podobne ako zadavanie prikazov v BASICu bez cisla riadku.Toto
umoznuje prikazovy riadok:
# direct +
a naopak
# direct -
Vsimnite si,ze ak je vyraz vypocitany, vysledok sa neobjavy
pokial nie printovany.Teda pouzitelny prikaz na vykonanie tohto
moze byt: 'printf(''%'',190*42);'. Avsak nejake zmeny globalnych
premennych zostanu, teda moze byt rozumne vykonat 'count=10;'
pred nejakym dalsim prikazom. Zapamatajte si tiez,ze globalne
premenne nebudu inicializovane na nulu.