Ehdollinen käännös
ifdef ja makrot.
Ehdollinen käännös on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.
Esikääntäjä
Ennen kuin kääntäjä näkee koodinne, esikääntäjä suoritetaan. Se käsittelee kaikki #-merkillä alkavat rivit: sisällytykset, makrot ja ehdot.
Ehdollisen käännöksen avulla koodilohkoja voi sisällyttää tai jättää pois tässä vaiheessa arvioitavien ehtojen perusteella. Näin yhdestä lähdekoodista voidaan tuottaa erilaisia koontiversioita.
Makrojen määrittäminen
#define luo makron. Ilman arvoa se on pelkkä lippu, jonka tilan voi tarkistaa myöhemmin.
Objektimaiset makrot korvaavat nimen tekstillä; liput ainoastaan merkitsevät, että jokin on määritelty.
#define MAX_USERS 100 /* value macro */
#define DEBUG /* flag macro */ifdef ja ifndef
#ifdef NAME säilyttää lohkon vain, jos NAME on määritelty. #ifndef säilyttää sen vain, jos NAME ei ole määritelty.
Tässä virheenkorjaustulostus on olemassa vain debug-koonneissa. Jos DEBUG-makroa ei ole määritelty, kääntäjä ei edes näe kyseistä riviä.
#include <stdio.h>
#define DEBUG
int main(void) {
#ifdef DEBUG
printf("debug: starting\n");
#endif
printf("running\n");
return 0;
}if, elif, else
#if arvioi vakioarvoisen kokonaislukulausekkeen. Yhdistäkää siihen #elif ja #else monisuuntaista valintaa varten.
Näin koodi valitaan versionumeromakron perusteella.
#include <stdio.h>
#define VERSION 2
int main(void) {
#if VERSION >= 2
printf("new feature on\n");
#else
printf("legacy mode\n");
#endif
return 0;
}defined-operaattori
#if-direktiivin sisällä voitte tarkistaa määrittelyn käyttämällä defined(NAME)-ehtoa ja yhdistää tarkistuksia operaattoreilla && ja ||.
Tämä on joustavampaa kuin #ifdef, jolla voi tarkistaa vain yhden nimen.
#if defined(LINUX) && !defined(EMBEDDED)
/* desktop Linux code */
#endifMäärittäminen käännöshetkellä
Makroja ei tarvitse kirjoittaa kiinteästi lähdekoodiin. -D-valitsin määrittää ne komentorivillä.
Näin koontijärjestelmät voivat vaihtaa ominaisuuksia muokkaamatta lähdekoodia. -DDEBUG vastaa sitä, että jokaisen tiedoston alussa olisi #define DEBUG.
gcc -DDEBUG -DVERSION=3 -o app app.cAlustan tunnistaminen
Kääntäjät määrittelevät valmiiksi kohdealustaa kuvaavia makroja. Niiden avulla voitte kirjoittaa siirrettävää koodia.
_WIN32— Windows (32- tai 64-bittinen)__linux__— Linux__APPLE__— macOS / iOS
Valitkaa näiden perusteella oikea alustan ohjelmointirajapinta.
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endifOtsikkotiedostojen include-suojaukset
Ehtojen perinteinen käyttötapa on include-suojaus, joka estää otsikkotiedoston käsittelyn kahdesti.
Ensimmäinen sisällytys määrittää suojamakron; myöhemmät sisällytykset ohittavat rungon, koska makro on jo määritelty.
#ifndef UTILS_H
#define UTILS_H
int add(int a, int b);
#endif /* UTILS_H */Koodin kommentointi pois käytöstä
#if 0 ... #endif poistaa lohkon käytöstä luotettavasti, vaikka lohko sisältäisi jo kommentteja.
Toisin kuin /* */, se voidaan turvallisesti upottaa toisen samanlaisen rakenteen sisään, joten se on vakiotapa jättää koodia tilapäisesti pois virheenkorjauksen aikana.
#if 0
legacy_function(); /* disabled for now */
/* with internal comments too */
#endifEsikääntäjän tulosteen tarkastelu
Nähdäksesi täsmälleen, mitä kääntäjä kääntää, suorita vain esikääntäjä valitsimella -E.
Se laajentaa kaikki sisällytykset, makrot ja ehdot. Tämä on erittäin hyödyllistä, kun makro ei toimi odotetusti.
gcc -E app.c | lessOminaisuuksien kytkimet käytännössä
Yleinen toimintatapa on käyttää yhtä asetusten otsikkotiedostoa, jolla ominaisuuksia otetaan käyttöön tai poistetaan käytöstä koko projektissa.
Yhden #define-määrittelyn vaihtaminen vaikuttaa kaikkiin suojattuihin lohkoihin kaikissa tiedostoissa. Näin valinnaiset ominaisuudet pysyvät selkeästi erillään ydinkoodista.
#include <stdio.h>
#define FEATURE_LOGGING 1
int main(void) {
#if FEATURE_LOGGING
printf("logging enabled\n");
#endif
printf("app ready\n");
return 0;
}Pikatarkistus
Ennustakaa komentorivimäärittelyn toiminta.
Kertaus
Hallitsette nyt ehdollisen käännöksen:
#ifdef/#ifndeftarkistavat, onko makro määritelty#if/#elif/#elsearvioivat vakioarvoisia lausekkeita yhdessädefined()-ehdon kanssa-DNAMEmäärittää makroja komentoriviltä ominaisuuksien vaihtamista varten- Valmiiksi määritellyt alustamakrot mahdollistavat siirrettävän koodin, ja include-suojaukset estävät kaksoissisällytykset
Seuraavaksi: koodin järjestäminen useisiin tiedostoihin.
Opi C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”Ehdollinen käännös” ilmainen?
Kyllä – oppitunnin ”Ehdollinen käännös” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Ehdollinen käännös”?
ifdef ja makrot. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Ehdollinen käännös”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?
Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Ehdollinen käännös
- Monitiedostoprojektit
- Makefile-tiedostot
- Staattiset ja jaetut kirjastot