*   >> Lese Utdanning Artikler >> science >> programming

Introduksjon til makroer i C

Nesten alle allerede definert en konstant i C ved hjelp av #define CONST 12345

men bare en liten gruppe virkelig vet hva den linjen gjør og hvordan du kan utforske disse funksjonene. Hver linje som starter med # er ikke behandlet av C-kompilator, men av C pre-prosessor som analyserer disse linjene og produserer koden som effektivt vil bli utarbeidet. I gcc, kan du se resultatet av preprosessering scenen bruker gcc -E src.cWhat definere

direktivet gjør er å gjøre det preprosessor erstatte alle forekomster av definisjonen av teksten som følger den.

Utskiftningen er rent tekstlig og er det noen triks som er virkelig fantastisk. Jeg skal snakke om to av dem: funksjonslignende makroer og multi linje macros.Function lignende macrosTo lage en funksjon-lignende makro bare sette den vanlige parentes etter navnet på makroen og følg navnet på sine argumenter. Argumentene vil bli erstattet av EXACT streng som du sender til makro.

En rask eksempel #define print_int (x) printf ("Int% d \\ n", x); Når kalt print_int (30), vil makroen utvide toprintf ("Int% d \\ n", 30); Multi macrosA linjer makro kan bygges sette en \\ i enden av hele linjen av makroen. Dette tegn viser at makro fortsetter på neste linje. #define SWAP (a, b) {\\ a ^ = b; \\ B ^ = en; \\ A ^ = b; \\} Parentesen er nødvendig fordi at blokken må evalueres som en enkelt instruksjon. Uten den, ville følgende mislykkes:

if (a> b) SWAP (a, b) Makroer er dangerousMacros produserer feil som er vanskelig å feilsøke og vanskelig å patch.

De mulige feller er mange (feil i forrang for operatører, selv registrere makroer, etc). Denne siden har alle av dem virkelig godt dokumentert. Dette var en liten introduksjon til en mer avansert bruk av C-makroer. Forprosessoren er en kraftig funksjon og kan brukes til å lage mange gode ting. For å vite mer om det man kan besøke dette nettstedet.

Anmeldelser

Copyright © 2008 - 2016 Lese Utdanning Artikler,https://utdanning.nmjjxx.com All rights reserved.