You are on page 1of 14

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

C. Leksykon
kieszonkowy
Autorzy: Peter Prinz, Ulla Kirch-Prinz
Tumaczenie: Piotr Imiela
ISBN: 83-7361-083-9
Tytu oryginau: C Pocket Reference
Format: B5, stron: 164

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Ksika C. Leksykon kieszonkowy skada si z dwch czci: zwizego opisu jzyka


C oraz tematycznie uoonego przewodnika po bibliotece standardowej. Opis jzyka
zosta przedstawiony na podstawie standardu ANSI i zawiera wprowadzone pniej
rozszerzenia. Doczony skorowidz uatwia szybkie znalezienie informacji na temat
funkcji, typw i innych interesujcych elementw skadni.
Ksika przedstawia:
Podstawy jzyka C
Typy danych
Wyraenia i operatory
Instrukcje jzyka C
Deklaracje
Funkcje
Dyrektywy preprocesora
Biblioteka standardowa
Gdy zawiedzie Ci pami i zapomnisz skadni danej instrukcji, C. Leksykon
kieszonkowy przyjdzie Ci z pomoc. Dziki tej ksice szybko znajdziesz potrzebne
informacje, bez koniecznoci wertowania setek stron podrcznikw.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci

Wprowadzenie......................................................................... 7
Podstawy.................................................................................. 9
Struktura programu w jzyku C...............................................................9
Zbiory znakw ..........................................................................................11
Identyfikatory ............................................................................................13
Rodzaje i zasig identyfikatorw ...........................................................15

Podstawowe typy................................................................. 17
Typy cakowite..........................................................................................17
Typy rzeczywiste i zespolone.................................................................19
Typ void .....................................................................................................22

Stae......................................................................................... 23
Stae cakowite...........................................................................................23
Stae zmiennopozycyjne ..........................................................................25
Stae znakowe i literay napisowe..........................................................26

Wyraenia i operatory......................................................... 28
Operatory arytmetyczne ..........................................................................30
Operatory przypisania.............................................................................32
Operatory relacji .......................................................................................34
Operatory logiczne ...................................................................................35
Operatory bitowe......................................................................................36
Operatory dostpu do pamici...............................................................38
Pozostae operatory ..................................................................................39

Konwersje typw.................................................................. 42
Promocja cakowita...................................................................................42
Zwyke konwersje arytmetyczne............................................................43
Konwersja typw w przypadku przypisa i wskanikw ................44

Spis treci

Instrukcje................................................................................ 45
Bloki i instrukcje wyraeniowe ..............................................................45
Skoki............................................................................................................46
Ptle.............................................................................................................49
Skoki bezwarunkowe ...............................................................................52

Deklaracje .............................................................................. 54
Oglna skadnia i przykady...................................................................55
Deklaracje zoone....................................................................................56

Zmienne................................................................................... 57
Klasy pamici ............................................................................................57
Inicjalizacja.................................................................................................58

Typy pochodne....................................................................... 60
Typy wyliczeniowe ..................................................................................60
Struktury, unie i pola bitowe ..................................................................61
Tablice.........................................................................................................67
Wskaniki...................................................................................................70
Kwalifikatory typw oraz definicje typw...........................................74

Funkcje .................................................................................... 77
Prototypy funkcji ......................................................................................78
Definicje funkcji.........................................................................................79
Wywoania funkcji....................................................................................82
Funkcje o zmiennej liczbie argumentw...............................................83

czenie identyfikatorw.................................................... 86
Dyrektywy preprocesora ..................................................... 87
Biblioteka standardowa...................................................... 97
Standardowe pliki nagwkowe........................................ 97
Wejcie i wyjcie................................................................... 98
Obsuga bdw w funkcjach wejcia-wyjcia ...................................100
Oglne funkcje dostpu do plikw......................................................101
Plikowe funkcje wejcia-wyjcia...........................................................104

C. Leksykon kieszonkowy

Zakresy liczb oraz ich klasyfikacja................................ 114


Zakresy wartoci typw cakowitych ..................................................114
Zakres i precyzja typw zmiennopozycyjnych rzeczywistych .......116
Klasyfikacja liczb zmiennopozycyjnych..............................................116

Funkcje matematyczne....................................................... 119


Funkcje matematyczne dla typw cakowitych .................................119
Funkcje matematyczne dla typw rzeczywistych .............................120
Optymalizacja efektywnoci wykonywania.......................................123
Funkcje matematyczne dla typw zmiennopozycyjnych
zespolonych ..........................................................................................124
Makroinstrukcje niezalene od typw ................................................125
Obsuga bdw w funkcjach matematycznych.................................126
rodowisko zmiennopozycyjne............................................................127

Klasyfikacja znakw i zmiana ich wielkoci............... 131


Obsuga acuchw ............................................................ 133
Konwersja pomidzy acuchami i wartociami liczbowymi .........136
Przeksztacenia znakw wielobajtowych............................................138

Wyszukiwanie i sortowanie............................................. 140


Obsuga blokw pamici................................................... 141
Dynamiczne zarzdzanie pamici................................. 142
Czas i data........................................................................... 143
Sterowanie procesami........................................................ 144
Komunikacja z systemem operacyjnym..............................................145
Sygnay .....................................................................................................146
Skoki nielokalne......................................................................................148
Obsuga bdw w funkcjach systemowych..........................................149

Ustawienia narodowe........................................................ 150


Skorowidz............................................................................. 155

Spis treci

C.

Leksykon kieszonkowy

Wprowadzenie
Jzyk programowania C zosta opracowany w latach siedemdziesitych przez Dennisa Ritchiego z Bell Labs (w Murray Hill,
w stanie New Jersey) podczas przygotowywania implementacji
systemu operacyjnego Unix, przeznaczonej dla komputera DEC
PDP-11. Korzenie jzyka C sigaj nieposiadajcego typw jzyka
programowania BCPL (ang. Basic Combined Programming Language,
ktrego autorem by M. Richards) oraz jzyka B (opracowanego
przez K. Thompsona). W 1978 roku Brian Kernighan i Dennis
Ritchie przedstawili pierwszy dostpny publicznie opis jzyka C,
znany obecnie jako standard K&R.
C jest jzykiem o wysokim stopniu przenonoci, ukierunkowanym na architektur wspczesnych komputerw. Obecnie jzyk
sam w sobie jest stosunkowo may i posiada niewiele elementw
zwizanych ze sprztem. Nie zawiera na przykad instrukcji wejcia-wyjcia ani technik zarzdzania pamici. Funkcje realizujce te zadania s dostpne w obszernej standardowej bibliotece
jzyka C.
Konstrukcja jzyka C posiada istotne zalety:
kod rdowy jest w duym stopniu przenony,
kod maszynowy jest efektywny,
kompilatory jzyka C s dostpne dla wszystkich istniejcych systemw.
Wprowadzenie

Pierwsza cz leksykonu opisuje jzyk C, natomiast jego drug


cz powicono standardowej bibliotece jzyka C. Jzyk zosta
opisany na podstawie standardu ISO X3.159. Standard ten odpowiada midzynarodowemu standardowi ISO/IEC 9899, ktry
zosta przyjty przez Midzynarodow Organizacj Normalizacyjn w 1990 roku, a nastpnie zosta poprawiony w latach 1995
i 1999. Standard ISO/IEC 9899 mona zamwi za porednictwem internetowej witryny ANSI, znajdujcej si pod adresem
http://webstore.ansi.org.
Standard ustanowiony w 1995 roku jest obecnie obsugiwany przez
wszystkie popularne kompilatory jzyka C. Natomiast w wielu
kompilatorach jzyka C nie zostay jeszcze zaimplementowane
nowe rozszerzenia jzyka, zdefiniowane w opublikowanej w 1999
roku wersji standardu (nazywanej w skrcie ANSI C99), w zwizku z czym zostay one w niniejszej ksice w specjalny sposb
oznaczone. Nowe typy, funkcje i makroinstrukcje, wprowadzone
przez standard ANSI C99, oznaczono gwiazdk umieszczon
w nawiasie (*).

Konwencje typograficzne
W ksice stosowane s nastpujce konwencje typograficzne:
Kursywa
Jest stosowana przy wprowadzaniu nowych poj oraz do
wyrniania nazw plikw.
Czcionka o staej szerokoci znakw
Jest uywana w kodzie programw w jzyku C oraz w nazwach funkcji i dyrektyw.
Kursywa o staej szerokoci znakw
Oznacza wymienne elementy w obrbie skadni kodu.
Pogrubiona czcionka o staej szerokoci znakw
Wykorzystywana jest w celu zwrcenia szczeglnej uwagi
na wyrnione fragmenty kodu.
4

