Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Documente similare
Fişiere 11 ianuarie 2004 Utilizarea şi programarea calculatoarelor. Curs 13 Marius Minea

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

Slide 1

Paradigme de programare

Limbaje de Programare Curs 8 – Fisiere

Limbaje de Programare Curs 5 – Siruri de caractere

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Paradigme de Programare

Microsoft Word - CarteC.doc

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Top

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

SUBPROGRAME

Analiză statică Analiza fluxului de date 23 octombrie 2014

Slide 1

Analiză de flux de date 29 octombrie 2012

Microsoft Word - CarteC.doc

Microsoft Word - CarteC.doc

Declararea variabilelor

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

PCLPII-C16(9)

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

E_d_Informatica_sp_SN_2014_bar_10_LRO

E_d_Informatica_sp_MI_2015_bar_02_LRO

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

1

Slide 1

Microsoft Word - PCLP2_Curs_4_2019.doc

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Object Oriented Programming

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

PHP (II)

LUCRAREA NR

ALGORITHMICS

tehnologii web

PROGRAMARE ORIENTATA PE OBIECTE

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

PowerPoint-Präsentation

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

Laborator 3

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Curs 6: Clasificarea surselor de informatii - Clasificarea Bayes Naiva. Modelul Bernoulli

Lucrarea nr. 2 Aplicaţii de tip client Mihai IVANOVICI 6 martie 2006 Scopul acestei lucrări este de a vă familiariza cu modulul Python socket şi cu mo

Microsoft Word - Laborator 6 - Expresii Regulate IV.doc

Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

Microsoft Word - O problema cu bits.doc

Programarea şi utilizarea calculatoarelor

Programarea şi utilizarea calculatoarelor

Laborator 04: Apeluri de funcții

proiectarea bazelor de date

Acest fișier conține rezumatul anumitor explicații prezente în Curs - privind Sintaxa GNY Totul este legat de Alf = alfabetul de neterminali/ unități

Creational design patterns

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

PPSD

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

MINISTERUL EDUCAŢIEI, CULTURII ŞI CERCETĂRII AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT ALECU RUSSO DIN BĂLŢI FACULTATEA DE ŞTIINŢE REALE, ECONOMICE

-

Microsoft Word - c6.doc

Microsoft PowerPoint - 11_USO_curs_08.ppt [Compatibility Mode]

Limbaje de ordinul I LOGICA DE ORDINUL I Un limbaj L de ordinul I este format din: o mulţime numărabilă V = {v n n N} de variabile; conectorii şi ; pa

Aggregating Data

Lab6LCD

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Logică și structuri discrete Mulțimi Casandra Holotescu

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Microsoft Word _POO_Lab_1_Modificari_v01.htm

Laborator 1-Teoria probabilitatilor si statistica matematica Sef lucrari dr.mat. Daniel N.Pop Departamentul de calculatoare si inginerie electrica 1 P

Microsoft Word - Ivan, Boja.doc

Metode avansate de gestiune a documentelor și a sistemelor de calcul - LABORATOR 1 -

PRELEGERE XIII PROGRAMAREA CALCULATOARELOR ŞI LIMBAJE DE PROGRAMARE Noţiunea de funcţie - continuare VI. Funcţii recursive O funcţie se poate activa n

PowerPoint-Präsentation

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Microsoft PowerPoint - Curs_SDA_3_RO_2019_v2.pptx

Rezolvare model de subiect practic P2 Programarea Calculatoarelor sesiunea iunie 2017

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Curs7

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Ruby on Rails Pop Alexandru Pavel Razvan Calculatoare 4

Lucrarea 10

CURS

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

Microsoft Word - unitati de invatare 11liceu-12 sam

LOGICA MATEMATICA SI COMPUTATIONALA Sem. I,

Laborator02

Diapositive 1

B

L7

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Slide 1

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

Caraivan George-Alexandru Grupa 431A Interfața driver-kernel la Linux Introducere Deși pentru unii dintre noi acest lucru poate fi o supriză, cei mai

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

7. Alinierea robustă a densităţilor de puncte 3D Măsurarea distanţei dintre diferite forme geometrice 3D Estimarea rotaţiei şi a translaţiei optime în

Transcriere:

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005

