-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Funktonen aus Funktion starten?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    321

    Funktonen aus Funktion starten?

    Anzeige

    Mahlzeit!

    Vielleicht habe ich den Titel schlecht gewählt, aber was besseres ist mir nicht eingefallen.

    Mich würde mal interessieren, kann ich, zum Beispiel aus einer Datei, variable abrufen die den Namen einer Funktion darstellt?

    Beispielsweise in einer Datei steht "umwandeln" und damit soll dann die Funktion

    Code:
    void umwandeln()
    starten. Funktioniert das? Oder geht es nur mit einer if?

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    279
    nein ... das geht so nicht. Der C-Programmcode wird ja durch den Compiler in HEX-Code übertragen. Dadurch weiß der HEX Code aber nicht mehr, was mit umwandeln() gemeint ist. Deshalb kannst Du die Funktion so nicht während der Laufzeit aufrufen. Du must also ein IF (oder vermutlich besser ein SWITCH) nutzen, um bei Erkennen des Datei-Inhaltes die richtige Funktion anzuspringen.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    321
    Ich habe so etwas schon mit einer SWITCH gemacht, dachte nur auf diese Weise wäre es übersichtlicher da es ja eine Bezeichnung und keine Nummer wäre.

    Danke.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.04.2015
    Beiträge
    196
    Doch, das geht theoretisch auch, nicht direkt in C, aber über Umwege. Du kannst Dir ein externes Tool oder Script bauen, dass alle Module Deines Projektes im PreBuild, also vor dem Kompilieren, einmal durchscannt, die aufrufbaren Funktionen erfasst (ggf. durch Attribut, Signatur oder Kommentar gekennzeichnet) und zu einer größeren Anweisung zusammenpackt. Diese größere Anweisung kann sowohl einfach nur über StringCompare den gesamten Namen vergleichen (langsam) oder auch einzelne Bestandteile der Zeichenketten in einer baumartigen Struktur bis zum vollständigen Namensvergleich als If-Anweisungen heruntersteppen.

    So ein Werkzeug bezeichnet man als SingleShot-Code-Generator (Weil er Code generiert, der den Code des vorhergehenden Durchlaufes vollständig überschreibt, also eigentlich die Datei mit der möglicherweise recht großen Sprungsanweisung bei jedem Durchlauf vor dem Kompilieren neu erstellt.)

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    321
    Danke, aber das ist dann doch mehr Aufwand wie es am Ende nutzen würde.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.452
    ich denke schon, dass das geht.

    Du liest aus einer Datei einen Variablen-Namen als Variablen-String (z.B. char * strbuf), im einfachsten Fall einfach nur ein Zeichen oder wenigstens gleich lange strings.

    zunächst deklarierst du deine Funktionen

    Code:
    void umwandeln() { };
    void loeschen() { };
    void ausschalten() { };
    dann liest du aus deiner Datei:

    Code:
    FILE * pFile;
    char strbuf[10];
    pFile = fopen ("myfile.txt" , "r");
    fgets (strbuf, 6, pFile);
    Den String übergibst du deiner Funktion tuwas():

    Code:
    void tuwas(char * str) {   
       if (str == "umwand") { umwandeln() };
       else
       if (str == "loesch") { loeschen() };
       else
       if (str == "aussch") { ausschalten() };
    
    }
    Ich vermute, das könnte so gehen.

    Am Schluss nicht vergessen:
    Code:
    fclose (pFile);
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    321
    So habe ich es derzeit laufen

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.452
    das liest sich bei dir aber anders: du hast geschrieben, du hättest es über Nummern gemacht, und wolltest stattdessen Funktionsnamen lesen, denn "auf diese Weise wäre es übersichtlicher da es ja eine Bezeichnung und keine Nummer wäre."
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.01.2016
    Ort
    Saarbrücken
    Beiträge
    321
    Richtig. So habe ich das auch. Aber das ist eine andere Baustelle und ich wollte wissen ob ich aus einer Datei nur eine Nummer einlesen kann, welche ich über eine SWITCH dann verwende, oder ob ich auch anstelle der Nummer auch einen Namen der Funktion verwenden kann. So habe ich mittlerweile 7 Funktionen, welche ich auf diese Weise mit SWITCH aufrufe. Das läuft und kann auch so bleiben. Die 7 kann ich mir grade noch so merken, welche Zahl welche Funktion letzten Endes auslöst.

    Da ich nun aber das Ganze noch ausbaue und dafür eine neue SWITCH eigentlich einbauen wollte, kam mir der Gedanke, da ich schätzungsweise 50 Funktionen nutzen will (nicht alles die selben Funktionen, nur eben auch mal mit verschiedenen Variablen), dass es mit Namen doch übersichtlicher werden würde. Da das aber nicht klappt und es mit den Variablen auch einfacher ist mit der IF Variante, habe ich es eben auf diese Weise gelöst.

    Ich tue also Beides, nur bei dem Problem, weshalb ich die Frage gestellt habe, mit IF. Die bereits fertige Geschichte mit SWITCH.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.452
    switch kann bei C immer nur Integer Konstanten verwenden. Diese werden vom Compiler in goto Sprungadressen umkompiliert.
    Zwar tut switch im Endeffekt nicht viel anderes als if, aber if ist der mächtigere Befehl in C, denn if kann alle möglichen Bedingungen und Vergleiche verarbeiten.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Funktion gibt Funktion zurück... nächstes Problem
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 19.12.2008, 09:51
  2. Funktion als Rückgabewert einer Funktion?
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 08.09.2008, 11:25
  3. Starten|Stoppen (C)
    Von BlackDevil im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 03.07.2008, 11:07
  4. Wie starten?
    Von Psychomax im Forum C - Programmierung (GCC u.a.)
    Antworten: 18
    Letzter Beitrag: 09.06.2006, 11:28
  5. .exe von asm aus starten
    Von michiE im Forum Software, Algorithmen und KI
    Antworten: 10
    Letzter Beitrag: 01.04.2006, 00:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •