[МУЗЫКА] DAVID J. малая: Добра. Гэта CS50 і гэта з'яўляецца пачаткам 2-й тыдні. І вы памятаеце, што больш апошнія пару тыдняў, мы прадставілі кампутар навука і, у сваю чаргу, праграмаванне. І мы пачалі аповяд шляхам Драпіна, што графічную мову з медыя-лабараторыі Масачусецкага тэхналагічнага інстытута. А потым зусім нядаўна, На мінулым тыдні, мы зрабілі ўвесці higher-- A мова больш нізкага ўзроўню вядомыя як З, тое, што гэта чыста тэкстава. І, сапраўды, апошні раз, калі мы вывучыць ў гэтым кантэксце шэраг паняццяў. Гэта, нагадаем, быў вельмі Першая праграма мы разгледзелі. І гэтая праграма, даволі проста, друкуе "Прывітанне, свет." Але ёсць так шмат ўяўнай магіі адбываецца. Там гэтая #include з гэтых кутніх дужках. Там у инт. Там у (анулююцца). Там у круглыя ​​дужкі, фігурныя дужкі, кропка з коскі, і многае іншае. Так, нагадаем, што мы ўвялі драпіна так што мы маглі б, у ідэале, убачыць мінулае што сінтаксіс, матэрыял, які сапраўды ня усё, што інтэлектуальна цікава, але на ранніх стадыях гэта, безумоўна, крыху больш складана каб абгарнуць ваш розум вакол. І на самай справе, адно з самых распаўсюджаных рэчы на ​​раннім этапе ў класе праграмавання, асабліва для тых, хто менш зручна, каб зламацца, і падстаўлялі некаторымі сінтаксічнымі памылкі, не кажучы ўжо пра лагічных памылак. І таму сярод нашых мэтаў сёння, на самай справе, будзе будзе абсталёўваць вас з некаторымі метады вырашэння праблем для таго, як каб лепш вырашаць праблемы самі ў выглядзе адладкі. І вы памятаеце, таксама, што серада, мы ўвялі апошні раз быў названы CS50 IDE. Гэта вэб-праграмнае забеспячэнне, дазваляе праграмаваць ў воблаку, так бы мовіць, захоўваючы пры гэтым усе вашыя файлы разам, як мы зноў будзем сёння. І нагадаем, што мы перагледзець гэтыя тэмы тут, сярод іх функцый, а таксама завесы, і зменныя і лагічныя выразы, і ўмовы. І на самай справе некалькі больш, што мы у перакладзе з нуля свету да міру C. Але асноўны будынак блокі, так бы мовіць, сапраўды былі ўсе тыя ж на мінулым тыдні. На самай справе, мы сапраўды толькі мелі розныя кавалак галаваломкі, калі вы будзеце. Замест таго, што фіялетавы захаваць блок, мы замест таго, каб быў PRINTF, які гэтая функцыя ў С, дазваляе надрукаваць што-небудзь і адфарматаваць яго на экране. Мы ўвялі CS50 Бібліятэка, дзе вы ёсць зараз у вашым распараджэнні get_char, і get_int і get_string, і некалькі іншых функцый, як ну, з дапамогай якога вы можаце атрымаць ўвод ад уласнай клавіятуры карыстальніка. І мы таксама ўзялі погляд на рэчы як these- BOOL і паўкокс, і двайныя, з якая плавае кропкай, INT, long_long радок. І ёсць нават іншыя тыпы дадзеных у C. Іншымі словамі, калі вы аб'яўляеце зменная для захоўвання некаторага значэння, або пры рэалізацыі функцыі якая вяртае некаторы значэнне, Вы можаце паказаць, што тып значэння, якое. Гэта радок, падобна паслядоўнасць знакаў? Гэты лік, як цэлы лік? Ці з'яўляецца гэта з якая плавае кропкай значэнне, ці таму падобнае? Такім чынам, у C, у адрозненне ад нуля, мы на самай справе пачаў паказваць, які тып дадзеных мы вярталіся або выкарыстання. Але, вядома, мы таксама сутыкнуліся з некаторыя фундаментальныя межы вылічэнняў. І ў прыватнасці, гэтая мова C, нагадаем што мы глядзелі на Цэлалікавымі перапаўненне, рэальнасць што калі ў вас ёсць толькі канчатковае колькасць памяці ці, у прыватнасці, канчатковае лік бітаў, вы можаце разлічваць толькі так высока. І такім чынам, мы глядзелі на гэты прыклад тут у выніку чаго лічыльнік у самалёце ,, на самай справе, калі працуе дастаткова доўга будзе перапаўненне і вынік у праграмным забеспячэнні фактычны фізічны патэнцыял памылкі. Мы таксама разгледзелі плавае кропка недакладнасцяў, рэальнасць што толькі з канчатковым лікам бітаў, няхай гэта будзе 32 або 64, вы можаце паказаць толькі так шмат лікаў пасля дзесятковай кропкі, пасля чаго вы пачынаюць атрымліваць недакладным. Так, напрыклад, адна трэць ў свет тут, у нашым чалавечым свеце, мы ведаем, гэта проста бясконцую колькасць 3 сек пасля дзесятковай кропкі. Але кампутар не абавязкова ўяўляюць сабой бясконцую колькасць лічбаў калі вы толькі дайце яму некаторыя канчатковае колькасць інфармацыі. Так што мы не толькі узброіць вас з большай сілай у плане як Вы маглі б выказаць сябе ў клавіятура з пункту гледжання праграмавання, мы таксама абмежаваныя, што вы можаце рэальна зрабіць. І на самай справе, памылкі і памылкі могуць ўзнікаюць з гэтых відаў пытанняў. І сапраўды, сярод тым сёння будуць такія тэмы, як адладкі і на самай справе, гледзячы пад капотам на тое, як былі ўведзеныя рэчы на ​​мінулым тыдні на самай справе рэалізаваны так што вам лепш зразумець, як магчымасцяў і абмежаванні мовы як C. І на самай справе, мы адхіліце пласты з найпростых структуры дадзеных, тое, што называецца масіў, які Драпіна здараецца называць "спіс." гэта крыху адрозніваецца ў гэтым кантэксце. І тады мы будзем таксама ўвесці адно з першы з нашых праблем прадметна-арыентаваных у CS50, свет крыптаграфія, мастацтва караскацца або ў шыфраванні інфармацыі, так што вы можаце адпраўляць сакрэтныя паведамленні і дэкадаваць сакрэтныя паведамленні паміж двума асобамі, А і В. Таму, перш чым мы пераходу да гэтага новага свеце, давайце паспрабуем забяспечыць вас з некаторымі метады, з якімі вы можаце ліквідаваць або паменшыць па меншай меры, некаторыя расчараванняў што вы, верагодна, сутыкаліся Толькі за мінулы тыдзень. На самай справе, наперадзе вас such-- некаторыя з вашы першыя праблемы ў С і форы, калі вы падобныя на мяне, у першы раз вы спрабуеце ўдрукуешся праграму, нават калі вы думаеце, лагічна Праграма даволі простая, вы можаце вельмі добра урэзаўся ў сцяну, і кампілятар не збіраецца супрацоўнічаць. Робяць або Clang не збіраецца на самай справе зрабіць вашыя стаўкі. І чаму гэта можа быць? Што ж, давайце паглядзім на, можа быць, простая праграма. Я збіраюся ісці наперад і захаваць гэта ў файл наўмысна называюць buggy0.c, таму што я ведаю яго быць сапсаваны загадзя. Але я не мог зразумець, што калі гэта першы ці другі ці трэцяй праграмы што я на самой справе робіць сам. Так што я збіраюся ісці наперад і ўдрукуешся, Int асноўны (вакуум). І тады ўнутры маіх фігурныя дужкі, вельмі знаёмы ( "прывітанне, world-- зваротнай касой рысы, п ") - і кропка з коскі. Я захаваў файл. Цяпер я збіраюся пайсці ўніз да майго акне тэрмінала і тып робяць buggy0, таму што, зноў жа, імя файла сёння buggy0.c. Так што я тыпу зрабіць buggy0, Enter. І, о, божа, памятаеце з апошняга часу што без якіх-небудзь паведамленняў пра памылкі гэта добрая рэч. Так што выснова не з'яўляецца добрай рэччу. Але тут я ясна некаторы колькасць памылак. Такім чынам, у першым радку вываду пасля ўводу робяць buggy0, нагадаем, даволі падрабязны выснову звонам ст. Пад капотам, CS50 IDE настроены выкарыстоўваць цэлую кучу Варыянты з гэтым кампілятарам так што ў вас няма думаць пра іх. І гэта ўсё, што першая лінія азначае, што пачынаецца з Clang. Але пасля гэтага, праблемы пачаць рабіць іх знешні выгляд. Buggy0.c на лініі 3, характар 5, ёсць вялікая, чырвоная памылка. Што гэта? Ўскосна абвяшчаючы функцыі бібліятэкі PRINTF з тыпам Int (сопзЬ сЬаг *, ...) [-Werror]. Я маю на ўвазе, гэта вельмі хутка становіцца вельмі аркан. І, вядома ж, у першую чаргу погляд, мы не будзем чакаюць, што вы разумееце паўната гэтага паведамлення. І вось адзін з урокаў на сённяшні дзень адбываецца каб паспрабаваць заўважыць ўзоры, або падобныя рэчы, да памылак вы можаце мець сутыкнуліся ў мінулым. Так што давайце дражніць толькі адзін ад аднаго тыя словы, якія выглядаюць знаёмымі. Вялікі, чырвоны памылка відавочна сімвалам чагосьці памыліцца. безумоўнае прызнанне Бібліятэка функцый Printf. Так што нават калі я не зусім разумею, што няяўна абвяшчаючы функцыі бібліятэкі Значыць, праблема, вядома, ставіцца да PRINTF нейкім чынам. І крыніца гэтага пытання мае справу з абвясціўшы яго. Аб'яву функцыі з'яўляецца згадкі пра яго ў першы раз. І мы выкарыстоўвалі тэрміналогію на мінулым тыдні таго, каб абвясціць прататып функцыі ва, альбо з адной лініяй у верхняй частцы вашага уласны файл або ў так званым файле загалоўка. І ў якім файле зрабіў мы гаворым на мінулым тыдні, што Printf цытата, Unquote, заявіў? У якім файле знаходзіцца яго прататып? Так што, калі вы памятаеце, самае першае, што я тыпізаваных, амаль кожная праграма ў мінулым time-- і выпадкова хвіліну таму пачалася набраўшы myself-- быў адзін here-- hash-- #include