[МУЗЫКА] 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