C. Leksykon kieszonkowy

Podstawy
Program w jzyku C skada si z odrbnych blokw skadowych,
nazywanych funkcjami, mogcych si wzajemnie wywoywa.
Kada funkcja realizuje okrelone zadanie. Gotowe funkcje s
dostpne w standardowej bibliotece jzyka; pozostae funkcje s
w miar potrzeby tworzone przez programist. Szczegln nazw funkcji jest main() oznacza ona pierwsz funkcj, ktra
jest wywoywana podczas uruchamiania programu. Wszystkie
pozostae funkcje s podprogramami.

Struktura programu w jzyku C


Rysunek 1. prezentuje struktur programu w jzyku C. Przedstawiony program skada si z funkcji: main() oraz showPage().
Program drukuje pocztek pliku tekstowego, ktrego nazwa
zostaa podana w wierszu polece podczas jego uruchomienia.
Program rdowy w jzyku C skada si z instrukcji (ang. statements) tworzcych funkcje, a take niezbdnych deklaracji oraz
dyrektyw preprocesora. W przypadku niewielkich programw,
kod rdowy jest zapisywany w pojedynczym pliku rdowym
(ang. source file). Wiksze programy napisane w jzyku C skadaj si z wielu plikw rdowych, ktre mog by oddzielnie
redagowane i kompilowane. Kady z takich plikw rdowych
zawiera funkcje tworzce pewn logiczn cao np. funkcje
wyprowadzajce informacje do terminala. Informacje, ktre s
potrzebne w wielu plikach rdowych takie jak deklaracje
umieszczane s w plikach nagwkowych. Mog one nastpnie zosta wczone do kadego pliku rdowego za pomoc
dyrektywy #include.
Nazwy plikw rdowych posiadaj zakoczenie .c, natomiast
nazwy plikw nagwkowych kocz si na .h. Plik rdowy
wraz z wczonymi do niego plikami nagwkowymi nazywany
jest jednostk translacji.
Podstawy

Rysunek 1. Program w jzyku C


Nie ma okrelonej z gry kolejnoci, w ktrej musz by definiowane funkcje. Funkcja showPage(), przedstawiona na rysunku 1.,
mogaby znajdowa si rwnie przed funkcj main(). Funkcje
nie mog by jednak definiowane wewntrz innych funkcji.
Kompilator, przetwarzajc kolejno kady z plikw rdowych,
rozkada jego zawarto na leksemy (elementy leksykalne ang.
tokens), ktrymi s m.in. nazwy funkcji i operatory. Leksemy
mog by oddzielone od siebie jednym lub wiksz liczb niewidocznych znakw, takich jak spacja, tabulacja lub znak nowego
wiersza. Tak wic, znaczenie ma jedynie kolejno leksemw

C. Leksykon kieszonkowy

w pliku. Ukad kodu rdowego na przykad miejsca, w ktrych amane s wiersze, czy te stosowanie wci jest nieistotny. Wyjtek od tej reguy stanowi jednak dyrektywy preprocesora. S one poleceniami przeznaczonymi do wykonania przez
preprocesor danego programu przed kompilacj, a kade z nich
zajmuje jeden wiersz, rozpoczynajcy si znakiem #.
Komentarze s dowolnymi cigami znakw, zawartymi pomidzy parami znakw /* i */ lub znajdujcymi si pomidzy znakami // a kocem biecego wiersza. Na wstpnych etapach
translacji, zanim jeszcze zostanie utworzony jakikolwiek kod wynikowy, kady komentarz jest zastpowany pojedyncz spacj.
Nastpnie wykonywane s dyrektywy preprocesora.

Zbiory znakw
Jzyk ANSI C okrela dwa zbiory znakw. Pierwszym z nich jest
rdowy zbir znakw (ang. source character set), bdcy zbiorem
znakw, ktre mog zosta uyte w pliku rdowym. Drugim
jest natomiast zbir znakw wykonania programu (ang. execution
character set), skadajcy si z wszystkich znakw interpretowanych w trakcie wykonywania programu bdcych na przykad znakami zawartymi w staych tekstowych.
Kady z tych zbiorw znakw zawiera w sobie podstawowy zbir
znakw (ang. basic character set), obejmujcy:
52 wielkie i mae litery alfabetu aciskiego:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z

Dziesi cyfr dziesitnych (w przypadku ktrych warto


kadego znaku po 0 jest o jeden wiksza od wartoci poprzedniej cyfry):
0

Podstawy

29 wymienionych poniej znakw graficznych:


!
<

"
=

#
>

%
?

&
[

'
\

(
]

)
^

*
_

+
{

,
|

.
~

Pi niewidocznych znakw:
odstp, tabulacja pozioma, tabulacja pionowa, znak
nowego wiersza, znak wysuwu strony.
Dodatkowo, podstawowy zbir znakw wykonania programu
zawiera:
Pusty znak \0, koczcy cig znakw.
Znaki sterujce, reprezentowane za pomoc prostych sekwencji sterujcych (ang. escape sequences), przedstawionych w tabeli 1., umoliwiajcych sterowanie urzdzeniami wyjciowymi, takimi jak terminale lub drukarki.
Tabela 1. Standardowe sekwencje sterujce
Sekwencja
sterujca

Dziaanie
w przypadku
terminalu

Sekwencja
sterujca

Dziaanie
w przypadku
terminalu

\a

\'

Znak '

\b

Alarm
(sygna dwikowy)
Znak cofania

\"

Znak "

\f

Wysuw strony

\?

Znak ?

\n

Znak nowego wiersza \\

\r

Znak powrotu karetki

\t

Tabulacja pozioma

\v

Tabulacja pionowa

\o \oo \ooo
(o cyfra semkowa)
\xh..
(h.. cig cyfr
szesnastkowych)

Znak \
Znak o podanym
kodzie semkowym
Znak o podanym
kodzie
szesnastkowym

C. Leksykon kieszonkowy

Wszelkie inne znaki w zalenoci od konkretnego kompilatora


mog by uywane w komentarzach, cigach znakw i staych napisowych. Mog one na przykad zawiera symbol dolara
lub znaki diakrytyczne. Uycie takich znakw moe mie jednak
wpyw na przenono programu.
Zbir wszystkich moliwych do wykorzystania znakw jest nazywany powikszonym zbiorem znakw (ang. extended character set)
i stanowi on zawsze nadzbir podstawowego zbioru znakw.
Niektre jzyki wykorzystuj znaki, do zapamitania ktrych
potrzeba wicej ni jednego bajtu. Takie znaki wielobajtowe (ang.
multibyte characters) mog znajdowa si w powikszonym zbiorze znakw. Ponadto, standard ANSI C99 udostpnia typ cakowity wchar_t (ang. wide character type rozszerzony typ znakowy), o wielkoci wystarczajcej do reprezentowania znakw
zawartych w powikszonym zbiorze znakw. Czsto stosowany
jest nowoczesny system kodowania znakw Unicode, poszerzajcy standardowy kod ASCII w sposb umoliwiajcy reprezentacj okoo 35 000 znakw pochodzcych z 24 krajw.
C99 wprowadza rwnie sekwencje trjznakw (ang. trigraph sequences). Sekwencje te, wymienione w tabeli 2., mog by uywane
do wprowadzania znakw graficznych, ktre nie s dostpne na
wszystkich klawiaturach. Na przykad, do wprowadzenia symbolu potoku | mona uy sekwencji ??!.
Tabela 2. Sekwencje trjznakw
Trjznak

??=

??(

??/

??)

??'

??<

??!

??>

??

Znaczenie

Identyfikatory
Identyfikatorami s nazwy zmiennych, funkcji, makroinstrukcji,
typw itd. Ich tworzenie podlega nastpujcym reguom:

Podstawy

Identyfikator skada si z cigu liter (od A do Z i od a do z),


cyfr (od 0 do 9) oraz znakw podkrelenia (_).
Pierwszym znakiem identyfikatora nie moe by cyfra.
W identyfikatorach rozrniane s mae i wielkie litery.
Dugo identyfikatora nie jest ograniczona. Jednake na og
znaczcych jest tylko jego pierwszych 31 znakw.
Sowa kluczowe (ang. keywords) s sowami zastrzeonymi i nie
mog by uywane w charakterze identyfikatorw. Poniej zamieszczono list sw kluczowych jzyka C:
auto

enum

restrict(*)

unsigned

break

extern

return

void

case

float

short

volatile

char

for

signed

while

const

goto

sizeof

_Bool(*)

continue

if

static

_Complex(*)

default

inline(*)

struct

_Imaginary(*)

do

int

switch

double

long

typedef

else

register

union

Nazwy zewntrzne, czyli identyfikatory funkcji i zmiennych czonych zewntrznie, mog podlega dodatkowym ograniczeniom,
w zalenoci od uywanego programu czcego w przenonych programach, napisanych w jzyku C, nazwy zewntrzne
powinny by dobierane w taki sposb, by znaczenie miao tylko
ich pierwszych osiem znakw, rwnie w przypadku gdy program czcy nie rozrnia wielkich i maych liter.

10

C. Leksykon kieszonkowy

Poniej podano przykady identyfikatorw:


Poprawne: a, DM, dm, FLOAT, _var1, topOfWindow
Niepoprawne: do, 586_cpu, zhler, nl-flag, US_$

Rodzaje i zasig identyfikatorw


Kady identyfikator naley do jednej z podanych poniej czterech kategorii:
Nazwy etykiet.
Znaczniki (ang. tags) struktur, unii i wylicze. S to identyfikatory wystpujce bezporednio po sowach kluczowych
struct, union lub enum (patrz rozdzia Typy pochodne).
Nazwy skadowych struktur lub unii. Kada struktura i unia
posiada odrbn przestrze nazw, zawierajc jej skadowe.
Wszystkie pozostae identyfikatory, nazywane zwykymi identyfikatorami.
Identyfikatory nalece do rnych kategorii mog by takie same.
Na przykad, nazwa etykiety moe zosta rwnie uyta w charakterze nazwy funkcji. Ponowne uycie identyfikatorw zdarza
si najczciej w przypadku struktur ten sam cig znakw
moe zosta uyty do oznaczenia typu struktury, jednej z jej
skadowych, oraz zmiennej jak w poniszym przykadzie:
struct person {char *person; /*...*/} person;

Te same nazwy mog by rwnie uyte jako nazwy skadowych rnych struktur.
Kady identyfikator znajdujcy si w kodzie rdowym posiada
swj zasig (ang. scope). Zasigiem nazywamy t cz programu,
w ktrej mona uy danego identyfikatora. Poniej wymieniono
cztery moliwe zasigi identyfikatorw:
Podstawy

11

Prototyp funkcji
Identyfikatory znajdujce si na licie deklaracji argumentw prototypu funkcji (nie definicji funkcji) posiadaj
zasig prototypu funkcji. Poniewa identyfikatory te nie maj
adnego znaczenia poza samym prototypem, s tylko czym
wicej ni komentarzami.
Funkcja
Zasig funkcji posiadaj jedynie nazwy etykiet. Ich uycie jest
ograniczone do bloku funkcji, w ktrym etykiety te zostay
zdefiniowane. Nazwy etykiet musz by unikatowe w obrbie funkcji. Instrukcja goto powoduje skok do instrukcji oznaczonej etykiet, znajdujcej si w obrbie tej samej funkcji.
Blok
Identyfikatory nie bdce etykietami, zadeklarowane w obrbie bloku, posiadaj zasig bloku. Argumenty definicji funkcji
maj rwnie zasig bloku. Zasig bloku rozpoczyna si
deklaracj identyfikatora, natomiast koczy si zamykajcym nawiasem klamrowym (}).
Plik
Identyfikatory zadeklarowane na zewntrz wszystkich blokw i list argumentw posiadaj zasig pliku. Zasig pliku
rozpoczyna si w miejscu deklaracji identyfikatora i rozciga si do koca pliku rdowego.
Identyfikator nie bdcy nazw etykiety nie musi by widoczny
w caym swoim zasigu. Jeeli, na przykad, identyfikator tego
samego rodzaju i posiadajcy tak sam nazw, jak istniejcy ju
identyfikator, zostanie zadeklarowany w zagniedonym bloku,
to zewntrzna deklaracja identyfikatora zostanie tymczasowo zasonita. Staje si ona ponownie widoczna w miejscu, gdzie koczy
si zasig wewntrznej deklaracji.

12

C. Leksykon kieszonkowy

You might also like