StormC Support (deutsch) |
Dies ist ein zusätzlicher deutschsprachiger Supportbereich für StormC. Alle Patches etc. finden Sie jedoch ausschließlich im englischen Supportbereich. | ||
Hier finden Sie weiter Hilfen, Patches und Updates: StormC Support (english) |
||
Häufig gestellte Fragen und deren Antworten |
Frage 1: Warum hat StormC keinen "Global Optimizer"? Frage 2: Warum ist selbst ein kleines Programm wie "Hello World" gleich mehrere KBytes lang? Frage 3: Wie kann man ein "Hello World" Programm wirklich klein kompilieren? Kann man auf Fliesskommaausgabe verzichten und reicht einem die Pufferung des AmigaDOS aus, kann man jederzeit zur Ausgabe das AmigaDOS direkt verwenden. Die Funktionen "VPrintf" und "VFPrintf" ermoeglichen naemlich direkt die Ausgabe aehnlich wie "printf" auf AmigaDOS Dateien. Allerdings sind diese Funktionen nicht 100% ANSI kompatibel.Weitere Moeglichkeiten bietet natuerlich der Verzicht auf das automatische Oeffnen und Schliessen der Bibliotheken, denn die dazu benutzten Funktionen bieten eine komfortable Fehlermeldungsausgabe mit Unterscheidung zwischenWorkbench und CLI Start eines Programms und Beachtung alter Betriebssystemversionen 1.3 und aelter. Dieser Komfort ist nicht fuer jedes Programm notwendig. Man kann einen Minimalstartupcode, den man in Assembler schreibt als eigenen Startupcode benutzen und darin nur die notwendigsten Arbeiten erledigen, z.B. das kleine Datenmodell unterstuetzen ohne gleichzeitig residente Programme zu erlauben. Frage 4: Warum kompilieren andere Compiler schneller als StormC? StormC erzeugt sauberen optimierten Code mit optimaler Registerbenutzungund vielfaeltigen Optimierungen. Ausserdem ist StormC konsequent auf den PowerPC vorbereitet und verzichtet deshalb auf den Einsatz schneller aber fehleranfaelliger Assemblerroutinen. Leider ist darum die derzeitigeVersion des Compilers nicht so schnell wie beispielsweise MaxonC++, allerdings arbeiten wir an einer speziellen Optimiererstufe fuer die Entwicklungsphase eines Projektes mit noch kuerzeren Uebersetzungszeiten. Frage 5: Warum ist die Bibliothek "storm.lib" so gross und warum gibt es im Gegensatz zu SAS/C nur eine Bibliothek? StormC unterstuetzt ein weiterentwickeltes Objektformat, das auch bei Linkerbibliotheken zum Einsatz kommt. Dieses Format ist 100% kompatibel zum alten (sowohl aufwaerts, wie auch abwaerts), allerdings koennen der StormLinker und der StormC Compiler mit diesem Format mehrere Datenmodelle in einer Objektdatei aufnehmen. Damit bleibt fuer Sie nicht mehr die fehleranfaellige Auswahl der richtigen Bibliothek zu ihren gewaehlten Compileroptionen, sondern der Linker waehlt aus der grossen Bibliothek "storm.lib" die Teile aus, die fuer das gewaehlte Datenmodell (grossesDatenmodell oder eines der beiden kleinen Datenmodelle) gerade passt. Deshalb ist die "storm.lib" etwa so gross, wie drei einzelne Bibliotheken fuer jedes Datenmodell zusammen. In Zukunft wird StormC auch noch verschiedene Codemodelle und CPU- bzw. FPU-Modelle in der Bibliothek unterstuetzen, sodass die "storm.lib" und alle weiteren Bibliotheken jeweils optimale Programmeerzeugung automatisch erlauben. Frage 5: Warum kommt es zu der Linker-Fehlermeldung "Symbol _exit nicht definiert", wenn man als Shared-Library linkt? Die Shared-Library ruft die ANSI-Funktion exit() auf. Das kann sie zu einen explizit, weil Sie diese Funktion verwenden, oder zum anderen implitzit durch Linker-Bibliotheken, die diese Funktion verwenden. Die "Storm.Lib" nutzt diese Funktion beim automatischen Oeffnen der benutzten Shared-Libraries, z.B. der "utility.library". Grundsaetzlich darf aber eine Shared-Library die Funktion exit() nicht verwenden, da sie nicht einfach so beendet werden kann. Wie vermeidet man den Aufruf? Man darf das automatische Oeffnen von benutzten Shared-Libraries nicht verwenden, sondern muss die Bibliotheken wie im Handbuch auf Seite 140 beschrieben, oeffnen und schliessen. Um herauszufinden, welche Bibliotheken alle benutzt werden, sollte man zuerst eine Funktion: void exit() {} in die Shared-Library aufnehmen. Jetzt laesst sich die Library linken. |
|