vorhandenes ANSI C Projekt



  • Ich liebe es wenn die Leute ne Frage stellen und sich dann nie wieder melden! 😡



  • Hi, sry hatte net mehr dran gedacht hier gepostet zu haben, erst nach deiner zweiten Antwort ne mail bekommen. Mit auskommentieren hatte ich es auch versucht, aber hat auch bei mir so viele Fehler geworfen. Hab absolut ka, wie der das zum rennen gebracht hat und das deprimierende ist, in seinem Buch steht, dass diese Beispiele keine Probleme beim kompilieren geben sollen. Hab nun nochmal nen Bekannten gefragt, ob er das zum laufen bekommt.

    Trotzdem vielen Dank für deinen Versuch und deine Mühe. Falls ich es noch zum laufen bekomme, sag ich mal Bescheid, wie ich es geschafft hab, falls es jm interessiert.

    VG



  • Moin,

    passst schon. Wenn du obige Anleitung befolgst gibts jede Menge Warnungen, die zeugen zwar von schlechtem Programmierstil, hindern den Compiler aber nicht an seiner Arbeit (d.h. es wird eine .exe erzeugt). Fehler hingegen sind fatal und führen zum Abbruch des Compiliervorgangs.



  • PS: Und was zum Teufel ist eigentlich "Partikelschwarmoptimierung" für ein Dings?



  • Bin grad an nen paar Papern zu diesem Thema dran, werde es morgen oder am WE nochmals ausprobieren.
    Partikelschwarmoptimierung ist eine Metaheuristik zur Lösung von Optimierungsproblemen. In diesem Programm ist diese Heuristik implementiert und auf das Travelling Sales Man Problem angewendet.

    kurz: Partikelschwärme sind einzelne Partikel(mögliche Lösungen) in einem Lösungsraum, die nun durch Nachbarschaftsbeziehungen und eigene Geschwindigkeit sich in diesem Lösungsraum bewegen und eine optimale (oder bessere als die bisherige) Lösung suchen.

    Hoffe war verständlich, das kurz und knapp zu fassen, fällt mir nen bissl schwer.

    Suche grad ein Diplomarbeitsthema und das klang sehr interessant und ich schaue nun was es schon alles gibt und was ich dann machen könnte.

    Gruß



  • Hoffe war verständlich

    Nein... *lach*

    Vom Handlungsreisenden hab ich schon gehört, aber der Rest...

    Lass mal stecken, klingt nach komplizierter Mathematik. 😮



  • Ach du heilige Scheiße, scheinbar gibt es zwei Leute im Universum, die solchen Blödsinn machen. Zitat:

    #include "global_var.c"
    
    // (...)
    
    #include "display.c"
    #include "display_position_TSP.c"
    #include "graph_tools.c"
    #include "math_add.c"
    #include "particle_tools.c"
    #include "swarm_tools.c"
    
    // (...)
    
    #include "f_TSP.c"
    

    😮

    Ansonsten verrät der Einsatz der syscall.h, dass es sich dabei um ein POSIX-Programm handelt, ich bin also nicht sicher, ob das unter Windows so laufen wird. gcc 4.5.1 frisst es hier selbst mit -Wall ohne Warnungen, wenn man erst einmal raus hat, was eigentlich kompiliert werden muss. Allerdings lässt die #includerei von Quellcodedateien natürlich alle Warnglocken schrillen.

    Umso merkwürdiger ist es allerdings, dass sämtliche Codedateien CRLF-Zeilenenden haben - ist das vielleicht zur Benutzung mit Cygwin o.ä. gedacht?



  • Von Posix hatte mir Google erzählt, aber die Datei scheint nicht gebraucht zu werden, zu mindestens kompiliert es auch ohne...

    Allerdings lässt die #includerei von Quellcodedateien natürlich alle Warnglocken schrillen.

    Anfängerfrage: Warum? 😕



  • (Sry für Doppelpost, kann als Gast nicht editieren.)

    In CodeBlocks bekomme ich nachdem ich wie oben beschrieben syscall.h und eine doppelte Deklaration auskommentiert habe 29 Warnungen. OS ist XP, Compiler ist MinGW, gcc -v sagt Version 3.4.5, -Wall hab ich in CodeBlocks standardmäßig aktiviert.

    Compiling: ...\pso_tsp_ansi_c\main.c
    In file included from ...\pso_tsp_ansi_c\main.c:156:
    ...\pso_tsp_ansi_c\math_add.h:12:30: warning: no newline at end of file
    In file included from ...\pso_tsp_ansi_c\main.c:157:
    ...\pso_tsp_ansi_c\particle_tools.h:21:81: warning: no newline at end of file
    In file included from ...\pso_tsp_ansi_c\main.c:163:
    ...\pso_tsp_ansi_c\graph_tools.c: In function val graph\_min\_tour(graph)': ...\\pso\_tsp\_ansi\_c\\graph\_tools.c:133: warning: converting to \int' from `double'
    ...\pso_tsp_ansi_c\graph_tools.c:150: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\graph_tools.c:152: warning: converting to `int' from `double'
    In file included from ...\pso_tsp_ansi_c\main.c:164:
    ...\pso_tsp_ansi_c\math_add.c: In function int alea(int, int)': ...\\pso\_tsp\_ansi\_c\\math\_add.c:12: warning: converting to \int' from `float'
    ...\pso_tsp_ansi_c\math_add.c:16: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\math_add.c: In function float alea_float(float, float)': ...\\pso\_tsp\_ansi\_c\\math\_add.c:64: warning: converting to \int' from `float'
    In file included from ...\pso_tsp_ansi_c\main.c:164:
    ...\pso_tsp_ansi_c\math_add.c:244:1: warning: no newline at end of file
    In file included from ...\pso_tsp_ansi_c\main.c:165:
    ...\pso_tsp_ansi_c\particle_tools.c: In function velocity coeff\_times\_vel(velocity, double, int, int)': ...\\pso\_tsp\_ansi\_c\\particle\_tools.c:646: warning: converting to \int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:659: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c: In function particle move_towards(particle, particle, coeff, int, int, int, int, int)': ...\\pso\_tsp\_ansi\_c\\particle\_tools.c:1178: warning: converting to \int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1179: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1180: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\particle_tools.c:1207: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1239: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1240: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1241: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\particle_tools.c:1256: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1257: warning: converting to `int' from `double'
    ...\pso_tsp_ansi_c\particle_tools.c:1258: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\particle_tools.c: In function velocity vel\_plus\_vel(velocity, velocity, int, int)': ...\\pso\_tsp\_ansi\_c\\particle\_tools.c:1748: warning: converting to \int' from `float'
    In file included from ...\pso_tsp_ansi_c\main.c:166:
    ...\pso_tsp_ansi_c\swarm_tools.c: In function swarm init_swarm(int, graph, int)': ...\\pso\_tsp\_ansi\_c\\swarm\_tools.c:68: warning: converting to \int' from `float'
    ...\pso_tsp_ansi_c\swarm_tools.c:83: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\swarm_tools.c:115: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\main.c: In function int main()': ...\\pso\_tsp\_ansi_c\\main.c:283: warning: converting to \int' from `float'
    ...\pso_tsp_ansi_c\main.c:314: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\main.c:322: warning: converting to `int' from `float'
    ...\pso_tsp_ansi_c\main.c:472: warning: converting to `int' from `double'
    Linking console executable: ...\pso_tsp_ansi_c\main.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 29 warnings



  • Bingo, jetzt hast du das vorausgesagte Ergebnis selbst erzeugt; und, fliegen deine Schwärme jetzt?



  • Ich bin nicht der Fragesteller (Irren ist menschlich 😉 )...



  • Gast4585945874 schrieb:

    Von Posix hatte mir Google erzählt, aber die Datei scheint nicht gebraucht zu werden, zu mindestens kompiliert es auch ohne...

    Allerdings lässt die #includerei von Quellcodedateien natürlich alle Warnglocken schrillen.

    Anfängerfrage: Warum? 😕

    Der übliche Ablauf der Kompilation eines C-Programms ist hier ganz gut veranschaulicht:

    http://www.eng.hawaii.edu/Tutor/Make/1-3.html

    Jede Toolchain der Welt ist darauf ausgelegt, dass das so gemacht wird. Jeder C-Programmierer der Welt, der nicht absoluter Anfänger oder völlig verrückt ist, erwartet, dass Code so funktioniert. Quellcodedateien werden kompiliert, Header können an verschiedenen Stellen eingebunden werden, das ist die Konvention.

    Weicht man davon ab, läuft man in eine ganze Reihe von Problemen. Das erste und wichtigste ist, dass es einen Wildwuchs befördert, durch den das Projekt sehr schnell höchst unübersichtlich wird. Du hast eine main.c, die modul1.c und modul2.c #includet, von denen modul1.c noch untermodul1.c, untermodul3.c und untermodul6.c einbindet, modul2.c dagegen untermodul4.c und untermodul5.c (untermodul2.c wurde überflüssig und entfernt). Wenn dann eine Forwärtsdeklaration notwendig wird, wird diese zunächst über die ganzen #includes geschrieben (oder auch dazwischen), bis jemand das Konzept von Headerdateien erklärt und etwa anderthalb Headerdateien zusammengehackt und oben davor geschrieben werden. Solche Änderungen dauern zunehmend länger, weil die Zusammenhänge unklar sind - modul2.c verlässt sich beispielsweise darauf, dass modul1.c untermodul3.c einbindet, weil darin eine bestimmte Funktion definiert wird, so dass untermodul3.c aus modul1.c auch dann nicht entfernt wird, wenn modul1.c diese eigentlich gar nicht mehr benötigt.

    Wenn der ursprüngliche Coder dann lernt, wie ordentliche Projektorganisation eigentlich gemacht wird, endet man mit einem Projekt, das 30 Quellcodedateien hat, von denen fünf einzeln kompiliert werden müssen und jeweils einen Baum von ge#includeten Quellcodedateien, die nicht einzeln kompiliert werden dürfen bzw. können hinter sich herziehen. Einige Jahre später muss das ganze von Grund auf neu geschrieben werden, weil sich keine Sau mehr durch das Dickicht durchfindet.

    Es ist wichtig zu verstehen, dass Programmierung sich in erster Linie nicht darum dreht, den Computer dazu zu überreden, etwas zu tun, sondern um Daten- und Projektorganisation.

    Zusätzlich läuft man an bestimmten Stellen in technisch sinnloses Verhalten. Beispielsweise ist es bei statischen Bibliotheken üblich, dass nur die Übersetzungseinheiten an das benutzende Programm gelinkt werden, die dieses auch benutzt. Hat man jetzt bei der Kompilation alles in einem großen Monolithen verpackt, ist eine sinnvolle Auswahl natürlich nicht möglich. Auch wird es einem Buildsystem durch solche Konstrukte unmöglich, nur die Teile neu zu kompilieren, die sich tatsächlich geändert haben, und es kann in einer IDE unmöglich werden, alle zu einem Projekt gehörigen Dateien auch in die Projektstruktur der IDE aufzunehmen, was schon bei einfacher Verwendung der IDE höchst unpraktisch ist, aber beispielsweise in Verbindung mit Versionskontrolle vernünftiges Arbeiten unmöglich macht.



  • Wow, Danke für die ausführliche Erklärung. 👍 C ist ja eine tolle Sache, aber das ganze "Drumherum" mit Toolchain, make, Objektdateien und Co... *stöhn*

    Und dann greift Anfänger, noch dazu unter Windows, natürlich zur nächstbesten IDE wo es nur Strg+F9 braucht um zu funktionieren und die Grundlagen bleiben auf der Strecke... 🙄

    Da muss ich nochmal ganz genau lesen um deine Ausführungen zu verstehen. 😮


Anmelden zum Antworten