[Playlisten] [Impressum und Datenschutzerklärung]

04D.1 Funktion und Variable in eigene Datei auslagern; Header-Datei


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

dubist aber eben diese Funktionswürfelgeschrieben ??schöneswenn manFunktionensauber zusammenfasst in einzelnen Dateien nicht alle Funktionenin den Mediendateienrein schmeißtihrdas in einemKrempel drin rum fliegtdiese Funktion die soll in ihrer eigenen Datei sozusagen sie bauen eine eigene Datei sowieso Punkt zehn dazu Header-Dateiund diese Funktion auszugliedern?? Komma das im Prinzip machen würde anfangen würden ?? neue Datei hier ?? Pfeil nunfreioder einfach hier mit demleeren Blatt Papiereine neue ?? ?? die speichernCSSin das Verzeichnis am besten wo auch sowieso die andern Dateien vom Rücken stehen neben Nancy speichernjetzt mal ganz überraschend fürdiese Dateidie Datei sondern auch kombiniert werden also Mausklick rechts ihrHerzüblicherweise schon Würfel sehendas Dateien?? kombiniert wirddas ?? jetzt immer sagen kompiliert werden werden die Zederzeitwird werden nicht direkt die Headerdateiendie Header Dateien werden dann ja nachher mit Include eingebundensollte der Compiler von den ?? Lateinhier das sind diese Dateienerst mal was der Compiler wissen muss über die Zähler deine werde von den Header-Dateigebrochene Zillertalsteht drinnen wie diese Funktion funktioniertvon Ihnen und wir brauchen eine Header-Dateimit den Deklarationenspeichern es also alsWürfel Punkt Haarund sie schreiben jetzt mal was sinnvollesin dieseSeedateiund diese Header-DateiInclude GuardsGeschichtenin die C Dateiin die Zieldateikommtdiese Kiste reinAusrufezeichenich meine die Aufgabe rauslöschenPunktdas kommt in die Zieldateiwie siehteine Funktion von innen aus PC Dateien sind zu sagen sozusagen die echten Programme die werden ja auch kompiliert die stille Liste für den Compilerdamit aber erst mal die Zieldateiin der Header-Dateisteht wie diese Funktionvon außen aussiehtwas muss der Compilerwissen um diese Funktionbenutzen zu könneneine Deklarationdas ist die Deklarationkeine Schweifklammer mit dem Programmtext sozusagen hinter mit dem Text der Funktion dahinter sondern ein Semikolon hintendran zu sagendas ist der Name meiner Funktionsie nimmt nichts und gibt ganze Zahldas Raucher nach ??und die nur die andere Dateizu kompilierendiese Datei hier die Header-Datei wird inkludiertin meiner Mail Datei wie das in CloudMetzgenauso kann ich jetzt sagen ?? Blut wird jetzt Anführungszeichen aufmein eigenesMann einen Verzeichnis stehtamWürfelPunkt haben die Header-Datei mit inkludiertkann ich mit den hiergrößeren?? dürfte die ??aus und jetzt ist es so funktionierenin Würfel Punkt Haarfindet der Compilerwie die Würfelfunktionvon außen aussiehtCompiler fängt an die Mediendatei zu übersetzenmindert ein Gesetz der Finder den Würfel habe die Fusion von außen aussieht die Deklarationund kann sie hier verwendender Linker will danach alles zusammen was der Compiler kompiliert hat der linke muss dann irgendwo aber auch wissen wie der diese Funktion wirklich gehtund er stellte fest in dieser Datei die der Compilerauch übersetzt ?? diese Datei findet er die Würfelfunktionverbindet die beiden zusammenes müsste theoretisch funktionierensoll das den Kompilationsprozess?? Klammer auf waraber Komma gucken ob sie tutso weit so gutsind durchdas Ergebnis komme für dich bekannt vorgegebenandas ?? keine Glut ganz drinRichard habeihr Ling oder der Include Guide fehlt mir in dieser Datei nochkleiner machen aus jetzt aber noch mal zum Kompilationsprozesswas macht jetztdieses System im Hintergrundwir habeneine Dateidie heißtMainePunkt zehnwir haben eine Datei die heißtTafelPunkt zehnund wir haben eine Datei die EiswürfelPunkt Haarder Compilernimmt die Mail Punkt Zieldateiund macht daraus Objekt großbeschreibtdie Sommer ?? auf dem System hat das Selbe der Würfelseedateiender Compiler nimmt die Würfel Zieldateimacht darausObjekt gut diese Datei wird als solcheübersetzt?? bisschen Maschinensprachenoch nicht ganz in Maschinensprachein derMediendateikommt jetzt aber unsere FunktionenWürfel vorder mit der Compiler diese Funktion kombinieren kann muss er wissen was sie denn tut mir Gitarre zahlendie fünf Argumente hat sie sieben Argumentegibt sie wohl Zahlmuss ich wissen diese Funktionwirklich fusioniert von Inhaber muss wissen wie diese Funktion verwendet wirddazu brauchen wirdie Header-Dateistrategisch gut gemalt also hier die Header-Dateidie brauchen wir dadie wird der Include reingeholt die Zeile mit der Compdeklarationdamit der Preis wieder die Funktion im Prinzip läuftdamit es übersetzen kann hier die Objekt gutsteten Platzhalter weiterhin drin für die Würfelfunktionnicht Leerzeichen geschmiert haben Objektbursche bei den Platzhalterbalkensgefiel ihre Beweisführungzum Prinzip läuftes in der Header-Dateider nächste Compilerlaufist die Würfel Zieldateides ?? liefert auch normalan den Weltwirbelszeigen Nancy wird kompiliert und würfelt sie wird kombiniert PC Dateien werden kompiliertdie Würfel Zieldatei wird kombiniert daraus wird Objekt KotCompiler läuft zweimalund dann kommt der Linker der kommt einmalhier Leute zweimal für jede Zieldateiläuft der Compilereinmalund danach kommt der Linkerdas zusammenzu einer ausführbaren Datei unter Windows wird das nächste Verzeichnis keine Reise was fürchterliches egalWindows wird es in Excelhinaus über Datei das macht der linke der Linker sieht hierden Querverweisund auch die Würfelfunktionund in der anderen übersetzen Datei sieht er die Würfelfunktionund schafft die Verbindung linkerProvinzen zu Linkzusammenbringendiese Arbeitsteilungist ?? MaßnahmeumZeit beim Kompilieren zu sparen stellt sich vor sie haben wirklichen Betriebssystemoder was mit zehn tausenden an Dateien ?? wollte mich jedes Mal alle zehn tausend Dateien übersetzennur die eine die sich geändert hat?? ein tausend hundert neunundneunzig bleiben so wie sie warenund zum Schluss bindet man dieses neue Ergebnis dann mit den anderen Sachen wieder zusammensind auf diese Weise schnellerund effizienterdurch diese Arbeitstage mit dem Compiler dem Linkerund hier das jetzt in der Ärger der Compiler hier an dieser Stelle muss wissen wie die Würfelfunktionden ?? zu haben ist dafür die Header-Dateidafürhierdafür dieses jene Deklarationetwas der Compiler wies gehtnaja wir die Funktion verwendet er weiß nichtwie die Funktion gemacht ist und es auch egaldas ?? ja stehendie wird getrennt kompilierte Punkt der Compiler weiß wie die Funktion verwendetdafür hierWürfelkönnte auch mal das Auskommentierendes Würfel ??was dann passiert Punkt Macdann sagte unsdann sagte unsFrank schon Würfel die klärt im Selender C Standard erlaubt das nochich verwende eine Funktionswürfelin der Compiler nicht kenntim C Standard ist tatsächlich dann vorgesehen dass der Compiler sich einfach selbst was erfindet dann diese Funktion zu verwenden ?? zu verwenden sei die kleine Siggi andas natürlich total heikelund dass es im allgemeinen auch Unsinn Beistrich der Compiler dann dasselbe ausdenktin einer Sprache besichtigen ?? verbotendarf ich gerade irgendwas gefunden werden Punkt das passiert wenn der Compiler nicht weißwas angesagt istdafür den hier??ich noch einentypischen Fehler zeigen?? wieder gutwirdwenn sich hierdie falsche Funktion bauenSie hier die FunktionswürfelX Y Z bauen?? Programm verwendete Funktionen Würfelihrer Header-Datei sagt auch was vom Würfelaber es wird gar keine Funktionenwürfelgeliefert sein Funktion wird mit Y Zjetzt tatsächlichen Fehler an die ?? dreißigster null Würfelhier behaupte ich es gäbe eine Funktionswürfeldass es in der Männer Teil der Männerteil des Würfelhaarinkludiertan dieser Stellebehaupte ich es gäbe eine Funktionswürfelirgendwo verwende sie auchder Linkersinnierte ?? WaldmannLinkerder Linker stellt ein fester zusammen bindenda ich immer betont es gibt eine Fusion namens Würfeleine Schürze Komma dass weiße Blinker nicht das es die eigentlich sein sollte von der Linker sieht keine Funktion als Würfelmachte sehr geärgertgenau was hier steht für Würfelimplementierungin die Funktion funktioniert die habe ich natürlich jetzt aus Nancy rausgeschmissendas wäre auch eine spannende Geschichte was passiert wenn ich hier in der ?? Dateidie auch noch ?? drin habe Project Mac??entschieden Würfel in modulmentaler?? wie die feinsten Modulwürfeleine erneute Definitionund das ?? Beistrich wieder der Linker gemerktder Linker sieht der einen DateiKlammer auf hier ein ähnliches Gesetzder Linker sieht in dieser Datei gibt Punkt als Würfelimplementiertin dieser Datei zur Funktion als Würfel implementiert und danach der linke Armso nichtich kann nicht zwei Sache mit dem selben Namen habenan der Stelle zumindest nicht ?? Situation aber an der Stelle nicht dass dieser Fehlerdas Fehlersich aus der Männer deine mich die Funktion herausmit den Namen der Vergangenheit sagen ich habe jetzt diese ZieldateiWürfel genannt und die Header-Datei Würfel genanntweil es für mich leichter verständlich istdas die Funktionswürfelheißtheißt nichtdass die Dateien auch Würfel heißen müssen was soll ich noch mal hier klarmachen ich hoffe mir Würfel werfenwas müsste ich jetzt alles umbenennen?? und zwei weiteren Stellen Datei heißt es weiter Würfel Punkt sie?? in der Header-Datei bräuchtenden andern nahm ich die Karriere jetzt ja eine andere Funktion die Würfel werfen heißt und in der Mediendateider Name der Datei ist es ebenKomma da wo ichdadurch die Funktion anwendealle jetztda noch einer da durch die Funktion anwendet da brauche ich jetzt den anderen Namengucken Project Macich dabei bindann sie sie noch mal drei Arten wie Funktionen in C vorkommendas erste ist das ohne Funktion eine Implementierunghaben musseine Definitionsagt man eine Cso wird die Funktion gemacht das Rezept aus buchstabiertdie Definitiondann gibt es eine Deklarationdie steht typischerweise der Header-Datei die Deklarationwie sie die Funktion von außen auswie sie von innen funktioniert keine Implementierungsondern nur wie sie verwendet wird was gefallen was getraut von Typ RDeklarationund dann gibt's den Aufruf einer Funktiondas ist der Aufruf einer Funktion sie wird wirklich ausgeführtjemand kocht die Suppe nach dem RezeptKomma was zu Deklarationendas kann mir dieses Semester nicht so ganz ausführlich Dranvideosganz irgendwo dran aber das war bisschenzu unterschwelligin der Header-Dateider steht so eine Deklarationder C-Compilerwill bevor eine Funktionund andere Sachen verwendetDeklarationsehen ich zeige mal sowasinsF von mir aus eine Funktion heißt Fneunzig Sichteine ganzseitige Variableund gibt von mir ausdreiundzwanzigzweimalzweimal diese ganzseitige Variable zurück ?? ist eine andere Funktiondie die erste verwendet circa zwei verstehen wie ReturndreimalF von Xeine FunktionGMTFunktion F verwendetwenn in dieser Reihenfolgestehen dann ist der C-Compilerglücklichistdaher die Funktion F es schon gegeben?? EditionDevices im F eins sollten zurückerschoss aber normal ProjectMaczur ??alsoich kann eine Funktion verwenden wenn sie vorherdefiniertist wenn Implementierung vorstellte müssen C-Compiler glücklich dann Weise wie die gehtsie können aber auch die Reihenfolge änderndass sie die Funktion erst verwendenund dann im Compiler mitteilenwie die Funktion denn zu machen ist aber dannist das es einmal so was jetzt passiert ?? mir Ärgerund Maces aber wieder die klärt Intercity die Funktion F hatte Joop nicht gehabt oder sich was erfunden nicht gut?? Rücken den Ärger verhindern mit einer DeklarationPunktsie deklarieren die Funktion Fsprechen es gibt hier irgendwo Funktion FD nimmt eine ganze Zahl und liefert eine ganze Zahljetzt ist der Compiler glücklich ?? Evolution G bauen willsollihr Kennerin Kalifen zu Nestern einsetzenund hier unten erfährt die Funktion es wirklich funktioniertmirso geht das also im Sinne Deklarationhaben dann kann der Compiler auchdie Funktion verwendenund deshalb im Endeffekt mit der Header-Dateiin der Header-Datei steht die Deklarationkönnendeshalb kann der Compiler die Funktion verwendendass es jene?? mal ihrweniger typische als Deklaration zu verwenden dass ein Funktionärs deklarieren und später definiert in der selben Dateinormalerweisewird eine Deklarationin die Header-Datei schreibenund die Definitionin die Zieldateischreibensollte noch der Form aber weitervorschreiben das ist die Deklarationdes siehe unten ist die Definitionund dieses hier ist der Aufruf einer Funktiondrei Arten wie Funktionen vorkommenBeistrich etwas klarer machenF von X das ist der Aufruf nicht einmal von Excel von X ist der Aufruf der Funktionkönnte auch übrigenskeine Bedenken gibt vier plus X drinstehenF von vier plus X wäre dann der Aufrufin der Glut galtdiese Header-Datei die sieht so aus wie man normalerweisenicht schreiben würde divers kein Problem das Problemaber sofort richtigich zeige das ?? hier in der Skizzees könnte sein dasseinen eine Zieldateikönnte sein später ist es dann so das in einer Zieldateiganz viele Header Dateien inkludiert sindund danngibt's den Ärger ist es auch möglich in HeaderdateienHeader-Datei zu inkludierenund auch sinnvoll denken Punkt Hpunkt info den Sinusoder Standardpool sie brauchen irgendwo in der Header-Dateibevorzugt Ruder brauchen sich dann der Poolvorgestern der Bus dann das Tool könnteals solches wieder in Headerdateien inkludiert seinKomma zum Schluss den Ärger es kann passieren dass beim Kompilierendieselbe Header-Dateimehrfach vorkommt weil sie der ein Header-Datei Vorkommen in der anderen Header-Dateivorkommen aber mit Institutsdas hört sich esoterisch an Komma wenn sie wirklichenvernünftig groß System haben damit zwanzig dreißig Dateien wird es regelmäßigpassierendass sie in Cloud in Bluts habenund Header-Datei nehmen indirekt mehrfach vorkommendamit das keinen Ärger gibtzweimal dieselbe Datei in den Compilernicht so gutdamit das keinen Ärger gibt dafür gibt'sden Include Guardsund zwar sojetzt kommt der Präprozessordas es einst das einzige was man heute noch in Präprozessor machen solltees sei denn man hat antike Software alsoeine Anweisung ?? Präprozessorist in der ?? wenn nicht definiertund zwar ein SymbolSymbol man sich typischerweise aus dem Dateinamen Gedichten damit es eindeutig ist WürfelUnterstrich habe das gerne nennenin dieses Symbol nicht definiert istdannnehme alles was dahinter stehtwas ich jetzt mache istokay wenn das nicht definiert ist dann sage ich dann definiere ich das Symbol Tiefvereindie reinHaarhier sozusagen Schweif Klammer zu entwirftdas ?? in Stuttgartdas sieht Komma zum ersten Malso sieht sieht es haarsträubendauswenn sie sich solche Dateien wie Messpunkthaaroder Standard ?? Punkt A anguckenstellen sie fest und das kann man ?? weitertreibenaber das ist ein ?? Standardformin Reinformin der Präprozessoralso das was wohl Compiler leuchtende Präprozessordiese Datei zum ersten Mal sieweise nicht zu einem Symbol namens Würfel Unterstrich Haarschön denkt er sich aber weiterF nutzt die Feindes ist nicht definiert ?? also macht er weiteres ist nicht definiertdenn definiert das Symbol als nicht irgendwas ??entweder das Symbol als Geiger Oberst Komma definierter definiertes Symbol als nichts ?? Symbols jetzt definierter liest dieDeklarationseiner Schweifklammer zuEndewenn jetzt bei der selbenKombinationslauffür diese Zieldateidiese Dateien noch mal vorkommtsieht der Präprozessorund ich habe schon ein Symbol als Würfelhaares ist definiertund überspringtbis dahindamit ist der Teilnehmer mit ihr noch einmal gelesen worden zweiten Mal gibt es dieses Symbolunddas ganze was in den ?? drin steht wird übersprungen das ist der Trick bei den StuttgarterKistewirklich weg zu kriegen es einige Compiler Hersteller habenetwas das man sich DagmarFonds stattdessenaber das ist offiziell nicht standardisiertPunkt das wird auf jeden Fall funktionierenletzte Geschichte mit dem Zufallsdingdamit sie aber noch mal die Zieldatei und die Header-Datei anfassenKomma die Zieldateihier gibt's jameineinterne Zahlartjedes Mal in die weiter gestellt wirdund ich möchte gerne dass man diese Zahlaber aucheinstellenkann das man insbesondere zu Beginn des Programms zum Beispiel A mithilfe des Urzeit oder irgendeiner Messung oder was auch immereinstellen kann dass es sich zufälliger anfühlt schreiben Sie eine Funktionmit deren Hilfe sie diese zeitnah einstellenkönnendurchaus oder andere Änderung nach sich ziehendiese Funktiondie fängt ja immer andem A gleich zweiundvierzigist zu Beginn des Programmsimmer dieselbe Vorgang ZufallszahlProgrammstartich möchte gerne zu Programmstartoder auch zu anderen Zeitpunktenandere Zahl einstellen können für Ade mit immer wieder dieselbe Folge kriegenoder sogar auch um sinnvollproduzieren zu können ?? bis zum Schluss wieder auf zwanzig Stellenentwickelt sei er wieder andiese Variableadedarf jetzt nicht mehr einfach innerhalb dieser Schweifklammer entstehen diese Variable A muss auch in einer anderen Funktion zugänglich seinnehmen Sie daraus das war mein Gedanke innerlich etwas kryptisch formuliertzu haben sie eine statische Variable innerhalb der Dateidiese Variable ist jetzt in der DateiwürfelPunkt sie sichtbar und sonst nicht eine statische Variable sie das sie weglassen könnte die Variable auch sowas anderen Dateien sehen wollen sie aber typischerweise nichtlieber verbergeneine statische Variable innerhalb der Dateiundjetzt brauche ich noch ?? Funktion mit der ich diese Variable setzen kann funktioniert also nichts zurückliefertweitsieht würde man ja normalerweisenennensehenals auch in zehnS Wendtsieht wenn indieserFunktiongebe ich ebensoein Bytes ohne Vorzeichengroß Pein weiteresund schmeißedieses Paintdasda was wie vorgespielthathiersoin der DateiwürfelC gibt es jetzt also versteckt in der Datei soll sagen gibt es ein Variable namens A zwei Funktionengreifen auf diese Variable zuSeeed und Würfel werfenzu Programmbeginn wird die Variable ?? zweiundvierzig gesetzt mit Ziels können Sie diese Variable offen anderen Wert setzenwenn sie wollen mit Würfel werfen ?? passiert dasselbewas wohl passiert ist dieses Argreift in beiden Fällen auf diese Variable zu?? und dieses A hier ist nicht hier noch in A genau das ist ein anderes Adieses A hierist eine lokale Variable in der Funktionähmdes ist für den Compilerals ob der ihrKaliber heißen würde und als ob dieses hier ganz aus Eisen dieses andie heißen für uns als Menschen gleich die beiden Variablenfür den Compiler sind das zwei paar Schuhesind schwierig ??ichzeige Komma was sie wirklich passiertderDaxsoKlammer aufin der Dateiwürfelgibt es die statische Variable stet X namens Asteht schon auf irgend einem Wertzweimal sechzehn plus zehn?? vierzig waran diese Variable A steht schon auf irgend einen Wertin diese Dateiwürfelt sie ist die verstecktbezwangen hier an zu arbeiten in meiner MailfunktionKomma weil Onkels der getauchten Variable A das ist diese hier die heißt zufälligso diese lokale Variablewie diese statischen Variablen anderen Datei würdest du den Compilersind zwei verschiedene Sachenzeigt so ausführlich war das oftmissverstanden wirdin zwei Variablen gleich heißen Beistrich nicht die gleichen sind es hängt von den Umständen ab ??verwendet werden wo sie definiert werdendritter ein Beistrich müsse die Fusion endlich auch verwendenamsieht für die noch gar nicht verwendethaben sie aufgepasst was müsste ich jetzt überhaupt tun damit ich diese Funktion Seeed verwenden kannaußerdem müsse deklariert werdenWürfel werfen deklariertin der Header-Dateisieht müsste auch deklarierenalso die Linie einmal kopierenPunkt siewarso jetzt habe ?? Deklarationdiese Deklarationin der Header-Dateiwird in der Mail Datei eingelesen?? dieser Stelle erfährtunsere Minderzahlerfährt Compiler beim verarbeiten der Maildatei sollan dieserLehrstelle erfährt der Compiler beim verarbeiten der Mediendateidas es so eine Funktion Seeedgibt'sdie einen Byte ohne Vorzeichen nimmt und nicht liefertan der Stelle des organisiertesverwenden wir zum Beispiel sagen sieht'ssein Witz für Dritte genau das war Muster vorhanden?? dreiundvierzighier müsste jetzt irgendwas stehen wie wurde die aktuelle Uhrzeit mit etwa dreiundvierzig?? die holen ohne die aktuelle Uhrzeitoder wenn sie sagen wollenwir noch mal die selbe Vorgang Zufallszahlauf diese Weise geht's los mit derselben Vorgang ZufallszahlA noch mal habenso würde das dann verwendet werdenbis müssten wir sogar andere Ergebnisse haben für die StatistikerKomma sei dazu sachtOnkelspro Jahr Mittelwerte zwei Komma vier fünfsind auch tatsächlich andere Zahlen aus