Sunteți pe pagina 1din 14

2/22/2015

SignIn

SUBIECTE
NOI

1/
5

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
CreateAccount

ForumulCheilorNerei

Cefacultatesaaleg?

DecodareSamsungGTS6310orange

Problemaplacutaram

Maimultetipuridesitemap?

Redirected(2014)

Driverwebcam.
Asigurarelocuinta

> ProfessionalZone

AmplificatorCougarC500.41600W...

SetareDNSUbuntuServer

> Programming

> C&C++

[Unde]gasescoetimologiebunap...
Cumsepottrimitefisieredecap...

Maipotsalvaaceastabucatadet...

constructiecasaCRYSSTONE

Creditmicrointreprindere
Undepotgasioinregistrareaem...

ViewNewContent

> Articolesicodsursa

Lucruripecareoriceprogramatorartrebuisletie
StartedbyOriginalCopy,Dec05201210:15
Page1of2

OriginalCopy

Posted05December201210:15

Programare

Mingw

Iceanice

C++programming

Acestarticolesteoncercaredeaprezentaoimaginedeansamblucudestuledetaliitehnice,interconectate,pecareamobservatcamultidintre
ceicentreabapeforumnulestiu.Continelucruripecaremileamsintetizateusingur,dealungultimpului.Dacapeste50%dinlucruritisunt
noi,tirecomandcitireasadedouaori,pentrucanuveiputeasintetizatoatelucruriledintrosinguracitire(nimeninupoate).
1. Deceamnevoiepentruainvatasaprogramez?
Celmaiimportantlucrudecareainevoienuesteunprogramsauocarte,cimodultaudegandirethemindset.
Curiozitateaesteunfactorfoarteimportant.Trebuiesafiicurioscumfunctioneazalucrurile,sisadorestisaintelegiinadevaratul
sensalcuvantului.Puncteleurmatoareitivornumiprogrameprecum"compilator"sau"IDE",darnutemultumidoarcuatat.Cautasa
intelegiceimplicaprocesuldecompilare,deundestieuncompilatorcetrebuiesafaca,dincepasiestecompusacompilarea,cerezultat
arecompilarea,s.a.m.d.Probabilstiica"aprograma"inseamnaacreaprogramedarteaiintrebatvreodataceestedefaptun
program,ceestedefaptunproces?Gandeste,cerceteazasianalizeazaprofundtermeniisi"tehnologiile"decaretelovesti.
Deexemplu,dacatielene,sinusimtidorintadeaintelegeprocesuldecompilare,ci"Ijustwantthedamnprogramtoclick
around",atuncinuarerostsaitiomoritimpulsienergiacuprogramareanuaiaveasucces,incearcaaltcevacaretepasioneaza.
Siasaamajunslaaldoileacriteriuterminologia.Invato,binesicorect,sifolosesteo.Dacasetuldesculedeprogramare
folositeestelanceatadeprogramator,atunciterminologiaestevarfullancei.Careediferentadintreuntoiagtocit,siolancefaravarf?
Exact,niciuna.Nuteapucasafolosestitermenipecarenuiintelegi,cidocumenteazateinainte.Cuolanceascutita:

