Dateinamen für non-Header Include-Dateien



  • Wie nennt man eine Datei, die man mitten im Code einfügt, weil man bestimmte Codeteile aus Gründen der Übersichtlichkeit auslagert, die aber keine Headerdateien sind und auch keine eigene Übersetzungseinheit, sondern die nur an einer einzigen Stelle eingefügt werden?

    if (a == b)
    {
    #include "CodeForAEqualsB"
    }
    

    Welche Dateiendung würde man hier nehmen?


  • Mod

    .impl sieht man hin und wieder. Aber niemals so wie hier. Hier macht man eine Funktion anstatt "aus Gründen der Übersichtlichkeit" kryptisch und unleserlich zu werden.



  • OK, war n schlechtes Beispiel.

    In meinem Fall ist es eine Ansammlung von Konstanten in einem Spiel:
    Riesiges Array mit allen Tile-IDs für den Hintergrund.
    Randomizer-Werte für die Gegner für jedes Level
    Levelaufbau-Arrays
    usw.

    Diese Werte werden nur an jeweils einer einzigen Stelle gebraucht.
    Wären es nur ein paar Konstanten würde ich sie direkt hinschreiben. Aber da es so viele sind, hab ich sie ausgelagert.

    Der Nachteil, sie in einer tatsächlichen extra Übersetzungseinheit auszulagern:
    Man müsste auch eine Headerdatei erstellen, wo jede einzelne Konstante nochmal mit [tt]extern[/tt] deklariert ist.
    Man kann bei einer Schleife für die Arraygröße nicht [tt]sizeof(array) / sizeof(array[0])[/tt] nehmen und müsste somit wieder für jedes Array die Größe irgendwo hinschreiben.
    Man kann die Konstanten nicht [tt]static[/tt] deklarieren, obwohl sie nur an einer Stelle gebraucht werden.

    Deshalb eben:

    #include "Headers.h"
    
    #include "ConstantsDefinitionsOnlyForThisFile"
    
    <Code>
    

    ".impl" kenn ich vor allem, wenn man plattformunabhängige Funktionen hat und den plattformspezifischen Teil dann in einer extra Datei hat:
    MyFunctions.h
    MyFunctions.c
    und in MyFunctions.c dann per [tt]#ifdef[/tt] MyFunctions_Windows.impl und MyFunctions_Linux.impl etc. eingebaut.

    Sicher, dass das auch für trviale Sachen benutzt wird, die rein der Übersichtlichkeit halber dienen.
    In dem Windows-Linux-Beispiel ist es ja so, dass impl die konkrete Implementierung einer allgemeinen Funktion ist. Aber in meinem Beispiel ist die Konstantendatei ja nicht mehr "Implementierung" als es die reguläre C-Datei ist. Ist impl hier wirklich die richtige Endung?



  • Und in eine extra Datei speichern, die dann geladen wird, geht nicht?
    Wenn nein, würde ich auf .impl setzen.


  • Mod

    Dann nenn es eben .consts, wenn du denkst, dass das besser wäre. Ist doch völlig egal. Was du vor hast ist so unüblich und selten, das kann sowieso niemand allein anhand des Namens verstehen.



  • Techel schrieb:

    Und in eine extra Datei speichern, die dann geladen wird, geht nicht?

    Was? 😕
    Meinst du etwa, ich soll das Zeug in eine Binärdatei packen und mit fopen auslesen?

    Falls ja: Wieso sollte ich das jemals tun? Wieso sollte eine Frage, die rein den Schreibstil von Quellcode betrifft, ausgelagert werden, so dass es einen tatsächlichen Einfluss auf die kompilierte Exe-Datei und deren Funktionsweise hat?

    Also sprich: Weil der Programmierer nicht wusste, wie er die Codedatei benennen soll, ist die Exe-Datei jetzt davon abhängig, immer eine bestimmte andere Datei im Pfad liegen zu haben, die es nie gegeben hätte, wenn dem Programmierer ein Name für den Quellcode eingefallen wäre.

    So meinst du das?

    SeppJ schrieb:

    Ist doch völlig egal. Was du vor hast ist so unüblich und selten, das kann sowieso niemand allein anhand des Namens verstehen.

    Also du willst mir sagen, es kommt nicht oft vor, dass jemand einen ganzen Satz an Daten hat (also nicht Funktionen, sondern nur Konstanten), den er von den regulären Codedateien trennen, die Konstanten inhaltlich aber trotzdem lokal halten will?

    Wie würdest du es denn regeln, wenn du 20 riesige Arrays hättest, die aus jeweils 50-70 Einträgen bestehen und die Levelstruktur der 20 Level darstellen, wobei die einzige Stelle im Code, wo sie benutzt werden, die Stelle ist, an der die aktuelle Level-Array-Konstante auf die allgemeine Level-Array-Variable kopiert wird?
    Dazu noch unzählige Gegnerparameter, Textdialoge etc.
    Würdest du das alles in eine eigene Übersetzungseinheit packen und jedes einzelne dieser Arrays in einer Headerdatei nochmal deklarieren, obwohl nur eine Codedatei drauf zugreifen muss?

    Oder würdest du die Arrays in besagte Codedatei packen und somit erstmal eine riesige Sammlung an Konstanten haben, durch die du durchscrollen musst, bevor du zum eigentlichen Quellcode der Funktionen kommst?



  • Moderne Editoren beherschen Faltung.

    Wenn dich der Text stört, dann wird er ausgeblendet.



  • Für Leveldaten eines Spiels bieten sich doch gerade Dateien an.


  • Mod

    Pyoler schrieb:

    SeppJ schrieb:

    Ist doch völlig egal. Was du vor hast ist so unüblich und selten, das kann sowieso niemand allein anhand des Namens verstehen.

    Also du willst mir sagen, es kommt nicht oft vor, dass jemand einen ganzen Satz an Daten hat (also nicht Funktionen, sondern nur Konstanten), den er von den regulären Codedateien trennen, die Konstanten inhaltlich aber trotzdem lokal halten will?

    Das kommt in der Tat so gut wie nie vor. Wer Nutzdaten fest eincompiliert, macht etwas falsch.



  • DirkB schrieb:

    Moderne Editoren beherschen Faltung.

    Wenn dich der Text stört, dann wird er ausgeblendet.

    Oh Mann. 🙄

    Selbst wenn das eine Alternative wäre (was es nicht ist, denn ich rede hier von Codestrukturierung und da kommt man nicht mit "moderne Editoren können das einklappen"): Ist dir schonmal in den Sinn gekommen, dass das nicht nur eine Konstante ist, sondern ein riesiger Haufen an unterschiedlichsten Konstanten und Makros?

    SeppJ schrieb:

    Das kommt in der Tat so gut wie nie vor. Wer Nutzdaten fest eincompiliert, macht etwas falsch.

    Und seit wann das? Und wieso überhaupt?

    Würdest Du den Wert

    const int FireballsPerOpponentAllLevels[] = { 2, 3, 5, 10 };
    

    auch in eine extra Datei auslagern?
    Wenn ja, wieso?
    Wenn nein, wieso sollten gleichartige Dateien ausgelagert werden, bloß weil es 50 mal mehr Daten sind? Gibt es eine Regel "ab 27 Daten auslagern"?


  • Mod

    Pyoler schrieb:

    SeppJ schrieb:

    Das kommt in der Tat so gut wie nie vor. Wer Nutzdaten fest eincompiliert, macht etwas falsch.

    Und seit wann das? Und wieso überhaupt?

    Immer schon. Weil man dann das Programm nicht neu compilieren braucht, wenn sich Daten ändern, die mit der Programmlogik nichts zu tun haben.

    Würdest Du den Wert

    const int FireballsPerOpponentAllLevels[] = { 2, 3, 5, 10 };
    

    auch in eine extra Datei auslagern?

    Es ist zwar ein extrem langer Bezeichner, trotzdem habe ich ohne Kontext keine Ahnung, was hier gemeint ist.



  • SeppJ schrieb:

    Immer schon. Weil man dann das Programm nicht neu compilieren braucht, wenn sich Daten ändern, die mit der Programmlogik nichts zu tun haben.

    Ja, und? Um also 10 Sekunden bei einer handvoll Compilevorgänge zu sparen, wo ich mal Daten ändere, nehme ich es in Kauf, dass das Spiel für immer externe Abhängigkeiten hat? Wo lebst du? Im Jahr 1980, wo der Compilevorgang für eine Codedatei eine Stunde dauerte?
    Dann kompilier ich's eben neu. Na und? Mach ich sowieso ständig, weil ich noch dran arbeite.
    Und ganz am Ende, wenn alles fertig ist, wird einmalig die Release-Version erstellt. Ob ich da jetzt 20 Sekunden spare, weil die Leveldaten schon im Binärformat vorliegen, interessiert doch wirklich kein Schwein.

    Aber ist auch egal. Fakt ist: Ich habe eine ganz simple Frage gestellt: Wie benennt man Dateien innerhalb von Codedateien?
    Obwohl ja jede Datei heißen kann, wie sie will, gibt es bestimmte Konventionen:
    Header sind H.
    Quellcode sind C.

    Und meine Frage war jetzt lediglich: Wie heißen Sub-Code-Dateien, also Dateien, die keine Header sind, sondern nur einmalig innerhalb einer anderen C-Datei eingebunden werden?

    Und die ganze Zeit wird hier mit irgendwelchen Nerd-Klugscheißer-Phrasen geantwortet: "Klapp doch den Editor ein", "Lagere die Dateien aus und lass das Programm sie einlesen."

    Das hat alles überhaupt nichts mit meiner ursprünglichen Frage zu tun. Ich habe eine Frage zur Dateibenennung gestellt. Ich brauche keine allgemeinen Programmdesigntipps oder Schlaumeiersprüche zur Bedienung von Editoren.


  • Mod

    Zeig mal ein professionelles Programm auf der Welt, bei dem Levelinformationen oder ähnliches eincompiliert sind. Hat man weder in den 1980ern gemacht und bis heute auch noch nicht. Sind wohl alle dumm und nicht so schlau wie du.



  • Pyoler schrieb:

    Ich brauche keine allgemeinen Programmdesigntipps oder Schlaumeiersprüche zur Bedienung von Editoren.

    Du brauchst gar nix. Du weißt eh alles besser. Benenn Deine 'Sub-Dateien' doch 'xxx.sub'.



  • SeppJ schrieb:

    Zeig mal ein professionelles Programm auf der Welt, bei dem Levelinformationen oder ähnliches eincompiliert sind. Hat man weder in den 1980ern gemacht und bis heute auch noch nicht. Sind wohl alle dumm und nicht so schlau wie du.

    Genau das ist das Problem: Du reitest weiter auf dem Levelthema rum. Was ich aber mit meinem letzten Satz sagen wollte: Es ist völlig egal, ob meine Vorgehensweise richtig oder falsch ist. Das ist im Kontext zu diesem Thread off-topic. Wobei es hier im Thread nur gehen sollte, war: "Wie benennt man eine Sub-Code-Datei?" Was in dieser Datei im einzelnen drinsteht, spielt überhaupt keine Rolle.

    Belli schrieb:

    Du brauchst gar nix. Du weißt eh alles besser. Benenn Deine 'Sub-Dateien' doch 'xxx.sub'.

    Ja, danke, Schlaumeier. Dass ich weiß, dass man sie benennen kann, wie man will, und dass ich wissen will, was der offizielle Weg hier ist, hab ich jetzt auch schon zweimal gesagt.

    Ach wisst Ihr was? Ich geb's auf. Das kommt davon, wenn man in einem Forum fragt, in dem lauter Kellerkinder rumhängen. Auf das wesentliche konzentrieren könnt Ihr Euch nicht, Ihr wollt immer nur mit Eurem Nerdwissen angeben: "Ich kann dir zur konkreten Frage zwar nicht helfen, aber ich habe in einem Nebensatz von dir etwas mitbekommen, wo ich mal wieder n bisschen klugscheißen kann, also werd ich jetzt den ganzen Thread lang nur noch darüber diskutieren."

    Wenn jemand fragen würde, ob man ein Fragezeichen in einen Dateinamen eingeben kann, weil er seine Musiksammlung ordnen und "Tina Turner - What's Love Got to Do With It?" schreiben will, würdet Ihr ihm wohl auch erstmal lang und breit erklären, dass man den Namen des Interpreten besser als Ordner erstellt und dann in die Musikdatei nur den Titel reinschreibt.



  • Pyoler schrieb:

    Das kommt davon, wenn man in einem Forum fragt, in dem lauter Kellerkinder rumhängen. Auf das wesentliche konzentrieren könnt Ihr Euch nicht, Ihr wollt immer nur mit Eurem Nerdwissen angeben: "Ich kann dir zur konkreten Frage zwar nicht helfen, aber ich habe in einem Nebensatz von dir etwas mitbekommen, wo ich mal wieder n bisschen klugscheißen kann, also werd ich jetzt den ganzen Thread lang nur noch darüber diskutieren."

    Lol. Deine Arschverletztheit spüre ich noch über das Keyboard.

    Ich hätte eigentlich gut was zu dem Thema beitragen können, weil so was tatsächlich gebraucht werden kann (C++ mit Templates), aber weißt du was? Ich glaube, ich verbringe die Nacht lieber damit, wie ein lautes Kellerkind rumzuautisten. Dumm gelaufen, das.

    Und besorg' dir 'ne anständige Wundsalbe, das riecht ja fast schon lecker.


Anmelden zum Antworten