Funktion in Funktion

ollek81

Erfahrenes Mitglied
Tach!!

Kann ich in C eine Funktion in einer Funktion deklarieren? Also:

Code:
int funktion1(void)
{
   int wert;

      int funktion2(void)
      {
         int zahl;

         ...
         zahl +=wert
         return zahl;
      }

   ...
   return funktion2();
}

Ich brauche die Funktion2 nur in der Funktion1. Außerhalb nicht. Außerdem hätte gerne die Variable 'wert' "global" in Bezug auf Funktion2.

Mein Borland meckert dann was von "Declaration syntax error" und zeigt dabei in die Zeile, wo Funktion2 deklariert wird.

Kann mir jemand helfen??

MfG!
Ollek81
 
Code:
#include <stdio.h>
                                                                                
void funktion1()
{
        printf("funktion1\n");
        void funktion2()
        {
                printf("funktion2\n");
        }
        funktion2();
        printf("funktion1\n");
}
                                                                                
int main(int args, char **argv)
{
        printf("main\n");
        funktion1();
        return 0;
}
Mit diesem Code funktioniert das bei mir genau so wie erwartet.
 
Bei mir nicht!!

Hat immer noch den "Declaration syntax error".

Da hab ich aber falsch geguckt: der Error ist hier:

Code:
#include <stdio.h>
                                                                                
void funktion1()
{
        printf("funktion1\n");
        void funktion2()
        { <---------------------------------!!!!!!
                printf("funktion2\n");
        }
        funktion2();
        printf("funktion1\n");
}
                                                                                
int main(int args, char **argv)
{
        printf("main\n");
        funktion1();
        return 0;
}

Vielleicht kann der Borland Compiler das nicht. Naja, muss ich die Funktion wohl ein paar mal kopieren oder irgendeine Schleife bauen.
:( Mist!!

Danke für die Hilfe!!!

Ollek81
 
Irgendwie versteh ich aber trotzdem nicht so ganz den Sinn, den Du damit verfolgst. Wenn Du die Funktion nur innerhalb einer anderen brauchst, kannst Du sie doch einfach ganz normal aufrufen.
Und wieso musst Du deswegen denn jetzt die Funktion ein paar mal kopieren? :rolleyes:
 
Ich muss Funktion2 ja mehrmals aufrufen (sonst wäre das sinnlos, klar!). Immer mit anderen Parametern. Aber die will ich nicht ewig alle im Funktionskopf hinundher schieben, geschweige denn global deklarieren.
Deshalb muss ich die Funktion jetzt jedesmal nachdem die Parameter verändert wurden, nochmal aufrufen --> hinkopieren.

Jetzt klar??
 
Naja, aber wenn Du die Funktion im Rumpf einer anderen implementierst, musst Du sie doch auch mehrmals schreiben.

Ansonsten wäre C++ da vielleicht doch die etwas bessere Wahl. Da kannst Du die Methoden in der Klasse als private deklarieren, so dass sie nur innerhalb der Klasse selbst zur Verfügung stehen. Und wenn Du die Methoden einfach überlädst, hast Du doch das was Du haben willst.

Oder hab ich Dich falsch verstanden?
 
Wieso muss ich die denn dann mehrmals schreiben? Grade das will ich ja nicht! Will den Code einmal schreiben und dann die Fkt einfach immer nur wieder aufrufen. Die Typen der Parameter bleiben gleich.

Stell's dir so vor: Ich muss verschiedene Listen durchsuchen. Nur in dieser Funktion!! Die Zahl nach der ich suche ist immer die gleiche. Aber eben in den verschiedenen Listen. Das "Suchen" (ist etwas komplexer) will ich nicht immer wieder hinschreiben, weil dann der Quelltext ziemlich lang wird!
 
Lokale Funktionsdeklarationen, also Funktionen in Funktionen eingebettet, sind nicht erlaubt. Das geht in PASCAL, in C(++) nicht.

Was Du eigentlich vor hast, hab ich auch net gerafft (wir kennen das ja schon :) ).
 
:)Ja, im erklären, bin ich ne Niete! (Man kann ja nicht alles können ;-))

Wenn man das nicht darf, dann eben nicht!!
Hab's jetzt kopiert...

Danke für eure Mühe!!

Ollek81
 
Will den Code einmal schreiben und dann die Fkt einfach immer nur wieder aufrufen. Die Typen der Parameter bleiben gleich.
Dann kannst Du die Funktion doch auch ganz normal implementieren, ich versteh nicht, wieso Du die unbedingt innerhalb einer anderen haben musst... :rolleyes:

Lokale Funktionsdeklarationen, also Funktionen in Funktionen eingebettet, sind nicht erlaubt. Das geht in PASCAL, in C(++) nicht.
Hab ich auch gedacht, aber GCC macht das und es funktioniert...
 
Zurück