teveiputeaintelegemaiusorcualtiprogramatori.Tuiiveiintelegepeei,sieipetine
pemasuracetermeniiintelesidetinedevinmaicomplecsi,veiputeaacumulacunostintedinceincemaicomplexebazatepe
celeanterioare,inritmexponential.Lainceputtisevaparefrustrant,insadacavreisadeviibun,oricumvatrebuisainveti
termeniiodatasiodata.Decidecesanufacitotulcalacartedelabuninceput?
Trebuiesafiiinteligent.Inteligentanusemasoarainnoteledelascoala,ciincatdecomplexesuntgandurilepecaretilefacitu
singur,faraimpulsuridinexterior.Obisnuiescsalenumesc"inteligentareproductiva"si"inteligentaproductiva".
Deexemplu,aiincercatvreodatasatiargumenteziexistentasauinexistentadivina?Teaifolositdecitatesauceaiauzitdelaaltii?
Dacada,atunciaiasenumeste"inteligentareproductiva".
Decicautaunsubiectcareteintereseaza,bulverseaza,sauincitalagandire,siincearcasaargumenteziproductiv,dezvoltanduncorp
deideipropriu,pecarelintelegi.Catdedeparteajungi?Crezicacecitestiacumemultblabla?Inesenta,totceamfacutafostsaunific
celetreicaracteristicialemoduluidegandirenecesareinprogramarementionatepanaacum.
Nota:altcriteriuestesanutifieteamadematematica.Sazicemcacunostinteletaledematematicanuconteaza,insacucatstii
maimulta,cuatatveifiunprogramatormaibun,scriindalgoritmimaiperformanti.
Siastfelamajunslaapatracaracteristica:esenta,profunzimeaingandire.Inprogramareveiscriecod,teveiuitalael,siveifi
fericit"camerge".Tinsatedezamagesc,nucodulinsineesteoperadecareartrebuisafiimandru,cifelulincareaicombinattotce
stii.Pebazaintelegeriitermenilorsitehnologiilor,aireusitsacombiniintrunmodprofundconceptepecareinitialleaiacumulat
separat.Sinudingresealaamfolosit"acumulat"inlocdeinvatat,cipentruauniceledouacaracteristici:curiozitateasiprofunzimea.
Astfel,voiinlantuiacinceacaracteristicaamindsetuluideprofunzime:atuncicanditispui"da,amreusitsalfacsamearga".Ceeste
gresitcuacestmoddegandire?Incearcasagandestiprofundsisagasestisingurexplicatia,pebazacelorspusepanaacum.Abiaapoi
verificate,citindmaijos.
Nuestesuficientcaunprogram,scrissiganditprofunddetine,pebazaproprieiinteligenteproductive,sa"meargapentruca
merge",cipentrucaasalaigandittusafunctioneze.Altfelspus:
nulasanimiclavoiaintamplarii.Programareaesteo"stiinta"exacta,calculatoarelesuntautomatefinite
(http://en.wikipedia.org/wiki/Finite_state_machine),maiexactspus,"ideile",algoritmiipecareiipotitransmiteunuiprocesorsunt

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

1/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
asa.
inspiritulpunctuluianterior,imaginatiajoacaunrolimportant:trebuiesatiimaginezitoatefeluriledeinput,chiarsicelepentru
careprogramulnuesteganditdefapt.
Inplus,trebuiesaincercisatidezvolticapacitateadeanalizasisinteza.Esteunprocesanevoiossicontinuu,simergemanan
manacuimaginatia,insalaunmomentdatitiveidezvoltaunsimt*pentrucumtrebuieimpartitaoproblemamaimareinsubprobleme
carenunumaicasuntmaimici,darsuntsireutilizabilesi(cutimpul)faragreseli(bugfree).
Reutilizareacoduluiinnoiproiectenunumaicavaconducelamaiputineerori(deoarececodulebugfree),ciitivacrestesiritmulde
rezolvareaproblemei,sauveiputeaabordaproblememaicomplexefarasateconcentrezimereuasupraacelorasi(sub)probleme
simplesifrustrantepecareleairezolvatdejainproiecteletrecute.
Cuajutorulimaginatieisiinspiritulreutilizariicodului,itipotiimaginacefunctiisauclasenoitrebuiesaintroduci,carenunumaica
tirezolvaproblemacurenta,cipecareleveiputeareutilizainproiecteleurmatoare.

*acestaeste"secretulmeseriei"inprogramare
Invataengleza.Obisnuiestetesaacumulezicunostinteinengleza,deoarece,resurseleinenglezasuntcelemaiactualesicelemai
corecte.Celeinromanapursisimplusuntinconsistente,datoritalipseiceluimaiimportantaspect:terminologia
Sfatpentruliceeni:sunteinperioadancarevdezvoltaigndirea,decifaceiexactasta:dezvoltaivgndireainginereasc.
Nuaveinevoiedembuibarecualgoritmicndsunteinliceu,esuficientsexploraictmaimultestructuridedateisvgndiila
utilitateafiecreiannatur,apoisrezolvaiproblemecuele,eventualcombinate.Nuproblemedinculegere,ciproblemeproprii,
inventatechiardacevorbadoardespreparcurgereaunuiarboresauaunuigraf.
nvainprimulrndlimbajulfoartebine.Apoitreceilacelpuinaltedoulimbajenvatefoartebine.Nuconteazcare,fiecare
limbajilrgeteorizontul.
Apoifolosiidiferitebiblioteci,librrii,vedeicumrezolvialiiprobleme,cumscriucodidece.Implicaivnopensourcela
chestiisimpleexersainelegereaicorectareadecodcarenafostscrisdevoi.Obinuiivscitiispecificaiiformaleis
explorainecunoscutul.
Acestgendeaptitudinisuntmultmaiimportantenperioadancarencetinformare.
Cndveiintralafacultate,veiaveatoatesculelenecesarepentruavfocusapeproblemelecuadevratinteresante,rezolvateprin
algoritmic/matematic,framaipierdetimpulcuacelelucrurimruntepecareletiideja.
PS:"Nuaveinevoiedembuibarecualgoritmi"nunseamnsfugiidealgoritmi.Cndrezolvaiproblemepractice,veivedealacee
bunsortareaunuivectorsaugenerareatuturorpermutaiilor,saucarepoatefilegturadintrearboriiO(log(N)),etcideeaeste:
dezvoltaivintuiiafadeacestgendentrebri,emultmaiimportantdectalgoritmpestealgoritmpestealgoritm.Aveitimp
destulpentrualgoritmi,ioricummereuveidadecevaalgoritmispecializaidecarenaiauzitpnatunciipecaretrebuiesi
combinai.Iarnacestcazintuiia,softskillsicapacitateadealucracunecunoscutulsuntmultmaideajutordect"studiereatimpde
4aniaalgoritmilor"(carentrenoifievorba,ncoaleorasolealoricum).
2. Cucesaincep,cuCsaucuC++?
CuC.Motive:
1. totceinvetiintrunuldinlimbajepoatefiusortranspusincelalalt,deciceinvetiinCitivafiutilinC++maitarziu
2. Culpurestemaicuratdecat"C++cucinsicout".InC,veiprogramaprocedural.TrecilaC++candincepisaprogrameziobiectual.
3. CsiC++suntambelelimbajefoarteputernicesidesfolosite.
4. C++nuesteneaparatmaibundecatC.ExistalucruricaresuntcelmaibinefacuteinCsinuinC++
5. IncepandcuC,tepotioprilaunmomentdat(dupamine,punctulidealestedupaintelegereapointerilorsilucruldinamiccumemoria)
siintelegecefacicuadevarat:ceesteunprogram,unproces,ceinseamnacompilare,linkare,siinmodidealsiunmicexcursinASM
(12saptamani,poatemaimult,dupainteres)
C++insaitiascunde,saumaibinezis,prinmultitudineade"features"pecarelepuneladispozitie,nuitistimuleazacuriozitatea
catrelowlevel.
6. Dacainliceu(sauchiarfacultate?)tisaspuscaprogrameziinC++,insanuaiintalnitsaufolosittermeniprecumclasa,template,
STL,atuncitinsatedezamagesc:limbajulpecarelfolosestiestedefaptC,sitotceaifolositdinC++suntcelmaiprobabilobiectele
std::cinsistd::coutdeclarateiniostream(numitmaisus"Ccucinsicout")
daimon,on25thMay2009,16:21,said:

Omicaobiectie,dacaipotspuneasa,legatadeordineanvatariilimbajelor.Lafacultateamea(sidinctestiu,latoate),ordineade
nvatarealimbajeloresteCCPPJAVA.Or,peminecabeginner,Cmannebunit.PnasiPascalaveaunmodprimitivpentruadeclara
obiecte,Cnschimbmaazvrlitnhardware,calculecupointeriprinstive,sialtechestiicarepeunncepatorsigurnulcoafeaza.Nui
vorbadeskill,evorbadeatractivitate.Bun,noitrebuienfinalsastimtot,decinu"sepune".nsa..
EuunulsugerezoricuisanceapacuJavasauCpp,parteacuobiecte.Eintuitivasipentrutembeli,testatnpractica.Poatenuajungimai
multdeuncodemonkeycuasta,darmacarfaciprimulpassinutibagipicioruldupactevascanf()maidure.Pluscaunobiectpotsatil
desenezfolosindUML,siarelogicadirectvizual.NudegeaabunprogramC,odatacecreste,devinedincencemaigreudedepanat,daca
nulaimpartitdelanceputprinfisieresiheadere,casanuncurcilucrurile.
Justmytwocents..

EuunulnuamavutproblemecuCcaprimulmeulimbaj.Eadevarat,teoreticfacusemalgoritmicainpascallascoala(ingenerala).
Teoretic,practicinsalascoalainvatamalgoritmiipederostsinupricepeamnicimacardecesenumeste"writeln"sinu"readln",eram
deparerecaartrebuinumiteinvers(nupricepeamcasuntnumitedinperspectivamasinii,nuaomului).Nuradeti,atatdejalniceram
laprogramare
IntimpulliceuluimamapucatdeC(cahobby,nulascoala),sifaraprofesor,doarcucartisiresursedepeweb,amintelesziceumai

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

2/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
multdecatmaasteptam.Decicredcaastaculimbajultinemaimultdecatdecoptlaminte,darmaialescatdeentuziasmatesticandte
apucisastudiezi,sinudelimbajulinsine.Totulpoatefiintelesdacatepasioneaza,chiarsipointerii,sichiarsifaraprofesor(sicasa
plusez,chiarsiinlimbistrainepecarenulestapanesticumtrebuie:engleza(teoreticoinvatamde5ani,practicinsade2anisila
astaerammizerabilingenerala

)sigermana(de1an,sitotusiamintelesbinemultecucarteadepepronix.deunadincelemai

bunecartiITcaremiacazutinmanasipecareiorecomandoricaruivorbitordelb.germana))
DecistereotipulcumcaCestegreuestedoarochestiunedeatitudinesientuziasm,caresuntsiabordateinpunctul1.alsfaturilormele
(careaubineintelesoaluradesubiectivitatestimbinecaobiectivitateabsolutanuexista).
PS:nudegeabaamtinutsamentionezceelevmediocrueraminrelatiameacuinformatica,citocmaipentruasubliniacanusuntcine
stiecegeniusicaentuziasmulchiarconteaza.
PPS:undebuggerestepentruelevulCsimilarcuUMLpentruelevulC++/Java/Delphiitiarataexactceseintampla,doarcalowlevel.
Efoarteimportantsainvetisalmanuiesti(celputincatevacomenzidebaza),chiardacaitiegreucaincepator.
3. Cefacdefaptcandprogramez?
Candprogramezi,scriiuntextcuoanumitasintaxasisemantica,textcarecontinedescriereaunoralgoritmi.Acesttexturmeazasafie
convertitdinlimbajulfolositsiintelesdeoameni(CsauC++deexemplu),intrunlimbajbinar,intelesdeCPU.
4. Deceareuncompilatornevoiedeosintaxafixa?
Deoareceuncompilatornuestenimicaltcevadecatunprogram,iarprogramelecaresuntexecutatedeprocesoareleactualenusunt
inteligente.
5. Ceinseamnadefaptsintaxa?
Sintaxaunuilimbajdeprogramareestesetulderegulidincareestecompusunlimbaj.Deexemplu,oregulasintacticanespunecauntipde
date(deexemplu"int"),trebuiesafieurmatdeunulsaumaimultespatiisauliniinoi,siapoiunulsaumaimultiidentificatoridevariabile
separatiprinvirgula,iarlasfarsitcaracterul"".Altaregulasintacticanespunecaunidentificatoresteoliterasaucaracterul_,urmatdezero
saumaimultelitere,caracterul_,saucifre.
Atatsinimicmaimult.Nuestecorectsateintrebi"careestesintaxapentruaafladacaunnumaresteprim?",ci"careestealgoritmulpentrua
afladacaunnumaresteprimsaunu?".
6. Ceinseamnasemantica?
Semanticainseamnasemnificatie."int"deexempluinseamna"numarintreg",iar"inti",altfelspus"int"urmatdeunidentificatorinseamna
"declarasialocaidentificatorulidetipnumarintreg"
7. Ceesteunalgoritm?
UnalgoritmesteunsetdeinstructiunicarerezultaincodexecutatdeCPUpentruarezolvaoproblema.Deexemplu,pentruanumara
descrescatordela10panala0,algoritmulararataastfel:
1.initializeazanumarulcuvaloarea10
2.afiseazanumarul
3.dacanumarulestemaimaredecatzero,atunci
3.1.scade1dinnumar
3.2sarilapasul2
4.altfel
4.1sfarsitprogram
PosibilesolutiiinCararataastfel:
inti
for(i=10i>=0i){
printf("%d",i)
}

sau(tradus"cuvantcucuvant"):
inti
i=10
pas2:
printf("%d",i)
if(i>0){
i
gotopas2
}

sau(celmaielegantdupaparereamea):
inti
i=10
do{
printf("%d",i)
}while(i)

Atentie:"inti"nufacepartedinalgoritm,pentrucainstructiuneaefolositadecompilatorlacompilare,sinuvadeveniparteaprogramului
.exerezultatcaatare,ciintrunaltmod(vezimaijosdesprealocareastaticaamemoriei).
8. Ceinseamnadeclarareauneinoivariabile?
Atuncicanddeclariovariabila,ceeacefacisenumestealocareastaticaamemoriei.Dupacumitipotiimagina,dacaexistaoalocare
statica,atunciexistasiunadinamica,dardespreastamaitarziu.
Corectspusinsa,nutualocimemorie,ciiispuicompilatoruluisaofaca.Aceavariabilavafi"inclusa"infisierul.exegenerat.Dinasta
deducemcacucatdeclarammaimultevariabile,cuatatmarimeafisierului.exegeneratcreste.Continuareaexplicatieiinurmatoarea
intrebare...
9. Deceovariabilaarenevoiedeuntipdedate?(precum"int"inexempluldemaisus)
Variabilainsine,asacumvafifolositainprogramul.exebinar,nuvaaveauntipdedateexplicit,insacompilatorularenevoiedetipulde
datepentruasticatibytessaaloce,sideciimplicit,cucatibytessa"mareasca"executabilul*.

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

3/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Pentruaaflacucatcresteunexecutabil**cufiecarevariabila,folosesteoperatorulsizeof()***:
printf("unintocupa%dbytes",sizeof(int))

*defapt,tipuldedateestefolositdecompilatorsipentruadecideceinstructiunibinarepentruCPUsascrieinexecutabil,pentrucaatribuirea
uneivaloridetipcharareoaltainstructiuneCPUdecatceapentruatribuireauneivaloridetipinteger(edoarunexemplu,darexemplesunto
gramada)
**inpractica,trebuiesaalocistaticfoartemultevariabilepentruaobservaodiferentainmarime.
***sizeof()esteunoperator,nuofunctie,siesteevaluatlacompilare,caoricealtoperator
intrebaredeprofunzime:purteoretic,dacaCPUultausisistemuldeoperaresuntpe64biti,siscriisicompileziunprogramcareafiseaza
marimeaunuiinteger,programpecareiltrimitisiunuiprietencuunsistempe32biti,decepeambelecalculatoarearafisa"8",chiardaca
pecalculatorulprietenuluitaumarimeaunuiintegerestedefapt4?
10. Ceestedefaptovariabila?
Ovariabila,asacumesteeafolositadeunprogramator,esteocolectiedepatruelemente
1. unnume,sauidentificator,utilcompilatoruluisiprogramatorului
2. ovaloare
3. untipdedate,utilcompilatoruluipentruasticumsamanipulezeaceavariabila
4. oadresadememorie
11. Cumafluadresadememorieauneivariabile?
Folosindoperatorulunar&,deexemplu:
inti
printf("adresavariabileiieste%p",&i)

InC,cusigurantaaifolositdejascanf()pentruacitivaloareauneivariabile:
inti
printf("introducetii:")
scanf("%d",&i)

Eibine,acelapellascanf()setraducecamasa:citesteunnumarintreg(specificatde"%d")sisalveazallaadresavariabileii.
12. Candfolosestecompilatorulvaloareauneivariabile,sicandfolosesteadresasa?
Inafaradecazulexplicitincarefolosestioperatorul&,compilatorulfolosesteceledouacaracteristici(dintotaluldepatru)lacompilareastfel:
atuncicandatribuiovaloare(constanta,precum10maisus,sauvariabila)uneivariabilei,compilatorulfolosesteadresaacesteia:
i=10
j=n

primainstructiuneseciteste"copiazaconstanta10laadresavariabileii",iaradoua"copiazavaloareavariabileinlaadresavariabilei
j.
Intermenitehnici,ceeaceseaflainstangaoperatoruluideatribuiresenumesteleftvalue,saupescurtlvalue.
Inexempluldemaisusinsa,variabilanestetratatacarvalue,iarpecompilatorilintereseazavaloareasa.
13. Ajutor!Totitermeniiastiamaderuteaza!
compilare,linkare,header,IDE,biblioteca
Scopulacesteisectiuniestesaitiexpliceteoriasiutilitateapracticaatuturoracestornotiuni.Categorictrebuiesaleintelegi.Veiinstalaun
mediucuratdeprogramare,delazero,componentacucomponenta,siveiinvatacumconlucreazaacesteasicerolarefiecare.
Intrapehttp://tdmgcc.tdragon.net/download(http://tdmgcc.tdragon.net/download)sidescarca"OnDemandInstaller".Acestprogramva
instalacompilatorulnumitgcc.Maiexact,vainstalaportulgccpentruwindowsnumitMinGW(minimalistGNUforwindows),gccfiind
compilatorulstandardpentrulumeaGNU/Linux.
Unportalunuiprogramesteoadaptareaaceluiprogrampentruoaltaplatforma.
VremsafolosimTDMpentruainstalaMinGWdeoareceMinGWnudispunedeuninstalatorcomunsifaraelartrebuisainstalamtotul
manual,ceeaceedestuldecomplicat.
MutainstalatorulintrundirectornoucreatC:\programare.CuelveiputeasiadministrainstalarileTDMdejaexistente(caceapecare
urmeazasaocreezi).
Nota:potiinstalaoriceoriundevreitu,insaincontinuarevoifolosifoartemultacestecai,decitiaifaceunbinedacaaiurmaexact
instructiunilemele.
DacacevanufunctioneazacumtrebuiesiaiinstalatealtesculedeprogramareprecumDevCpp,Code::Blockssaualtele,dezinstaleazale
temporar.NuveifinevoitsadezinstaleziVisualStudiosauBorlandC++.
Alegeoptiunea"Create"pentruacreaonouainstalare.Inurmatoareapagina,pentru"InstallationDirectory"introdu
"C:\programare\compilator"(faraghilimele).
Inrest,instalareacuvalorilepredefiniteartrebuisafieperfecta.
AcuminStart>Allprograms>MinGWaiolegaturacatreinterfataCLI(http://en.wikipedia.org/wiki/Commandline_interface)asistemului
deoperare,cunoscutasubwindowssica"msdosprompt".Ceeacefaceaceastalegaturaestepracticsaimportenistesetariprinfisierul
"C:\programare\compilator\mingwvars.bat".
Candiidamdrumul,nevapuneautomatindirectorulC:\programare\compilator.Astanuesteneaparatoproblema,insamultmaibinearfi
dacanearpuneintrundirectorspecialundenevomtinenoiproiectele.Insapentruastatrebuiemaiintaisacreamunastfeldedirector.Deci

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

4/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
creazadirectorulC:\programare\proiecte.
Apoideschidefisierul.batamintitmaisuscunotepadsiadaugailasfarsitinstructiuneapentruaschimbadirectorulcurent(comandacdvine
delachangedirectory)in"proiecte":
@cd"..\proiecte"

Inchideoricemsdospromptdacailmaiaideschissirelanseazal.AcumartrebuisateafliinC:\programare\proiecte.
Bun,avemtotulsetatsiorganizatintrunmodcurat.Acumhaisacreamunnouproiect.
Astanuinseamnanimicmaimultsaumaiputindecatacreaunnousubdirectorin"proiecte"numit"hello",incarenevomsalvatoate
fisiereleproiectului.Deciintroducomandanecesara:

mkdirhello

(mkdir=makedirectory)
apoischimbadirectorulcurentinnoulsubdirectorcreat:
cdhello

Haisafacemcevaceprobabilstii:sascriemuncodsursasisatestaminfinaldacatotulfunctioneazacumtrebuie:
editmain.c

Apoiintroducodulsursa:
#include<stdio.h>
#include<stdlib.h>
intmain(void){
printf("helloworld")
returnEXIT_SUCCESS
}

(nota:lasfarsitulfisieruluiseaflaolinienouagoala.AstaestepartedinstandardulactualsimodernallimbajuluiC).
InmeniuleditoruluiselecteazaFile>SavesiapoiFile>Exit.
Acumavemunfisiermain.ccareabiaasteaptasafiecompilat.Deciintroducomanda:
gccWallmain.c

"Wall"esteunparametrusiiispunecompilatoruluisagenerezeavertizari("W"vinedelawarnings)pentrutoti("all")pasiiceimplicao
compilare.EstebinesapuiWalldefiecaredata,astfelcompilatorultevaavertizadespreeventualelegreselipecareleaifacut.
Dacanuaifacutniciogreseala,atuncicompilatorulnuvaafisanimic.Elvagenerainsaunfisiera.exe.
Ilpotilansainexecutie,introducandinprompt:
a.exe

Artrebuisavezipeecrantextul"helloworld".
Fisierulsenumestedinmotiveistorice"a.exe".Dacavremcaoutputulcompilatoruluisasenumeascaaltfel,trebuiesaispunemastaprin
parametrulo<numeprogram>."o"vinedela"output".Asadar,artrebuisaintroducem:
gccWallohello.exemain.c

Amtestatdeciinstalareasitotulfunctioneazaperfect.Insanoinuneamindeplinitmisiunea:saintelegemsculelepecarelefolosimsicum
functioneazaacestea,macarcatdecat.Astanevafacenisteprogramatorimaibuni.
Decivomfacecatevaexperimentepecarelevomanaliza,pentruaneputeaexplicacelemaiimportanteconcepte.Uneledintreexperimente
vorgeneraerori,ceeaceedorit(euvreausafaclucruri"anormale"pentruademonstraceva).Experimentelecontinsiexplicatiiteoretice,si
demonstratiipractice.
1. Experiment1:compilaresilinkare
Compilatorulnostru,numitgcc.exe(gccvinedelaGNUCCompiler),neacompilatanteriorcodulsursasiageneratdirect
executabilul.Compilareaesteconstituitainsadinmaimultipasi,delacodulsursascrisinCpanalafisierulexecutabilcarecontine
instructiuni"executate"deelectronicadinCPUedrumlung.Perand,pasiiacestiasunt:
a.preprocesarepreprocesorulproceseazatoateinstructiunilededicatelui,adicatoateinstructiunilecareincepcu"#"asta
includesidirectivapreprocesor"#include"pecareamfolositosinoiinprogramulnostru."#include"practicincludeunfisier,
iarrezultatularatadecasicumcontinutulfisieruluiinclusarfifostscrisdenoimanualinmain.c.
Pentruavedearezultatulacestuipas,trebuiesaiipasamcompilatoruluiparametrul"E",careiispunesaseopreascaimediat
dupapasuldepreprocesare:
gccWallEomain.imain.c

Deschidefisierulgeneratmain.isi...wow,ogramadadecod,suntpeste600deliniidecodCfoartevalidsinecesarpentruca
amaratanoastradefunctiemain()(careseaflalasfarsitulfisierului)safunctionezecumtrebuie.
b.asamblareoutputulacestuipasesteinruditcuunaltlimbajnumit"limbajdeasamblare"(sauscurt:ASM).Instructiunile
ASMcoincidaproape1:1cuinstructiunilebinarecarevorfiexecutatedeCPU.Acestaesteultimulpascarevafiinteligibildestul
incatsaneofereinformatiidesprecevafaceprocesorul.Outputulurmatoruluipas(compilarea)estedejamultpreabinarpentru
unprogramatorordinar.
LuigcciispunemsaseopreascadupapasuldeansamblarecuparametrulS:

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

5/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Putemrefolosifisierulpreprocesatmain.i,astfel:
gccWallSomain.smain.i

sauiiputemspunecompilatoruluisaoiadelacapat,incepandcumain.c,sasalvezetemporarunnoufisierpreprocesatsisal
asamblezepeacela,oprindusedupapasuldeasamblare:
gccWallSomain.smain.c

Inambelecazuri,comenzilesuntaceleasi.Ceeacediferaesteextensiafisieruluideinput(.isau.c),infunctiedecaregccdecide
ceestedefacut(dacamaiestenecesaraopreprocesaresaunu).
Aruncandunochiinfisierulasamblatmain.s,neregasimstringulascii"helloworld\0"carenearataclarcaunstringinCse
terminaincaracterulNUL(nuNULL),vedemsinumelefunctiilorfolositeprecum"main"sau"printf",chiardacaacesteasunt
precedatedeunulsaudoua"_",simaivedemsiinstructiuniASM.DeexempluinstructiuneaASM
call__main

apeleazafunctianoastramain().Insadupacumobservi,eanuestenicidecumprimullucruexecutatdeprocesor(desicu
sigurantatisaspuslascoala"mainaiciincepeprogramul").Compilatorulaadaugatautomatpentrunoialteinstructiuni
inainteasa,instructiunicare"pregatesc"apelulefectiv.Pentruaintelegecuadevaratceseintamplaaici,estenecesarastudierea
limbajuluiASM.
c.compilareinacestpas,datelepreprocesatesuntcompilateiaroutputulsenumeste"codobiect".Acestcodobiectcontine
practicinstructiunileCPUcarevorconstituiprogramulnostruefectiv.Insaelnucontinedetaliilecarefacunexecutabilsafieun
executabilrecunoscutcaataredesistemuldeoperare.Elcontineinsareferintelaalteresurse(maimultsaumaiputin)externe
desprecarevomvorbiintrunexperimentviitor,referintepecareleaivazutsiinfisierulASMprecum"_printf".Codulobiect
contine,simplificatvorbind,instructiunilepurebinaresinimicaltceva.
Silaacestpasputemrefolosioutputuloricaruiadintrepasiianterioricainput,insaiiputemspuneluigccsaseopreascadupa
pasuldecompilarecuparametrulc:
gccWallcomain.omain.s

sau
gccWallcomain.omain.i

sau
gccWallcomain.omain.c

Gccvadecideinfunctiedetipulinputuluicefisieretemporaretrebuiesagenereze.Insacumnoiavemdejacelmaiapropiattip
deinput(fisierulasamblat)deceeacevrem(codulobiect),doarprimavariantaaresens.Astfelputemcrestevitezadecompilare
(deoarecepasiiintermediaridepreprocesaresiasamblarenumaisuntnecesari).
Insadelaoriceinputampleca,outputulmain.ovafiidentic.
Aruncandunochipefisierulrezultatmain.o,observamcanupricepemmarelucru,deoareceoutputulcompilariinumaiesteun
text,cumafostincazulpreprocesariisialasamblarii,ciunfisierbinar,cuinstructiuniCPU.Aceleinstructiunivorfiexecutate
decircuiteleelectronicedinCPU.
Totusineregasimtextul"helloworld"sivedemsinumeprecum"printf"sau"main",functiicareaparsiinprogram.
Decirezultatulcompilariimain.ocelputinpareareflectainmareceamscrisnoiinmain.c,sidecisecventialsiinmain.isi
main.s.
d.linkare
Acestaesteultimulpasintraducerealuimain.cdinlimbajulCinlimbajulbinaralCPUului.Deoareceeultimulpas,luiGCCnu
trebuiesaispuisaseopreascalaunanumitpascumaifacutcuEpentruprocesare,Spentruasamblaresaucpentru
compilare.Nutrebuiedecatsalhranesticuinputprovenitdelaoricareoutputdinpasiianteriorisaucumain.cinsusi.GCCisi
vagenerafisiereletemporaredecarearenevoie.Cumnoiaveminsaoutputulcelmaiapropiatdeceeacevrem,celmaieficient
estesallinkampeacesta:
gccWallohello.exemain.o

Alinkainseamnaacrealegaturi.Pasulacestacreazalegaturadintrecodulobiectdinfisierul.osibibliotecastandardC(pe
scurt:libc,stdlibcsausubwindowsveimaiintalnisinumelede"msvcrt").Inexperimentulurmatorvomvedeaceesteaceasta
stdlibcsicerolare.
Concluzii
Amaflatcaceeacenumeampanaacum"compilare"estedefaptoseriedepasi(preprocesare,asamblare,compilare,linkare)
ordonati,iarfiecarepasarecainputoutputulpasuluianterior.Totulpleacadelacodulsursascrisdeprogramator,siseajunge
lafisierulexecutabil,careeste(inprincipiu)inputuluneialtecomponente,dedataaceastaunahardware:procesorulinsusi!
Compilareaestedefapt,tehniccorectvorbind,doaracesta"altreileapas"dinceeaceintelegeaminainteprin"compilare".
CompilatorulGCCnelasasaneoprimdupaoricaredintreacestipasicuunuldintreparametriiE,S,sauc.Astfelputemvedea
exactceseintamplasubcapota.
Inexperimenteleviitoareveivedeacainmodobisnuitnuveiaveadeafacecudateledeiesirealepasilordepreprocesaresi
asamblare,insadesveificonfruntatcuutilizareaparametruluic,chiarsiinviatadezicuzideprogramator.
Urmatoareleexperimentevorvorbimaiindeaproapedespresculeledeprogramaexistente,desprebiblioteci,IDEuri,sialtedetalii.
Asiguratecaaiintelesmaiintaitoatelucruriledemaisuspentruacastigaoclaritatecatmaimaredinceleceurmeazaaltfelnu
veiintelegemarelucrudinexperimenteleviitoare.
14. Ceestebibliotecastandard?

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

6/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Bibliotecastandardesteobibliotecacareiiestepusaimplicitladispozitieunuicodsursa.LimbajulCareobibliotecastandardnumita
colocvialstdlibc,limbajulC++areobibliotecastandardnumitacolocvialstdlibc++.
Bibliotecilestandardvindeobiceilapachetcusetuldescule(compilator,linker,etc)deprogramarefolosit.Astfelsefacecagcc(mingw)ne
oferaobibliotecastandard,visualc++neoferaoaltabibliotecastandard,s.a.m.d.
Toateacestebibliotecirespectamaimultsaumaiputinunstandardcomun(standardulISOC,carespecificaintregullimbajC:
http://en.wikipedia....ry#ISO_Standard(http://en.wikipedia.org/wiki/C_standard_library#ISO_Standard)),deaceeanuconteazacuce
compilatorcompilamunprogramcarefolosestedoarlucrurilestandard.
Noivomfolosicasipanaacumcompilatorulgcccubibliotecasastandard.
Compileazacodulsursaanteriormain.calprogramului"helloworld"astfel:

gccnostdlibmain.c

Parametrulnostdlibiispunelinkerului(numit"ld.exe",unprogramlafelca"gcc.exe")apelatinspatelecortineidecompilatorulgcc.exe,sa
nuincludabibliotecastandardinprogramulnostru.
Inoutputvedemconcretcumgccageneratacelefisieretemporarecodobiect(.o),sicumld("ldreturned1exitstatus")returneazaeroare(acel
"return0"pecareilscriituinprogrameiispunesistemuluideoperarecaprocesultausaterminatcusucceseibineaiciprogramulld.exe
facepeundeva"return1"pentruaispuneapelantului(aicigcc.exe,sinusistemuldeoperare,pentrucanuaiintrodustu"ld.exe"pentrua
linkamanualcodulobiectalluimain.ocubibliotecastandard)caprocesulsaterminatcuoeroare:
Quote

Temp\ccD9bI55.o:main.c:(.text+0xa):undefinedreferenceto&#96__main'
Temp\ccD9bI55.o:main.c:(.text+0x16):undefinedreferenceto&#96printf'
collect2:ldreturned1exitstatus

Haisaincercamacelasilucrusimanual,generareadecodobiect,silinkareamanuala:
Introdu:
gcccmain.c

Acumpentrualinka,invocalinkerulld(totiparametriitrebuiescscrisipeosinguralinie):
Quote

ldBdynamic
c:/programare/compilator/lib/crt2.oc:/programare/compilator/lib/gcc/mingw32/4.4.1/crtbegin.o
LC:\programare\compilator\lib\gcc\mingw32\4.4.1Lc:/programare/compilator/lib/gccLC:\programare\compilator\mingw32\lib
LC:\programare\compilator\lib
main.o
lmingw32lgcclmoldnamelmingwexlmsvcrtluser32lkernel32ladvapi32lshell32lmingw32lgcclmoldnamelmingwexlmsvcrt
c:/programare/compilator/lib/gcc/mingw32/4.4.1/crtend.o

(Nota:4.4.1artrebuisafieinlocuitcuversiuneagccfolositadetine)
AsupraparametruluiBdynamicvoirevenimaitarziu.
Dupacumvezi,suntlinkatemaiintaidouafisierecodobiectpecarenuleamscrisnoi:crt2.osicrtbegin.o.Haisavedemceseaflaincrt2.o.
Introdu:
cdC:\programare\compilator\lib
nmcrt2.o
aceastaultimacomandavaafisatoatesimboluriledintrunfisiercodobiect(.lib,.o,.a,.la).Printreacelesimbolurivedemsisimbolul
"__main"desprecareseplangealdcanulgasesteatuncicandamfolositparametrulnostdlibpentrugcc.
Dupacumstiidinuneledinpuncteleanterioare,simbolul"printf"nuexista,estenumit"_printf",decihaisaneuitamdupael(casane
asiguramcaexistasicanimicnuemagic)inbibliotecamsvcrt:
nmc:\programare\compilator\lib\libmsvcrt.a>libmsvcrt.nm
apoideschidefisierultextnoucreatlibmsvcrt.nmsicautadupa_printfveivedeacaeacolo.
ParametrulBdynamicdemaisusspunecasevalinkadinamiccubibliotecastandard.Olinkaredinamicasubwindowsinseamnacaintr
unfinalsevorapelafunctiiaflateinfisiere.dll(precum_printf)deexempluinmsvcrt70.dll(7.0eversiunea).Asacumexistaolinkare
dinamica,existasiunastaticaolinkarestatica(analogcuoalocarestaticaauneivariabile)inseamnacaaceabibliotecaardevenipartea
fisieruluinostru.exe,siinconsecintamarimealuiarcrestecucativaMb.
ParametriidemaisuscareincepcuL<cale>iispunlinkeruluiincedirectoaresaseuitedupabiblioteciapoi,atuncicandacesteavorfi
specificatecuparametriil<nume>.
Deexemplubibliotecamsvcrtseaflaindirectorulc:/programare/compilator/lib/.Standarduldedenumirealfisierelorceconstituiebiblioteci
estelib<nume>.a,<nume>putandfiapoifolositlaliniadecomandapentrualinka(alipiunuldealtul)maimultebibliotecisifisierecod
obiect(precummain.oalnostrucaresielestespecificatpeliniadecomanda).

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

7/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Uitateatentlaacestiparametripentruldsiexploreazasisingur,pentrucanuvoimaiintraindetalii.
Toatebibliotecilespecificatecuparametrullsuntnecesarepentrucaprogramulfinalsafunctionezesubwindows.
Lasfarsitdetotmaiadaugamsicodulobiectcrtend.o,careseocupacuterminareacorectaaprocesului.
Decicontrarcredintelortaledepanaacum"return0"nuestenicidecumultimainstructiuneexecutatadeunproces,lafelcumnici"main"nu
esteprimullucruexecutatdeunprocessetrecemaiintaiprinfunctia__maincare"pregateste"maiintaifunctiamain()scrisadetinepentru
afiapelata.
Concluzia:ceeacescriemnoi,unamaratdefisiermain.o,estedoaromicapartedinprogram.Acestcodvafi"inconjurat"decatevabiblioteci
infunctiedesistemuldeoperare(aici:windows).
15. Ocredintapopulara
Ocredintapopularaspunecafisiereleheader,precumstdio.h,continfunctii.Nimicmaigresit.Functiilesuntimplementateinbiblioteci,niste
fisierebinare,pecareaiinvatatsaleinspectezicucomanda"nm".
Atuncicandlinkam(ld.exe)douafisierecodobiect.o,(sau.lasau.a),nustimceseaflainacelefisieredoarle"lipim"unuldealtulsi
rezultaunfisierexecutabil.
Insauncompilator(gcc.exe)arenevoiesastiecumarataofunctieinaintedeaoapela,informatiilenecesarefiindtipuldedateal
parametrilorsiordineaacestora.
Cumululintre"tipdedate"si"ordine"alparametriloruneifunctiiconstituiesemnaturafunctiei.Multinumescaceastasemnaturasi"antetul
functiei",daracesttermenfacemaimultaluzielacodulsursaC"semnaturafunctiei"inschimbindicanaturabinaraacoduluiobiect.
Haidetisavedemceseintamplaatuncicandcompilamuncodsursafaraaispunecompilatoruluisemnaturilefunctiilor(precum_printfdin
libmsvcrt.a):
cod:
intmain(void){
printf("helloworld")
returnEXIT_SUCCESS
}

compilare:
gccWallohello.exemain.c
Nevaspune:
Quote

warning:implicitdeclarationoffunction'printf'

ATENTIE:compilatorulspunefoartecorect"declaration",pentrucaintradevarestevorbadespredeclarareafunctieiprintf.
Implementareafunctieiprintf(instructiunilebinareCPUceodefinesc)stabinemersiinlibmsvcrt.a
Decihaisaiidamcompilatoruluicenecere.Cod:
intprintf(char*fmt,...)
#defineEXIT_SUCCESS0
intmain(void){
printf("helloworld")
returnEXIT_SUCCESS
}

compilam
gccWallohello.exemain.c

Dupacumvezi,inlocsanefolosimdedeclaratiafunctieiprintfexistentainstdio.hsiaconstanteiEXIT_SUCCESSdinstdlib.h,pursisimplu
leamdeclaratdirectincodulnostrusursaintrunmodsimilarincaresuntdeclarateinacelefisiere.
Concluzie:mareatentielaceidoitermeni:declararea(antetul,semnatura)uneifunctiivs.implementareauneifunctii(instructiunile
CPUdincodulobiectsaulistadeinstructiunidincodulsursabloculdeinstructiunialfunctieicacisifunctiicaprintftrebuiescsafifost
implementatepeundeva,nupicadincer!deschideC:\programare\compilator\include\stdio.hsiconvingetecaacolochiarnuseafla
absolutnicioimplementare!).
16. Lucrulcumaimultefisierecodobiectintrunproiect
Intrunuldinexperimenteleanterioareamvazutcumcodulnostruobiectmain.oeralinkatcualtecoduriobiecte.osibiblioteci.apentrua
formafisierul.exefinal.
Eibineputemcreasinoimaimultefisiere.o(vomvorbisidesprebiblioteciintrunpuncturmator)pecaresalelinkamalaturideacest
"main.o".Astaducelaoreutilizaremaiusoaraacodului.
Reutilizareacoduluisefaceprinimpartireafunctionalitatiimariinfunctionalitatimaimici,prinfunctii.Aceastaimpartireinfunctiisemai
numestesimodularizareacodului.Fisierele.osaubibliotecile.aarputeafideciconsideratemoduledefunctii.
Decivomfaceunnouproiect"prime",ceeacenuinseamnanimicmaimultdecatundirectornou,gol,inworkspaceulnostru
"C:\programare\proiecte".

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

8/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Comenzi:
cdC:\programare\proiecte
mkdirprime

Sigataproiectul:)
creamunnoufisierprime.c:

intis_prime(unsignedintn){
unsignedinti
for(i=2i<=n/2i++){
if(n%i==0){
return0
}
}
return1
}

(nota:stiucaexistaalgoritmimaibuniaicivreausailustrezaltceva,nusafackungfuinalgoritmica).
Perfect,acumilputemcompila:
gcccWallprime.c

sineamalescuunfisierprime.o
scriemmain.c:
#include<stdio.h>
#include<stdlib.h>
intmain(void){
unsignedintn
printf("numar:")
scanf("%u",&n)
if(is_prime(n)){
printf("%uesteprim",n)
}
else{
printf("%unuesteprim",n)
}
returnEXIT_SUCCESS
}

Compilam:
C:\programare\proiecte\prime>gccWallcmain.c
Primimeroarea:
Quote

main.c:Infunction'main':
main.c:8:warning:implicitdeclarationoffunction'is_prime'

Dupacumobservam(incaodata),compilatorulnustiecumaratasemnaturafunctieiis_prime().Nedatotusidoaroavertizare,nuoeroare,si
negenereazatotusicodulobiectmain.o,deci,desistimcaartrebuisaadaugamdeclaratiafunctieiis_primeinainteaimplementariilui
main(),haisatestamcareiisuntlimitelesiceseintampladacanuofacem.
Decitrecemlapasulurmatordealinkaceledouafisierecodobiect:
gccoprime.exeWallmain.oprime.o

apoiexecutamprime.exe
Procesulprime.exevacerenumarul,insaatuncicandvaajungelaapelulfunctieiis_prime,vacrapa!
Incaodovadacachiarsi"doaravertizarile"trebuiescluateinseriossireparate!
Deciadaugamsemnaturafunctieiinaintealuimain():

intis_prime(unsignedint)

Atentie:semnaturauneifunctiinuarenevoiedeidentificatoriiparametrilor,cidoardetipuldedate!
Acumrecompilammain.c(prime.cedejacompilat,sinuamschimbatnimicinacelfisier,deciprime.oelafeldeutilcasiinainte):

gcccWallmain.c

silinkam:
gccoprime.exeWallmain.oprime.o

Perfect,prime.exefunctioneaza.Totusi,avemoproblema:peparcursvommaiadaugafunctiiinprime.cpentrulucrulcunumereleprime.
Problemaesteca
1.intoatecelelaltefisiere.cundevomvreasaapelamacelefunctii,vatrebuisadeclaramfunctiilecuexactaceleasisemnaturicainprime.c.
Dacacumvaosemnaturaauneifunctiiseschimbainprime.c,vatrebuisacautamintoatecelelaltefisieresisamodificamsemnatura

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

9/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
2.dacavremsaledamprieteniloracestfisierprime.c,lucrulpentrueivadevenisimaidificil,deoarecetrebuiesafiemereulacurentcu
schimbarilepecarelefaciinprime.c,dacalefaci
Atuncicandtuschimbisemnaturauneifunctiiprecumis_prime()careesteganditaafireutilizabila(detinesichiarsidealtiprogramatori),
iarschimbareaofaciasaincattotiutilizatoriitaivortrebuisasischimbecodullorsursaincareapeleazaaceafunctie,vorbimdespre
"breakingthebackwardscompatibility"(abreviatBC).
ImpotrivaBCbreakingnuteajutadecatsatigandestimaibineantetelefunctiilordinstart.Inrest,putemusuramuncacelorlaltipreluand
asupranoastranunumairesponsabilitateaasupracoduluidinprime.c,cisiasemnaturilorfunctiilordinprime.c.
Sidupacumstii,semnaturilefunctiilorsescriuinfisiereheader.h.Decivomscrieunnoufisierprime.h:

#ifndefPRIME_H_
#definePRIME_H_
//checkifanumberisprime,return0ifitisn't,1ifitis
intis_prime(unsignedint)
#endif//doubleinclusionguard

definitiaunuisimbolcuajutorpreprocesoruluiprecumPRIME_H_maisussenumesteogardaimpotrivaincluderiiduble.Dacavreun
utilizator(adicaunaltprogramator)alviitoareinoastrebiblioteci"prime"includedingresealasaudinnestiintadedouaorifisierul"prime.h",
aceastagardavaaveacaefectsarireapesteintregulcontinutalfisierului,siastfelnuvomvedeaeroridelacompilatordegenul"is_prime
alreadydefined".
acum,putemstergedeclaratiafunctieiis_primedinmain.csifolosifisierulprime.hinschimb:

#include<stdio.h>
#include<stdlib.h>
#include"prime.h"
intmain(void){
unsignedintn
printf("numar:")
scanf("%u",&n)
if(is_prime(n)){
printf("%uesteprim",n)
}
else{
printf("%unuesteprim",n)
}
returnEXIT_SUCCESS
}

17. creareasifolosireauneibiblioteci
Haisatransformamprime.cintrobibliotecareutilizabilanumita"prime"(fisierullibprime.a)
Nimicmaisimplu:

arrcslibprime.aprime.o

Sigatabiblioteca:)
Acumputemscapadeprime.o:
rmprime.o

vomfolosiinschimbbiblioteca:

gccmain.oL.lprimeoprime.exe

Atentie:parametriiLsiliicunostidintrunpunctanterior!"."inseamna"directorulcurent",decilinkerulsevauitasiin"."dupabibliotecile
specificatecuparametriil<nume>urmatori.
Distribuireabibliotecii
Acumpotidistribuibibliotecatalibprime.a(carenuestenimicaltcevadecatoarhivacucodulobiectalluiprime.o)prietenilor.Nuuitaca
trebuiesaletrimitisifisierele.h,careinmodnormalcontinsidocumentatiafunctiilorpuseladispozitiedelibprime.
Nouatabibliotecalibprimeestelafeldebibliotecacasi"bibliotecastandardC"stdlibc(careincazuldefataesteocolectiedefisiere.a,asa
cumleaipasatlui"ld.exe"launpunctanterior).
18. TutorialdesprepointerialluiTedJensendelahttp://home.netcom.c...tr/pointers.htm
(http://home.netcom.com/~tjensen/ptr/pointers.htm)
19. vacontinua
20. ntrebriirspunsuri
1. Cumpotvedeacatamemoriefolosesteprogramulmeu?
1.inprimulrand,unprogramnufolosestememorie(cacipresupuncatereferilamemoriadelucru).unprogramdoarocupaspatiupe
hdd.memoriaocupatadeunprogramoaflicapentruoricealtfisier:clickdreaptasiproprietati(sauprogramaticcufunctiile
filesystemuluifolosit)
2.depindeceintelegiprinmemoriafolositadeunproces.Poatefimarimeaunuisegmentalprocesuluiprecumheapul,saumarimea
intreguluiproces,cumpoivedeamaijos

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

10/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
lectia:program!=proces.Subwindows,componentasistemuluideoperarenumitaPELoaderiafisierulbinar(programul)depehdd,
ilincarcainmemorie,sifacemultealtelucruriciudatepecarenicieunumilemaiamintescexact(hint:IATimportaddresstable,e
unuldinlucrurileimportante),siiltransformaintrunprocescompletizolatinRAM.Il"virtualizeaza".
Codpentruwindows(deoareceastfeldeinformaiidepinddesistemuldeoperare),autor@neagu_laurentiu:
#include<windows.h>
#include<stdio.h>
#include<psapi.h>
voidPrintMemoryInfo(DWORDprocessID)
{
HANDLEhProcess
PROCESS_MEMORY_COUNTERSpmc
//Printtheprocessidentifier.
printf("\nProcessID:%u\n",processID)
//Printinformationaboutthememoryusageoftheprocess.
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|
PROCESS_VM_READ,
FALSE,processID)
if(NULL==hProcess)
return
if(GetProcessMemoryInfo(hProcess,&pmc,sizeof(pmc)))
{
printf("\tPageFaultCount:0x%08X\n",pmc.PageFaultCount)
printf("\tPeakWorkingSetSize:0x%08X\n",
pmc.PeakWorkingSetSize)
printf("\tWorkingSetSize:0x%08X\n",pmc.WorkingSetSize)
printf("\tQuotaPeakPagedPoolUsage:0x%08X\n",
pmc.QuotaPeakPagedPoolUsage)
printf("\tQuotaPagedPoolUsage:0x%08X\n",
pmc.QuotaPagedPoolUsage)
printf("\tQuotaPeakNonPagedPoolUsage:0x%08X\n",
pmc.QuotaPeakNonPagedPoolUsage)
printf("\tQuotaNonPagedPoolUsage:0x%08X\n",
pmc.QuotaNonPagedPoolUsage)
printf("\tPagefileUsage:0x%08X\n",pmc.PagefileUsage)
printf("\tPeakPagefileUsage:0x%08X\n",
pmc.PeakPagefileUsage)
}
CloseHandle(hProcess)
}
intmain(void)
{
//Getthelistofprocessidentifiers.
DWORDaProcesses[1024],cbNeeded,cProcesses
unsignedinti
if(!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))
return1
//Calculatehowmanyprocessidentifierswerereturned.
cProcesses=cbNeeded/sizeof(DWORD)
//Printthememoryusageforeachprocess
for(i=0i<cProcessesi++)
PrintMemoryInfo(aProcesses[i])
return0
}

(http://msdn.microsof.....v=VS.85(http://msdn.microsof.....v=VS.85)).aspx)
2. Estebinesfacitypecasting?
Nu.InCnuenevoiesafaceticastinurmaunuimalloc//calloc//realloc,estechiardescurajat.
http://en.wikipedia....and_type_safety(http://en.wikipedia.org/wiki/Malloc#Casting_and_type_safety)(contribuitde:
@gnomemory)
3. CumpotcompilasifisierescriseinC++(.cpp)?

g++Wallfisier.cpp

Cutimpulartrebuisastrangaicimaitoatenotiunilesemiteoreticecuoaluradepragmatismcarenupreasuntpredateprininvatamantulromanesc,
astfelincatcinelecunoastesiintelegesapoatacomunicapemeritatecaunhomosapienscualtihomosapiensi(read:saneintelegemuniicualtii,
caintreprogramatori).

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

11/14

2/22/2015

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Dacaitiplaceacestarticolilpotiimbunatati:
caincepatorpotipuneintrebarilegatedecelecitite
caavansat,potisemnalaeventualegreseli,ambiguitati,saulucruripecareitidorestisalefistiutlainceput
Completari,corecturi,ntrebari,criticaconstructivasaumultumirisuntcadeobiceibinevenite.
Dupacesaajunslaoconcluziefinala,discutiavafistearsasiconcluziamutatanpostulinitial.Asasepoatepastratotulntrunlocsiesteusorde
urmaritsidecititdeoricineviziteazaaceastaarieaproapesaptamnal,ctsideceicarecitescacesttopicpentruprimaoara.

msmihai

Posted05December201211:51
Quote

aceastagardavaaveacaefectsarireapesteintregulcontinutalfisierului,siastfelnuvom
vedeaeroridelacompilatordegenul"is_primealreadydefined".

Aiciarmergeexplicatpescurtcefacecompilatorulcucontinutulfisierelorheader:)

pax0xFF

Posted01January201322:43

Dupaceamcititarticolul,chiarmisauclarificatunelelucruri.
Inschimbnuamintelescumpotlinkadinamic.Poatepunecinevaunexempluculegareadeundll?
Mersi.

neagu_laurentiu

Posted01January201322:47

Citestecapitolulurmator:http://msdn.microsof...9(v=vs.85).aspx(http://msdn.microsoft.com/en
us/library/windows/desktop/ms682589%28v=vs.85%29.aspx)
apoiintreabacenuintelegi.

pax0xFF

Posted01January201322:57

Amfacutundllcareafiseazaunmesajpeecran,silamapelatdinprogram.Deceprogramulareaceeasimarime(27kb)siatuncicandnuamdllsi
atuncicandamdll?
Folosinddll'uriconsumulderesursescade,sauramaneacelasi?

OriginalCopy

Posted01January201323:12
pax0xFF,on01ianuarie201322:57,said:

Amfacutundllcareafiseazaunmesajpeecran,silamapelatdinprogram.Deceprogramulareaceeasimarime(27kb)siatuncicandnuamdllsiatunci
candamdll?

Deoarececodulbinarseafln.dll,nun.exe.Sistemuldeoperareface"magicul"atuncicndPEloader(veziinpostul#1)ncarc/virtualizeaz
programulfcndulproces.
iprobabilnuainicimiideliniidecod,casobserviodiferen,inicialocridedatestaticemari.Uitteladifereneledemrimenbytes,nukb.
pax0xFF,on01ianuarie201322:57,said:

Folosinddll'uriconsumulderesursescade,sauramaneacelasi?

Pertotal,fadesistemultu,consumuldeRAMestemaimicfadelinkareastaticdoardacacel.dllesterefolositdemaimulteproceseceruleaz
nparalel.
ncearcsdeschizimaimulteinstanealeaceluiaiprogram.(vatrebuiprobabilsdeschizifoartemultecasobserviodiferen).
EditedbyOriginalCopy,01January201323:18.

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

12/14

2/22/2015
OriginalCopy

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia
Posted12January201314:13

Adugat
Quote

Apoideschidefisierul.batamintitmaisuscunotepadsiadaugailasfarsitinstructiuneapentruaschimbadirectorulcurent(comandacdvinedela
changedirectory)in"proiecte":

Motiv:http://forum.softped...8#entry12518744(http://forum.softpedia.com/topic/905084cinceput/page__st__18#entry12518744)
EditedbyOriginalCopy,12January201314:54.

andrei_kick

Posted15May201321:28

naintesacitescarticolulastatrebuisastiuc,nu?eunupreaintelegmarelucrudinarticol.cetutorial/carteimirecomanzi?multumesc
Editedbyandrei_kick,15May201321:29.

MarianG

Posted16May201300:00

tuvreisainvetipestenoapte?

andrei_kick

Posted16May201309:00

Linuxprogramming

Linuxkernel

Exedll

Gcc

amintrebatdacainaintedeacitiarticolultrebuiesastiucsausunteuidiotsinuintelegarticolul.dacaimitrebuiec,varogsaimizicetiocartesau
untutorialbun.multumesc

neagu_laurentiu

Posted16May201309:18
andrei_kick,on16mai201309:00,said:

ocartesauuntutorialbun

Acest"bun"erelativsitinedefiecarepersoanainparte.Eunupotgarantacarevaprindelatine(nicinusuntprofesor)deaceeaitirecomandsaintri
peamazon.com,alegicatevaeditii(legasestisipenetinlumealarga)siastfeltudeciziincunostintadecauza.
Editedbyneagu_laurentiu,16May201309:19.

OriginalCopy

Posted16June201311:21

Adugat"Sfatpentruliceeni:"lapunctul1.

EnachescuAlin

Posted30December201320:07

Foartebuntutorialul.
AmramasuimitsavadceseaflainspatelecoduluiCpecarenoiilscriem.
Numammultumitsavaddoarceeinspateleunuiprogramcareafiseaza"helloworld"simamuitatsilaalteproblememaimarisiamramasuimit.
EDIT:Totusiamcatevanelamuriri.Fisierulmain.oartrebuisacontinacodulbinar?Caasvreasavaddincuriozitatesicodulbinaralunuiprogram
C.
EditedbyEnachescuAlin,30December201320:10.

adrian93

Posted30December201320:50

Piconinecodmainrelocabil,obinutdupasamblare.Dacvreisveziceeaceenel(idacetipeLinux),ipoida
objdumpsfisier.o

nsnupreae...distractiv,pentrucosvezicamceerelevantnhexa(nparteastngaaparocteiiafiainASCII,darniciaanupreateajut
foartemult).
ncearcscauiparteade.rodata,acoloosfie_chestiuni_maiclare

,maialesdacaiunmacroprincod.

Celmaiinteresantesldezasamblezi,(parametruldsaudisassemblelaobjdump),pentruavedeacodulnlimbajdeasamblare.
Editedbyadrian93,30December201321:01.

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

13/14

2/22/2015

EnachescuAlin

LucruripecareoriceprogramatorartrebuisletieForumulSoftpedia

Posted30December201320:54

Merge.Interesantceseaflaacolo...dartotusinusepoatevedeacodulbinaralunuifisierC?

OriginalCopy

Posted30December201321:21

Coduledejabinar,dacldeschizi(nwindowscunotepad++itejociprinmeniucunitepluginuriparc)veivedeafixcodulbinar.
CeeacevreiestesvezireprezentareanASCII(adicsvezicaracterele'0'i'1')acoduluibinar.
nlinux:

xxdbfile.o

EnachescuAlin

Posted30December201321:26

Paieuastavreausavad,fisierulcucaractere'0'si'1'daramWindows,iarcomandapecaremiadatoAdrianebuna,afiseazacevapeacolodarnu
binar.

OriginalCopy

Posted30December201321:48
EnachescuAlin,on30decembrie201321:26,said:

Paieuastavreausavad,fisierulcucaractere'0'si'1'daramWindows,iarcomandapecaremiadatoAdrianebuna,afiseazacevapeacolodarnubinar.

Stimateutilizator.
iamdatiosoluiepentruwindows.Nutrebuiedectsciteticeamscris.
iiamspusicnuvreisiafiezebinar(binarecevezicndldeschizicunotepad),civreisiafiezereprezentareanASCIIa
coninutuluibinar.
"binar"nseamncunbitocup1bit.Oriunbitnupoatefivizualizat,epreamic.
Atuncicndvreisvezitext,celmaisimplumodeslvezifolosindstandardulASCII.
nsunsimbolnASCIIocup7bii(hai8).DecicasvezireprezentareanASCIIaaceluiunbit,trebuieslumflila8bii,caspoivedean
fapt,ceva!
Bitul0vafireprezentatcabyteul00110000iarbitul1vafireprezentatcabyteul00110001(veziaicitabelul
http://en.wikipedia....able_characters(http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters)).
AstadacaiuneditortextpentruASCII.Dacnai(glum,rzi),vatrebuis"umfli"acelbit0respectiv1lanumruldebiipentruceeacepoate
interpretaeditorultutext.

Reclam
BunvenitpeForumulSoftpedia!

BacktoArticolesicodsursa

Page1of2
ForumulSoftpedia ProfessionalZone Programming C&C++ Articolesicodsursa

ForumulSoftpedia

> ProfessionalZone

> Programming

> C&C++

> Articolesicodsursa

http://forum.softpedia.com/topic/899129lucruripecareoriceprogramatorartrebuisaletie/

14/14

S-ar putea să vă placă și