Home » Articole » Articole » Calculatoare » Programare » C » Compilarea în programarea C

Compilarea în programarea C

postat în: C 0

După ce am acoperit conceptele de bază ale programării C, putem discuta acum pe scurt procesul de compilare.

Ca orice limbaj de programare, C în sine este complet de neînțeles pentru un microprocesor. Scopul său este de a oferi oamenilor o modalitate intuitivă de a furniza instrucțiuni care pot fi convertite cu ușurință în cod mașină care este ușor de înțeles de un microprocesor. Compilatorul este cel care traduce codul nostru sursă care poate fi citit de om în cod de mașină.

Pentru începătorii în programare, acest lucru pare destul de simplu. Un compilator naiv ar putea citi în fiecare fișier sursă, poate traduce totul în codul mașinii și poate scrie un executabil. Ar putea funcționa, dar are două probleme serioase. În primul rând, pentru un proiect mare, este posibil ca computerul să nu aibă suficientă memorie pentru a citi tot codul sursă simultan. În al doilea rând, dacă faceți o modificare la un singur fișier sursă, va trebui să recompilați întreaga aplicație.

Pentru a face față acestor probleme, compilatorii împart munca în pași. Pentru fiecare fișier sursă (fiecare fișier .c), compilatorul citește fișierul, citește fișierele la care face referire prin directiva
#include
și le traduce în cod mașină. Rezultatul este un „fișier obiect” (.o). După ce toate fișierele obiect sunt create, un program „linker” colectează toate fișierele obiect și scrie programul executabil real. În acest fel, dacă modificați un fișier sursă, doar acel fișier trebuie să fie recompilat, după care, aplicația va trebui reconectată.

Fără a intra în detalii, poate fi benefic să aveți o înțelegere superficială a procesului de compilare.

Preprocesor

Preprocesorul oferă posibilitatea de a include așa-numitele fișiere antet, extinderi macro, compilare condiționată și control de linie. Aceste caracteristici pot fi accesate inserând în codul dumneavoastră directivele de preprocesor corespunzătoare. Înainte de compilarea codului sursă, un program special, numit preprocesor, scanează codul sursă pentru token-uri sau șiruri speciale și le înlocuiește cu alte șiruri sau cod, conform unor reguli specifice. Preprocesorul C nu face parte din punct de vedere tehnic din limbajul C și este, în schimb, un instrument oferit de software-ul compilatorului.

Toate directivele de preprocesor încep cu caracterul hash (#). Puteți vedea o directivă de preprocesor în programul Hello world. Exemplu:

 #include <stdio.h>

Această directivă face ca antetul stdio să fie inclus în programul dumneavoastră. Alte directive precum #pragma controlează setările compilatorului și macrocomenzile. Rezultatul etapei de preprocesare este un șir de text. Vă puteți gândi la preprocesor ca la un editor de text non-interactiv care vă modifică codul pentru a-l pregăti pentru compilare. Limbajul directivelor preprocesorului este agnostic față de gramatica lui C, astfel încât preprocesorul C poate fi folosit și independent pentru a procesa alte tipuri de fișiere text.

Verificarea sintaxei

Acest pas asigură că codul este valid și va fi secvențiat într-un program executabil. În majoritatea compilatoarelor, puteți primi mesaje sau avertismente care indică probleme potențiale cu programul dvs. (cum ar fi o declarație condiționată care este întotdeauna adevărată sau falsă etc.)

Când este detectată o eroare în program, compilatorul va raporta în mod normal numele și linia fișierului care împiedică compilarea.

Cod obiect

Compilatorul produce un echivalent de cod mașină al codului sursă care poate fi legat în programul final. În acest moment, codul în sine nu poate fi executat, deoarece necesită o legătură pentru a face acest lucru.

Este important să rețineți, după ce ați discutat elementele de bază, că compilarea este o „stradă cu sens unic”. Adică, compilarea unui fișier sursă C în codul mașinii este ușoară, dar „decompilarea” (transformarea codului mașinii în sursa C care îl creează) nu este. Decompilatoare pentru C există, dar codul pe care îl creează este greu de înțeles și util doar pentru inginerie inversă.

Legătura

Legarea combină fișierele obiect separate într-un singur program complet, integrând biblioteci și cod și producând fie un program executabil, fie o bibliotecă. Legătura este realizată de un program de linker, care face adesea parte dintr-o suită de compilatori.

Erorile obișnuite în această etapă sunt fie funcții lipsă, fie duplicate.

Automatizare

Pentru proiectele C mari, mulți programatori aleg să automatizeze compilarea, atât pentru a reduce cerințele de interacțiune a utilizatorului, cât și pentru a accelera procesul prin recompilarea doar a fișierelor modificate.

Majoritatea mediilor de dezvoltare integrate (IDE) au un fel de management de proiect care face o astfel de automatizare foarte ușoară. Cu toate acestea, fișierele de management de proiect sunt adesea utilizabile numai de utilizatorii aceluiași mediu de dezvoltare integrat, astfel încât oricine dorește să modifice proiectul ar trebui să folosească același IDE.

Pe sisteme asemănătoare UNIX, make și Makefiles sunt adesea folosite pentru a realiza același lucru. Make este tradițional și flexibil și este disponibil ca unul dintre instrumentele standard pentru dezvoltatori pe majoritatea distribuțiilor Unix și GNU.

Makefiles au fost extinse de GNU Autotools, compus din Automake și Autoconf pentru a face software-ul compilabil, testabil, traductibil și configurabil pe multe tipuri de mașini. Automake și Autoconf sunt descrise în detaliu în manualele lor respective.

Autotools sunt adesea percepute ca fiind complicate și au fost dezvoltate diverse sisteme de construcție mai simple. Multe componente ale proiectului GNOME utilizează acum sistemul declarativ de construcție Meson, care este mai puțin flexibil, dar se concentrează în schimb pe furnizarea de caracteristici necesare cel mai frecvent dintr-un sistem de compilare într-un mod simplu. Alte sisteme de compilare populare pentru programe scrise în limbajul C includ CMake și Waf.

Odată ce gcc este instalat, acesta poate fi apelat cu o listă de fișiere sursă c care au fost scrise, dar care nu au fost încă compilate. De exemplu. dacă fișierul main.c include funcții descrise în myfun.h și implementate în myfun_a.c și myfun_b.c, atunci este suficient să scrieți

 gcc   main.c myfun_a.c myfun_b.c 

myfun.h este inclus în main.c, dar dacă se află într-un director separat de fișiere antet, atunci acel director poate fi listat după o comutare „-I”.

În programele mai mari, Makefiles și programul gnu make pot compila fișiere c în fișiere intermediare care se termină cu sufixul .o care pot fi legate de gcc.

Cum să compilați fiecare fișier obiect este de obicei descris în Makefile cu fișierul obiect ca o etichetă care se termină cu două puncte urmate de două spații (filele cauzează adesea probleme) urmate de o listă de alte fișiere care sunt dependențe, de ex. fișierele .c și fișierele .o compilate într-o altă secțiune, iar pe linia următoare, invocarea gcc care este necesară.

Tastând man make sau info make se oferă adesea informațiile necesare despre cum să utilizați make, precum și gcc.

Deși gcc are o mulțime de comutatoare de opțiuni, unul folosit adesea este -g pentru a genera informații de depanare pentru gdb pentru a permite gdb să arate codul sursă în timpul unui pas prin programul de cod al mașinii. gdb are o comandă „h” care arată ce poate face și este de obicei începută cu „gdb a.out” dacă a.out este fișierul executabil anonim de cod de mașină care a fost compilat de gcc.

(Traducere și adaptare din Wikibooks de Nicolae Sfetcu)

Ghidul Google SEO
Ghidul Google SEO

Ghidul de iniţiere Google privind optimizarea pentru motoarele de căutare, Versiunea 1.1, 13 noiembrie 2008 Acest document a fost lansat iniţial ca un efort pentru a ajuta echipele Google, însă este la fel de util şi pentru webmasterii începători în … Citeşte mai mult

Nu a fost votat $0.00 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
PowerPoint - Ghid pentru începători
PowerPoint – Ghid pentru începători

PowerPoint este un instrument excelent pentru prezentări de orice fel, fie în clasă, fie în cadrul unei conferințe. O prezentare PowerPoint este formată dintr-o serie de diapozitive care pot fi proiectate (afișate electronic) sau tipărite într-o varietate de formate de … Citeşte mai mult

Nu a fost votat $0.00 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *