L 5,R 65,J,T 5 @Ots("C-referenssi") Seuraavaan on koottu muutamia C-kielen taulukoita. SECTION Varatut sanat IXREF varatut sanat BEGIN GESIMERKKI 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 END GESIMERKKI Lis„ksi "varatuiksi sanoiksi" voidaan tavallaan laskea my”hemmin esitelt„v„t standardi-otsikkotiedostojen m„„r„„m„tfunktioiden ja makrojen nimet. SECTION Borland-C:n eri lukutyyppien arvoalueet L 5,R 150,T 5 IXMASTER arvoalue BEGIN GESIMERKKI 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 END GESIMERKKI L 5,R 65,J,T 5 SECTION Esik„„nt„j„n direktiivit IXMASTER esik„„nt„j„n direktiivit IXMASTER direktiivit Seuraava tulkitaan siten, ett„ "-merkeiss„ oleva osakirjoitetaan sellaisenaan. [] merkitsev„t ehdollisuutta, {}0-n kerran esiintym„„ ja | vaihtoehtoa, niit„ ei siiskirjoiteta. L 5,R 150,T 5 BEGIN GESIMERKKI "#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""" END GESIMERKKI Valmiita makroja: BEGIN GESIMERKKI __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 END GESIMERKKI Esimerkiksi: BEGIN GESIMERKKI /* FNAME error.c */ #line 29 "error.c" #if __STDC__ != 1 # error Nyt tuli virhe, ei standardik„„nt„j„ #endif #include #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; } END GESIMERKKI Jos k„„nt„j„ on standardimoodissa, tulostuu: BEGIN GESIMERKKI Ohjelma ERROR.C, rivi 37 p„iv„ Dec 17 1992 K„ki kaukana kukkuu END GESIMERKKI muuten k„„nn”s p„„ttyy virheilmoitukseen: BEGIN GESIMERKKI Nyt tuli virhe, ei standardik„„nt„j„ END GESIMERKKI L 5,R 65,J,T 5 SECTION Operaattorit IXMASTER operaattorit L 5,R 150,T 5 BEGIN GESIMERKKI 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 -> END GESIMERKKI L 5,R 65,J,T 5 Edell„ ryhmittely tarkoittaa sit„, miten joukko per„tt„isi„operaattoreita tulkitaan: BEGIN GESIMERKKI X = Y <-, eli sijoitus ryhmitell„„n oikealta vasemmalle x = y = 5; x = ( y = 5 ); END GESIMERKKI SECTION C:n operaattoreiden sitomisj„rjestys IXMASTER 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 eliniill„ on korkein presedenssi (precedence == etusija). BEGIN GESIMERKKI Operaattori Assosiatiivisyys ======================================================== () [] -> . ---> ! ~ ++ -- -1 (type cast) *2 & sizeof <--- *3 / % ---> + -4 ---> << >> ---> < <= > >= ---> == != ---> & ---> ^ ---> | ---> && ---> || ---> ?: <--- = += -= *= /= %= <<= >>= &= ^= |= <--- , ---> END GESIMERKKI 1 etumerkkin„ 2 osoittimen edess„ 3 kertolaskussa 4 v„hennyslaskussa SUBSECTION Esimerkkej„ L 5,R 150,T 5 BEGIN GESIMERKKI if ( 0 < x && x < 10 ) ... <=> if ( ( 0 < x ) && ( x < 10 ) ) ... *p++ <=> *(p++) *p.k <=> *(p.k) ( ei siis (*p).k ) END GESIMERKKI L 5,R 65,J,T 5 SECTION Erikoismerkit merkkijonoissa IXMASTER \a IXMASTER \b IXMASTER \n IXMASTER \f IXMASTER \r IXMASTER \t IXMASTER \v IXMASTER \x BEGIN GESIMERKKI 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 END GESIMERKKI SECTION Tulostuksen muotoilumerkit IXMASTER printf IXMASTER format IXMASTER % printf, sprintf, fprintf -funktioiden formaattimerkkijonojenmuotoilumerkit. L 5,R 150,T 5 BEGIN GESIMERKKI 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 END GESIMERKKI L 5,R 65,J,T 5 Ennen muotoilumerkki„ voi olla lis„ksi (seuraavassa j„rjestyksess„): L 5,R 150,T 5 BEGIN GESIMERKKI - 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 END GESIMERKKI L 5,R 65,J,T 5 SUBSECTION Esimerkkej„ L 5,R 150,T 5 BEGIN GESIMERKKI /* FNAME printf.c */ #include 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| END GESIMERKKI L 5,R 65,J,T 5 SECTION Standardin mukaiset otsikkotiedostot SUBSECTION Standardit ANSI X3.159-1989 ja ISO/IEC 9899:1990 ANSI = American National Standards Institute ISO = International Standards Organization IXMASTER ANSI IXMASTER ISO SUBSECTION Otsikkotiedostot L 5,R 150,T 5 BEGIN GESIMERKKI 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 END GESIMERKKI L 5,R 65,J,T 5 Seuraavassa on lueteltu kunkin otsikkotiedoston alla m„„ritellyt funktiot tai funktiomaiset makrot (f:), vakiot (v:)ja tyypit (t:) L 5,R 150,T 5 HEADINGC assert.h  BEGIN GESIMERKKI f: assert END GESIMERKKI HEADINGC ctype.h  BEGIN GESIMERKKI f: isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper END GESIMERKKI HEADINGC errno.h  BEGIN GESIMERKKI v: errno END GESIMERKKI HEADINGC float.h  BEGIN GESIMERKKI 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 END GESIMERKKI HEADINGC limits.h  BEGIN GESIMERKKI 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 END GESIMERKKI HEADINGC locale.h  BEGIN GESIMERKKI f: localeconv setlocale v: LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME NULL t: lconv END GESIMERKKI HEADINGC math.h  BEGIN GESIMERKKI 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 END GESIMERKKI HEADINGC setjmp.h  BEGIN GESIMERKKI v: longjmp setjmp t: jmp_buf END GESIMERKKI HEADINGC signal.h  BEGIN GESIMERKKI f: raise signal v: SIG_DFL SIG_ERR SIG_ING SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM t: sig_atomic_t END GESIMERKKI HEADINGC stdarg.h  BEGIN GESIMERKKI f: va_arg va_end va_start t: va_list END GESIMERKKI HEADINGC stddef.h  BEGIN GESIMERKKI f: offsetof v: NULL t: ptrdiff_t size_t wchar_t END GESIMERKKI HEADINGC stdio.h  BEGIN GESIMERKKI 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 END GESIMERKKI HEADINGC stdlib.h  BEGIN GESIMERKKI 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 END GESIMERKKI HEADINGC string.h  BEGIN GESIMERKKI 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 END GESIMERKKI HEADINGC time.h  BEGIN GESIMERKKI f: asctime clock ctime difftime gmtime localtime mktime stime strftime time v: CLOCKS_PER_SEC NULL t: clock_t size_t time_t tm END GESIMERKKI L 5,R 65,J,T 5