3: C forritun og bendar Flashcards
Gagnatög í C
Heiltölutög
– char,int
Kommutölutög
– float,double
Breytar (modifiers):
– short
– long
Víðværar breytur (global)
– Skilgreindar utan falla, aðeins sýnilegar í föllum í skránni
– Víðværar breytur með extern eru sjáanlegar fyrir utan skránna
– Fastar eru skilgreindir með const
Kyrrlegar breytur (static)
– Skilgreindar með static
– Halda gildi sínu milli keyrsla á falli
Virkjar (operators) í C
Allir þeir sömu og í Java:
– Útreikningsvirkjar
+, −, *, /, %, &, |, ^, «,»_space;
– Samanburðarvirkjar
==, <, <=, >, >=, !=, &&, ||, !
– Gildisveitingarvirkjar
=, ++, −−, +=, −=, *=, /=, %=
– Aðrir virkjar
a?b:c, a,b
a?b:c
Þríundarvirkji, a notað sem sanngildi, ef satt þá b skilað, annars c skilað (if setning í einni aðgerð)
a,b
Framkvæmir a og b í röð, skilar b
Grunneiningin í C
– Keyrsla hefst í main fallinu
– Forritasöfn saman standa af föllum
– Öll vinnsla fer fram í föllum
– Í Java er klasi (class) grunneiningin
Skilar yfirleitt einu gildi en breyttist og núna :
Skilatagið void þýðir að engu er skilað
Bendar (pointers)
Breyta sem geymir vistfang sem gildi
Fáum vistfang breytu með:
&-virkjanum
Fáum gildi tilvísunar (dereferencing) með:
*
Gildið NULL er vistfang á engu minnishólfi
Bendir sem inniheldur NULL bendir ekki á neitt
Fáum keyrsluvillu ef * er beitt á bendi sem inniheldur NULL
Margir bendar geta bent á sama minnishólfið
Kallast samnefni (aliasing) og er algeng uppspretta villa
Í C eru öll viðföng send sem gildi (call by value), hvernig virkar það og afhverju
– Þegar kallað er á fallið er viðfangsgildið afritað yfir ístaðværa breytu í fallinu
– Tryggir það að föll geta ekki breytt viðfangsbreytum í köllunarforrit
Hvað ef við viljum breyta gildi viðfangsins?
Senda tilvísun (bendi) á upphaflegu breytuna og breyta því sem hún bendir á!
Hvernig virkar kall með tilvísun (call by reference)
Viðfangið er bendir á breytu
Hækkum svo það sem hún bendir á
– Þurfum þá að senda inn vistfang á breytu
Notum benda á ýmsa vegu í C:
-Senda stóra gagnahluti inn í föll án þess að afrita þá
– Vinna með kviklegt (dynamic) minni
– Í kvikum gagnagrindum
– Bendar geta vísað á föll
Bendar gera forrit mun sveigjanlegri
– Geta lagað sig að aðstæðum á keyrslutíma
Hættur í notkun benda:
Bendar þurfa að vera gildir (valid)
– Þurfa að benda á löglegt minnishólf sem forritið hefur umráð
yfir
Færsla (structure) er ?
samsett úr tengdum gagnagildum
Vísum í einstök svið (fields) með?
.-virkjanum
p->eink, sem er jafngilt
(*p).eink
Tengdir listar samanstanda af ?
hnútum (nodes)
Hnútur inniheldur?
gögn og bendi á næsta hnút
Til að geta unnið með hnút þurfum við bendi á hann:
Sjálfstæða bendabreytu, eða next-bendinn í öðrum hnúti
malloc
memory allocation
Hvað er GDB?
GDB er skipanalínuforrit til að rekja sig í gegnum forrit
Hvernig notum við GDB?
• Þýðum forritið með -g í gcc
• Keyrum forritið með: gdb ./forrit
• Byrjum á að setja rofstaði (breakpoints) í forritinu (break)
• Keyrum svo forritið (run)
C forrit getur náð í viðföngin sem það var keyrt með, hvað eru argc og argv
– argc inniheldur fjölda viðfanga
– argv er strengfylki með viðföngunum
Stærri C forrit eru oftast brotin upp í margar skrár, afhverju?
Hvert fall í sérstakri skrá
Einfaldar þýðingu