ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > StormC4 (GCC) und Reaction-Macros | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
08.02.2003, 17:50 Uhr Cyborg Posts: 47 Nutzer |
Hallo Leute, Ich hoffe, einer von Euch kann mir helfen.. bin nämlich langsam am verzweifeln.. Ich habe ein Reaction-Projekt mit StormC4 (GCC) in C++ begonnen. Soweit klappte alles.. allerdings habe ich mich aus verschiedenen Gründen dazu entschlossen das Projekt auf Ansi-C zu portieren. Soweit so gut.. also den Code umgeschrieben und kompiliert.. aber StormC wirft mir jetzt plötzlich "unterminated macro call" bei dem Code für die Oberfläche.. Der Code müßte aber stimmen, weil im C++ Projekt lief er auch ohne Probleme und Reaction-Programmierung ist ja nicht abhängig von C oder C++. Sogar folgender Minicode bringt mir diesen Fehler: --- Object *myobj; myobj = (Object *) WindowObject, EndWindow; --- "unterminated macro call" bei WindowObject. Ich dreh echt bald ab.. ich habs auch schon mit den Includes von NDK3.9 versucht, dort bringt er mir zwar keinen Macrofehler, aber Unmengen an Warnings aus irgendwelchen Systemincludes und viele "cast matches not function type" bei DoMethod Aufrufen... Ich weiß, ist nicht so toll beschrieben, aber vielleicht reichts ja schon.. für Ideen und Vorschläge wär ich extrem dankbar, weil mir das einfach nicht in den Kopf will, daß ein und derselbe Code funktioniert, wenn ich ihn in einem C++ Project verwende und eben nicht funktioniert, wenn er in einem Ansi-C Project vorkommt (BOOPSI-Code ändert sich ja nicht, egal ob C oder C++)... Verzweiflung... -- Bye, Cyborg -- We would die for [ Dieser Beitrag wurde von Cyborg am 08.02.2003 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
08.02.2003, 19:40 Uhr Mazze Posts: 263 Nutzer |
Hi, ich habe mal schnell ein kleines Testprogramm zusammengeschraubt. Vielleicht hilft es dir weiter. Zum Kompilieren mit vbcc ist die Option "-c99" nötig, da die NKD3.9-Includes "//"-Kommentare verwenden. Storm C V4 habe ich nicht. Ich hatte übrigens auch mal einen unfinished macro error. Das lag daran, dass ich bei Openlibrary ein Anführungszeichen vergessen hatte. Den Cast-Error bei DoMethod kriegst du wahrscheinlich weg, indem do 'Object myobject' durch 'Object *myobject' ersetzt. #define ALL_REACTION_MACROS #define ALL_REACTION_CLASSES #include <reaction/reaction.h> #include <proto/intuition.h> /* NewObject */ #include <proto/exec.h> #include <intuition/classusr.h> /* Object */ #include <clib/alib_protos.h> /* DoMethod */ struct IntuitionBase *IntuitionBase; struct Library *WindowBase; int main(void) { Object *myobject; if (IntuitionBase = (struct IntuitionBase*)OpenLibrary("intuition.library",0)) { if (WindowBase = OpenLibrary("window.class",44)) { myobject = WindowObject, WA_Activate,TRUE, WA_Title,"Test", WA_Width,200, WA_Height,200, WindowEnd; if (myobject) { DoMethod(myobject,WM_OPEN); } } } CloseLibrary((struct Library*)IntuitionBase); CloseLibrary(WindowBase); } [ Dieser Beitrag wurde von Mazze am 08.02.2003 editiert. ] [ - Antworten - Zitieren - Direktlink - ] |
08.02.2003, 20:11 Uhr Cyborg Posts: 47 Nutzer |
Zitat: Danke erstmal für die Mühe, aber.. 1. Bei 'Object *myobj' in meinem obigen Beispiel hatte ich nur den Stern vergessen .. aber nur hier in der Mail, im Code ist das alles vorhanden.. tritt trotzdem auf.. 2. Dein Testprogramm kompiliert genausowenig, wie mein Code.. bricht mit unterminated macro call in der Zeite mit dem ersten NewObject- Aufruf (WindowObject) ab. Ich habe mitlerweile zumindest rausgefunden, daß dieser Fehler *nur* auftritt, wenn ich die original StormC4-Includes (NDK 3.5), Reaction- Macros und Ansi-C benutze .. nur in dieser Konstellation.. sehr seltsam. Mit dem NDK3.9 hat der Storm4 anscheinend auch extreme Probleme. Damit bekomme ich zwar _keinen_ unterminated macro call mehr, dafür aber Unmengen an Warnings aus den Includes.. Hauptsächlich geht es um inkorrekte Funktions-Prototypen, z.B. VOID (*tc_Switch)(); an Stelle von VOID (*tc_Switch)(VOID); Das mag der StormC4-GCC gar nicht .. ich mußte die NDK-Includes überarbeiten, damit das kompilieren endlich möglich war. Dann kamen zwar immernoch verdammt viele Warnings (unter anderem auch die oben erwähnten Cast-Warnings bei DoMethod), aber der Compiler lief durch und mein Programm funktionierte sogar! Zumindest augenscheinlich, weil wer weiß wieviele Hits mir um die Ohren fliegen, wenn ich Enforcer mitlaufen lasse.. Also irgendwie würde es anscheinend schon funktionieren, nur die zig Warnings verursachen bei mir Bauchweh .. und natürlich auch der Umstand, daß ich tatsächlich in den Includes vom NDK rumpfuschen mußte, damit es überhaupt funktioniert!! Hab langsam endgültig die Schnauze voll von Storm Vielleicht sollte ich wirklich mal einen anderen Compiler benutzen.. Irgendwelche Vorschläge/Empfehlungen (vbcc, gcc,..?) -- Bye, Cyborg -- We would die for [ - Antworten - Zitieren - Direktlink - ] |
09.02.2003, 15:48 Uhr srupprecht Posts: 39 Nutzer |
Zitat: Du mußt einfach nur #define NO_INLINE_STDARG vor den #includes einfügen. mfG. Stephan Rupprecht [ - Antworten - Zitieren - Direktlink - ] |
09.02.2003, 16:47 Uhr Cyborg Posts: 47 Nutzer |
Zitat: Danke, das hat gegen "unterminated macro call" geholfen.. Könntest Du mir vielleicht noch kurz erläutern _warum_ es geholfen hat? Versteh da den Zusammenhang nicht so wirklich.. Jetzt bräuchte ich nur noch ne Lösung für die tausend Warnings "cast does not match function type" bei DoMethod Aufrufen.. Er kompiliert zwar trotzdem und das Prog läuft auch, aber nervend sind die Warnings dennoch... außerdem sollte man Warnings sowieso nicht einfach ignorieren.. der Compiler hat sich ja was dabei gedacht, sollte man meinen.. Werd mich aber nebenbei trotzdem noch nach nem anderen Compiler umsehen.. wer weiß, ob Storm noch weiterentwickelt wird -- Bye, Cyborg -- We would die for [ - Antworten - Zitieren - Direktlink - ] |
09.02.2003, 19:53 Uhr srupprecht Posts: 39 Nutzer |
Zitat: Systemaufrufe werden bei gcc idR. über Makros realisiert, wird die Sache zu "abstrakt" (um es mal einfach auszudrücken) versteht der Preprozessor nur noch Bahnhof Durch das #define werden sämtliche Systemaufrufe mit variabler Argumentenzahl nicht mehr durch Makros ersetzt, sondern es wird stattdessen beim Linken die Stubfunktion(en) aus der amiga.lib verwendet. Zitat: Achte darauf, daß Du immer gemäß dem Prototyp "castest". Bei Funktionen mit variabler Argumentenzahl mußt Du immer nach ULONG casten. Also zB.: SetGadgetAttrs( gad, win, req, GA_Text, (ULONG) "Irgendwas", GA_Image, (ULONG) image, TAG_DONE ); Oder: Printf( "Dies %s sehr %s", (ULONG) "ist", (ULONG) "sinnvoll" ); Zitat: Da wird Du so oder so nicht an gcc vorbeikommen... mfG. Stephan Rupprecht [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > StormC4 (GCC) und Reaction-Macros | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |