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 tendens til at skrive printf hej verden eller printf 3 00:00:04,010 --> 00:00:08,160 hej procent s ganske ofte i sammenhænge hvor jeg ønsker at udskrive en 4 00:00:08,160 --> 00:00:11,360 streng, undertiden beder bruger en del af denne streng. 5 00:00:11,360 --> 00:00:14,980 Nå, ville det ikke være rart, hvis vi skabte en funktion af vores egne kaldes, 6 00:00:14,980 --> 00:00:19,900 sige, udskrive navn, hvis formål i livet er simpelthen at udskrive goddag komma 7 00:00:19,900 --> 00:00:24,560 så-og-så ved at acceptere den og så som et argument til denne funktion? 8 00:00:24,560 --> 00:00:29,220 Vi kan erklære en funktion af vores egne lige som vi kan i Scratch som følger. 9 00:00:29,220 --> 00:00:35,280 >> Med andre ord, tror jeg gerne vil printf dit navn og så beder brugeren 10 00:00:35,280 --> 00:00:39,470 for hans eller hendes navn med snor s lig getString. 11 00:00:39,470 --> 00:00:42,060 Og så vil jeg kalde en funktion kaldet print navn 12 00:00:42,060 --> 00:00:44,340 passerer en s som sit input. 13 00:00:44,340 --> 00:00:47,770 >> Nu desværre er der ingen funktion kaldet print navn i C eller i 14 00:00:47,770 --> 00:00:48,950 Den CS50 biblioteket. 15 00:00:48,950 --> 00:00:51,220 Men ligegyldigt, fordi vi kan gøre det selv. 16 00:00:51,220 --> 00:00:54,560 At erklære en funktion af vores egne og derefter gennemføre det, kan vi simpelthen gøre 17 00:00:54,560 --> 00:00:59,000 lidt plads i denne fil og erklære denne funktion som følger, ugyldig - 18 00:00:59,000 --> 00:01:01,900 tilkendegiver, at funktionen ikke er faktisk kommer til at returnere noget, 19 00:01:01,900 --> 00:01:03,890 selv om det vil have en bivirkning - 20 00:01:03,890 --> 00:01:08,030 udskrive navn, og så lad os præcisere i parenteser at udskrive navn forventer et 21 00:01:08,030 --> 00:01:09,680 argument snor type. 22 00:01:09,680 --> 00:01:12,180 Og generelt, vil vi tænke af denne som et navn. 23 00:01:12,180 --> 00:01:15,140 >> Og lad os åbne vores tandbøjle og lukke vores tandbøjle. 24 00:01:15,140 --> 00:01:21,930 Og så printf inde hej komma procent s nye linje komma navn. 25 00:01:21,930 --> 00:01:24,570 Med andre ord, selv om dette Funktionen er kun én linje kode, det 26 00:01:24,570 --> 00:01:27,290 har nu nogle højere niveau formål at udskrive 27 00:01:27,290 --> 00:01:28,950 en persons navn med en hilsen. 28 00:01:28,950 --> 00:01:33,115 >> Nu inde i main, bemærke, at jeg er ringer print navn ved at bestå s. 29 00:01:33,115 --> 00:01:35,830 Og så synes jeg nu at have et komplet program. 30 00:01:35,830 --> 00:01:38,650 Den eneste forskel er fra andre vi har skrevet, er, at ikke alene 31 00:01:38,650 --> 00:01:42,480 dette program har main, den har også en erklæring og implementering af 32 00:01:42,480 --> 00:01:44,740 print navn, en funktion af min egen. 33 00:01:44,740 --> 00:01:49,505 >> Lad os nu kompilere mit program med make funktion nul, og køre det med prik 34 00:01:49,505 --> 00:01:51,080 skråstreg funktion nul. 35 00:01:51,080 --> 00:01:53,390 Når du bliver bedt om mit navn Jeg vil skrive i David. 36 00:01:53,390 --> 00:01:55,830 Og jeg faktisk er mødt med "Hello, David." 37 00:01:55,830 --> 00:02:00,160 >> Nu viser det sig, jeg meget bevidst erklæret print navnet over hoved, 38 00:02:00,160 --> 00:02:03,860 derved at fortælle C på forhånd, at der findes en funktion kaldet print 39 00:02:03,860 --> 00:02:06,930 navn, så jeg kunne bruge det senere i main. 40 00:02:06,930 --> 00:02:11,610 Nu havde jeg i stedet sætte print navn på bunden af ​​min fil, som ærligt jeg 41 00:02:11,610 --> 00:02:15,310 burde nok gøre, så vigtigste rester den første ting, jeg eller 42 00:02:15,310 --> 00:02:18,450 en anden bruger ser i min kode, det viser sig, at min kode er 43 00:02:18,450 --> 00:02:19,780 ikke kommer til at kompilere. 44 00:02:19,780 --> 00:02:23,610 >> Specielt, hvis jeg gå tilbage til mit terminal vindue og køre lave funktion 45 00:02:23,610 --> 00:02:26,120 nul nu mærke til, at jeg råbte på. 46 00:02:26,120 --> 00:02:30,340 Hvis jeg rulle op i min terminal vindue, Jeg vil se denne første fejl i rød, 47 00:02:30,340 --> 00:02:33,120 underforstået erklæring af Funktionen print navn. 48 00:02:33,120 --> 00:02:34,220 >> Nu, hvad betyder det? 49 00:02:34,220 --> 00:02:37,190 Tja, selvom jeg har implementeret udskrive navn i denne fil, har jeg ikke 50 00:02:37,190 --> 00:02:40,080 implementeret det, før jeg har brugt det i main. 51 00:02:40,080 --> 00:02:43,160 Nu, vi kunne gå tilbage til den gamle version og sætte print navns 52 00:02:43,160 --> 00:02:44,450 implementering op øverst. 53 00:02:44,450 --> 00:02:48,730 >> Men jeg kan i stedet bare give C et vink at der er en funktion til at komme. 54 00:02:48,730 --> 00:02:55,390 Konkret over hoved, jeg kan erklære udskrive navn ligesom jeg gjorde tidligere, men 55 00:02:55,390 --> 00:02:59,450 afslutte overensstemmelse med et semikolon, hvorved lover at gennemføre, men endnu ikke 56 00:02:59,450 --> 00:03:02,180 faktisk gennemførelse af funktion kaldet print navn. 57 00:03:02,180 --> 00:03:05,860 Jeg kan derefter få hoved på toppen af ​​min fil som jeg håbede, og jeg kan faktisk 58 00:03:05,860 --> 00:03:07,440 gennemføre print navn i bunden. 59 00:03:07,440 --> 00:03:12,860 >> Hvis jeg vender nu tilbage til min terminal vindue og kompilere funktion nul med fabrikat, 60 00:03:12,860 --> 00:03:14,390 denne gang er det kompilerer. 61 00:03:14,390 --> 00:03:18,240 Og hvis jeg kører det med prik skråstreg-funktion nul give mit navn, jeg er 62 00:03:18,240 --> 00:03:20,650 mødt som "Hello, David." 63 00:03:20,650 --> 00:03:22,268