previous next Title Contents Index

24. "C- referenssi"


Mitä tässä luvussa käsitellään?

* Pikainen "C- referenssi" Seuraavaan on koottu muutamia C- kielen taulukoita.

24.1 Varatut sanat

	auto           break          case           char
	const          continue       default        do
	double         else           enum           extern
	float          for            goto           if
	int            long           register       return
	short          signed         sizeof         static
	struct         switch         typedef        union
	unsigned       void           volatile       while
Lisäksi "varatuiksi sanoiksi" voidaan tavallaan laskea myöhemmin esiteltävät standardi- otsikkotiedostojen määräämät funktioiden ja makrojen nimet.

24.2 Borland- C:n eri lukutyyppien arvoalueet

	 Tyyppi        |   Koko  |                 Arvoalue 
	----------------------------------------------------------------------------
	 unsigned char |  8 bits |                  0 -   255
	 char          |  8 bits |               - 128 -   127
	 enum          | 16 bits |            - 32,768 -   32,767
	 unsigned int  | 16 bits |                  0 -   65,535
	 short int     | 16 bits |            - 32,768 -   32,767
	 int           | 16 bits |            - 32,768 -   32,767
	 unsigned long | 32 bits |                  0 -   4,294,967,295
	 long          | 32 bits |     - 2,147,483,648 -   2,147,483,647
	 float         | 32 bits | 0 ja +/-   3.4 E- 38 -   3.4 E+38
	 double        | 64 bits | 0 ja +/-  1.7 E- 308 -   1.7 E+308
	 long double   | 80 bits | 0 ja +/- 3.4 E- 4932 -   1.1 E+4932

24.3 Esikääntäjän direktiivit

Seuraava tulkitaan siten, että "- merkeissä oleva osa kirjoitetaan sellaisenaan. [] merkitsevät ehdollisuutta, {} 0- n kerran esiintymää ja | vaihtoehtoa, niitä ei siis kirjoiteta.
	"#define" tunnus ["("tunnuslista ")"]{symboli}       -  makron määrittely
	"#undef" tunnus                                       -  määrittelyn poisto
	"#include" "<" tiedostonnimi ">" |  tiedostomäärite   -  tiedoston lisääminen
	"#if" vakiolauseke                                    -  käännetään jos != 0
	"#elif" vakiolauseke                                  -  ELSE IF osa edelliseen 
	"#else"                                               -  ehd. käänt. ELSE- osa
	"#error" virheviesti                                  -  lopettaa käännöksen 
	"#endif"                                              -  lopettaa ehd. käänt.
	"#ifdef" tunnus                                       -  kään. jos tunnus olem.
	"#if defined tunnus                                   -  synonyymi ed.
	"#ifndef" tunnus                                      -  kään jos ei ole olem.
	"#line" kokonaislukuliteraali [tiedostomäärite ]     -  vaihd. rivinro ja tied.
	
	tiedostomäärite - > """tiedostonnimi"""

Valmiita makroja:

	__DATE__      -  käännöspäivä muodossa Mmm dd yyyy
	__FILE__      -  käännettävän tiedoston nimi
	__LINE__      -  rivinumero käännettävässä tiedostossa 
	__STDC__      -  1 jos kääntäjä tekee standardikoodia  
Esimerkiksi:

preceden\error.c - esimerkki virheeseen pakottamisesta

	#line 29 "error.c"
	#if __STDC__ != 1
	#  error Nyt tuli virhe, ei standardikääntäjä
	#endif
	#include <stdio.h>
	
	#define LINTU "Käki"
	int main(void)
	{
	  printf("Ohjelma %s, rivi %d päivä %s\n",__FILE__,__LINE__,__DATE__);
	  printf(LINTU" kaukana kukkuu\n");
	  return 0;
	}
Jos kääntäjä on standardimoodissa, tulostuu:
	Ohjelma ERROR.C, rivi 37 päivä Dec 17 1992
	Käki kaukana kukkuu
muuten käännös päättyy virheilmoitukseen:
	Nyt tuli virhe, ei standardikääntäjä

