[Musik spelar] DAVID J. MALAN: Okej. Detta är CS50 och detta är början på vecka två. Och du kommer ihåg att över Sedan ett par veckor, vi har infört dator vetenskap och, i sin tur, programmering. Och vi började historien med hjälp av Scratch, som grafiska språket från MIT Media Lab. Och sedan senast, förra veckan, gjorde vi införa en higher-- en lägre nivå språk känt som C, något som är rent text. Och faktiskt, sista gången vi utforskas i det sammanhanget ett antal begrepp. Detta minns, var mycket första programmet vi tittat på. Och detta program, helt enkelt, skriver ut, "Hej, världen". Men det finns så mycket problem magi pågår. Det är det här #include med dessa vinkeljärnen. Det finns int. Det finns (void). Det finns parenteser, klamrar, semikolon, och så mycket mer. Och så minns att introducerade vi Scratch så att vi kunde, i idealfallet, se förbi att syntax, de saker som är verkligen inte allt som intellektuellt intressant men tidigt är absolut, lite knepigt att linda dig runt. Och, faktiskt, ett av de vanligaste saker tidigt på i en program klass, särskilt för de mindre bekväm, är att bli frustrerad av och trippade upp av vissa syntaktiska fel, för att inte tala logiska fel. Och så bland våra mål idag, faktiskt, kommer vara att utrusta dig med några problemlösning tekniker för hur att bättre lösa problem själva i form av felsökning. Och du minns också att miljö som vi införde förra gången kallades CS50 IDE. Detta är webbaserad programvara som kan du programmera i molnet, så att säga, och samtidigt hålla alla dina filer tillsammans, som vi återigen kommer i dag. Och minns att vi revisited dessa frågor här, bland dem funktioner och loopar, och variabler och booleska uttryck, och villkor. Och faktiskt några fler att vi översatt från världen av Scratch till en värld av C. Men de grundläggande bygg block, så att säga, var verkligen fortfarande samma förra veckan. Faktum är att vi egentligen bara hade en olika pusselbit, om man så vill. I stället för att lila spara blocket, vi istället hade printf, vilket är denna funktion i C som kan du skriva ut något och formatera den på skärmen. Vi introducerade CS50 Bibliotek, där du Nu har till ditt förfogande get_char, och get_int, och get_string, och några andra funktioner som väl, via vilken du kan få input från användarens egen tangentbord. Och vi tog också en titt på saker som dessa-bool och röding, och dubbel, flyta, int, long_long sträng. Och det finns även andra datatyper i C. Med andra ord, när du deklarerar en variabel för att lagra ett visst värde, eller när du genomför en funktion som returnerar ett visst värde, Du kan ange vad typ av värde som är. Är det en sträng, som en sekvens av tecken? Är det ett nummer, som ett heltal? Är det en flyttals värde, eller liknande? Så i C, till skillnad från Scratch, vi faktiskt började att ange vilken typ av data vi tillbaka eller använder. Men, naturligtvis, sprang vi även i vissa grundläggande begränsningar av datorer. Och framför allt, detta språk C, minns att vi tog en titt på heltalsspill, verkligheten att om du bara har en ändlig mängd minne eller, närmare bestämt, ett ändligt antal bitar, kan du bara räkna så högt. Och så vi tittat på det här exemplet här varigenom en räknare i ett flygplan, faktiskt, om det körs tillräckligt länge skulle svämma över och resulterar i en programvara en fysisk potential fel. Vi har också tittat på flytande punkt vaghet, verkligheten att med endast ett ändligt antal bitar, oavsett om det är 32 eller 64, Du kan endast ange så många siffror efter ett decimalkomma, varefter du börjar få oprecis. Så till exempel, en tredjedel i värld här, i vår mänskliga världen, vi vet är bara ett oändligt antal av 3s efter decimalkommat. Men en dator kan inte nödvändigtvis representerar ett oändligt antal siffror om du bara låta det några begränsad mängd information. Så inte nog med att vi utrustar dig med större kraft när det gäller på hur du kan uttrycka dig på ett tangentbord i form av programmering, vi begränsat också vad du faktiskt kan göra. Och faktiskt, buggar och misstag kan uppstå från dessa typer av frågor. Och faktiskt, bland de ämnen idag kommer att vara som felsökning ämnen och faktiskt ser under huven på hur saker och ting infördes förra veckan faktiskt genomförs så att du bättre förstå både kapacitet och begränsningarna hos ett språk som C. Och i själva verket kommer vi skära ner lagren av den enklaste av datastrukturen, något som kallas en matris, som Scratch råkar kalla en "lista". Det är lite annorlunda i detta sammanhang. Och sedan kommer vi också att införa en av de första av våra domänspecifika problem i CS50, värld kryptografi, konsten att klättra eller kryptering uppgifter så att du kan skicka hemliga meddelanden och avkoda hemliga meddelanden mellan två personer, A och B. Så innan vi övergång till den nya världen, låt oss försöka att utrusta dig med några tekniker som du kan eliminera eller reducera åtminstone en del av frustration att du förmodligen har stött under den senaste veckan ensam. I själva verket före du such-- några av dina första problem i C. Och oddsen är, Om du är som mig, första gången du försöker skriva ut ett program, även om du tror logiskt Programmet är ganska enkelt, du kan mycket väl slå en vägg, och kompilatorn kommer inte att samarbeta. Gör eller Clang kommer inte att faktiskt göra din budgivning. Och varför skulle det vara? Nåväl, låt oss ta en titt på, kanske, ett enkelt program. Jag kommer att gå vidare och spara det i en fil medvetet kallas buggy0.c, eftersom jag vet att det vara bristfällig i förväg. Men jag kanske inte inser att om detta är den första eller andra eller tredje programmet att jag faktiskt gör mig. Så jag kommer att gå vidare och skriver ut, int main (void). Och sedan inne i mina klammerparenteser, en mycket bekant ( "Hej, world-- bakåtstreck, n ") - och ett semikolon. Jag har sparat filen. Nu ska jag gå ner till min terminalfönster och typ gör buggy0, eftersom, återigen, namnet på filen i dag är buggy0.c. Så jag skriver göra buggy0, Enter. Och, oh, gosh, minns från förra gången att inga felmeddelanden är en bra sak. Så ingen utgång är en bra sak. Men här har jag klart visst antal misstag. Så den första raden av produktionen när du har skrivit göra buggy0, återkallande, är Clang är ganska utförlig utgång. Under huven, CS50 IDE är konfigurerad att använda en massa alternativ med denna kompilator så att du inte har att tänka på dem. Och det är allt som första raden medel som börjar med klang. Men efter att de problem börja göra sitt utseende. Buggy0.c på linje 3, tecken 5, finns det en stor, röd fel. Vad är det? Underförstått att förklara biblioteksfunktion printf med typen int (const char *, ...) [-Werror]. Jag menar, det mycket snabbt blir mycket svårbegripliga. Och visst, i första blick, vi skulle inte förväntar dig att förstå helheten av det meddelandet. Och så en av de lärdomar för idag går att vara att försöka att lägga märke till mönster, eller liknande saker, fel du kan ha stött på tidigare. Så låt oss retas isär endast dessa ord som ser bekant. Den stora, röda fel är klart symbol för något att ha fel. Underförstått förstått~~POS=HEADCOMP att förklara biblioteksfunktion printf. Så även om jag inte riktigt förstår vad implicit förklarar biblioteksfunktion medel, problemet säkert avser printf på något sätt. Och källan till denna fråga har att göra med att förklara det. Förklara en funktion är nämna det för första gången. Och vi använde terminologin förra veckan att förklara en funktion prototyp, antingen med en rad högst upp på din egen fil eller i en så kallad header-fil. Och i vilken fil gjorde vi säga förra veckan att printf är citat, unquote förklarade? I vilken fil är dess prototyp? Så om ni minns, den allra första jag skrivs nästan varje program förra time-- och av misstag en stund sedan började skriva myself-- var detta en här-- hash-- #include