[MUZIKO Ludanta] DAVID J. Malan: Bone. Tiu estas CS50 kaj ĉi estas la komenco de Semajno 2. Kaj vi memoras ke super la pasinta paro de semajnoj, ni estis enkondukante komputilo scienco kaj, siavice, programado. Kaj ni komencis la rakonton tra Nulo, ke grafikan lingvo MIT'S Media Lab. Kaj tiam laste, pasintsemajne, ĉu ni enkonduki higher-- a malalta nivelo lingvo konata kiel C, iu kiu estas pure teksta. Kaj cetere, lastan fojon ni esploris ene de tiu kunteksto kelkaj konceptoj. Tiu, revokon, estis la tre unua programo ni rigardis. Kaj ĉi programo, tute simple, presas el "saluton, mondo." Sed estas tiel ŝajna magio okazas. Ekzistas tiu #include kun tiuj angulajn krampojn. Estas int. Ekzistas (void). Ekzistas krampoj, krispa krampoj, punktokomoj, kaj tiel plu. Kaj tiel, memoru ke ni enkondukis Scratch tiel ke ni povus, ideale, vidu pasinteco ke sintakso, la aĵoj kiuj vere ne ĉiuj kiuj intelekte Interesa sed frue estas, absolute, iom malfacila envolver vian menson ĉirkaŭe. Kaj cetere, unu el la plej komunaj aferojn frue en programado klaso, speciale por tiuj malpli komforta, estas akiri frustrita de kaj stumblis supren per certaj sintaksaj eraroj, ne mencii logikaj eraroj. Kaj do inter niaj celoj hodiaŭ, fakte, volo esti ekipi vin kun iuj problemo-solvanta teknikoj por kiom better solvi problemojn sin en la formo de depuración. Kaj vi memoras, ankaŭ, ke la medio kiu nin enkondukis lasta tempo oni nomis CS50 IDE. Jen ttt-bazita softvaro kiu permesas plani en la nubo, tiel diri, konservante cxiujn viajn dosierojn kune, ni denove volas hodiaŭ. Kaj memoru ke ni revizitita tiuj temoj ĉi tie, inter ili funkciojn kaj maŝojn kaj variabloj, kaj Buleaj esprimoj, kaj kondiĉojn. Kaj fakte kelkaj pli ke ni tradukite de la mondo de Scratch al la mondo de C. Sed la fundamenta konstruaĵo blokoj, tiel diri, estis vere ankoraŭ la sama pasintsemajne. Fakte, ni vere nur havis malsamaj enigmo pecon, se vi volas. Anstataŭ ke purpuraj savi bloko, ni anstataŭe estis printf, kiu estas tiu funkcio en C kiu permesas presi ion kaj formati ĝin sur la ekrano. Ni enkondukis la CS50 Biblioteko, kie vi havas nun je via dispono get_char, kaj get_int kaj get_string, kaj kelkaj aliaj funkcioj kiel bone, per kiu vi povas akiri enigo de la uzanto propra klavaro. Kaj ni prenis rigardu aferoj kiel these- bool, kaj char, kaj duobla, kaleŝego, int, long_long ŝnuro. Kaj ekzistas eĉ aliajn datumtipoj en C. Alivorte, kiam vi deklaras ŝanĝiĝema stoki iu valoro, aŭ kiam vi apliki funkcio kiu revenas iun valoron, vi povas specifi kion tipo de valoro kiu estas. Estas ĝi ŝnureto, kiel sekvenco de karakteroj? Cxu estas nombro, kiel entjero? Cxu estas glitpunktaj valoro, aŭ similaj? Do en C, kontraste Scratch, ni reale komencis specifi kia datumoj ni returniĝo aŭ uzante. Sed, kompreneble, ni ankaŭ renkontis kelkaj fundamentaj limoj de komputado. Kaj precipe, tiu lingvo C, revokon ke ni prenis rigardu entjero overflow, la realaĵo ke se vi nur havas finia kvanto de memoro aŭ, specife, finia nombro de bitoj, vi povas nur kalkuli tiel alta. Kaj tiel ni rigardis tiun ekzemplon tie per kontraŭrevolucio en aviadilo,, fakte, se kurante sufiĉe longe estus inunda kaj rezulti en programaro fakta fizika potencialo eraro. Ni ankaŭ rigardis flosanta punkto imprecision, la realaĵo ke nur finia nombro de bitoj, ĉu ĝi estas 32 aŭ 64, Vi nur povas specifi multaj nombroj post dekuma punkto, post kiu vi komencu akiri malpreciza. Do ekzemple, triono en la mondo tie, en nia homa mondo, ni scias estas nur malfinia nombro de 3s post la dekuma punkto. Sed komputilo ne povas nepre reprezentas senfinan nombron de ciferoj se vi nur permesas iun finia kvanto de informo. Tial ne nur ni ekipi vin kun granda potenco en terminoj de kiel vi povus esprimi sin ĉe klavaro en terminoj de programado, ni ankaŭ limigita kio vi povas reale fari. Kaj efektive, cimoj kaj eraroj povas ekesti de tiuj specoj de aferoj. Kaj fakte, inter la temoj hodiaŭ tuj estos temoj kiel depuración kaj fakte rigardis sub la kapuĉo ĉe kiel aferoj estis lanĉita lastan semajnon efektive implementado por ke vi pli bone kompreni ambaŭ la kapablojn de kaj la limigoj de lingvo kiel C. Kaj fakte, ni senŝeligas reen la tavolojn de la plej simpla de datumstrukturo, iu nomita tabelo, kiu Nulo okazas nomi "listo." Estas iomete malsama en tiu kunteksto. Kaj tiam ni ankaŭ enkonduki unu el la unua de nia domajno-specifa problemojn en CS50, la mondo de ĉifriko, la arto de grimpadi aŭ en ciphering informo tiel ke vi povas sendi sekretajn mesaĝojn kaj malkodi sekretajn mesaĝojn inter du personoj, A kaj B. Do antaŭ ol ni transiro al tiu nova mondo, ni provu ekipi vin kun iuj teknikoj per kiu vi povas forigi aŭ redukti almenaŭ iuj de la frustraciones ke vi probable renkontis dum la pasinta semajno sole. Fakte, antaŭ vi such-- kelkaj via unua problemoj en C. Kaj probablecoj estas, Se vi estas kiel mi, la unuan fojon Vi provu tajpi ekster programo, eĉ se vi pensas logike la programo estas sufiĉe simpla, vi eble tre bone trafis muron, kaj la tradukilo ne tuj kunlabori. Fari aŭ Clang ne tuj efektive fari vian peton. Kaj kial povus esti? Nu, ni rigardu, eble, simpla programo. Mi tuj iros antaŭen kaj savi ĉi en dosiero intence nomita buggy0.c, ĉar mi konas ĝin esti mankhava anticipe. Sed mi ne rimarkas ke se tiu estas la unua aŭ dua aŭ tria programo ke mi fakte farante min. Do mi tuj iros antaŭen kaj tajpi eksteren, int main (void). Kaj tiam ene de mia krispa krampoj, tre familiara ( "saluton, world-- backslash, n ") - kaj semi-dupunkto. Mi savis la dosieron. Nun mi tuj iros malsupren al mia fina fenestro kaj tipo ŝminko buggy0, ĉar, denove, la nomo de la dosiero hodiaŭ estas buggy0.c. Do mi tajpas fari buggy0, Enter. Kaj, ho, ho, memoras de lasta horo ke neniu erarmesaĝojn estas bona afero. Do neniu eligo estas bona afero. Sed tie mi havas klare iu nombro da eraroj. Tiel la unua linio de produktado post tajpado fari buggy0, revokon, estas Clang estas sufiĉe abundajn eligo. Sub la kapuĉo, CS50 IDE estas agordita uzi tutan faskon da ebloj kun ĉi tradukilo por ke vi ne havas pensi pri ili. Kaj tio estas ĉio, kion unuan linion per kiu komenciĝas kun Clang. Sed post tio, la problemoj komencas faras lian aperon. Buggy0.c sur linio 3, karaktero 5, estas granda, ruĝa eraro. Kio estas tio? Implice deklari biblioteko funkcio printf kun tipo int (const char *, ...) [-Werror]. Mi volas diri, ĝi tre rapide ricevas tre arkaikaj. Kaj certe, unue rigardo, ni ne volis atendas vin kompreni la tuteco de tiu mesaĝo. Kaj tiel unu el la lecionoj hodiaŭ tuj esti provi rimarkos ŝablonoj, aŭ similaj aferoj, al eraroj vi havu renkontis en la pasinteco. Do ni turmentus aparte nur tiuj vortoj kiuj aspektas familiara. La grandaj, ruĝaj eraro estas klare simbolon esti erara. implice deklari biblioteko funkcio printf. Do eĉ se mi ne bone komprenas kion implice deklari biblioteko funkcio rimedoj, la problemo certe rilatas al printf iel. Kaj la fonto de tiu temo devas vidi kun deklarante ĝin. Deklarante funkcio estas mencii ĝin por la unua fojo. Kaj ni uzis la terminologion lasta semajno de deklari funkcia prototipo, ĉu per unu linio je la supro de via propra dosiero aŭ en tn kaplinio dosiero. Kaj en kio dosiero faris ni diras lasta semajno ke printf estas citaĵo, unquote, deklaris? En kio dosiero estas ĝia prototipo? Do se vi memoras, la unua afero, kiun mi tajpita, preskaŭ ĉiu programo lasta time-- kaj hazarde antaŭ momento komenciĝis tajpado mia volo estis tiun here-- hash-- #include