24.4 Operaattorit

	
	Operaattori           merkintä   ryhmittely
	-----------------------------------------------
	jälkilisäys           X++        - >
	jälkivähennys         X- -   
	alkio                 X[Y]
	funktion kutsu        X(Y)
	tietueen alkio        X.Y
	osoittimen avulla     X- >Y
	
	alkion koko tavuina   sizeof(X)  <- 
	esilisäys             ++X
	esivähennys           - - X
	alkion osoite         &X
	epäsuora osoitus      *X
	etumerkki             +X
	neg. etumerkki        - X
	bittitason NOT        ~X
	looginen NOT          !X
	tyypin muunnos        (tyyppi)X
	
	kertolasku            X * Y      - >
	jakolasku             X / Y
	jakojäännös           X % Y
	
	yhteenlasku           X + Y      - >
	vähennyslasku         X -  Y
	
	siirto vasemmalle     X << Y     - >
	siirto oikealle       X >> Y
	
	pienempi              X < Y      - >
	pienempi tai yhtäkuin X <= Y
	suurempi              X > Y
	suurempi tai yhtäkuin X >= Y
	
	yhtäsuuri             X == Y     - >
	erisuuri              X != Y
	
	bittitason AND        X & Y      - >
	
	bittitason XOR        X ^ Y      - >
	
	bittitason OR         X | Y      - >
	
	looginen AND          X && Y     - >
	
	looginen OR           X || Y     - >
	
	ehdollinen tulos      Z ? X : Y  <- 
	
	sijoitus              X = Y      <- 
	tulosijoitus          X *= Y
	jakosijoitus          X /= Y
	jakojäännössijoitus   X %= Y
	summasijoitus         X += Y
	erotussijoitus        X - = Y
	vas.siirtosijoitus    X <<= Y
	oik.siirtosijoitus    X >>= Y
	bittiANDsijoitus      X &= Y
	bittiXORsijoitus      X ^= Y
	bittiORsijoitus       X |= Y
	
	pilkkuoperaattori     X,Y        - >
Edellä ryhmittely tarkoittaa sitä, miten joukko perättäisiä operaattoreita tulkitaan:
	X = Y  <- , eli sijoitus ryhmitellään oikealta vasemmalle
	x = y = 5;   x = ( y = 5 ); 

24.5 C:n operaattoreiden sitomisjärjestys

Seuraavaan taulukkoon on koottu C:n operaattorit ja niiden "laskujärjestys" lausekkeen arvoa määrättäessä. Ylimpänä olevilla on korkein prioriteetti lauseketta tulkittaessa eli niillä on korkein presedenssi (precedence == etusija).
	Operaattori                             Assosiatiivisyys
	==========================================================
	() [] - > .                              - - - >
	! ~ ++ - -  - 1(type cast) *2 & sizeof     <- - - 
	*3 / %                                  - - - >
	+ - 4                                    - - - >
	<< >>                                   - - - >
	< <= > >=                               - - - >
	== !=                                   - - - >
	&                                       - - - >
	^                                       - - - >
	|                                       - - - >
	&&                                      - - - >
	||                                      - - - >
	?:                                      <- - - 
	= += - = *= /= %= <<= >>= &= ^= |=       <- - - 
	,                                       - - - >
1 etumerkkinä

2 osoittimen edessä

3 kertolaskussa

4 vähennyslaskussa

24.5.1 Esimerkkejä

	if ( 0 < x && x < 10 ) ...  <=> if ( ( 0 < x ) && ( x < 10 ) ) ...
	*p++                        <=> *(p++)
	*p.k                        <=> *(p.k)   ( ei siis (*p).k ) 

24.6 Erikoismerkit merkkijonoissa

	Erikoismerkki       Merkitys
	(escape sequence)
	========================================================
	\"	"
	\'	'
	\?	?
	\\	\
	\a	BEL (alarm,piippaus)
	\b	BS (backscape) siirto vasemmalle
	\f	FF (form feed) sivunvaihto
	\n	NL (newline) rivinvaihto
	\r	CR (carriage return) rivin alkuun
	\t	HT (horizontal tab) siirto seuraavan
		vaakasuuntaisen tabulointimerkkiin
	\v	VT (vertical tab) siirto seuraavan
		pystysuuntaisen tabulointimerkkiin
	\d \dd \ddd	merkin koodi oktaalilukuna
	\xh \xhh	merkin koodi heksadesimaalilukuna

24.7 Tulostuksen muotoilumerkit

printf, sprintf, fprintf - funktioiden formaattimerkkijonojen muotoilumerkit.
	d,i	etumerkillinen kymmenjärjestelmän kokonaisluku 
		(Decimal, Integer)
	u	etumerkitön kymmenjärjestelmän kokonaisluku (Unsigned)
	o	etumerkitön oktaalijärjestelmän kokonaisluku (Octal)
	x,X	etumerkitön heksadesimaalijärjestelmän kokonaisluku
		(heXadecimal)
	f	reaaliluku muodossa [- ]ddd.ddd (Floating)
	e,E	reaaliluku eksoponenttimuodossa [- ]d.dddeñdd (Exponent)
	g,G	reaaliluku f tai eE muodossa mahdollisimman lyhyesti (General)
	c	yksi merkki (Character)
	s	merkkijono (String)
	p	osoitin, jonka pitää olla void - tyyppinen (Pointer)
	n	tämä ei tulosta mitään. Vastaavassa kohden parametri- 
		listaa täytyy olla osoitin kokonaislukuun, johon talle- 
		tetaan tämän tulostuslauseen aikana tulostettujen merk- 
		kien määrä.
	%	% - merkki
Ennen muotoilumerkkiä voi olla lisäksi (seuraavassa järjestyksessä):
	- 	muotoilu tasataan vasemmalle (oletus on oikealle)
	+	lukuarvon eteen tulostuu aina + tai - 
	_	(tyhjä) kuten edellinen, mutta + merkin tilalle
		tulostuu välilyönti	
	#	vaihtoehtoinen tulostusmuoto, katso tarkemmin ANSI- C
		standardista tai C- kääntäjän manuaaleista
	0	(nolla- merkki) täytemerkki välilyöntimerkin sijasta 0
		numero.numero kentän vähimmäisleveys ja reaaliluvuissa
		pisteen jälkeen tulostuvien merkkien määrä
	*	vastaavassa paikassa argumenttilistassa täytyy olla
	    	kokonaisluku, joka ilmaisee kentän koon
	*.numero
	numero.*
	*.*  	kuten edellä
	h,l,L 	vastaava argumentti tyyppiä short int, double tai long double

24.7.1 Esimerkkejä

preceden\printf.c - muotoiluformaatit

	#include <stdio.h>
	int main(void)
	{
	  char s[10]="Kissa";  int i=175;  double d=1.75;
	  printf("  123456789012345678901234567890123456789012345678901234567890\n");
	  printf("1 |%s|%d|%lf|\n",s,i,d);
	  printf("2 |%10s|%10d|%10.5lf|\n",s,i,d);
	  printf("3 |%- 10s|%- 10d|%- 10.5lf|\n",s,i,d);
	  printf("4 |%10p|%10x|%lg|\n",s,i,d);
	  printf("5 |%010s|%10X|%le|\n",s,i,d);
	  printf("6 |%- 10.2s|%+10d|%+4.1lE|\n",s,i,d);
	  printf("7 |%10.2s|%+010d|%1.0lg|\n",s,i,d);
	  printf("8 |%*.*s|%+0*d|%*.0lg|\n",10,2,s,10,i,1,d);
	  return 0;
	}
	
	  123456789012345678901234567890123456789012345678901234567890
	1 |Kissa|175|1.750000|
	2 |     Kissa|       175|   1.75000|
	3 |Kissa     |175       |1.75000   |
	4 |      FFEC|        af|1.75|
	5 |     Kissa|        AF|1.750000e+00|
	6 |Ki        |      +175|+1.8E+00|
	7 |        Ki|+000000175|2|
	8 |        Ki|+000000175|2|

24.8 Standardin mukaiset otsikkotiedostot

24.8.1 Standardit

ANSI X3.159- 1989 ja ISO/IEC 9899:1990

ANSI = American National Standards Institute

ISO = International Standards Organization

24.8.2 Otsikkotiedostot

	 Otsikko    | Sisällys lyhyesti
	----------------------------------------------------------------------------
	 assert.h  	| assert debuggus makro. 
	 ctype.h 	| merkkien luokitusta ja muunnoksia
	 errno.h 	| virhekoodeja
	 float.h 	| joukko minimi - ja maksimityylisiä vakioita reaaliluvuille
	 limits.h 	| kuten edellä, mutta kokonaisluvuille
	 locale.h 	| maa-  ja kielikohtaisia toimintoja ja vakioita.
	 math.h 	| matemaattisia funktioita
	 setjmp.h 	| määritellään tyypit funktioille longjmp ja setjmp.
	 signal.h 	| määritellään tyypit funktioille signal ja raise.
	 stdarg.h 	| vaihtuparametristen funktioiden tekoon makroja ja funktiota
	 stddef.h 	| yleisiä makroja ja tyyppejä
	 stdio.h 	| yleisiä syöttö-  ja tulostusfunktioita
	 stdlib.h 	| yleisiä makroja ja funktioita
	 string.h 	| merkkijonojen käsittelyyn liittyviä aliohjelmia
	 time.h 	| ajan käsittelyyn liittyviä makroja, tyyppejä ja funktioita

Seuraavassa on lueteltu kunkin otsikkotiedoston alla määritellyt funktiot tai funktiomaiset makrot (f:), vakiot (v:) ja tyypit (t:)

assert.h

	f: assert

ctype.h

	
	f: isalnum        isalpha        iscntrl        isdigit        isgraph     
	   islower        isprint        ispunct        isspace        isupper     
	   isxdigit       tolower        toupper

errno.h

	v: errno       

float.h

	v: DBL_DIG        DBL_EPSILON    DBL_MANT_DIG   DBL_MAX_10_EXP DBL_MAX_EXP         
	   DBL_MAX        DBL_MIN_10_EXP DBL_MIN_EXP    DBL_MIN        FLT_DIG             
	   FLT_EPSILON    FLT_MANT_DIG   FLT_MAX_10_EXP FLT_MAX_EXP    FLT_MAX             
	   FLT_MIN_10_EXP FLT_MIN_EXP    FLT_MIN        FLT_RADIX      FLT_ROUNDS          
	   LDBL_DIG       LDBL_EPSILON   LDBL_MANT_DIG  LDBL_MAX_10_EXP     
	   LDBL_MAX_EXP   LDBL_MAX       LDBL_MIN_10_EXP     
	   LDBL_MIN_EXP   LDBL_MIN            

limits.h

	v: CHAR_BIT       CHAR_MAX       CHAR_MIN       INT_MAX        INT_MIN     
	   LONG_MAX       LONG_MIN       MB_LEN_MAX     SCHAR_MAX      SCHAR_MIN   
	   SHRT_MAX       SHRT_MIN       UCHAR_MAX      UINT_MAX       ULONG_MAX   
	   USHRT_MAX

locale.h

	f: localeconv     setlocale
	
	v: LC_ALL         LC_COLLATE     LC_CTYPE       LC_MONETARY    LC_NUMERIC       
	   LC_TIME        NULL
	
	t: lconv 

math.h

	f: acos           asin           atan           atan2          ceil     
	   cos            cosh           exp            fabs           floor    
	   fmod           frexp          ldexp          log            log10    
	   modf           pow            sin            sinh           sqrt     
	   tan            tanh     
	
	v: EDOM           ERANGE                 

setjmp.h

	v: longjmp        setjmp
	
	t: jmp_buf

signal.h

	f: raise          signal
	
	v: SIG_DFL        SIG_ERR        SIG_ING        SIGABRT        SIGFPE    
	   SIGILL         SIGINT         SIGSEGV        SIGTERM
	
	t: sig_atomic_t 

stdarg.h

	f: va_arg         va_end         va_start
	
	t: va_list 

stddef.h

	f: offsetof       
	
	v: NULL        
	
	t: ptrdiff_t      size_t         wchar_t

stdio.h

	f: clearerr       fclose         feof           ferror         fflush      
	   fgetc          fgetpos        fgets          fopen          fprintf     
	   fputc          fputs          fread          freopen        fscanf      
	   fseek          fsetpos        ftell          fwrite         getc        
	   getchar        gets           perror         printf         putc        
	   putchar        puts           remove         rename         rewind      
	   scanf          setbuf         setvbuf        sprintf        sscanf      
	   tempnam        tmpfile        tmpnam         ungetc         vfprintf    
	   vprintf        vsprintf    
	
	v: _IOFBF        _IOLBF          _IONBF         BUFSIZ         EOF  
	   FILENAME_MAX  FOPEN_MAX       L_tmpnam       NULL           SEEK_CUR
	   SEEK_END      SEEK_SET        TMP_MAX
	   stderr        stdin           stdout              
	
	t: FILE           fpos_t         size_t

stdlib.h

	f: abort          abs            atexit         atof           atoi
	   atol           bsearch        calloc         div            ecvt
	   exit           free           getenv         labs           ldiv
	   malloc         mblen          mbtowc         mbstowcs       qsort
	   rand           realloc        srand          strtod         strtol
	   strtoul        system         wctomb         wcstombs
	
	v: EXIT_FAILURE   EXIT_SUCCESS   MB_CUR_MAX     NULL           RAND_MAX     
	
	t: div_t          ldiv_t         wchar_t

string.h

	f: memchr         memcmp         memcpy         memmove        memset
	   strcat         strchr         strcmp         strcoll        strcpy       
	   strcspn        strerror       strlen         strncat        strncmp      
	   strncpy        strpbrk        strrchr        strspn         strstr       
	   strtok         strxfrm        strupr    
	
	v: NULL
	
	t: size_t

time.h

	f: asctime        clock          ctime          difftime       gmtime      
	   localtime      mktime         stime          strftime       time
	
	v: CLOCKS_PER_SEC                NULL       
	
	t: clock_t        size_t         time_t         tm          
	


previous next Title Contents Index