Funktions-Arrays



  • Hi zusammen,

    hat jemand eine Idee, wie man es hinbekommt, dass best. (irgendwie gekennzeichnete oder sich in einem best. Bereich befindliche) Funktionen eines Projekts per Index aus einem Array heraus aufgerufen werden können, ohne dass man deren Zeiger "manuell" im Array einträgt?

    Es ist zur Not auch möglich, die Funktionen irgendwie umzustellen, sodass sie sich z.B. in einem best. Bereich befinden, falls das Voraussetzung wäre.

    Letztendlich soll im Pseudo-Code eben so was rauskommen:

    "rufe Funktion[index] auf",

    ohne, dass das Array codemäßig nach dem Schema

    Funktion[1] = Adresse(Funktion1)
    Funktion[2] = Adresse(Funktion2)

    angelegt werden muss.

    Assembler-Einbindung fällt leider weg.

    Gruß Michi



  • Also ich weiß jetzt nicht genau was du erwartest bzw. was dich daran stört. Aber wenn du es eleganter haben willst, dann solltest du dir mal Signals und Slots anschauen. Gibts einmal boost.signals und dann libsigc++.



  • Hallo,

    Das sind eben mehrere hundert Funktionen verteilt auf mehrere .h-Dateien.
    Es geht übrigens um reines C. Nicht mal C++ soll da rein. 😉

    Das Problem ist, dass eben ausnahmslos alle diese Funktionen in diesem Array erfasst werden sollen, wobei an versch. Stellen jederzeit welche dazu- oder wegkommen können.

    Das Array soll nach Möglichkeit ohne Wartungsaufwand automatisch alle Funktionen bzw. Unterprogramme (Aufruf über irgendeine beliebige Art) erkennen (evtl. über eine eigens dafür geschriebene Routine) und aufnehmen können.

    Trag ich diese manuell ein, ist das nicht nur eine ziemliche Arbeit, sondern ich kann eben auch welche übersehen.

    Gruß Michi



  • Dann stell deine Frage bitte auch im C-Forum, wenn es kein C++ sein soll.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • in c/c++ geht das nicht. du könntest dir höchstens ein programm schreiben, daß nach dem kompilieren die symboltabelle der objektdatei ausliest und daraus einen c-quelltext erzeugt, der ein initialisiertes array der funktionen enthält. das müsstest du dann nur noch in dein makefile reinwurschteln. für das auflisten aller symbole in einer .o datei gibst unter unix glaub ich vorgefertigte befehle (binutils oder so).



  • Hallo,

    das wird nicht funktionieren, denn wie soll C einem Array eine Funktionsadresse zuweisen, die es nicht kennt???

    Eine Lösung wäre vielleicht das ganze per WinAPI zu machen, indem du die Funktion GetProcAdress() aus einer DLL aufrufst, die kann man dann auch dynamisch in ein Array schreiben.

    So long...
    ~code_pilot :xmas2:



  • suchst du etwas in dieser richtung? 😕

    #define IN 0
    #define OUT 1
    ...
    int (*ptr[])(const char*,...)={scanf,printf};
    ...
    (*ptr[OUT])("bliblablubb");
    ...
    

Anmelden zum Antworten