Code als C im C++-Compiler interpretieren



  • Wie kann ich einen Code, der in C geschrieben ist, in einem C++-Compiler (Visual C++) als C und nicht C++-Code interpretieren, ohne dass der Inhalt verfälscht wird. Gibt es da eine Befehlsreferenz oder brauche ich einen C-Compiler dafür? Ich habe leider bisher noch nichts funktionierendes gefunden.



  • 1. Möglichkeit: Dateierweiterung ist .c
    2. Möglichkeit: Compilerflag /TC (in VC++ .NET in Projekteinstellungen über C/C++ -> Advanced -> Compile As einstellbar)



  • Wie wärs mit

    extern "C"
    

    ?



  • Das hat nur was damit zu tun wie später gelinked wird.



    1. Die Datei heisst bereits SMCMAIN.C
    2. Visual C++ .NET habe ich nicht, daher fällt dies weg.

    Ich habe einen Code gefunden, der die Fehlerzahl reduziert, aber er scheint nicht genau zu sein:

    #if defined_cplusplus
    
    extern "C"
    
    {
    
    #endif
    
    #if defined_cplusplus
    
    }
    
    #endif
    

    genauso wenig hilft:

    extern "C"
    
    [{]
    
    Quelltext
    
    [}]
    

    es werden eher nur noch mehr Fehler...

    oder wie muss ich das schreiben?



  • Stefz schrieb:

    1. Visual C++ .NET habe ich nicht, daher fällt dies weg.

    Das geht bestimmt auch in früheren Versionen.



  • Wo? Ich kenne mich nicht so gut mit dem Compiler aus. *sucht*



  • lass mal den unsinn mit dem extern "C" und poste die ersten paar fehler + die entsprechenden codezeilen



  • lade dir das mingw-dev-studio, dann *.c statt *.cpp und compile: oder besorg dir einfachen einen c-compiler



  • enno-tyrant schrieb:

    lade dir das mingw-dev-studio

    wo kriegt man das her?

    void Init_Timer(void)        /* Interrupt-Timer initialisieren */
    {
      #define MODEMASK 0xE
    
      unsigned int pitstart, pitstop;
      long pitdiff;
      unsigned char mode;
    
      outp(0x43, 0xE2);            <---------- ZEILE 63 !!!
      mode = ((inp(0x40) & MODEMASK) >> 1);
    
      if (mode == 3)
      {
        Pitfaktor = 2;
      }
      else if (mode == 2)
      {
        Pitfaktor = 1;
      }
      else 				// Zeitabsch„tzung --> fr PC XT gedacht }
      {                             // da beim PC XT Status nicht existiert  }
        pitstart = Get_Timer();
        delay(14);
        pitstop = Get_Timer();
    
        if (pitstart < pitstop)
        {
          pitdiff = pitstart+(65535-pitstop);
        }
    
    c:\dokumente und einstellungen\besitzer\desktop\smc_dv2a\smc_c\smcmot.c(63) : warning C4013: 'outp' undefiniert; Annahme: extern mit Rueckgabetyp int
    c:\dokumente und einstellungen\besitzer\desktop\smc_dv2a\smc_c\smcmot.c(64) : warning C4013: 'inp' undefiniert; Annahme: extern mit Rueckgabetyp int
    c:\dokumente und einstellungen\besitzer\desktop\smc_dv2a\smc_c\smcmot.c(77) : warning C4013: 'delay' undefiniert; Annahme: extern mit Rueckgabetyp int
    

    Der Quellcode müsste eigentlich stimmen. Er entstammt einer Beilage zu einer Schrittmotorsteuerkarte SMC1500 und müsste funktionsfähig sein. Ist halt nur in C geschrieben. Die anderen Fehler sind ähnlich.



  • Kann ich jemanden einmal die Quelldatei schicken? Ich komme echt nicht weiter...



  • du hast den header nicht eingebunden in dem 'outp' etc. stehen

    #include <irgendwas.h>



  • Hallo,
    anhand der Fehler sieht man, dass er den Code bereits im C-Modus kompiliert. In C++ ist das Fehlen einer Funktionsdeklaration ein Fehler. Da wird nichts implizit angenommen.
    Was dir fehlt sind Deklarationen (und wahrscheinlich auch Definitionen) von outp und co.
    Falls du unter Win arbeitest, versuch's mal mit #include <conio.h>



  • 4 Warnungen weniger immerhin. Das Problem ist, dass ich die Quelldatei nicht selbst geschrieben habe, weil sie wie gesagt nur Beilage war. Es gab nur 2 Dateien in C und das wars. Leider ist der Code zu lang, um ihn hier "kurz" abzudrucken.



  • also da fehlt einiges:

    warning: implicit declaration of function:
    Get_Timer;
    inp;
    outp;
    delay:

    undefined reference to `outp'

    syntax-fehler:
    } (am ende)



  • hmm, die funktionen erinnern mich sehr stark an meinen alten borland c++
    umgebung version 3.1.
    bei dem programm handelt es sich offensichtlich auch um ein MS DOS programm.
    das wirst du wohl vermutlich portieren müssen.

    conio.h bringt dir nichts.
    ich bin mir auch nicht sicher ob man in win überhaupt noch ports direkt ansprechen kann. (das was inp und outp macht)

    viele grüße
    Fischi

    [EDIT] du könntest dir auch den alten bcc holen und versuchen dein
    programm in der dos umgebung laufen zu lassen.



  • Fischi schrieb:

    ich bin mir auch nicht sicher ob man in win überhaupt noch ports direkt ansprechen kann. (das was inp und outp macht)

    Unter NT basierten Wins auf User Level jedenfalls nicht.


Anmelden zum Antworten