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 whileLisäksi "varatuiksi sanoiksi" voidaan tavallaan laskea myöhemmin esiteltävät standardi- otsikkotiedostojen määräämät funktioiden ja makrojen nimet.
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
"#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 standardikoodiaEsimerkiksi:
#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 kukkuumuuten käännös päättyy virheilmoitukseen:
Nyt tuli virhe, ei standardikääntäjä
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 );
Operaattori Assosiatiivisyys ========================================================== () [] - > . - - - > ! ~ ++ - - - 1(type cast) *2 & sizeof <- - - *3 / % - - - > + - 4 - - - > << >> - - - > < <= > >= - - - > == != - - - > & - - - > ^ - - - > | - - - > && - - - > || - - - > ?: <- - - = += - = *= /= %= <<= >>= &= ^= |= <- - - , - - - >1 etumerkkinä
2 osoittimen edessä
3 kertolaskussa
4 vähennyslaskussa
if ( 0 < x && x < 10 ) ... <=> if ( ( 0 < x ) && ( x < 10 ) ) ... *p++ <=> *(p++) *p.k <=> *(p.k) ( ei siis (*p).k )
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
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ä. % % - merkkiEnnen 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
#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|
ANSI = American National Standards Institute
ISO = International Standards Organization
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:)
f: assert
f: isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper
v: errno
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
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
f: localeconv setlocale v: LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME NULL t: lconv
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
v: longjmp setjmp t: jmp_buf
f: raise signal v: SIG_DFL SIG_ERR SIG_ING SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM t: sig_atomic_t
f: va_arg va_end va_start t: va_list
f: offsetof v: NULL t: ptrdiff_t size_t wchar_t
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
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
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
f: asctime clock ctime difftime gmtime localtime mktime stime strftime time v: CLOCKS_PER_SEC NULL t: clock_t size_t time_t tm