inline Deklaration



  • Kann mir jemand sagen, wie ich eine inline-Funktion deklariere?
    Ich habe folgendes gemacht:
    file1.h:
    inline void hall();

    file1.c:
    inline void hall()
    {/*Anweisungsliste*/}

    Fehlermeldung: Fehler in der Deklarationssyntax.

    kann mir jemand helfen?



  • inline gibt es erst seit C99
    Wenn du einen C89 Compiler hast, dann kennt er inline einfach nicht.
    Vielleicht hat er aber trotzdem einen 'Schalter' um ihm inline beizubringen. Welchen Compiler verwendest du denn?

    bzw:
    inline Funktionen muessen im Header definiert werden, denn sonst tut sich der arme Compiler mit dem inlinen schwer (bzw. ist es unmoeglich)



  • Shade Of Mine schrieb:

    inline gibt es erst seit C99
    Wenn du einen C89 Compiler hast, dann kennt er inline einfach nicht.
    Vielleicht hat er aber trotzdem einen 'Schalter' um ihm inline beizubringen. Welchen Compiler verwendest du denn?

    bzw:
    inline Funktionen muessen im Header definiert werden, denn sonst tut sich der arme Compiler mit dem inlinen schwer (bzw. ist es unmoeglich)

    Ich kompiliere C mit dem C++Builder6. Das Wort inline wird auch fett gedruckt, wenn ich es ausgeschrieben habe.
    Mit dem Definieren im Header habe ich es nach deinem Hinweis auch versucht, aber das geht auch nicht(Fehler in der Deklarationssyntax).



  • Ich bin mir nicht 100% sicher, aber ich denke das Schlüsselwort «inline» gehört zur Definition der Funktion, nicht zur Deklaration. Ausserdem muss die inline-Definition von der Aufrufstelle her sichtbar sein (=> Shades Beitrag)



  • Bashar schrieb:

    Ich bin mir nicht 100% sicher, aber ich denke das Schlüsselwort «inline» gehört zur Definition der Funktion, nicht zur Deklaration. Ausserdem muss die inline-Definition von der Aufrufstelle her sichtbar sein (=> Shades Beitrag)

    Mit inline vor Definition und nicht vor Deklaration habe ich es schon probiert.
    Das hat auch diesselbe Fehlermeldung gegeben(Fehlerr in der Deklarationssynax).
    Ich habe die inline-Funktion im Header(file1.h) deklariert und in file1.c definiert. Dann ist die Funktion doch sichtbar von der Aufrufstelle,oder?



  • Versuch mal folgendes Minimalprogramm zu compilieren:

    #include <stdio.h>
    inline int maximum(int a, int b)
    {
       return a > b ? a : b;
    }
    
    int main()
    {
       printf("Maximum von 5 und 7 = %d\n", maximum(5, 7));
       return 0;
    }
    

    Wenn derselbe Fehler bestehen bleibt, erkennt dein Compiler inline nicht als Schlüsselwort an (dass der Editor das fett druckt hat damit nichts zu tun). Vielleicht kann er das wirklich nicht -- schließlich ist es offiziell nur in C++ und C99 enthalten. Vielleicht hast du aber auch irgendwo eingestellt, dass er sich streng an den ANSI-Standard halten soll. Such mal, wie das eingestellt ist ... wenn ich mich recht entsinne hat man die Wahl zwischen "Borland", "ANSI", "K&R" und noch irgendwas, "Unix" oder so.



  • Habe es eben selbst einmal versucht indem ich vor eine beliebige Funktion
    inline schrieb, ging anstandslos, vermute mal es liegt daran, dass du einen
    Teil im Header und einen in deinem eigentlichen Quellcode hast.



  • Ich benutze den C++Builder6 von Borland. Ich kann da zwischen c-kompilieren und c++-kompilieren hin und herschalten. Mit C-kompilieren krieg ich dein Beispielprogramm:
    #include <stdio.h>
    inline int maximum(int a, int b)
    {
    return a > b ? a : b;
    }

    int main()
    {
    printf("Maximum von 5 und 7 = %d\n", maximum(5, 7));
    return 0;
    }
    nicht übersetzt(Fehlermeldung),
    aber mit c++-kompilieren geht das. Krieg ich mit einem c++-Compiler bedingungslos auch C-Quelltexte kompiliert? Wenn ja, dann wäre mein Problem gelöst. Danke auf jeden Fall schonmal.



  • Nicht bedingungslos. Angefangen vom Offensichtlichen (du kannst zb keine Variable class oder new nennen), über Sachen, über die viele stolpern (es gibt in C++ keine automatische Konvertierung von void* in einen anderen Pointer, dh konkret, dass du den Rückgabewert von malloc() in C++ casten musst), bis hin zu subtilen Details, bei denen ich nicht sagen kann, wie sie sich auswirken.



  • Weiss nicht ob sich das jetzt schon geklärt hat, aber
    inline Funktionen dürfen doch nur im hpp deklariert + definiert werden, oder?

    Jockel


Log in to reply