2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
C-kieli asettaa joitain ennalta määritettyjä symboleja, joita voidaan käyttää suoraan ja käsitellä esikäsittelyn aikana.
__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
Testitulokset:
#define käytetään määrityksen kirjoittamiseen vakiota määritettäessä:
#define MAX 100
Looginen sääntö on korvata MAX suoraan arvolla 100, kun se näkyy seuraavassa koodissa. Tämä toimintovaihe suoritetaan esikäsittelyvaiheessa. Yleensä kun käytetään #definea vakion määrittämiseen, nimi kirjoitetaan isoilla kirjaimilla.
käytettävät kohtaukset:
#define-komentoa käytetään makrojen määrittämiseen samalla tavalla kuin funktioita, mutta logiikka on korvaaminen.
Kuinka käyttää:
#define MAX(x,y) ((x) > (y) ? (x) : (y))
Tämä on makro, joka on kirjoitettu täydentämään kahden luvun suoraan suuremman arvon arviointia. Huomaa, että makron nimen perässä olevien hakasulkeiden tulee olla lähellä makroa.
Käyttötapaus:
Yllä mainituista kahdesta tapauksesta voimme havaita, että makrot eivät rajoita tyyppiä parametreja välitettäessä. Jos funktio välitetään, funktion palautustyyppi on kiinteä ja makro toimii nopeammin.
Makrojen edut:
- 1. Tehtäessä laskutoimituksia pienellä koodimäärällä makrojen työaika on lyhyempi kuin funktioiden.
- 2. Vielä tärkeämpää on, että funktion parametrit on ilmoitettava tietyillä tyypeillä. Makroja voidaan soveltaa erilaisiin tyyppeihin, joita voidaan verrata käyttämällä >. Makrotyypillä ei ole merkitystä.
Makrojen huonot puolet:
- Joka kerta kun makroa käytetään, kopio makron määritelmäkoodista lisätään ohjelmaan. Ellei makro ole suhteellisen lyhyt, tämä voi pidentää ohjelman pituutta merkittävästi.
- Makroja ei voi korjata.
- Koska makrot ovat tyypistä riippumattomia, ne eivät ole tarpeeksi tarkkoja.
- Makrot voivat aiheuttaa operaattorin ensisijaisuusongelmia, mikä tekee ohjelmista alttiita virheille.
Makrojen ja funktioiden vertailutaulukko:
Attribuutit | #määritellyt makrot | toiminto |
---|---|---|
koodin pituus | Makro lisätään ohjelmaan aina, kun sitä käytetään.Hyvin pieniä makroja lukuun ottamatta ohjelman pituus kasvaa huomattavasti | Toimintokoodi näkyy vain yhdessä paikassa joka kerta, kun sitä käytetään, sama koodi kutsutaan kyseisessä paikassa |
Toteutusnopeus | nopeammin | On ylimääräistä funktiokutsuja ja palautuksia, mikä on hitaampaa. |
operaattorin etusijalla | Makroparametrit arvioidaan kaikkien ympäröivien lausekkeiden yhteydessä, ellei sulkuja sisällytetä, vierekkäisten operaattoreiden ensisijaisuudella voi olla arvaamattomia seurauksia, joten on suositeltavaa kirjoittaa makrot useammilla suluilla. | Funktioparametrit arvioidaan ja välitetään funktiolle vain, kun funktiota kutsutaan. Ilmaisut arvioivat ennustettavasti. |
Parametrit sivuvaikutuksineen | Parametrit voidaan korvata useisiin paikkoihin makron rungossa, ja jos makron parametrit arvioidaan useita kertoja, parametrien arviointi sivuvaikutuksineen voi tuottaa arvaamattomia tuloksia. | Toimintoparametrit arvioidaan vain parametreja välitettäessä ja niitä on helppo hallita. |
Parametrin tyyppi | Makron parametreilla ei ole mitään tekemistä tyypin kanssa Niin kauan kuin parametrien toiminta on laillista, sitä voidaan käyttää mille tahansa parametrityypille. | Toiminnon parametrit liittyvät tyyppiin. Jos ne ovat erilaisia, tarvitaan erilaisia toimintoja ja tehtävät ovat erilaisia. |
debug | Makrojen virheenkorjaus on hankalaa | Funktiot voidaan korjata lausekkeelta |
rekursio | Makrot eivät voi olla rekursiivisia | Makrot eivät voi olla rekursiivisia |
#operaattori muuntaa makron argumentin merkkijonoliteraaliksi. Se saa esiintyä vain parametreilla varustetun makron korvausluettelossa.
#-operaattorin suorittama toiminto voidaan ymmärtää "jonotukseksi".
Käyttöesimerkki:
## voi yhdistää sen molemmilla puolilla olevat symbolit yhdeksi symboliksi, jolloin makromääritykset voivat luoda tunnisteita erillisistä tekstisegmenteistä.liimaa merkkejä varten
Tällaisen yhteyden on tuotettava kelvollinen tunniste. Muuten tulos on määrittelemätön. Ajatellaanpa sitä tässä Kun kirjoitetaan funktiota kahden luvun suuremman arvon löytämiseksi, eri tietotyypeille on kirjoitettava eri funktioita.
Käyttöesimerkki: