2 Stimmen

Erzeugung von Etiketten bei der Makro-Vorverarbeitung in C

Wie schreibt man ein Makro, das goto END_ label aufruft?

Zum Beispiel:

#define MY_MACRO() \
//How to define goto END_##function_name label??

my_function()
{
    MY_MACRO();

END_my_function:
   return;
}

Das MY_MACRO sollte einfach durch die folgende Zeile ersetzt werden

goto END_my_function;

3voto

lhf Punkte 67202

Ich glaube nicht, dass das möglich ist. Auch wenn einige Compiler definieren __FUNCTION__ o __func__ werden diese in Makros nicht erweitert.

Beachten Sie jedoch, dass Sie nicht für jede Funktion ein eigenes Etikett benötigen: Sie können END für alle Funktionen und schreiben Sie einfach goto END .

3voto

bstpierre Punkte 28260

Der Präprozessor weiß nicht, in welcher Funktion er sich befindet. Aber Sie können sich annähern - Sie müssen den Funktionsnamen an dieses Makro übergeben

#include <stdio.h>

#define GOTO_END(f) goto f ## _end

void foo(void)
{
   printf("At the beginning.\n");

   GOTO_END(foo);

   printf("You shouldn't see this.\n");

  foo_end:
   printf("At the end.\n");
   return;
}

int main()
{
   foo();
}

1voto

Praetorian Punkte 103296

Verwenden Sie Token-Verkettung .

#define MY_MACRO( function_name ) END_ ## function_name

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X