[TÓNLIST spila] DOUG LLOYD: Allt í lagi. Konar undarlega efni, ekki satt? Galdur númer. Hvað Doe hann við þegar hann er tala um galdur númer? Jæja, sumir af the programs sem við höfum skrifað í CS50 svo langt hafa fengið sumir furðulegur tölur konar kastað í þeim. Kannski vegna við gerum ekki alveg að skilja núna. Til dæmis, í Mario vandamál, við capped hæð pýramídans við 23. Við sagði skýrt þér getur ekki farið hærra en 23. En hvað þýðir 23 meina? Jæja, ef þú lesið sérstakur vandlega, þér gæti hafa séð að Ástæða þess að við capped það á 23 er vegna þess að venjulegu hæð af flugstöðinni glugga er 24. Og svo ef við höfum pýramída vera hærri en það, það gæti gert þetta undarlegt hlutur þar sem hún liggur á skjánum. Og þú veist, hvað þýðir að meina í samhengi, ekki satt? Er merking 23 augljóst að einhver sem lítur á kerfið og kannski hefur aðra Stærð endastöðvar? Örugglega ekki. Það virðist eins og OK. Ja, hvers vegna er það bara minna en 23? Almennt, það er góður um slæma vana raun að skrifa fasta í kóðann þinn. Í aðgerð svo, þegar þú gerir í raun skrifa stöðug í kóðanum þínum, það er stundum nefnt með galdur númer, sem er eitthvað við viljum almennt að reyna að forðast. Til dæmis, við skulum taka a líta á þessari einföldu aðgerð hér. Vitanlega er það engin gögn tegund í C kallast kortið eða þilfari. Svo bara bera með mér. Það er lítill hluti af sauðakóðanum blandað hér. Þetta er fall sem heitir takast kort sem virðist tekur þilfari sem viðfang hennar, og mun framleiðsla mér einu korti. Og ég er að gera eitthvað hér þar sem ég hafa lykkju sem liggur frá 0 til 52, og ég takast kort. Jæja, þá erum við með galdur Fjöldi hér, ekki satt. Sérðu hvað galdur númer er? Eða fleiri mikilvægur, gera þér sjá hvað vandamálið er hér? Sérstaklega ef þetta er bara ein aðgerð í eigin skrá sína í a möppuna sem inniheldur fullt af mismunandi skrár, sem hver um sig gerir annar hlutur til spilastokk. Kannski stokkar það þá, eða fjallar hönd fimm spil í stað einu korti. Sérðu hvað á Vandamálið gæti verið hér? Sérðu galdur númer Ég hef sprautað inn kóðann? Það er 52, ekki satt. Eins og innsæi þú veist líklega, OK. Eins og venjulega þilfari kort inniheldur 52 spil. En í áætlun okkar, það er bara konar fljótandi í kring í það. Það er eins og allt í einu það er 52. Ein leið til að leysa þetta Vandamálið er að gera þetta. Við erum mjög skýrt núna kalla út þilfari stærð sem 52. Það gefur það innsæi aðeins meira sem þýðir að þegar í for lykkju síðar við þá að segja, ég er minna en þilfari stærð. Það virðist bara betra en að segja 52. Nú þetta þýðir í raun að leysa vandann. Það er að gefa sumir táknræn sem þýðir að föstu. En það er eins konar raun kynna annað vandamál sem gæti ekki strax í ljós. Jafnvel ef þessi breyta er lýst globally-- Manstu hvað það þýðir að þegar við lýsa breytu heimsvísu móti á staðnum? Jafnvel þótt við lýsa breytu heimsvísu, hvað ef það er Annað hlutverk í suite okkar aðgerðir að takast á við kortið meðferð sem óvart breytingar þilfari stærð, eða það eykur það með 1 eða minnkar það um 1. Það gæti stafa vandræði, ekki satt? Sérstaklega ef við erum að fást við að setja spil þar uppstokkun fulla þilfari er krafist. Ef þilfari stærð minnkar með því að 1, til dæmis, til 51, við erum í raun ekki uppstokkun öll spilin hugsanlega. Við erum að fara einn af þeim út. Og að verðmæti gæti kannski verið spáð eða nýtt af vondu leikari. C veitir það sem er kallað Preprocessor tilskipun, sem er einnig kallað þjóðhagsleg fyrir búa táknræn fastar. Og í raun, hefur þú nú þegar séð Preprocessor tilskipun, jafnvel ef þú hefur ekki heyrt það kallað að með #include. Það er annað dæmi um þjóðhagsleg eða Preprocessor tilskipun. The leiðin til að búa til táknræn fastar, eða gefa nafn til fasti þannig að það hefur meira sem þýðir, er eins og hér segir. #define, nafn, skipti. Mjög mikilvægt til hliðar hér mjög fljótur. Ekki setja semíkommu á enda #defines þínum. Svo það er #define, nafn, skipti. Þegar kerfið er tekið saman, hvað raunverulega gerist er þýðanda ef fara að fara í gegnum kóðann þinn og skipta öllum tilfellum af orðið "nafn" við hvað sem þú setja sem skipti. Hliðstæðri, ef #include er tegund af líkur til að afrita og líma, þá er #define konar svipað að finna og skipta, ef þú hefur einhvern tíma notað þann möguleika í ritvinnsla program, til dæmis. Svo til dæmis, ef ég #define pi sem 3.14159265, ef þú ert betur stærðfræðilega hneigðist og þú skyndilega sjá 3.14159265 fljúga um í kóðanum þínum, þú veist líklega að það er að tala um pi. En kannski getum við gefa það lítið meira táknræn merking. Og við getum í staðinn sagt #define pí eins og þessi munnfylli af tölum að ég ætla ekki að halda lesa aftur og aftur. Og hvað er að fara að gerast þá á saman tíma er þegar forritið er saman, það fyrsta sem mun gerast er að það mun fara í gegnum og það mun koma í stað í hvert skipti það sér fjármagns P, höfuðborg I, það verður bókstaflega að skipta um það með 3.14 og svo framvegis, þannig að þú þarft ekki að slá það á hverjum tíma en program samt hefur virkni sem þig búast við, vegna þess að þú ert að vinna með notfæra, margfalda, skipta, hvað sem það er með pí. Þú ert ekki takmörkuð við þetta skipta um símanúmer. Til dæmis gæti ég #define Auðvitað eins og band CS50. Í þessu tilfelli, þegar Námið er unnin, #define mun fara í gegnum númer, skipta í hvert skipti það sér "námskeið" með strengnum CS50. Þú munt taka eftir hér líka að ég oft #define allt mitt skilgreint táknræn fastar, svo að segja, eru alltaf í öllum húfur. Það er samningur. Það er ekki nauðsynlegt. Ástæðan almennt fólk notar allt höfuðborgum þegar þeir eru #defining er bara að gera það í raun ljóst að Þetta tiltekna þáttur númerið mitt er skilgreind stöðug. Ef það var lágstafir, það er hægt að það gæti verið ruglað saman við breytu. Og það er líklega ekki gott að gera. Svo þetta tiltekna Lausnin er miklu betra en annaðhvort fyrri. Ef ég fyrst #define þilfari stærð 52, þá Nú nota ég 52, eða þilfari stærð hér er mikið meira innsæi og mikið öruggari. Þú getur ekki breytt fasti. Þú getur ekki sagt 52 plús plús. Það er ekki að fara að umbreyta það til 53. Þú getur ekki breytt 52 í eitthvað. Þú getur breytt breytu sem gildi er 52, sem var fyrsta festa við höfðum áður. Og þú gætir aukið sem breyta 53. En þú getur ekki sagt 52 plús plús og hafa þessi skyndilega snúið 52 í 53. 52 er alltaf 52. Og svo þú getur ekki óvart breytt þilfari stærð hér með því að notfæra það, Annar góður hlið Áhrifin af þessari þó er að þú ert meðvituð um að ekki öll lönd um allan heim nota spilastokk stærð 52? Til dæmis, það er mjög algengt í Þýskaland að nota þilfari stærð 32, þar sem þeir ræma út sumir í neðri fjárkorta. Og í þessu tilfelli, I langaði til hafnar suite minn aðgerðir sem eiga við kort meðferð til Þýskalands. Ég gæti í fyrsta lagi við sýndi, að fara og skipta allt dæmi um 52 í númerið mitt með 32. En hér, ef ég #define þilfari stærð eins 32 á the mjög toppur af kóða mitt, ef ég þarf að breyta því, ég get bara fara og breyta því eitt. Endurþýða númerið mitt, og allt í einu það elskulega gegnum. Í raun getum við breytt þilfari stærð til hvaða gildi við viljum. Get ég þú hefur áhuga á a leikur á þilfari stærð pallbíll? Ég er Doug Lloyd. Og þetta er CS50.