Was der HTC so tut, weiß ich nicht. Ich kenne den Compiler nicht. Der zcc tut so einiges, darunter Compiler-Aufruf, Linker-Aufruf, Assembler-Aufruf, Optimizer-Aufruf, Disk-Image-Erzeugung, usw. Leider ist der zcc nicht ausführlich dokumentiert. Wenn man ganz genau wissen will, was er tut, dann muss man wohl in den Source Code des zcc schauen...kurt hat geschrieben: ↑19.03.2023, 10:37 Ich häng' mich mal mit obiger Anmerkung von Paul mit einer eigenen Frage hierzu dran. Bei meinen Aktivitäten mit dem HTC unter CPM habe ich das Problem, das ein "Hello World" regelmäßig ein 14K Binary erzeugt, egal was ich versuche. Es macht den Eindruck, als wenn per Default eine ganze Menge Zeugs standardmäßig mit eingebunden wird, obwohl sie eigentlich garnicht benutzt bzw. angefordert werden. Eben solche Sachen wie File-Operationen, Mathe-Funktion etc. Nur für die Ausgabe eines schnöden einzeiligen Textes ist das alles sicherlich nicht erforderlich. Beim Aufruf des C309 vom HTC-Paket startet anscheined ein Batch-Prozessor, der vordefiniert alle erforderlichen Schritte für die Übersetzung nacheinander abarbeitet. Beim zcc dürfte das nicht viel anders sein, wie es scheint. Dieser Batch-Prozess nimmt durchaus zusätzliche Parameter entgegen, aber anscheinend nicht so, das sich damit ein Ausschluß von unerwünschten Dingen im fertigen Binary erreichen läßt. Ich habe Dr. Google einmal hierzu bemüht und bin auf Hinweise gestoßen, das da ev. im C-Standard Papier (hoffe mal, ich formuliere das richtig) Vorgaben definiert sind, wie automatische Compilierung oder explizierte befehlszeilengesteuerte Übersetzung zu behandeln sind. Wenn ich also jeden Schritt einzeln anstoße, kann ich mehr Paramter angeben, die dann wohl auch beachtet werden. Mithin ist eine bessere Beeinflussung des Ergebnis (speicheroptimiert oder laufzeitoptimiert...) möglich.
Ist dazu etwas bekannt ?
Je nach Compiler (und Linker) gibt es unterschiedliche Optionen. Was in allen C-Implementierungen gleich ist: zuerst wird der C-Präpozessor ausgeführt (die Präprozessor-Direktiven sind die Zeilen, die mit einem "#" beginnen), dann erst der eigentliche Compiler. Wie der dann den Code erzeugt, ist seine Sache. Viele C-Compiler - so auch die beiden vom z88dk unterstützten - erzeugen Assembler-Code und nicht direkt Maschinencode. D.h. nach dem Compile-Vorgang wird noch ein Assembler aufgerufen um das fertige Binary zu erhalten, welches schließlich vom Linker in eine ausführbare COM-Datei überführt wird. Und schlussendlich wird noch ein Disk-Image erzeugt, das die COM-Datei enthält.