Eigene externe Funktion erstellen



  • Hallo,
    wie kann man ein eigenen Befehl in C++ erstellen.
    Zum Beispiel:

    //rechnen.cpp
    int zahl1, zahl2
    
    void rechnen(void)
    {
    zahl1 + zahl2;
    }
    
    //rechnen.h
    extern void rechnen(void);
    
    //main.cpp
    #include <iostream>
    
    int main (void)
    {
    rechnen(8,9);
    std::cout << Zahl: << rechnen << ! << endl;
    return 0;
    }
    

    Ich möchte das 8 = zahl1 ist und 9 = zahl2 ist.
    Wie mach ich das? Ich lerne noch C/C++, und will mal wissen wie man externe Funktionen erstellen kann 🙂

    LG



  • Im Prinzip so wie du das gemacht hast, bis auf ein paar Kleinigkeiten:
    -Der Header "rechnen.h" muss in main.cpp inkludiert werden
    -Wenn die Funktion Argumente haben soll, gib ihr auch Parameter:

    int zahl1, zahl2
    
    void rechnen(void)
    

    ->

    void rechnen(int zahl1, int zahl2)
    

    -Wenn die Funktion etwas zurückgeben soll, gib ihr auch einen Rückgabewert:

    void rechnen(int zahl1, int zahl2)
    {
       zahl1 + zahl2;
    }
    

    ->

    int rechnen(int zahl1, int zahl2)
    {
       return zahl1 + zahl2;
    }
    

    (Deklaration im Header dann auch anpassen)
    -Funktion wie andere auch Aufrufen:

    int result = rechnen(8, 9);
    std::cout << result;
    // bzw. direkt
    std::cout << rechnen(8, 9);
    

    (Was std::cout << rechnen macht ist folgendes: Es wird eine passende Überladung des operator<< gesucht, in die eine Funktion - der Typ von rechnen - konvertiert werden kann. Dazu wird die Funktion einen Zeiger auf eine Funktion automatisch umgewandelt. Die nächste passen Überladung wäre der operator<< für bools, es wird also ausgegeben ob die Addresse der Funktion != 0 ist. Das ist per Definition immer der Fall, also ist die Ausgabe 1.)



  • rechnen.hpp

    #ifndef DIES_IST_EIN_INCLUDE_GUARD_FUER_RECHNEN_DAS_MUSS_MAN_WISSEN
    #define DIES_IST_EIN_INCLUDE_GUARD_FUER_RECHNEN_DAS_MUSS_MAN_WISSEN
    
    // Hier wird die "Schnittstelle" von rechnen.cpp verraten
    // damit man das, was in rechnen.cpp steckt, auch woanders
    // verwenden kann ...
    
    extern int addiere(int x, int y); // das extern ist hier eigentlich überflüssig
                                      // und kann man auch weglassen, da so eine
                                      // Funktionsdeklaration schon per Default eine
                                      // Funktion mit externer Bindung deklariert.
    
    #endif
    

    rechnen.cpp

    #include "rechnen.hpp"
    
    // Hier ist die passende DEFINITION dazu, wo wir dem Compiler auch verraten,
    // wie die Funktion eigentlich arbeitet. Diese Details muss ein Benutzer
    // nicht wissen, so lange die Schnittstelle klar ist.
    int addiere(int x, int y)
    {
       return x+y;
    }
    
    #endif
    

    main.cpp

    #include <iostream>
    #include "rechnen.hpp"   
                             // ...ist nötig, damit der Compiler später auch
                             // die Funktion addiere aufrufen kann. Deswegen
                             // gibt's ja diese Header-Dateien.
    
    int main()
    {
       int x = 8;
       int y = 9;
       int z = addiere(x,y);
       std::cout << x << " + " << y << " = " << z << std::endl;
       return 0;
    }
    


  • Kann man in der rechnen.cpp auf zahl1 durch #define zahl1 ersetzten?
    Währe übersichtlicher 🙂



  • Kann man sowas auch ohne rechnen.cpp machen?

    Und NEIN, man kann das nicht mid #define machen!


Anmelden zum Antworten