Hallo,
als Freizeitbeschäftigung habe ich begonnen mich für FreeBasic zu interessieren (habe vor Jahrzehnten Basic für DEC programmiert). Nun stellt sich die Frage: ich habe einen 64Bit-PC und einen 32-Bit Laptop, beides unter Windows10. Ich möchte die exe-Programme auf beiden Rechnern laufen lassen. Ich habe gelesen, dass es in FreeBasic die Interger-Datentypen als Integer(32) und Interger(64) gibt. Heißt das, dass ich für meinen Fall nur Interger(32) verwenden darf?
Grüße
Kilix
Die Datentypen haben nur indirekt etwas bzgl. der Performance der s. g. Busbreite zu tun.
Erst wenn Du direkt die Windows-API oder Dritttools nutzt, kommst damit in Berührung, weil sich Aufrufparameter und Rückgabewerte der jeweiligen Funktionen an der Busbreite orientieren.
Ich weiß nicht wie es bei FreeBasic ist, aber einige Sprachen bieten Funktionalitäten, dass mit einem Quellcode beides abgebildet wird. Typischerweis sind das die s. g. bedingte Kompilierung und spezielle Datentypen, die beim kompilieren je nach angebener Zielplattform die mal 32bittig, mal 64bittig sind.
Danke für die Antwort!
Beim Lesen der Einführung in das Programmieren mit FreeBasic habe ich außer bei den Integerangaben nichts gesehen was auf den Unterschied 32- und 64-Bit hinweist. Ich werde mir das aber noch genauer ansehen, vielleicht hab ich da was falsch verstanden. Denn wenn es für 32- und 64-Bit veschiedenen exe-Versionen geben soll müsste das ja beim Compilieren abgefragt werden.
Danke
Kilix
Die Datentypen haben exakt gar nichts mit der Exe-Datei zu tun. Man kann auch auf einem 1Bit-Prozessor (ja, sowas gibt es) mit 32Bit-zahlen hantieren.
Wichtig ist nur, dass du beim Kompilieren angibst, dass es eine 32Bit-Exe werden soll.
Das wußte ich schon, dass die Datentypen nichts mit der exe zu tun haben. Ich war mir nur nicht sicher ob integer(32) und integer(64) rechnerabhängig sind - aber offenbar nicht.
Was die exe betrifft fragt der Compiler nicht ob es eine exe für 32 oder 64Bit sein soll. Ich nehme an er nimmt 64Bit weil der Rechner 64Bit hat. Das hieße, dass ich die bas-Datei auf dem 32Bit rechner neu kompilieren muss.
Das wird normalerweise nicht abgefragt, sondern man verwendet den entsprechenden Compiler.
Ok, danke! Da muss ich mich schlau machen, ich habe das gemeinsame Setup für FreeBasic-Editor und Compiler (wxFBE mit FreeBASIC Compiler] heruntergeladen und installiert.
Allerdings konnte ich auf der Downloadseite keinen Hinweis auf 32 oder 64 Bit finden. Ich werde einfach einmal anfangen und probieren ob es am 32Bit Rechner auch läuft - das ist schließlich nicht mein Hauptanliegen.
Hmnja…
Es geht ja nicht darum, ob auch mit Datentypen umgegangen werden kann, die größer als die Registergröße sind, sondern darum ob die Datentypen auf 32 und 64Bit unterschiedlich groß sind.
Ein Pointer zum beispiel ist in einer 32Bit-Anwendung 32Bit lang, daher können da maximal 4GB adressiert werden. In einer 64Bit-Anwendung ist ein Pointer 64Bit lang.
Ein INT ist mindestens 16 Bit lang, eine allgemeine Definition gibt es aber nicht. Auf dem PC sind es normalerweise 32 Bit, und es liegt der Verdacht nahe, dass das eben vom 32Bit-System kommt, und bei 64 Bit eben auch das INT 64 Bit lang ist. Die meisten Programmiersprachen machen da aber keinen Unterschied, ein INT ist immer 32Bit lang. Denn das kann massive Probleme geben, und es gibt ja 64Bit-Datentypen.
Und dann liest man das hier (https://documentation.help/FreeBASIC/KeyPgInteger.html):
Die Größe eines INTs ist in diesem Basic also tatsächlich davon abhängig, ob es ne 32- oder 64-Bit-Anwendung ist. Aber man kann bei der Varialblendeklaration die Größe angeben, oder durch die Compiler-Flags 32 Bit oder gar 16 Bit erzwingen.
Man sollte also genau prüfen, ob es mit 64bit langen INTs ein problem geben kann, oder einfach 32Bits erzwingen.
Ob eine Anwendung jetzt 32 oder 64 Bit ist, ist normalerweise ne Compiler-Option. Und klar, während 32Bit-Anwendungen auch auf nem 64Bit-System laufen, funktioniert das umgekehrt nicht.
Ja da liegt doch etwas der Hund begraben nachdem es verschiedene Intergertypen gibt, die sich in der Länge, also Anzahl Bit unterscheiden und da kann es zwischen 32bit- und 64bit-Systemen durchaus etwas problematisch werden (in tiefere Details bin ich noch nicht eingedrungen). Was meine Anwendung betrifft werde ich mit dem 16bit. Interger leicht das Auslangen finden. Das entspricht also dem Datentyp SHORT bzw. im FreeBasic-Compiler v0.90 dem Typ INTEGER<16> mit Zahlenwerten von -32768 bis +32767.
Was den Compiler selbst betrifft habe ich gerade in einem FreeBasic-Forum gefragt und denke dort die produktspezifischen Antworten zu erhalten.
Danke
kilix
Wo in der Frage steht das?
Ich bin da nicht der Spezialist und hab auch nicht die Absicht in alle Details zu gehen. Aber zur Frage: soweit ich das gelesen habe sind die Datentypen unterschiedlich groß.
Was ich aber im FreeBasic-Forum erfahren habe ist, dass der von mir installierte Compiler 32bit-Programme erzeugt, die auch auf 64bit-Rechnern laufen. Das ist eigentlich das was ich wissen wollte.
Was da wesentlich tiefer geht übersteigt mein EDV-Wissen (und ich war nie Programmierer), das nun auch schon mehr 35 Jahre alt ist und damit noch fast in der Steinzeit liegt. Nachdem ich aber nur einfache Programme für den Eigengebrauch machen will reicht das - soviel ich bis jetzt gesehen haben - durchaus aus.
Trotzdem vielen Dank an alle die sich hier bemüht haben mir zu helfen!
Ich weiß zwar nicht, was GENAU du meinst, aber vermutlich sind sie das. Nur ist das eben völlig uninteressant beim Programmieren.
ich wollte nur bestätigen, dass Interger in den beiden System unterschiedlicher Läge sind aber wie du sagst das interessiert beim Programmieren nicht. Ursprünglich fragte ich aus Unsicherheit aber jetzt weiß ich, dass es da kein Problem gibt und, dass meine Programme sowohl auf 32- also auch auf 64Bit-Systemen laufen. Damit ist mein diesbezügliches Problem gelöst.
Nachdem ich das als Hobby betreibe und meine EDV-Erfahrung nun schon mehr als 30 Jahre zurückliegt bin ich froh wenn ich FreeBasic soweit beherrsche, dass ich meine einfachen Programme erstellen kann. Das gelingt mir bis jetzt, mit einiger Mühe, ganz gut.
Grüße
kilix
Echt? Auch dann, wenn man mit Werten arbeitet, die auch mal größer als 2.147.483.647 sein können?
Ja, selbstverständlich.
Ob ein Datentyp 32bit oder 64bit lang ist, ist völlig unabhängig davon, ob es sich um ein Programm für ein 32bit- oder ein 64bit-Betriebssystem handelt. Und deshalb ist es auch beim Programmieren komplett uninteressant. Auch auf einem 8bit-System sind 64bit-Datentypen möglich, das ist doch nun wirklich absolut nichts neues, das habe ich schon vor über 30 Jahre benutzt.
Dass man den richtigen Datentyp passend zur Größe der Werte verwendet ist ebenso selbstverständlich. Und ich setze noch einen oben drauf: dass die Werte nicht zu groß sind sollte man nicht nur einfach mal vermuten, sondern IN JEDEM EINZELFALL AUCH PRÜFEN! Und zwar nicht nur beim Programmieren, sondern auch bei der Laufzeit des Programms. Und dabei berücksichtigen, dass auch Zwischenwerte einer Berechnung zu groß werden können und die Reihenfogle einer Berechnung deshalb wichtig sein kann. Und dazu muss man eben für jeden einzelnen Datentyp IMMER wissen, was jeweils erlaubt ist. Völlig egal, ob das nun 8, 16, 32 oder 64 bit sind.
Und immer noch völlig unabhängig davon, welches Betriebssystem man verwendet. Es ist ganz allein Sache des kompilers, die jeweils passenden Bibliotheken einzubinden, die dann mit diesen Datentypen umgehen können.
Kann es sein, dass du aus seltsamen Gründen die Datentypen mit dem Betriebssystem verbindest?