C++ erwartet Typ Bezeichner Fehler

Ich bin versucht, zu schreiben eine wrapper-Funktion, um herauszufinden, wer den Aufruf einer spezifischen Funktion. So .h-Datei habe ich noch folgende: (und die Umsetzung in den .cc-Datei)

extern int foo(/*some arguments*/);

extern void call_log(const char*file,const char*function,const int line,const char*args);

#define foo(...) (call_log(__FILE__, __FUNCTION__, __LINE__, "" #__VA_ARGS__), foo(__VA_ARGS__)) 

Jedoch bekomme ich die folgende Fehlermeldung:

 error: expected a type specifier
    (call_log(__FILE__, __FUNCTION__, __LINE__, "" #__VA_ARGS__),foo(__VA_ARGS__)

Davon ausgehen, dass die foo Funktion aufgerufen wird, werden einige Parameter und gibt einen int.

den compiler ist gcc 3.4

Dank

BEARBEITEN

entfernt. "" und extra Abstand, doch problem immer noch da. Kann jemand sehen, was es bewirken kann. Beachten Sie auch, dass ich mit variadic Makros-unterstützt durch mein compiler (c99)

Edit 2
Nur, um die Forderungen über meine illegale Verwendung von c/c++ - Konstrukte. Der folgende code unten funktioniert, und ich bin versucht, Sie anzupassen, um meine aktuelle (über Funktion)

#include <stdio.h> 

int funcA( int a, int b ){ return a+b; }

//instrumentation

void call_log(const char*file,const char*function,const int line,const char*args){
  printf("file:%s line: %i function: %s args: %s\n",file,line,function,args);
}

#define funcA(...) \
  (call_log(__FILE__, __FUNCTION__, __LINE__, "" #__VA_ARGS__), funcA(__VA_ARGS__)) 

//testing

void funcB()
{
  funcA(7,8);
}


int main(void){
  int x = funcA(1,2)+

          funcA(3,4);

  printf( "x: %i (==10)\n", x );

  funcA(5,6);

  funcB();
}

Edit 3

Als litb wies darauf hin, das problem ist, in der Tat, aufgrund makro-Ersetzungen. Mir ist auch aufgefallen, dass die foo ist nicht nur eine Funktion aufrufen, aber auch als ptr->foo[] in einigen Fällen. Alle ides wie zu beheben diese Art von Fragen, ohne mehr code

Vielleicht könnte Sie post ein echtes Beispiel (foo Argumente + makro-Aufruf)
Bitte zeigen Sie die Linie, wo Sie das makro. Vor allem vorhergehenden und folgenden...
Ich meine, das ist so real wie es nur geht, ich kopieren und einfügen aus meiner Quelle, und ersetzt mir die Funktion Namen foo.
Was ist der compiler? Hier habe ich vorausgesetzt, "c99" bezieht sich auf die standard-Sprache im Gegensatz zu einem compiler-Namen.
Die Erklärung der funcA können problematisch sein, weil es kann dazu führen, substitution durch das makro bereits, wenn es darum geht definiert zu werden, bevor. Sie können erklären, die Funktion wie folgt statt: int (funcA)( int a, int b ){ return a+b; }

InformationsquelleAutor vehomzzz | 2009-09-29

Schreibe einen Kommentar