Wert an eine Funktion übergeben



  • Hallo, ich habe ein kleines Problem bei einer Funktion und deren Werte.

    kann mir jemand sagen wie ich an den int wert ran komme?

    Prototype

    void test(int);
    

    Aufruf

    test(5)
    

    So die Funktion ist ja vom Syntax her korrekt, die Frage ist jetzt wie komme ich bei der Definition an den int wert?

    Kann mir da jemand einen Tipp geben?

    so long

    jd



  • jd schrieb:

    kann mir jemand sagen wie ich an den int wert ran komme?

    In dem du dir gleich die Unsitte abgewöhnst ohne Bezeichner zu arbeiten. Man kann den den Wert nämlich nur über Bezeichner erreichen. Was möglich ist, auch wenn ich davon abrate, den Bezeichner bei der Deklaration wegzulassen, aber bei der Implementierung anzugeben.

    int foo(int); // Sehe ich als unschön an (Ich dokumentiere z.B. fast
                  //  ausschließlich den Header)
    
    int foo(int i) // Bezeichner ist zwingend für Zugriff nötig
    {
       return i; 
    }
    

    cu André



  • Was du da hingeschrieben hast ist keine Definition sondern eine Deklaration der Funktion.

    Mit der Deklaration kannst du im weiteren Quelltext arbeiten, aber spätestens beim Linken bekommst du einen Fehler.

    Du brauchst auch noch die Definition. Und da geht es nur mit

    void test(int x) {};
    


  • Danke, so klappt das. Du hast recht, ich finde das ohne Bezeichner auch nicht schick, aber Qt4 arbeitet leider so.
    Wie meinst du das, ich kann mit dem Linken Probleme bekommen?

    http://doc.trolltech.com/4.3/qobject.html#connect

    so long

    jd



  • Na ja, durch die Deklaration der Funktion

    void test(int);
    

    kannst du auch den Aufruf

    test(5);
    

    verwenden.

    Soweit ist das alles in Ordnung und der Compiler wird das auch nicht beanstanden. Wenn der Linker allerdings den Code (die Adresse) zur Signatur der Funktion test() sucht wird er nicht fündig, weil sie ja nur deklariert ist.

    Somit kann man den Quelltext wunderbar kompilieren aber nicht linken.

    P.S. Anders als asc sehe ich keinen Sinn darin Bezeichner in eine Deklaration zu schreiben. Stören nur die Übersicht und liefern keine zusätzliche Information. Besonders in Beschreibungen zu den entsprechenden Funktionen (also z.B. in kommentierten Header-Dateien)



  • Das PS nehme ich wieder zurück. Es kann durchaus auch in der Deklaration Sinn machen Bezeichner zu wählen. Z.B. :

    void foo(int meinBezeichner, int meinzweiterBezeichner);
    

    Um dann in der Beschreibung Notationen wie die folgende zu machen:

    meinBezeichner         Sinn und Verwendung des Parameters
    meinzweiterBezeichern  Sinn und Verwendung des Parameters
    


  • Ach so meinst du das, habe verstanden, danke für die Tipps.

    so long

    jd



  • dj@jd schrieb:

    Das PS nehme ich wieder zurück. Es kann durchaus auch in der Deklaration Sinn machen Bezeichner zu wählen. Z.B. :

    Oder: Um Dokumentation gänzlich sparen zu können wenn die Bezeichner schon aussagekrätig gewählt wurden sind. Es gibt nunmal Programmierer die versuchen sich an die Regel "Programmiere gegen die Schnittstelle, nicht Implementierung" zu halten, und dazu gehört für mich das man nicht die Sourcedateien anschauen muss um den Code zu lesen (da man sonst wieder Gefahr läuft doch auf die Implementierung zu schauen).

    Ganz davon abgesehen halte ich es für übersichtlicher Dokumentation (dazu zählen für mich auch sprechende Bezeichner) an einer Stelle (Header) zu halten. Und teilweise werden ja auch nur Header ausgeliefert (Bibliotheken/Templates)...

    cu André


Anmelden zum Antworten