procesul de compilare în c
ce este o compilare?
compilarea este un proces de conversie a codului sursă în cod obiect. Se face cu ajutorul compilatorului. Compilatorul verifică codul sursă pentru erorile sintactice sau structurale, iar dacă codul sursă este fără erori, atunci generează codul obiect.
procesul de compilare c convertește codul sursă luat ca intrare în codul obiect sau codul mașinii. Procesul de compilare poate fi împărțit în patru etape, adică., Pre-procesare, compilare, asamblare și conectare.
preprocesorul ia codul sursă ca intrare și elimină toate comentariile din codul sursă. Preprocesorul ia Directiva preprocesorului și o interpretează. De exemplu, dacă <stdio.h >, directiva este disponibilă în program, apoi preprocesorul interpretează Directiva și înlocuiește această directivă cu conținutul stdio.h ‘ dosar.
următoarele sunt fazele prin care programul nostru trece înainte de a fi transformat într-o formă executabilă:
- preprocesor
- compilator
- Assembler
- Linker
preprocesor
codul sursă este codul care este scris într-un editor de text și codul sursă fișierul cod este dat o extensie “.c”. Acest cod sursă este transmis mai întâi preprocesorului, iar apoi preprocesorul extinde acest cod. După extinderea codului, codul extins este transmis compilatorului.
compilator
codul care este extins de preprocesor este transmis compilatorului. Compilatorul convertește acest cod în cod de asamblare. Sau putem spune că compilatorul C convertește codul pre-procesat în cod de asamblare.
asamblor
codul ansamblului este convertit în cod obiect utilizând un asamblor. Numele fișierului obiect generat de asamblor este același cu fișierul sursă. Extensia fișierului obiect în DOS este ‘.obj, ‘și în UNIX, extensia este’o’. Dacă numele fișierului sursă este ‘ bună ziua.c’, atunci numele fișierului obiect ar fi ‘ Bună ziua.obj’.
Linker
în principal, toate programele scrise în C folosesc funcții de bibliotecă. Aceste funcții de bibliotecă sunt pre-compilate, iar codul obiect al acestor fișiere de bibliotecă este stocat cu ‘.lib ‘(sau’.a’) extensie. Principalul lucru al linker-ului este de a combina codul obiect al fișierelor bibliotecii cu codul obiect al programului nostru. Uneori situația apare atunci când programul nostru se referă la funcțiile definite în alte fișiere; atunci linker joacă un rol foarte important în acest sens. Acesta leagă codul obiect al acestor fișiere la programul nostru. Prin urmare, concluzionăm că sarcina linker-ului este de a lega codul obiect al programului nostru cu codul obiect al fișierelor bibliotecii și al altor fișiere. Ieșirea linker-ului este fișierul executabil. Numele fișierului executabil este același cu fișierul sursă, dar diferă numai în extensiile lor. În DOS, extensia fișierului executabil este ‘.exe’, și în UNIX, fișierul executabil poate fi numit ca ‘a. out’. De exemplu, dacă folosim funcția printf() într-un program, atunci linker-ul adaugă codul asociat într-un fișier de ieșire.
să înțelegem printr-un exemplu.
Bună ziua.c
acum, vom crea o diagramă de flux a programului de mai sus:
în diagrama de flux de mai sus, următorii pași sunt luați pentru a executa un program:
- în primul rând, fișierul de intrare, adică salut.c, este trecut la preprocesor, iar preprocesorul convertește codul sursă în cod sursă extins. Extensia codului sursă extins ar fi hello.i.
- codul sursă extins este transmis compilatorului, iar compilatorul convertește acest cod sursă extins în cod de asamblare. Extensia codului de asamblare ar fi Bună ziua.s.
- acest cod de asamblare este apoi trimis asamblorului, care convertește codul de asamblare în cod obiect.
- după crearea unui cod obiect, linker creează fișierul executabil. Încărcătorul va încărca apoi fișierul executabil pentru execuție.