*   >> Læs Uddannelse artikler >> science >> programming

Introduktion til makroer i C

Næsten alle allerede defineret en konstant i C ved hjælp af #define CONST 12345

men kun en lille gruppe virkelig ved, hvad denne linje gør, og hvordan til at udforske disse funktioner. Hver linje, der starter med et # ikke behandles af C compiler, men i C pre-processor, der analyserer disse linjer og producerer den kode, der effektivt vil blive udarbejdet. I gcc kan du se resultatet af forbehandling scenen ved hjælp af gcc -E src.cWhat definere

direktiv gør, er at gøre præprocessoren erstatte hver forekomst af definitionen af ​​teksten, der følger det.

Udskiftningen er rent tekstuelle og der er et par tricks, der er virkelig fantastisk. Jeg vil tale om to af dem: funktion-lignende makroer og multi linje macros.Function-lignende macrosTo lave en funktion-lignende makro bare sætte den sædvanlige parentes efter navnet på makroen og følger navnet på sine argumenter. Argumenterne vil blive erstattet af den nøjagtige streng, du passerer til makroen.

Et hurtigt eksempel #define print_int (x) printf ("Int% d \\ n", x); Når kaldet print_int (30), vil makroen udvide toprintf ("Int% d \\ n", 30); Multiline macrosA flere linjer makro kan bygges sætte en \\ i slutningen af ​​hver linje i makro. Denne karakter viser, at makro fortsætter på næste linje. #define SWAP (a, b) {\\ a ^ = b; \\ B ^ = a; \\ A ^ = b; \\} Parentesen er nødvendige, fordi denne blok skal evalueres som en enkelt instruktion.

Uden den ville følgende mislykkes:

if (a> b) SWAP (a, b) Makroer er dangerousMacros producerer fejl, der er vanskelige at debug og vanskelig at patch. De mulige fælder er mange (fejl i forrang operatører, selvstændige henvisninger makroer, osv). Denne side har alle dem virkelig veldokumenteret. Dette var en lille introduktion til en mere avanceret anvendelse af C makroer. Præprocessoren er en kraftfuld funktion, og kan bruges til at tjene masser af gode ting. At vide mere om det man kan besøge denne hjemmeside.



Copyright © 2008 - 2016 Læs Uddannelse artikler,https://uddannelse.nmjjxx.com All rights reserved.