CATEGORII DOCUMENTE |
DOCUMENTE SIMILARE |
|
TERMENI importanti pentru acest document |
|
: | |
Directive pentru compilare conditionata
Limbajul C contine cateva directive care ne permit sa compilam selectiv anumite portiuni de program.
Directivele #if, #else, #elif si #endif
Forma generala a lui #if este:
#if expresie_constanta
secventa de instructiuni
#endif
Daca expresie_constanta este adevarata, compilatorul va compila fragmentul de cod cuprins intre #if si #endif, iar daca expresie_constanta este falsa, compilatorul va sari peste acest bloc.
Exemplu:
#define MAX 100
void main()
Observatie: Expresie_constanta se evalueaza in timpul compilarii. De aceea, aceasta trebuie sa contina numai variabile constante definite anterior utilizarii lor. Expresie_constanta nu trebuie sa contina operatorul sizeof.
Directiva #else lucreaza similar cu instructiunea else determinand o alternativa de compilare. Exemplu :
# define MAX 10
void main()
Deoarece MAX = 10, compilatorul va compila numai codul cuprins intre #else si #endif, deci va tipari mesajul :
Se compileaza pentru tablouri < 99
Directiva #elif inlocuieste 'else if' si este utilizata pentru realizarea optiunilor multiple de tip if / else / if utilizate la compilare. Forma generala a directivelor #if , #elif, #endif este:
#if expresie
Secventa_de_instructiuni
#elif expresie_1
Secventa_de_instructiuni_1
#elif expresie_2
Secventa_de_instructiuni_2
. . . . . . . . . . . . . .
#elif expresie_N
Secventa_de_instructiuni_N
#endif
Daca 'expresie' este adevarata se compileaza 'Secventa_de_instructiuni' si nu se mai tasteaza nici o alta expresie #elif. Daca 'expresie' este falsa, compilatorul verifica urmatoarele expresii in serie, compilandu-se 'Secventa_de_instructiuni_i', corespunzatoare primei 'expresie_i' adevarata, i = 1, 2, . . . , N.
Directivele #if si #elif se pot include unele pe altele. Exemplu:
#if MAX > 100
#if VERSIUNE_SERIALA
int port = 198;
#elif
int port = 200;
#endif
#else
char out_buffer[100];
#endif
Directivele #ifdef si #ifndef
O alta metoda de compilare conditionata utilizeaza directivele #ifdef si #ifndef, care inseamna 'if defined' si 'if not defined'.
Forma generala a lui #ifdef este :
#ifdef macro_name
Secventa_de_instructiuni
#endif
Daca anterior aparitiei secventei de mai sus s-a definit un macro_name printr-o directiva #define, compilatorul va compila 'Secventa_de_instructiuni' dintre #ifdef si #endif.
Forma generala a lui #ifndef este:
#ifndef macro_name
Secventa_de_instructiuni
#endif
Daca macro_name nu este definit printr-o directiva #define, atunci se va compila blocul dintre #ifndef si #endif.
Atat #ifdef, cat si #ifndef pot utiliza un #else, dar nu #elif. Exemplu:
# define TOM 10
void main()
Programul va afisa: Hello TOM ! si JERY not defined. Daca nu s-a definit TOM, atunci programul va afisa : Hello anyone !.
Directiva #undef
Se utilizeaza pentru a anula definitia unui macro_name definit printr-o directiva #define.
Exemplu:
#define LENGTH 100
#define WIDTH 100
char array[LENGTH][WIDTH];
#undef LENGTH
#undef WIDTH
Acest program defineste atat LENGTH, cat si WIDTH pana se intalneste directiva #undef.
Principala utilizare a lui #undef este de a permite localizarea unui macro_name numai in anumite sectiuni ale programului.
Directiva #line
O linie cu una din formele:
#line numar 'nume_fiaier'
#line numar
determina compilatorul sa considere, din motive de diagnosticare a erorilor, ca numarul de linie al urmatoarei linii din programul sursa este dat de 'numar', iar numele fisierului in care se afla programul sursa este dat de 'nume_fisier'. Daca lipseste 'nume_fisier', programul sursa se afla in fisierul curent.
Exemplu:
Urmatoarea secventa face ca numarul de linie sa inceapa cu 100.
# line 100
void main() /* linia 100 */
Instructiunea printf() va afisa valoarea 102 deoarece aceasta reprezinta a treia linie in program, dupa instructiunea #line 100.
Directiva #pragma
O linie de control de forma:
#pragma nume
determina compilatorul sa realizeze o actiune care depinde de modul de implementare al directivei #pragma. 'nume' este numele actiunii #pragma dorite.
Limbajul C defineste doua instructiuni #pragma: warn si inline.
Directiva warn determina compilatorul sa emita un mesaj de avertisment. Forma generala a lui warn este :
#pragma warn mesaj
unde 'mesaj' este unul din mesajele de avertisment definite in C.
Forma generala a directivei inline este :
#pragma inline
si avertizeaza compilatorul ca programul sursa contine si cod in limbajul de asamblare.
Directiva vida
O linie de forma:
#
nu are nici un efect.
Macro_names (macrosimboluri) predefinite
Limbajul C contine cativa identificatori predefiniti, care la compilare se expandeaza pentru a produce informatii speciale.
Acestia sunt:
__LINE__ o constanta zecimala care contine numele liniei sursa curente.
__FILE__ un sir care contine numele fisierului care se compileaza.
__DATA__ un sir care contine data compilarii sub forma luna/zi/an.
__TIME__ un sir care contine ora compilarii sub form: hh:mm:ss
__STDC__ constanta 1. Acest identificator este 1 numai in implementarile standard; daca constanta este orice alt numar, atunci implementarea este diferita de cea standard.
Aceste macrosimboluri, impreuna cu simbolurile definite cu #define nu pot fi redefinite.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1179
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved