Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Directive pentru compilare conditionata

c



+ Font mai mare | - Font mai mic



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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1096
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved