Ich habe dieses Erbe MakroUngültige Speicherklasse für eine Funktion in einem Makro in GCC
#define ASYNC_FUNCTION(x) \
void x(void) { \
static void internal ## x (ASYNCIOCB *); \
ASYNCIOCB *aiocb = AcquireAsyncIOCB(); \
CallAsyncNativeFunction_md(aiocb, internal ## x); \
} \
static void internal ## x (ASYNCIOCB *aiocb)
gefolgt von diesem
#define ASYNC_FUNCTION_START(x) ASYNC_FUNCTION(x) {
#define ASYNC_FUNCTION_END ASYNC_resumeThread(); }
Und ihre Verwendung sieht wie folgt aus:
ASYNC_FUNCTION_START(Occasional_function_name)
{
//actual stuff
}
ASYNC_FUNCTION_END
Es kompiliert fein mit cl, aber gcc gibt
invalid storage class for function ‘internalOccasional_function_name’
static void internal##x (ASYNCIOCB *);
^
Ich habe versucht, sie alle zu erweitern, nur um zu sehen, was es wird und nichts gebrochen gefunden. Ich suchte auch für nicht geschlossene geschweiften Klammern in der Datei und fand andere Makros wie diese
#define Foo_Bar1() { \
extern int foo; \
int bar = foo; \
if (condition) { \
Bar_Foo(); \
} \
#define Foo_Bar2() \
if (condibar != footion1){ \
AbortAsyncIOCB(aiocb); \
return; \
} \
if (condition) { \
Bar_Foo(); \
} \
}
keine weiteren Header enthalten sind, so anders als das letzte Makro suchen seltsam, ich konnte keine offensichtlichen Fehler finden. Ich benutze Cygwin und ich bin ziemlich ahnungslos.
Kann eine statische Funktion in einer anderen Funktion deklariert werden? –
Ich kenne nicht den genauen Weg, aber die Leute sagen, es kann http://stackoverflow.com/a/11706921/2792852 – feos
OK ... und warum? –