[Powered by Google Translate] [Machen, Clang] [Nate Hardison] [Harvard University] [Dies ist CS50] [CS50.TV] Also, sagen wir, ich habe eine kleine C-Programm zum Ausdrucken der Worte geschrieben "Hallo Welt!" und ich habe es in einer Datei namens hello.c gespeichert. Wie kann ich eigentlich dieses Programm? Wenn ich versuche gerade läuft die. C-Datei, das ist nicht zur Arbeit gehen. Der Computer wird nicht als ein C-Programm zu behandeln, wie ich wollte. Es stellt sich heraus, dass, obwohl C-Code ziemlich kryptisch auf den ersten sieht, es ist noch nicht low-level genug Computern ist es zu verstehen. Bevor Sie C-Code auf einem Computer ausführen können, müssen Sie zuerst zu kompilieren, die verwandelt Ihren C-Code in Maschinencode, die - wie der Name schon sagt - ist ein binäres Format, dass die Maschine zu verstehen. Der einfachste Weg dies zu tun ist, um einfach mit dem Befehl "zu machen." Make ist ein Dienstprogramm für die Erstellung Quellcode. Es ist kein Compiler selbst, sondern ein Programm, das Aufrufen des Compilers organisiert auf Quellcode-Dateien, so dass die Dinge gehen in der richtigen Reihenfolge zusammengestellt und in der richtigen Weise seit Compiler-Flags erhalten Art von komplizierten, wie wir sehen werden. Es ist besonders hilfreich, wenn Sie mit großen Projekten arbeiten mit vielen Quellcodedateien und viele verschiedene Bibliotheken. Aber es ist auch schön, es zu benutzen, wenn Sie gerade arbeiten mit einer einzigen Datei. Also, lasst uns stellt diese "Hallo, Welt!"-Programm mit zu machen. Der Name meines Quellcodedatei ist hello.c, also werde ich ein make hallo, und machen die Grundeinstellung verwenden, um es zu kompilieren. Wenn alles gut geht, kann ich den Befehl ls, um alle Dateien im Verzeichnis auflisten, und ich sollte eine neue Datei namens "Hallo." Diese Datei wird als "ausführbar" und es ist im binären Format, dass der Computer verstehen kann. Wenn wir es zu öffnen, können wir sehen einige Zeichen, dass wir verstehen können, aber zum größten Teil ist es nur ein Haufen Hokuspokus. Allerdings kann ich diese Datei und sehen Sie es ausdrucken "Hallo, Welt!" immer und immer wieder. Oh, die Aufregung! Also, lasst uns gehen ein wenig zurück zu unserer Marke Befehl und sehen, was wirklich passiert ist um die ausführbare Datei zu erzeugen. Sie können sehen, dass, wenn ich lief, es ausgedruckt diese Zeile  beginnend mit "Klang" und endend mit "Hallo." Dies wird zu Aufrufen der Compiler - in diesem Fall als ein "Clang" mit einem Bündel von Standard-Flags oder Optionen, um unsere ausführbare Datei zu erzeugen. Clang eines von einer Anzahl von C-Compiler draußen in der Welt. Vielleicht gehört haben oder verwendet anderen, Besonders sogenannte "gcc", die besonders häufig ist. Wir haben uns entschieden, um Clang in CS50 verwenden, weil wir denken, es macht einen wirklich guten Job der Bereitstellung hilfreich Warnungen und Fehlermeldungen und weil Sie es wirklich vergleichbar mit der Verwendung gcc, so können Sie ziemlich leicht zwischen beiden umschalten. Wenn make Clang rannte, rannte sie es mit einer ganzen Reihe von Optionen. Allerdings ist es nicht notwendig, alle diese Optionen verwenden  nur kompilieren eine Single. c Quellcodedatei. Alles, was ich tun müssen, ist zu verwenden clang hello.c. Auch wenn alles gut geht, ergibt sich eine ausführbare Datei. Allerdings, wenn ich laufen versuchen. / Hallo, bekomme ich eine Fehlermeldung, dass es keine solche Datei oder das Verzeichnis. Was ist passiert? Clang standardmäßig Namen seiner ausführbaren a.out, die wir sehen, ob wir das Verzeichnis Liste mit ls. Diese Datei können wir laufen, und es wird auch ausdrucken "Hallo, Welt!" wie beabsichtigt. Wenn wir wollen, um die ausführbare Datei umbenennen, können wir den Befehl Verschieben, um so zu tun, aber die meisten der Zeit, die wir wollen einfach nur Clang, um die richtige Namensgebung für uns tun. Wir können dies mit dem Flag-o tun. Wenn ich clang laufen hello.c-o hallo, dann werde ich eine ausführbare Datei namens "Hallo." Die Option-o ist super gemeinsamen, so erwarten zu sehen, und verwenden Sie es eine Menge. Die nächsten Clang Optionen, die Ihnen eine Menge beginnen mit-W sehen werden. Diese Optionen steuern, welche Arten von Warnungen Clang gibt Ihnen über Ihren Code. Zum Beispiel kann Clang warnt Sie, wenn Sie eine Variable, die nie benutzt hat zu erklären. Wenn ich legte eine int-Variable namens x hello.c und dann mit Clang-Wunused-variable hello.c-o hallo zu kompilieren, Clang warnt mich über dieses verwendete Variable in meinem Code. Nun, es gibt eine Tonne von verschiedenen Warn-Typen, und es wäre unausstehlich zu haben, um sie alle aufzuzählen, wann Sie Clang laufen. Stattdessen gibt es eine Abkürzung Option, um sie alle zu aktivieren --Wall. Wir haben dies standardmäßig aktiviert, wenn Sie in das Gerät zu laufen, so erhalten Sie alle Warnungen, dass Clang Sie über Ihren Code geben kann. Im Allgemeinen, mit Ihrem Code zu produzieren compilation Warnungen ist nicht eine gute Sache, und wir erwarten, dass die Programme, die Sie schreiben für CS50 zu warnen kostenlos. Doch wie Sie sehen, werden Clang noch produzieren eine ausführbare Datei Auch wenn es während der Kompilierung warnen. Wir können jedoch erzwingen Clang zur Compilation zu stoppen und einen Fehler erzeugen wenn es trifft etwas wert einer Warnung in den Code. Wir tun dies mit der Option-Werror Option. Nun, wenn ich kompilieren meiner hello.c Datei mit den ungenutzten int Variable x, Ich werde nicht eine ausführbare Datei. Jetzt kann ich nicht ignorieren compilation Warnungen. Ich muss gehen fix meinen Code. Eine weitere wichtige Option ist-ggdb. Dies ermöglicht spezielle Debugging-Informationen in der ausführbaren Datei, so dass ich können den Debugger gdb, wenn es abstürzt. Ohne diese Option kann ich nicht zugreifen viel von meinem Programm Informationen innerhalb gdb, wie Variablen-und Funktionsnamen, so ist es wichtig, umfassen-ggdb auch. Wenn Sie auf dem Gerät ausgeführt wird, wird diese Option auch standardmäßig enthalten. Die letzte Option, dass es wichtig ist, zu denken ist-l wissen, die verwendet wird, um Bibliotheken in Ihren Code zu verknüpfen. Zum Beispiel, wenn Sie Funktionen aus der CS50-Bibliothek, wie GetString verwenden, Sie müssen sicherstellen, dass Sie nicht nur # include der Bibliothek Header-Datei, CS50.h, in Ihrer. c Quellcodedatei sondern auch, dass Sie-LCS50 verwenden bei der Erstellung, so dass die Bibliothek Umsetzung mit Ihrem Programm verknüpft. Lasst uns das Hallo Welt Programm zu ändern, um den Benutzer zur Eingabe eines Namens mit dem GetString-Funktion aufgefordert und verwenden Sie dann den Namen in unserer hallo String. Nun, wenn wir versuchen, dieses Programm o mit-LCS50 kompilieren, wir bekommen eine Fehlermeldung über einen undefined reference to GetString. Uh oh! Lassen Sie uns in-LCS50 hinzuzufügen, und jetzt funktioniert alles prima. Eine gotcha ist, dass es einen Unterschied, wo in dem Befehl write-LCS50 machen. Wenn ich es, bevor ich hello.c schreiben schreiben, dann wird die CS50-Bibliothek geladen und bearbeitet wird vor meinem Quellcode. Also, es ist, als ob ich nicht schreiben-LCS50 überhaupt. Als Faustregel gilt, werden Sie in der Regel wollen alle Ihre-l Put-Optionen am Ende des Befehls. So, jetzt lassen wir sie alle zusammen. Clang-ggdb-Wall-Werror hello.c-LCS50-o hallo - das ist eine Menge Zeug. Das ist, warum machen, ist so hilfreich. Es kümmert sich um alles für Sie. So, jetzt hast du eine gute Idee von dem, was geht in Kompilieren des Codes. Mein Name ist Nate Hardison. Dies ist CS50. [CS50.TV]