|
Titlul: eroare preprocesare - eroare compilare Scris de: Stefan Narcis din Februarie 07, 2015, 22:13:59 Salut!
Puteti sa ma lamuriti si pe mine, va rog, care-i diferenta dintre o eroare de preprocesare si una de compilare? Eventual cu cate un exemplu. Merci! Titlul: Răspuns: eroare preprocesare - eroare compilare Scris de: Pirtoaca George Sebastian din Februarie 07, 2015, 23:02:16 Atunci cand un program trece de la codul sursa la executabil se parcurg mai multe faze. Prima dintre ele este etapa de preprocesare realizata de un preprocesor. In mare in aceasta etapa se inlocuiesc directivele de preprocesare (e.g. #define) cu valorile lor. De exemplu, daca in cod ai scris ceva de genul
Cod: #define NMAX 100 Cod: int v[100]; Etapa de compilare consta in traducerea codului in limbaj de asamblare care este dependent de arhitectura si de setul de instrucțiuni al procesorului. Erorile de compilare sunt clasice: sintaxa, nu declari variabile, etc. Nu inteleg la ce vrei sa te referi prin eroare de preprocesare. Titlul: Răspuns: eroare preprocesare - eroare compilare Scris de: Robert Badea din Februarie 08, 2015, 13:15:37 Etapa de preprocesare e cea în care se analizează liniile ce încep cu # ca și directive. O directivă este o instrucțiune care specifică cum ar trebui să acționeze compilatorul / assemblerul. O eroare de preprocesare este o eroare pe una din aceste linii.
Spre exemplu, Cod: #include <stdio.h> este un program valid în C. Dacă, în schimb, am face Cod: #include <not_a_file.h> am obÈ›ine o eroare la faza de preprocesare pe motiv că nu s-a putut găsi fiÈ™ierul not_a_file.h. Erorile de preprocesare nu trebuie neapărat să fie neintenÈ›ionate, spre exemplu Cod: #include <stdio.h> spune că noi nu vrem să compilăm decăt cu standardul C11 sau mai nou. Făcând gcc -std=c99 test.c vom obÈ›ine iarăși o eroare în faza de preprocesare care ne transmite mesajul scris de noi pe linia cu #error. Pe de altă parte, gcc -std=c11 test.c va funcÈ›iona fără probleme. Se pot face destul de multe lucruri interesante cu aceste directive. Erorile de compilare sunt cele care au loc în timp ce compilatorul încearcă să traducă codul tău în alt limbaj (în cazul nostru, din C în limbaj de asamblare). Cum s-a zis È™i mai sus, acestea sunt, de obicei, cele „clasiceâ€. Pot apărea însă, mai rar, erori È™i în compilator (internal compiler error). Următorul fragment este luat de pe Wikipedia: Cod: somefile.c:1001: internal compiler error: Segmentation fault |