130 likes | 295 Views
C-ohjelman käännösvaiheet. C-esiprosessori. Esiprosessorin komentorivien ensimmäinen merkki on # Esiprosessori poistaa omat komentorivinsä Muuntaa lähdekoodia komentojen perusteella gcc –E ajaa tekstin vain esiprosessorin läpi. Esiprosessorin komentoja. #define.
E N D
C-esiprosessori • Esiprosessorin komentorivien ensimmäinen merkki on # • Esiprosessori poistaa omat komentorivinsä • Muuntaa lähdekoodia komentojen perusteella • gcc –E ajaa tekstin vain esiprosessorin läpi
#define • Esiprosessori korvaa mkron nimen sen tekstillä #define VIRHE ”*** Virhe %d :%s.\n” • Ehdollinen kääntäminen: #if 0 /* esikääntäjän avulla myös kommentteja sisältävät lauseet voidaan poistaa (sisäkkäiset kommentit eivät ole sallittuja) */ #endif
#include • Kaksi muotoa: #include <tiedostonnimi> #include ”tiedoston_nimi” • Eroavat tiedoston etsinnän perusteella Standardi kirjastolle Omille headereille
Assert • Mikäli assert makron parametrin arvo on nolla tulostetaan viesti ja kutsutaan abort():a • Käytetään ohjelmankehityksen aikana verifioimaan ajoaikaisia oletuksia • Voidaan poistaa kun ohjelma on valmis=> ei overheadia • Mikäli NDEBUG makro on määritelty ennen headerin assert.h lukemista assert on disabloitu assert(x>0 && x<10);
Kirjastofunktiot • Määrittelytiedostot (headerit) sisältävätkirjastofunktioiden prototyypit makrot ja tyypit • 15 erillistä headeria=> ainoastaan ne käännetään joita käytetään
Matemaattiset funktiot<math.h> • Argumentit ja paluuarvo ovat tyyppiä double • gcc –ansi –lm –Wall –o nimi nimi.c • Trigonometriset funktiot (kulmat radiaaneina):cos, sin, tan, acos, asin, atan • Hyperboliset funktiot: cosh, sinh, tanh • Exponetti ja logaritmifunktiot: exp, log, log10 • Potenssifunktio: pow • Neliöjuuri: sqrt
Lisää matemaattisia funktioita<math.h> • Itseisarvofunktio: fabs • Pyöristys alas-ja ylöspäin lähimpään kokonaislukuun: floor ja ceil • Jakojäännös: fmod • modf jakaa luvun kokonais ja desimaaliosaan
Merkkijonojen käsittely funktiot<string.h> • Riittävä kohdemerkkijonon koko on ohjelmoijan vastuulla • Merkkijonon yhdistäminen: strcat, strncat • Merkkijonon kopioiminen: strcpy, strncpy • Merkkijonon pituus: strlen • Merkkijonojen vertailu: strcmp, strncmp • strncat, strncpy ja strncmp funktiot käsittelevät määritellyn määrän merkkejä
Input/output<stdio.h> • Laajin kirjaston osa • Tiedoston avaaminen palauttaa osoittimenFILE tietueeseen • Kolme tiedostovirtaa avataan automaattisesti:stdin, stdout ja stderr • Tavallisesti ne liittyvät näppäimistöön, näyttöön ja näyttöön
Tiedostovirrat • Teksti ja binäärivirtoja • Tekstivirta ei takaa yksi-yhteen kuvaustatiedostoon kirjoitetun ja tiedostoon tulevan datan välillä • Binäärivirta takaa sen • Tiedosto yhdistetään virtaan avaa operaatiolla • Yhteys katkaistaan sulje operaatiolla
Tiedon syöttöön liittyviä funktioita<stdio.h> • Tietovirtoja käyttävät funktiot alkavat f kirjaimella • Merkin lukeminen: getc, getchar, fgetc • Merkin kirjoittaminen: putc, putchar, putc • Merkkijonon lukeminen: fgets • Merkkijonon kirjoittaminen: puts, fputs • Muotoiltu syötön lukeminen: scanf, fscanf, sscanf • Muotoiltu tulostaminen: printf, fprintf, sprintf