 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 20.06.2012, 23:29 Titel: C, C++ und Pascal in Freebasic? |
|
|
Ich weiß, dass Freebasic ja Assemplercode verarbeiten kann. Aber wie sieht es mit C, C++ und Pascal aus? Kann Freebasic diese Sprachen auch verarbeiten? Warscheinlich nicht oder? Wird es mal einen Compiler geben der dann C, C++ oder Pascalbefehle verarbeiten kann?
Wie gut kann Frebasic etwas mit Assemplercode anfangen?
Gruß
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Cherry
Anmeldungsdatum: 20.06.2007 Beiträge: 249
|
Verfasst am: 20.06.2012, 23:36 Titel: |
|
|
Der Grund, warum man Assemblercode in FreeBasic-Code einbetten kann, ist dass als "Zwischenschritt" vor der eigentlichen EXE-Datei eine Assemblerdatei erzeugt wird. Im Prinzip ist Assembler ja hauptsächlich eine "menschenlesbare Form" des Maschinencodes, es lässt sich quasi 1:1 in Binärcode übersetzen UND UMGEKEHRT (Bezeichner gehen verloren, aber die Logik bleibt erhalten - mal einfach gesagt). Aus diesem Grund ist es immer am einfachsten, wenn ein Compiler Assemblercode erstellt der dann von einem Assembler in Binärcode übersetzt wird (was letztenendes in so einer EXE-Datei drin ist^^).
Normalerweise geht es also BAS -> ASM -> O -> EXE (das O hier ist noch Objektcode, den ich jetzt aber nicht näher erkläre)
Mit -gen gcc (was den C-Emitter aktiviert) geht es BAS -> C -> ASM -> O -> EXE.
In beiden Fällen gibts eine ASM-Datei dazwischen mal. Du kannst diese sehen wenn du mit dem Switch -R kompilierst.
Wenn du nun in eine BAS-Datei ASM-Code einbettest, sagt der FB-Compiler einfach "Herr Assembler, kümmern Sie sich darum!". Er gibt den Code einfach (fast) 1:1 an den Assembler weiter.
Mit C wäre es theoretisch auch noch möglich, aber nur wenn der C-Emitter verwendet wird. Diese Funktion gibt es aber noch nicht, und ich glaube es wird sie auch nie geben, weil das einerseits mir etwas unsinnig erschiene und andererseits sicher irgendwie problematisch wäre. Vermute ich aber einfach mal.
C++ und Pascal werden da wohl überhaupt gar nicht gehen, da diese Sprachen in der "Kompilier-Sprachen-Kette" gar nicht vorkommen.
mfG Cherry |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.06.2012, 00:02 Titel: |
|
|
Cherry hat Folgendes geschrieben: |
C++ und Pascal werden da wohl überhaupt gar nicht gehen, da diese Sprachen in der "Kompilier-Sprachen-Kette" gar nicht vorkommen.
|
Solange man den Code als Bibliothek einbinden möchte und kompatible Objektformate u.ä. benutzt werden, ist es natürlich möglich. Wobei dann natürlich der Linker den Code verarbeitet, nicht der FBC. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.06.2012, 10:51 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Cherry hat Folgendes geschrieben: |
C++ und Pascal werden da wohl überhaupt gar nicht gehen, da diese Sprachen in der "Kompilier-Sprachen-Kette" gar nicht vorkommen.
|
Solange man den Code als Bibliothek einbinden möchte und kompatible Objektformate u.ä. benutzt werden, ist es natürlich möglich. Wobei dann natürlich der Linker den Code verarbeitet, nicht der FBC. |
Das ist schon was (vollkommen) anders als die Möglichkeit verschiedene Sprachen zu mischen.
Die GCC enthält ja bekanntermaßen C, C++, Objective C und Fortran Compiler, und obwohl das alles in der gleichen Suite drin ist, ist es nichtmal dort möglich C und Fortran (bspw.) zu mischen.
C und C++ kann man mischen, weil beide vom gleichen Compiler gehandhabt werden (liegt ja auch nahe).
Assembler geht nur deswegen, weil es praktisch keine Interdependenzen zwischen dem Assemblersnippet und deinem restlichen Programm gibt.
Du kannst schließlich nur auf Symbole zugreifen und das Code-Snippet kann direkt in die Ausgabedatei (Assembler) eingebettet werden, was mit C oder Fortran schlicht nicht geht.
Ich frage mich allerdings, warum du C in FreeBasic schreiben willst. Vom Sprachumfang her ist FreeBasic eine geringe Übermenge von C mit etwas mehr Komfort, alles was in C geht (außer Mehrfachdefinitionen), geht auch in FB. |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 21.06.2012, 14:07 Titel: |
|
|
Zitat: | Ich frage mich allerdings, warum du C in FreeBasic schreiben willst. Vom Sprachumfang her ist FreeBasic eine geringe Übermenge von C mit etwas mehr Komfort, alles was in C geht (außer Mehrfachdefinitionen), geht auch in FB. |
Ich habe im Internet einen Quellcode gefunden der vermutlich in C++ geschrieben ist. Jetzt dachte ich an eine einfache elegante Lösung ohne den Quellcode nach Freebasic umschreiben zu müssen. _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 21.06.2012, 15:36 Titel: |
|
|
Öh schreib halt nen kleinen C-Wrapper und linke den mit deinem Programm zusammen...!? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.06.2012, 16:28 Titel: |
|
|
28398 hat Folgendes geschrieben: |
Das ist schon was (vollkommen) anders als die Möglichkeit verschiedene Sprachen zu mischen. |
Würde aber sogar genau tun, was er wollte in diesem Fall. Aber ja, in FB neu schreiben wäre vermutlich sinnvoller für eine einzelne Funktion. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|