Jazyk C: Přílohy
Čtení deklarací
Přibližný návod:
- čte se zprava doleva <----
- neprázdné () závorky vyznačují části, které se čtou
napřed a čtou se zevnitř ven
- * označuje ukazatel,
[] pole,
() funkci - v C s nespecifikovaným počtem parametrů (...)
- v C++ bez parametrů (void)
(T1,T2) funkci se 2 parametry typu T1 a T2
Příklady:
int typ int
int * typ ukazatel na int
int *p[] pole ukazatelů na int
int (*u)[] ukazatel na pole int
int *f() funkce vracející ukazatel na int
int (*u)(int) ukazatel na funkci vracející int s parametrem typu int
int (*const p[])() pole konstantních ukazatelů na funkci typu int
const T konstantní T
const T * ukazatel na konstantní T
T * const konstantní ukazatel na T
const T * const konstantní ukazatel na konstantní T
Cvičení:
int (* const a[])(void(*)(int));
char (*p)[10];
char **ptr;
char const * const * ptr2;
void (*fp)(char[], int n);
typedef void (*cfp)();
void (*signal(int sig, void (*f)(int)))(int); /* viz */
void (*pf[5])(char *s, ...);
Program make
Wikipedia:Make
Příklad použití programu make pro malý projekt
#-------------------------------------------------------------------------
# obsah souboru Makefile
# je tvořen posloupností pravidel definujících závislosti mezi soubory.
# Pravidla maji tvar cilový-soubor: zdrojové soubory
# Po pravidle následuje popis akcí, které vytvoří cílový-soubor,
# jen v případě, když cílový-soubor je starší než někteý zdrojový.
#
# 'make' nebo 'make all' přeloží vše (bez parametru vezme první pravidlo)
# a vytvoří program
# 'make archiv' zabalí vše potřebné do archívu
# 'make clean' uklidí -- zruší produkty překladu, záložní kopie souborů, atd
# Upozornění: na začátku řádku s popisem akce musí být tabulátor!
# proměnná CC --- volba překladače - implicitně CC=cc
CFLAGS = -g -O2
LDFLAGS = -g
LDLIBS = -lm # pokud potřebujeme matematickou knihovnu libm
all: program
# překlad prvního modulu
soub1.o: soub1.c soub.h
$(CC) $(CFLAGS) -c soub1.c
# překlad druhého modulu - implicitní akce
soub2.o: soub2.c soub.h
# sestavení (stejné jako pro implicitní akci)
program: soub1.o soub2.o
$(CC) $(LDFLAGS) -o program soub1.o soub2.o $(LDLIBS)
# testování výsledku (regresní testy a podobně)
test: program
./program testovací parametry
./program jiné testovací parametry
./program ještě jiné testovací parametry
# úklid
clean:
rm -f *~ *.bak *.o program
# vytvoření archívu
archiv:
tar czvf projekt2.tar.gz *.c *.h Makefile
#-------------------------------------------------------------------------
Poznámka: Program make dovoluje různé optimalizace zápisu, například implicitní
volání překladače podle šablony, když pravidlo nemá definovánu žádnou akci.
Je možné použít proměnné podobně jako v shellu. Další podrobnosti viz 'man
make' a další dokumentace.
Poznámka: GCC umí generovat pravidla pro make automaticky:
dep:
$(CC) -MM *.c >dep.list
-include dep.list
fopen()
Možné režimy otevření souboru a požadavky na soubor
r w a r+ w+ a+
----------------------------------------------------------
Soubor musí existovat x - - x - -
Starý obsah souboru je smazán - x - - x -
Soubor je možné číst x - - x x x
Do souboru je možné zapisovat - x x x x x
Do souboru se zapisuje na konec - - x - - x
může být doplněn binární režim = písmeno b
pro w, w+ může být doplněno x = selže pro existující soubor
režim + vyžaduje fseek/rewind/... mezi čtením a zápisem
Poslední modifikace:
Připomínky k obsahu stránky posílejte na e-mail:
peringer AT fit.vutbr.cz