1 00:00:00,000 --> 00:00:00,160 2 00:00:00,160 --> 00:00:04,010 >> SPEAKER 1: Så jeg føler at jeg har en tendens til å skrive printf hello world eller printf 3 00:00:04,010 --> 00:00:08,160 hallo prosent er ganske ofte i sammenhenger hvor jeg ønsker å skrive ut en 4 00:00:08,160 --> 00:00:11,360 streng, noen ganger spør Brukeren del av strengen. 5 00:00:11,360 --> 00:00:14,980 Vel, ville det ikke vært fint hvis vi opprettet en funksjon av vår egen kalt, 6 00:00:14,980 --> 00:00:19,900 si, skrive ut navn, som har som formål i livet er rett og slett å skrive hei komma 7 00:00:19,900 --> 00:00:24,560 så-og-så ved å godta den så-og-så som et argument til den funksjonen? 8 00:00:24,560 --> 00:00:29,220 Vi kan erklære en funksjon av våre egne akkurat som vi kan i Scratch som følger. 9 00:00:29,220 --> 00:00:35,280 >> Med andre ord, antar jeg vil gjerne printf ditt navn og deretter be brukeren 10 00:00:35,280 --> 00:00:39,470 for hans eller hennes navn med streng s tilsvarer GetString. 11 00:00:39,470 --> 00:00:42,060 Og da vil jeg kalle en funksjon kalles print navn 12 00:00:42,060 --> 00:00:44,340 passerer en s som sin inngang. 13 00:00:44,340 --> 00:00:47,770 >> Nå er dessverre er det ingen funksjon kalles print navn i C eller i 14 00:00:47,770 --> 00:00:48,950 Det CS50 biblioteket. 15 00:00:48,950 --> 00:00:51,220 Men uansett, fordi vi kan gjøre det selv. 16 00:00:51,220 --> 00:00:54,560 Å erklære en funksjon av vår egen og deretter implementere det, kan vi bare gjøre 17 00:00:54,560 --> 00:00:59,000 noen plass i denne filen og erklære denne funksjonen som følger, annullert - 18 00:00:59,000 --> 00:01:01,900 som betyr at funksjonen er ikke faktisk kommer til å returnere noe, 19 00:01:01,900 --> 00:01:03,890 selv om det vil ha en bivirkning - 20 00:01:03,890 --> 00:01:08,030 skrive ut navn, og så la oss spesifisere i parenteser som print navn forventer en 21 00:01:08,030 --> 00:01:09,680 argument av typen streng. 22 00:01:09,680 --> 00:01:12,180 Og generelt, vil vi tenke av det som et navn. 23 00:01:12,180 --> 00:01:15,140 >> Og la oss åpne våre brace og lukke våre seler. 24 00:01:15,140 --> 00:01:21,930 Og så printf inne hallo komma prosent nye linje komma navn. 25 00:01:21,930 --> 00:01:24,570 Med andre ord, selv om denne Funksjonen er bare en linje med kode, det 26 00:01:24,570 --> 00:01:27,290 gjør nå har noen høyere nivå formål å skrive ut 27 00:01:27,290 --> 00:01:28,950 noens navn med en hilsen. 28 00:01:28,950 --> 00:01:33,115 >> Nå innsiden av hoved, merker at jeg er kalle utskrifts navn etter bestått en s. 29 00:01:33,115 --> 00:01:35,830 Og så jeg synes nå å ha et komplett program. 30 00:01:35,830 --> 00:01:38,650 Den eneste forskjellen er fra andre vi har skrevet er at ikke bare 31 00:01:38,650 --> 00:01:42,480 dette programmet har hoved, har det også en erklæring og gjennomføring av 32 00:01:42,480 --> 00:01:44,740 print navn, en funksjon av min egen. 33 00:01:44,740 --> 00:01:49,505 >> La oss nå kompilere programmet mitt med sminke funksjon null, og kjøre den med prikk 34 00:01:49,505 --> 00:01:51,080 slash-funksjonen null. 35 00:01:51,080 --> 00:01:53,390 Når du blir bedt om navnet mitt Jeg skal skrive i David. 36 00:01:53,390 --> 00:01:55,830 Og jeg faktisk er møtt med "Hei, David." 37 00:01:55,830 --> 00:02:00,160 >> Nå viser det seg jeg veldig bevisst erklærte print navnet ovenfor hoved, 38 00:02:00,160 --> 00:02:03,860 derved å fortelle C på forhånd at det Det finnes en funksjon kalt print 39 00:02:03,860 --> 00:02:06,930 navn slik at jeg kunne bruke det senere i hoved. 40 00:02:06,930 --> 00:02:11,610 Nå hadde jeg i stedet sette utskrifts navn på bunnen av filen min, så ærlig jeg 41 00:02:11,610 --> 00:02:15,310 sannsynligvis bør gjøre slik at hoved restene den første tingen som jeg eller 42 00:02:15,310 --> 00:02:18,450 en annen bruker ser i min kode, det viser seg at koden min er 43 00:02:18,450 --> 00:02:19,780 ikke kommer til å kompilere. 44 00:02:19,780 --> 00:02:23,610 >> Spesielt hvis jeg går tilbake til min terminalvindu og kjøre gjør funksjon 45 00:02:23,610 --> 00:02:26,120 null nå, merker at jeg skrek til. 46 00:02:26,120 --> 00:02:30,340 Hvis jeg blar opp i min terminalvindu, Jeg vil se denne første feilen i rødt, 47 00:02:30,340 --> 00:02:33,120 implisitt erklæring funksjon print navn. 48 00:02:33,120 --> 00:02:34,220 >> Nå, hva betyr det? 49 00:02:34,220 --> 00:02:37,190 Vel, selv om jeg har implementert skrive navnet i denne filen, har jeg ikke 50 00:02:37,190 --> 00:02:40,080 implementert det før jeg har brukt det i hoved. 51 00:02:40,080 --> 00:02:43,160 Nå kan vi gå tilbake til den gamle versjon og sette utskrifts navns 52 00:02:43,160 --> 00:02:44,450 implementeringen opp toppen. 53 00:02:44,450 --> 00:02:48,730 >> Men jeg kan i stedet bare gi C et hint at det er en funksjon som kommer. 54 00:02:48,730 --> 00:02:55,390 Spesielt ovenfor hoved kan jeg erklære skrive navn på samme måte som jeg gjorde tidligere, men 55 00:02:55,390 --> 00:02:59,450 avslutte linjen med et semikolon, og dermed lover å implementere, men ennå ikke 56 00:02:59,450 --> 00:03:02,180 faktisk implementere funksjonen kalles print navn. 57 00:03:02,180 --> 00:03:05,860 I kan da ha hoved øverst min fil som jeg håpet, og jeg kan faktisk 58 00:03:05,860 --> 00:03:07,440 implementere print navn nederst. 59 00:03:07,440 --> 00:03:12,860 >> Hvis jeg nå tilbake til min terminalvindu og rekompilere funksjon null med make, 60 00:03:12,860 --> 00:03:14,390 denne gangen er det kompilerer. 61 00:03:14,390 --> 00:03:18,240 Og hvis jeg kjører det med dot slash-funksjon null å gi mitt navn, er jeg 62 00:03:18,240 --> 00:03:20,650 hilst som "Hei, David." 63 00:03:20,650 --> 00:03:22,268