[Muziek] DAVID J. MALAN: Oké. Dit is CS50 en deze is het begin van week 2. En je zult zien dat meer dan herinneren de afgelopen paar weken, we hebben de introductie van de computer wetenschap en op zijn beurt de programmering. En we begonnen met het verhaal door middel van Scratch, dat grafische taal van MIT Media Lab. En dan het meest recent, vorige week, hebben we invoering van een higher-- een lager niveau taal bekend zoals C, iets dat puur tekstueel. En inderdaad, de laatste keer dat we verkend in dat kader een aantal begrippen. Dit, rappel, was de eerste programma keken we naar. En dit programma, heel eenvoudig, afgedrukt, "hallo, wereld." Maar er is zo veel schijnbare magie er aan de hand. Er is dit #include met deze punthaken. Er is int. Er is (void). Er is tussen haakjes, accolades, puntkomma, en nog veel meer. En zo, herinneren dat introduceerden we Scratch zodat we konden, idealiter, zie verleden dat syntax, het spul dat is echt niet alles wat intellectueel interessant maar vroeg is, absoluut, een beetje lastig te wikkelen je gedachten rond. En inderdaad, een van de meest voorkomende dingen vroeg in een programmeertaal klasse, vooral voor degenen die minder comfortabel, is om zich te gefrustreerd door en struikelen door bepaalde syntactische fouten, niet logische fouten noemen. En zo onder onze doelen vandaag de dag, in feite, zal zijn om u uit te rusten met een aantal probleemoplossende technieken voor de manier waarop zichzelf beter lossen problemen in de vorm van debuggen. En je zult herinneren, ook dat de omgeving die we geïntroduceerd laatste keer heette CS50 IDE. Dit is web-based software die kunt u programmeren in de cloud, zogezegd, terwijl al uw bestanden samen, zoals we zullen weer vandaag. En herinner me dat we revisited deze onderwerpen hier, waaronder functies en loops, en variabelen en Booleaanse uitdrukkingen, en voorwaarden. En eigenlijk nog een paar dat we vertaald uit de wereld van Scratch in de wereld van C. Maar de fundamentele bouwsteen blokken, zo te zeggen, waren echt nog steeds hetzelfde vorige week. In feite hebben we echt net een verschillende puzzelstukje, als je wil. In plaats daarvan paarse opslaan blok, we in plaats daarvan had printf, dat is Deze functie C dat stelt u in staat om iets af te drukken en formatteren op het scherm. We introduceerden de CS50 Bibliotheek, waar u nu tot uw beschikking get_char, en get_int en get_string, en een paar andere functies zoals nou ja, via welke je kunt krijgen invoeren uit eigen toetsenbord van de gebruiker. En we namen ook een kijkje nemen op de dingen als deze-Bool en char, en dubbele, vlotter, int, long_long string. En er is zelfs andere soorten gegevens in C. Met andere woorden, als je verklaren een variabele enkele waarde op te slaan, of wanneer u implementeren van een functie dat geeft een zekere waarde, kunt u aangeven wat type waarde dat is. Is het een koord, zoals een opeenvolging van karakters? Is het een getal, als een integer? Is het een floating point waarde, of iets dergelijks? Dus in C, in tegenstelling tot Scratch, we eigenlijk begon aan te geven wat voor soort data we waren terug te keren of het gebruik. Maar natuurlijk, we liepen ook naar een aantal fundamentele beperkingen van de informatica. En in het bijzonder, deze taal C, recall dat we nam een ​​kijkje op integer overflow, de realiteit dat als je alleen maar een eindige hoeveelheid geheugen of specifiek een eindig aantal bits, kunt u alleen rekenen zo hoog. En dus hebben we gekeken naar dit voorbeeld hier waarbij een teller in een vliegtuig, Eigenlijk, als lang genoeg loopt zou overlopen en resulteren in een software een daadwerkelijke fysieke potentieel fout. We hebben ook gekeken naar drijvende point onnauwkeurigheid, de realiteit dat slechts een eindig aantal bits, of het 32 ​​of 64, je kunt alleen opgeven zo veel nummers na een komma, waarna u beginnen onnauwkeurig te krijgen. Dus bijvoorbeeld een derde in de wereld hier, in onze menselijke wereld, we weten is slechts een oneindig aantal van 3s na de komma. Maar een computer kan niet per se vormen een oneindig aantal getallen Als u alleen toestaan ​​sommige eindige hoeveelheid informatie. Dus niet alleen hebben wij u uitrusten met een grotere macht in termen van hoe je zou uiten op een toetsenbord op het gebied van programmering, beperkten we ook wat kun je eigenlijk doen. En inderdaad, bugs en fouten kunnen voortvloeien uit dit soort kwesties. En inderdaad, een van de thema's van vandaag gaan om onderwerpen als debuggen en eigenlijk kijken onder de motorkap hoe dingen waren die vorig week daadwerkelijk worden geïmplementeerd zodat je beter begrijpen zowel de capaciteiten en de beperkingen van een taal als C. En in feite, zullen we schil de rug van de lagen van de eenvoudigste gegevensstructuur, zoiets als een array, die Scratch toevallig een te bellen "lijst." Het is een beetje verschillend in die context. En dan zullen we introduceren ook een van de eerste van onze domein-specifieke problemen in CS50, de wereld van de cryptografie, de kunst van het klauteren of coderen Zo dat je geheime boodschappen kunt verzenden en decoderen van geheime boodschappen tussen twee personen, A en B. Dus voordat we overgang naar die nieuwe wereld, laten we proberen om u uit te rusten met een aantal technieken waarmee je kunt elimineren of verminderen ten minste sommige van de frustraties dat je waarschijnlijk hebben ondervonden van de afgelopen week alleen. In feite, met een voorsprong van jullie such-- een aantal van uw eerste problemen in C. En kansen zijn, Als je net als ik, de eerste keer je probeert te typen van een programma, zelfs als u denkt logisch het programma is vrij eenvoudig, je zou heel goed tegen een muur, en de compiler is niet van plan om mee te werken. Bellen of Clang is niet van plan eigenlijk doe je bieden. En waarom zou dat zijn? Nou, laten we een kijkje nemen op, misschien een eenvoudig programma. Ik ga om te gaan en op te slaan deze in Een bestand met opzet genaamd buggy0.c, omdat ik weet dat het worden ontsierd op voorhand. Maar ik misschien niet beseffen dat als deze is de eerste of tweede of derde programma dat ik ben eigenlijk het maken van mezelf. Dus ik ga om te gaan en uittypen, int main (void). En dan is de binnenkant van mijn accolades, een zeer vertrouwd ( "hallo, wereld-- backslash, n ") - en een puntkomma. Ik heb het bestand opgeslagen. Nu ga ik naar beneden te gaan aan mijn terminal venster en het type make buggy0, want, nogmaals, de naam van het bestand is vandaag buggy0.c. Dus ik typ maken buggy0, Enter. En, oh, gosh, herinneren van de vorige keer dat er geen foutmeldingen is een goede zaak. Dus geen output is een goede zaak. Maar hier heb ik duidelijk bepaald aantal fouten. Dus de eerste regel van de output na het typen maken buggy0, rappel, is vrij uitgebreide uitvoer Clang's. Onder de kap, CS50 IDE is geconfigureerd een hele hoop te gebruiken opties met deze compiler zodat u niet hoeft om na te denken over hen. En dat is alles dat de eerste lijn middelen die begint met Clang. Maar daarna problemen beginnen hun verschijning. Buggy0.c op lijn 3, karakter 5, is er een grote, rode error. Wat is dat? Impliciet verklaren bibliotheekfunctie printf met type int (const char *, ...) [-Werror]. Ik bedoel, het zeer snel erg mysterieus. En zeker, op het eerste blik, zouden we niet verwachten dat je het begrijpt geheel van die boodschap. En zo een van de lessen voor vandaag gaat om te proberen het bericht patronen of soortgelijke dingen, om fouten die u zou kunnen hebben in het verleden ondervonden. Dus laten we alleen plagen elkaar die woorden die bekend voor. De grote, rode fout is duidelijk symbolisch dat iets mis is. impliciet verklaren bibliotheek functie printf. Dus zelfs als ik niet helemaal begrijpen wat impliciet verklaren bibliotheekfunctie middelen, het probleem toch heeft betrekking op een of andere manier printf. En de bron van die kwestie heeft te maken met aangifte te doen. Het uitroepen van een functie met vermelding van het voor de eerste keer. En we gebruikten de terminologie van vorige week verklaren prototype van een functie, hetzij met één lijn aan de bovenkant van uw eigen bestand of in een zogenaamde header file. En in welke file deden we zeggen vorige week dat printf is citaat, unquote, verklaarde? In welk bestand is het prototype? Dus als u zich herinneren, het allereerste wat ik getypte, bijna elk programma afgelopen tijd-- en per ongeluk even geleden begonnen typen myself-- was dit een hier-- hash-- #include