![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Programmierung > Probleme mit new Operator bei g++ | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
1 -2- 3 | [ - Beitrag schreiben - ] |
17.08.2006, 08:38 Uhr gni Posts: 1106 Nutzer |
Zitat:Der Compiler mag die size_t Definition von clib2 nicht. Da wird "unsigned int" verwendet, der Compiler erwartet aber "unsigned long". Wenn Du das in den Includes "korrigierst", dann funktioniert das Übersetzen. [ - Antworten - Zitieren - Direktlink - ] |
17.08.2006, 08:58 Uhr asrael229 Posts: 37 Nutzer |
Zitat: Wo muesste ich das aendern? Manfred [ - Antworten - Zitieren - Direktlink - ] |
17.08.2006, 10:11 Uhr Solar Posts: 3680 Nutzer |
grep, size_t, typedef... [ - Antworten - Zitieren - Direktlink - ] |
17.08.2006, 15:04 Uhr asrael229 Posts: 37 Nutzer |
Zitat: Ok,nach dem aendern funktioniert zwar die Geschichte mit dem new. Aber es gibt an anderen Stellen Schwierigkeiten. Muss ich mir mal naeher anschauen. Wuerde sich schon lohnen, wenn man keine ixemul braeuchte. Waere aber auch kein Beinbruch. Auf welchem System hast Du denn den Cross-Compiler? Hab mal versucht von adtools die Binutils auf Darwin zu uebersetzen, schlaegt aber leider fehl, sodass ich mir hier keinen Cross-Compiler bauen kann. Haette noch ein PPC-Linux aber was mit i386 hab ich garnix. Hmm, koennte mir auf QEMU ein Linux installieren. Aber da duerfte das Auf meinem 68040 schneller sein. ![]() Gruesse, Manfred [ Dieser Beitrag wurde von asrael229 am 17.08.2006 um 15:05 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
17.08.2006, 17:28 Uhr gni Posts: 1106 Nutzer |
Zitat:Dann mußt Du Dich wohl damit abfinden, das die clib2 nicht mit GG GCC-Ports zusammenspielen will. Zitat:FreeBSD Zitat:Woran scheitert es? Zitat:Prozessor und OS sind egal, hauptsache UN*X :-) [ - Antworten - Zitieren - Direktlink - ] |
17.08.2006, 21:58 Uhr woop Posts: 67 Nutzer |
Zitat: Nein, eigentlich nicht, der passende Konstruktor müsste code:heißen. VerseKey const &k bezeichnet eine konstante Referenz, also eine Referenz die immer auf dasselbe Objekt zeigt und da das Referenzen sowieso tun, ist das const hier überflüssig.VerseKey::VerseKey(const VerseKey &k) : SWKey(k) { ... } code:darf dagegen diesen Konstruktor nicht mit *this aufrufen, weil this in dieser Member Funktion konstant ist (wegen dem const am Ende)SWKey *VerseKey::clone() const woop [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 06:42 Uhr Solar Posts: 3680 Nutzer |
Zitat: Reingefallen! Bei Typen darf const vor oder nach dem Typnamen stehen, bei Pointern muß const nach dem Pointer kommen. Die "klassische" Schreibweise "const int..." ist also syntaktisch die "schlechtere", weil man zwar "const" immer nach dem Konstanten setzen kann, aber nicht immer vor dem Konstanten. const int * -> Pointer auf konstantes int. int * const -> Konstanter Pointer auf int. int const * -> Pointer auf konstantes int (!). int const * const -> Konstanter Pointer auf konstantes int. [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 08:22 Uhr woop Posts: 67 Nutzer |
Zitat: Oops, da hast du natürlich recht... [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 08:59 Uhr asrael229 Posts: 37 Nutzer |
Ich weiss schon, warum ich C++ nicht mag. :-) Beste Gruesse, Manfred [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 09:09 Uhr Solar Posts: 3680 Nutzer |
C und C++ sind eigentlich ziemlich gute Programmiersprachen, wenn man sich nur abgewöhnt, uralt-Dialekte, -Strukturen und -Compiler zu verwenden. Leider sind solche Unmengen an Code eben in diesem Uralt-Stil geschrieben, das "sauberer" Quellcode immer noch eine Seltenheit ist. [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 09:22 Uhr asrael229 Posts: 37 Nutzer |
Hmm. Gegen C hab ich garnichts. Schon sehr viel damit gemacht. Auch Objective-C finde ich richtig super. Mit C++ komm ich nicht klar. Wahrscheinlich auch weil ich damit noch wenig gemacht habe... Manfred [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:05 Uhr asrael229 Posts: 37 Nutzer |
Zitat:Mit einem permission denied: Making all in po make[3]: Nothing to be done for 'all'. /bin/sh ../../binutils/ld/ylwrap 'test -f '../../binutils/ld/ldgram.y' || echo '../../binutils/ld/''../../binutils/ld/ldgram.y y.tab.c ldgram.c y.tab.h ldgram.h y.output ldgram.output -- bison -y -d ../../binutils/ld/ylwrap: line 86: /Volumes/Mirandol/_inProgress/adtools/binutils-build/ld/../../binutils/ld/ldgram.y: Permission denied make[3]: *** [ldgram.c] Error 1 Ich habe ein separates build Verzeichnis benutzt, wird aber auch glaube ich so vorgeschlagen von GNU. Zitat:Hmm, ist nicht so ganz egal. PPC wird von allen BSD (NetBSD, OpenBSD und FreeBSD) nicht komplett unterstuetzt und es fehlen einige Features wie z.B. Firewire Unterstuetzung und anderes. Schade. PPC-Linux dagegen laeuft sehr gut aber auch hier gibt es gegenueber i386 caveats. Gruesse, Manfred [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:16 Uhr gni Posts: 1106 Nutzer |
Zitat:Strukturen in C sind also veraltet? Wußte ich bisher nicht... [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:29 Uhr gni Posts: 1106 Nutzer |
Zitat:Was nach dem "||" kommt, sieht komisch aus (das einzelne "). Was immer da auch passiert bzw. passieren sollte. Woher genau hast Du die Quellen? Ist das ein CVS Checkout? Was passiert in Zeile 86 von ylwrap? Zitat:Ja und das ist auch besser so. Zitat:Für Cross-Compiler tut das nichts zur Sache. Hauptsache der Compiler funktioniert. Ist natürlich bedauerlich das die HW nicht richtig genutzt werden kann. Ich habe zwar mal mit dem Gedanken an FreeBSD auf mac Mini (PPC) gespielt, es aber nicht gemacht. Und jetzt gibt es kein PPC minis mehr bei Apple zu kaufen :-( [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:46 Uhr asrael229 Posts: 37 Nutzer |
Zitat:Ja, das war ein svn checkout vom trunk. Ich hab aber auch die versionen unter release probiert. Zitat:Ja, sollte fuer den Cross-Compiler wurscht sein. Wobei ich auf meinem Debian PPC Linux ein aehnliches Problem mit den Binutils habe. In der Zeile 86 steht: code:$prog ${1+"$@"} "$input" Wenn ich aber meine externe FW Festplatte zum Backupen nicht dranhaengen kann ist das weniger schoen. Auch haben alle BSDs unter Mac es noch fertig gebracht einen vernueftigen Bootloader einzusetzen. yaboot koennte doch wahrscheinlich leicht portiert werden. Ich denke Grundsaetzlich wird die i386 Welt von vielen Sourcen besser unterstuetzt. Auch die Compiler erzeugen IMO besser bzw. schnelleren Code unter i386. Fuer UAE gibts z.B. nen JIT Compiler. Ohne den wird gerade mal ein 68040 auf meinem 1,7 GHz PowerBook emuliert. Beste Gruesse, Manfred [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:48 Uhr Mad_Dog Posts: 1944 Nutzer |
Zitat: Sieht mir so aus, als ob da yacc-Dateien verwendet werden (die .y)... Hast Du yacc bzw. bison (welches hier verwendet wird) installiert? Das sind beides Compiler Compiler. Und Flex (ist ein Scanner-Generator) solltest Du nach Möglichkeit auch haben. -- http://www.norman-interactive.com [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:52 Uhr asrael229 Posts: 37 Nutzer |
Zitat:Ja, das ist bei den Developer Tools von Apple alles dabei. Beste Gruesse, Manfred [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 10:53 Uhr Solar Posts: 3680 Nutzer |
Zitat: Wus? Ach so... Ich meinte Codestrukturen, nicht struct irgendwas. ![]() Ich meine den anscheinend nie aussterbenden Kram wie inkonsistentes Setzen von const, nichtsetzen von const, int statt size_t als Array-Index, lokale Helper-Funktionen extern statt static, alle Variablen am Anfang der Funktion deklarieren, Schleifenzähler außerhalb der Schleife deklarieren, <stdint.h> ignorieren (m.E. der praktischste Header in C99), wildeste Makro-Magie kreuz und quer durch den Code wo's eine inline-Funktion auch getan hätte, pro Quellcodedatei zwei Dutzend Compilerwarnungen fröhlich ignorieren, ... Man kann jede Programmiersprache verhunzen. Man kann aber in vielen Programmiersprachen auch sehr effizient arbeiten. Speziell C++ hat da den "Nachteil", beides bis ins Extrem möglich zu machen. Ich hab' schon C++-Code gesehen, den könnte man sich rahmen und an die Wand hängen, so elegant war der. Im Alltag kriege ich allerdings eher Weinkrämpfe, wenn ich mal wieder ein code:lese...bool hasNext() [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 12:44 Uhr gni Posts: 1106 Nutzer |
Zitat:Trunk ist ok. AFAIK ist nur da was aktuelles und funktionierendes für m68k zu finden. Zitat:Ich würde jetzt mal vermuten, das $prog leer ist und dann versucht das Skript das erste Argument auszuführen. Du könntest ja probeweise ein paar echos davor einbauen, um zu schauen wie die Variablen belegt sind. Zitat:AFAIK kann die OF eines Macs nur von HFS und cd9660 booten. Zitat:Mag sein, das einige Programme eher low-level stuff für x86 haben, aber für reine C/C++ Programme ist die CPU/OS irrelevant. Zitat:Ich kann weder die Codegüte von x86 noch PPC beurteilen ;) [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 12:53 Uhr gni Posts: 1106 Nutzer |
Zitat:Das ist Geschmacksache. Zitat:Reden wir von C? Zitat:Genau _C99_. Es reicht halt nicht, wenn der Compiler das unterstützt. Die Header/Bibliotheken müssen das auch unterstützen. Für AmigaOS/m68k ist das nur bei der clib2 der Fall, die aber anscheinend nicht so recht mit den GG GCCs will. Zitat:C? Zitat:Standardmäßig nehmen C Compiler halt mehr hin. Und oft werden Warnoptionen eines Compilers nicht benutzt, wobei man sich über die Warnungen gelegentlich trefflich streiten kann. Und der nächste Compiler/nächste Version des Compilers meint etwas andeses beanstanden zu müssen. Zitat:Ist das Java? ;) [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 13:11 Uhr Solar Posts: 3680 Nutzer |
@ gni: Stand der Programmiersprache C ist nun einmal C99, und das seit sieben Jahren (ach was ![]() Und wer nicht mindestens -Wall aktiviert, gehört eh nicht an einen C-Compiler, IMNSHO. ![]() Zitat:Zitat:Ist das Java? Java in C++ verpackt. Schau' Dir mal den Source von AStyle v1.15.3 an, Du kriegst einen Schreikrampf... ![]() [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 13:17 Uhr Holger Posts: 8116 Nutzer |
Zitat:Nicht wirklich. Zitat:C99Zitat:Reden wir von C? Zitat:Hää?Zitat:Genau _C99_. Es reicht halt nicht, wenn der Compiler das unterstützt. Die Header/Bibliotheken müssen das auch unterstützen. Für AmigaOS/m68k ist das nur bei der clib2 der Fall, die aber anscheinend nicht so recht mit den GG GCCs will. Natürlich unterstützt ein erst mit C99 definierter Header auch C99. Was das mit den Kompatiblitätsproblemen zu tun hat, die eine nicht zu dem Compiler gehörende Bibliothek hat, die niemand in seinen Compiler patchen muss, will mit nicht in den Kopf. Außerdem waren die Probleme völlig anderer Natur. vbcc und gcc unterstützen C99, andere auf dem Amiga verfügbare Compiler werden eh nicht mehr weiterentwickelt, so what? Zitat:was sonst?Zitat:C? Zitat:Zitat:Ist das Java? Nein, Java hat einen Datentyp boolean, bool gibt's da nicht. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 14:28 Uhr gni Posts: 1106 Nutzer |
Zitat:Das mag ja alles sein, nur hat sich C99 noch nicht als Standard durchgesetzt... Damit ist C99 zwar nett aber "nutzlos". Zitat:Du mußt Compiler und Laufzeit schon trennen. Ein Compiler der C99 kann, muß das nicht als Defaultmode nutzen und die Laufzeit muß schon garnicht C99 ready sein. [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 14:38 Uhr gni Posts: 1106 Nutzer |
[quote]Holger:Zitat:Gehört stdint.h zum Compiler oder zu den Headern der clib? Das ist schon ein Unterschied. Zitat:Welche clib für GCC unter AmigaOS/68k bietet C99 Unterstützung? AFAIK bisher nur die clib2. Und genau die macht Probleme mit den GG GCCs wie dieser Thread ja gezeigt hat. [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 14:43 Uhr Solar Posts: 3680 Nutzer |
Zitat:[/quote] Ab wann betrachtest Du einen Standard als "sich durchgesetzt"? Die Unterstützung in GCC ist schon ziemlich weit... Oder hat sich ein Standard in Deinen Augen erst "durchgesetzt", wenn er zur Default-Einstellung wird? Dann hat sich noch nicht einmal C89 (!) "durchgesetzt", weil so gut wie jeder Compiler den Standard mit seinen eigenen Erweiterungen garniert... Zitat:Zitat:Du mußt Compiler und Laufzeit schon trennen. Ein Compiler der C99 kann, muß das nicht als Defaultmode nutzen und die Laufzeit muß schon garnicht C99 ready sein. Mir geht's darum, das z.B. lokale Schleifenzähler inzwischen Bestandteil der Sprache C ist. Wenn Compiler und/oder Bibliotheken und/oder Programmierer das nicht unterstützen / berücksichtigen, ist das deren Problem, nicht das der Sprache. gni, niemand (ich zumindest nicht) will Dir oder der clib2 am Zeug flicken. Aber es ist doch wohl Fakt, das viele Probleme, mit denen ein Entwickler auf AmigaOS sich heute rumschlagen muß, ihre Ursache in der allgemein desolaten Plattform haben, und nicht im Unvermögen einer Programmiersprache oder ähnliches. [ Dieser Beitrag wurde von Solar am 18.08.2006 um 14:47 Uhr geändert. ] [ Dieser Beitrag wurde von Solar am 18.08.2006 um 14:48 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 16:41 Uhr Holger Posts: 8116 Nutzer |
Zitat:Überhaupt nicht. Für mich besteht ein Compiler aus dem gesamten Paket, das mich in die Lage versetzt, ein Programm in ein lauffähiges Objekt zu übersetzen. Kann es das nicht, fehlt etwas. Zitat:Erstens halte ich es für sehr verdreht, zu behaupten, eine Zusatzbibliothek könne etwas, um im gleichen Atemzug zu behaupten, sie könne es eben nicht, zweitens wüßte ich nicht, was Sprachfeatures wie Schleifeninitialisierer mit einer Linkbibliothek zu tun haben sollten, dritten ist es ja nur Deine Ansicht, dass fehlende Header der compiler-Umgebung eine Linklib-spezifische Angelegenheit sein würden, viertens haben die in diesem Thread erwähnten Probleme der clib2 mit C++ und nicht mit C99 zu tun. Für mich reicht es, wenn z.B. vbcc folgenden code im C99 Modus korrekt übersetzt. C code:Man kann sich natürlich auch noch die nächsten Jahrhunderte selbst kastrieren, weil es irgendwo da draußen einen compiler gibt, der irgendetwas nicht kann. Während die compiler-Entwickler, falls denn dieser compiler noch weiterentwickelt wird, auch weiterhin nicht an der Standard-Unterstützung arbeiten, weil ja keiner diese features benutzt...#include <stdint.h> #include <stdio.h> inline void out(char const * const txt, int8_t const num) { printf("%st%dn", txt, num); } int main(void) { for(int8_t i=0; i<10; i++) out("hello ", i); return 0; } mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ Dieser Beitrag wurde von Holger am 18.08.2006 um 16:42 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 17:05 Uhr whose Posts: 2156 Nutzer |
Zitat: Hm, also vbcc übersetzt das ohne zu mosern, gcc auch (C99 Modus). Irgendwie finde ich es verdreht, über solche Klamotten zu diskutieren, so zu tun, als ginge das alles nicht mit den AmigaOS-Compilern, die noch verfügbar sind und immer noch weiterentwickelt werden, und darüber das eigentliche Problem völlig zu übersehen. GCC ist und bleibt ein echtes Monster, dessen Wartung, Anpassung an "desolate" Plattformen und Verbesserung alles andere als eine simple Aufgabe ist. Wenn dann noch eine (mehr oder weniger) eigene Laufzeitumgebung ins Spiel kommt, wird die Geschichte noch viel unübersichtlicher. Da helfen einem Sprachstandards und neckische Möglichkeiten derselben relativ wenig. Das bleibt Sache der Compiler-Plattform, nicht des Systems, auf dem diese dann laufen soll. Wenn man dann nur über die "Unzulänglichkeiten" von AmigaOS diskutiert bringt das echt wahnsinnig viel. Wenn man dazu in der Lage ist, möge man sich hinsetzen und die entsprechenden Anpassungen für gcc machen, das bringt wesentlich mehr, oder nicht? Was mich aber etwas erstaunt: niemand meckert darüber, daß für das Bauen des GCC so viele der hier angesprochenen "Tricksereien" notwendig sind, um die Formalismen, auf denen GCC basiert, an die Realität anzupassen... Grüße -- --- ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
18.08.2006, 18:51 Uhr Holger Posts: 8116 Nutzer |
Zitat:Darum geht es ja. Es gibt keinen logischen Grund, auf die Features des C99-Standards zu verzichten. Auch wenn noch nicht alle unterstützt werden. Die wesentlichen von Solar genannten Punkte können schon heute <auch auf dem Amiga> verwendet werden. Zitat:Wir haben hier nicht über die Unzulänglichkeiten von AmigaOS diskutiert. Und ich verstehe nicht, welche Anpassungen ich für gcc machen sollte, wenn er out-of-the-box das richtige tut. Wenn jemand meint, sich den compiler mit einer zusätzlichen Bibliothek zerpatchen zu müssen, hat er auch das Problem mit den Inkompatiblitäten. Zitat: Um die ... Formalismen ... an die Realität anzupassen ... ![]() könntest Du das bitte in's Deutsche übersetzen? Worum geht es Dir eigentlich? mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
19.08.2006, 00:32 Uhr whose Posts: 2156 Nutzer |
Zitat: Sorry, ich hab das wohl ein wenig fehlinterpretiert. Zeitweise klang es so, als wäre C99 auf dem Amiga nicht in der vom GCC gewohnten Form möglich (daß der nicht alles brav nach Standard unterstützt ist ja ein anderes Thema). Das man sich den GCC "kaputtpatchen" kann, steht außer Frage. Das geht allerdings nicht nur mit der clib2, das geht auch schon prima beim Bau eines Crosscompilers. Noch schlimmer, wenn selbiger mit einem Crosscompiler erzeugt wird. Da den Überblick zu behalten ist sicher nicht jedermanns Sache, da es ja eigentlich darum geht, etwas anderes mit dem Werkzeug Compiler zu machen. Manchmal kommt beim gcc aber das Gefühl auf, daß der reiner Selbstzweck ist bzw. man erst Compilerexperte sein muß, um ein recht simples C-Programm (wahlweise alle unterstützten Sprachen hier einsetzen) damit schreiben zu dürfen. Die Formalismen-Geschichte: Schau Dir an, wie der GCC funktioniert und wie die ganzen C- Perl- und was was ich noch alles für Dateien aufgebaut sind, die letztendlich einen (hoffentlich) funktionierenden GCC ergeben, dann weißt Du, was ich meine. Grüße -- --- ![]() ![]() [ - Antworten - Zitieren - Direktlink - ] |
19.08.2006, 19:19 Uhr asrael229 Posts: 37 Nutzer |
Zitat:Cool. Hab jetzt zumindest schonmal die Binutils kompilieren koennen. Mit dem gcc-3.3 funktionierts anscheinend. Bei Tiger ist ja standardmaessig der gcc4 aktiviert aber gcc-3.3 wird nachwievor mitinstalliert. Mal schauen, obs mit gcc auch so reibungslos funktioniert. Gruesse, Manfred [ - Antworten - Zitieren - Direktlink - ] |
1 -2- 3 | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Probleme mit new Operator bei g++ | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2025 by amiga-news.de - alle Rechte vorbehalten. |
![]() |