Preprocesorul C. stdarg.h 2 Preprocesorul C extensii (macro-uri) pentru scrierea mai concisǎ a programelor preprocesorul efectueazǎ transformarea intr-un program C propriu-zis directivele de preprocesare au caracterul # la început de linie #include <numefisier> sau #include "numefisier" include textual fişierul numit (în mod tipic definiţii) (a doua variantǎ: cautǎ întâi în directorul curent apoi în cele standard) #define LEN 20 /* substituţie textualǎ simplǎ */ int tab[len]; /* pentru definirea de constante simbolice */ for (i = 0; i < LEN; i++) {... } /* mai robust la modificǎri */ forma generalǎ: #define nume(arg1,...,argn) substituţie #define max(a, B) ((A) > (B)? (A) : (B)) #define swapint(a, b) { int tmp; tmp = a; a = b; b = tmp; } Obs: substituţia se face textual pot apǎrea probleme subtile folosiţi paranteze în jurul argumentelor (evitǎ erori de precedenţǎ) argumentele: evaluate la fiecare apariţie textualǎ (ex. de 2x în max) rezultat incorect la evaluarea repetatǎ a expresiilor cu efect lateral

Preprocesorul C. stdarg.h 3 Operatorii # şi ## Operatorul # aplicat unui argument de macro produce un şir de caractere care are ca şi conţinut argumentul macro-ului. #define mkstring(x) # x În acest caz, mkstring(nume) devine "nume" Operatorul ## are ca efect concatenarea elementeror lexicale de dinainte şi de dupǎ. Exemplu: #define concat(x,y) x ## y În acest caz, concat(unu, doi)) devine unudoi Obs.: în standardul C douǎ constante şir consecutive sunt echivalente cu concatenarea lor: "unu" "doi" e echivalent cu "unudoi"). Observaţie: de regulǎ, definiţia unui macro nu include un ; final; acesta e scris în program dupǎ folosirea macro-ului, obţinând un aspect uniform la scriere (ca şi cum ar fi un apel de functie)

Preprocesorul C. stdarg.h 4 Compilarea condiţionalǎ pt. a compila selectiv porţiuni de cod din program în funcţie de opţiuni (caracteristici arhitecturale; pt. depanare; funcţionalitate în plus; etc) Sintaxa: grup-cod ::= test-if grup-cod grupuri-elif opt grup-else opt #endif test-if ::= #if expr-const #ifdef identificator #ifndef identificator grup-elif ::= #elif expr-const grup-cod (toate # apar grup-else ::= #else grup-cod pe linie nouǎ) expr-const ::= cele obişnuite defined identificator #define DEBUG /* dacǎ depanǎm */ /* cod obişnuit */ #ifdef DEBUG printf("am ajuns aici, x =..."); #endif /* alt cod obişnuit */ #if defined GNUC /* compilator GNU */ #if GNUC == 2 /* versiunea 2 */ /* cod specific pt. versiune */ #else /* altǎ versiune */ /* cod specific pt. altǎ versiune */ #endif #endif Identificatori predefiniţi: FILE LINE DATE TIME Ex: fprintf(stderr, "eroare ^ın %s linia %d\n", FILE, LINE );

Preprocesorul C. stdarg.h 5 Funcţii cu numǎr variabil de argumente Funcţiile de tipul printf/scanf au numǎr variabil de argumente (...) Pentru a implementa o astfel de funcţie, trebuie un mod de acces la argumentele cu numǎr variabil, pornind de la ultimul arg. numit. limbajul C defineşte o serie de macro-uri în stdarg.h tipul va_list pentru a reţine informaţii despre lista de argumente void va_start(va_list ap,ultimarg); iniţializeazǎ ap pornind de la adresa ultimului argument tip va_arg(va_list ap, tip); returneazǎ urmǎtorul argument din listǎ, presupus a fi de tipul tip apelatǎ repetat pentru fiecare argument; tipul argumentelor şi numǎrul lor trebuie deduse din argumentele fixe (ex. formatul la print/scanf) void va_copy(va_list dest, va_list src); copiazǎ un va_list, inclusiv punctul curent de prelucrare atins void va_end(va_list ap); apelat pentru încheierea corectǎ a prelucrǎrii argumentelor

Preprocesorul C. stdarg.h 6 Funcţii de intrare-ieşire formatatǎ cu nr. variabil de argumente declaraţii similare, dar in loc de... apare va list ap: int vprintf(const char *format, va_list ap); int vscanf(const char *format, va_list ap); similar: vfprintf, vfscanf, vsprintf, vsscanf, vsnprintf se folosesc când dorim sǎ facem întâi o prelucrare preliminarǎ, şi apoi sǎ apelǎm printf/scanf etc. cu argumentele rǎmase void errprintf(const char *format,...) { va_list ap; va_start(ap, format); fprintf(stderr, "Error: %s; ", strerror(errno)); vfprintf(stderr, format, ap); va_end(ap); }