Christian Seiler: C++: Funktionszeiger als Rückgabewert

Beitrag lesen

Hallo,

Die Funktion hat in meinen Augen durchaus Ihre Daseinsberechtigung. Sie 'wählt' zwischen verschiedenen Funktionen anhand den Parametern aus und gibt die korrekte Funktion zurück. Die wird dann aufgerufen und erledigt die Arbeit. Jede Funktion macht dabei ähnliches allerdings für einen anderen Bereich.

Achso, jetzt verstehe ich Dein Problem.

Ok, dann machst Du das am besten über ein typedef, damit das ganze übersichtlich bleibst. D.h. Du definierst Dir einen Typ "Funktion mit dem Rückgabewert und den Parametern" und kannst dann diesen Typ nutzen:

#include <stdio.h>  
  
char *funktion1 (int parameter) {  
  static char buf[100];  
  snprintf (buf, 99, "%d", parameter + 10);  
  return buf;  
}  
  
char *funktion2 (int parameter) {  
  static char buf[100];  
  snprintf (buf, 99, "%d", parameter);  
  return buf;  
}  
  
typedef char *(*mein_fkt_t)(int);  
  
mein_fkt_t holeFunktion (int welche) {  
  switch (welche) {  
    case 1:  
      return funktion1;  
    case 2:  
    default:  
      return funktion2;  
  }  
}  
  
int main (int argc, char **argv) {  
  // keine () hinter funktion, sonst wird die direkt aufgerufen  
  mein_fkt_t fkt = holeFunktion (argc);  
  printf ("%s\n", fkt (25));  
  return 0;  
}

Ich vermute mal Ihr wart während der 'langen' Pause nicht untätig und habt neue(verbesserte?) Kontrollen(-möglichkeiten) eingebaut?!

Nicht wirklich. Außerdem bin ich kein Moderator, ich finde es persönlich gesehen nur extrem unhöflich, in einem Forum unter mehreren Nicknames aufzutreten.

Sonst kann ich mir nicht erklären wie du da drauf gekommen bist.

  1. »johnny« vs »Johanna
  2. Thema C++
  3. Dein Stil, sowohl im Text als auch im Code

Ich habe normalerweise kein Auge für sowas, dennoch war's für mich absolut eindeutig in diesem Fall.

Ist das überhaupt ein Regelverstoss?

Keine Ahnung, ist mir auch relativ egal, ob das gegen irgend eine Regel verstößt, oder nicht, ich fand's halt einfach persönlich "nicht nett".

Viele Grüße,
Christian