amiga-news 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 :commo:


[ 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:
Original von Mazze:

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.

[...Code...]



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.. :angry:


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 X(
Vielleicht sollte ich wirklich mal einen anderen Compiler benutzen.. :dance3:
Irgendwelche Vorschläge/Empfehlungen (vbcc, gcc,..?)


--
Bye,
Cyborg
-- We would die for :commo:

[ - Antworten - Zitieren - Direktlink - ]

09.02.2003, 15:48 Uhr

srupprecht
Posts: 39
Nutzer
Zitat:
Original von Cyborg:
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..


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:
Original von srupprecht:
Zitat:
Original von Cyborg:

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..


Du mußt einfach nur

#define NO_INLINE_STDARG

vor den #includes einfügen.



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.. :glow:


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 :dance3:


--
Bye,
Cyborg
-- We would die for :commo:

[ - Antworten - Zitieren - Direktlink - ]

09.02.2003, 19:53 Uhr

srupprecht
Posts: 39
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.. :glow:


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:
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.. ;)


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:
Werd mich aber nebenbei trotzdem noch nach nem anderen Compiler
umsehen.. wer weiß, ob Storm noch weiterentwickelt wird :dance3:


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.
.