Argumente an Funktionen übergeben...



  • Mein Problem:

    Eine Funktion in 'datei1.c' benötigt einen Wert der in 'datei2.c' berechnet wurde.

    Wie findet die Übergabe statt? Nur mittels einer Variablen die in datei2.c deklariert wurde und in datei1.c mit 'extern' bekannt gemacht wurde?

    Vielen Dank für eine Antwort



  • Ich weiss nicht genau, was du vorhast. Sind datei1.c und datei2.c 2 verschiedene Programme? Wenn ja solltest du dich mal mit den IPC Möglichkeiten deines OS vertraut machen. Wenn datei1.c und datei2.c zu einem Programm zusammengelinked werden, kannst du zum Datenaustausch ua. eine globale Variable nehmen (globale Variablen solltest du aber am besten vermeiden, gerade wenn du Threads einsetzt, sorgen die für viel Ärger)

    //datei2.h
    #ifndef DATEI2_H
    #define DATEI2_H
    
    enum error_t
    {
      DIV_BY_ZERO
    };
    
    extern enum error_t datei2_error; //globale error Variable für die Library, wie errno
    
    double foo(double bar, double baz);
    #endif
    
    //datei2.c
    #include "datei2.h"
    
    enum error_t datei2_error;
    
    double foo(double bar, double baz)
    {
      if(!baz)
      {
         datei2_error=DIV_BY_ZERO;
         return 0;
      }
      return bar/baz;
    }
    
    //datei1.c
    #include <stdio.h>
    #include "datei2.h"
    
    int main(void)
    {
      if(foo(1,0)==0)
        if(datei2_error==DIV_BY_ZERO)
           fputs("oh oh, division durch 0\n",stderr);
    }
    

    [ Dieser Beitrag wurde am 19.02.2003 um 10:43 Uhr von kingruedi editiert. ]



  • @ kingruedi:

    datei1.c und datei2.c sind zwei Module eines Programmes. Diese werden mit
    Keil µVision2 Editiert,Compiliert und Gelinkt. Das Programm soll in einen 16-Bit
    Mikrocontoller laufen.

    Dein Beispielprogramm mit der Einbindung der Headerdatei ist ein wertvoller Tip, werde da mal weitermachen.
    Evtl. komme ich nochmal mit einer Frage zu der Präprozessoranweisung #ifndef...
    #define....#endif zurück.

    Schönrn Gruß Tipper



  • Globale Variablen? Was ist denn hier los, sind auf einmal normale Funktionsaufrufe out oder wie?



  • [ Dieser Beitrag wurde am 19.02.2003 um 13:49 Uhr von Bashar editiert. ]



  • @ Bashar:

    Erbitte Deinen Einwand etwas konkreter!

    Meine Vorgehensweise war bisher die Übergabe mittels Variablen(global).

    Andererseits lese ich in meinem Lehrbuch(C in 21 Tagen):

    "In vielen Fällen findet die Datenkommunikation zwischen dem Hauptmodul(datei1.c) und dem sekundären Modul(datei2.c) nur über Argumente statt, die man den Funktionen übergibt und von diesen zurückerhält. In diesem Fall brauchen Sie keine besonderen Vorkehrungen hinsichtlich der Sichtbarkeit der Daten zu treffen."

    Ich stolpere über den letzten Satz oben. Irgendwie müssen doch die Argumente
    für die Funktionen über Modulgrenzen hinweg bekannt sein?



  • /* Datei1.c */
    int funktion(int a) {
      return a*2;
    }
    
    /* Datei1.h */
    #ifndef DATEI1_H
    #define DATEI1_H
    int funktion(int);
    #endif
    
    /* Datei2.c */
    #include <Datei1.h>
    int main() {
      printf("%d", funktion(42));
    }
    

    Übergabe via globale Variablen haben wir zu BASIC-Zeiten gemacht ...

    PS: Oops, jetzt hab ich die beiden Dateien genau vertauscht ... bitte nicht hauen 😉

    [ Dieser Beitrag wurde am 19.02.2003 um 17:10 Uhr von Bashar editiert. ]


Anmelden zum Antworten