Wie GCC Methodendefinition gemäß Kernighan & Ritchie beibringen?



  • Hallo zusammen!

    Ich habe einiges an Sourcecode, der Methodendefinitionen in folgendem Stil enthält:

    void doSomething(text)
    const char* text;
    {
        .
        .
        .
    }
    

    Da ich keine Lust habe all die Methodeköpfe durch "gewöhnliche" Definitionen zu ersätzen und das v.a. auch nicht praktikabel ist, da der Sourcecode auch nicht von mir gewartet wird, wollte ich nun wissen mit welchem Kommandozeilenparameter ich dem GCC beibringe diesen Stil zu schlucken. Standardmäßig funktioniert es zumindest unter Cygwin mit GCC 3.4.4 nicht.

    Viele Grüße
    Timo



  • Der Code wird vielmehr per g++ kompiliert, da er in einem Projekt genutzt wird, das in C++ geschrieben ist. Hingegen ein einfaches HelloWorld in oben dargestellten Stil frißt gcc solange es in einer .c Datei ist...



  • Das ist wohl alter K&R-C-Stil. Aber ich wüsste nicht, dass das in je C++ legal war und nehme mal fest an, das der C++-Modus des GCCs das nicht beherrscht.

    Ansonsten solltest du dir im GCC-Manual vielleicht die Option -std angucken. Damit kann man zumindest einiges "ungewöhnliches" verhalten freischalten.

    <edit>ups, das mit K&R hast du ja schon in die Überschrift geschrieben :-)</edit>



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • derdasallesprogrammiert schrieb:

    Der Code wird vielmehr per g++ kompiliert, da er in einem Projekt genutzt wird, das in C++ geschrieben ist.

    Du musst nicht für alle Teile eines Projektes die gleiche Sprache bzw. den gleichen Compiler verwenden. Es ist kein Problem, einen Teil in C und einen in C++ zu haben, du wirst lediglich die Deklarationen im Header C++-tauglich machen. Also beispielsweise deine Funktion doSomething (BTW Funktion, nicht Methode) wird in K&R-C so deklariert:

    void doSomething();
    

    Um von C++ darauf zugreifen zu können, müsstest du erstens die C-Aufrufkonvention einschalten und zweitens Argumente erlauben, da () in C++ immer bedeutet, dass die Funktion keine Argumente annimmt:

    extern "C" {
      void doSomething(...);
      // evtl. void doSomething(char*); da bin ich unsicher ob das 
      // möglich ist oder einen Vorteil bringt
    }
    

    Wenn du das in #ifdef __cplusplus .. #endif irgendwie einschachtelst, kannst du sogar den gleichen Header für C und C++ nehmen.


Anmelden zum Antworten