Viele Fehler bei C Code mit VisualC++



  • Hallo,
    ich habe die ganze Zeit mit einem sehr aktuellen GNU C++ Compiler (4.x) gearbeitet und in meinem Projekt einen Teil in reinem C geschrieben.
    Natürlich auch korrekt mit "extern "C" { /* ... / }" als ANSI C gekennzeichnet.
    Jetzt habe ich mal mit VisualC++ angefangen und komme bei diesem C Teil nicht weiter.
    Hier der Code wo der erste Fehler anfällt:

    /* file: "spRayCore.h" */
    
    #ifdef _MSC_VER
    #   define RAYINLINE static __inline
    #else
    #   define RAYINLINE static inline
    #endif
    
    typedef unsigned char   RAYpixel_t;
    typedef int             RAYcolor_t;
    
    extern RAYpixel_t* rayPixelBuffer;
    
    /* file: "spRayStandardTypes.h" */
    
    RAYINLINE void rayPlotIndexedAlphaEffect(RAYint i, const RAYfloat z, RAYcolor_t r, RAYcolor_t g, RAYcolor_t b, RAYcolor_t a)
    {
        // Plot the depth
        if (z >= rayDepthBuffer[i])
        {
            rayDepthBuffer[i] = z;
    
            i <<= 2;
            rayPixelBuffer[i+0] = r * a / 255   +   rayPixelBuffer[i+0] * ( 255 - a ) / 255;
            rayPixelBuffer[i+1] = g * a / 255   +   rayPixelBuffer[i+1] * ( 255 - a ) / 255;
            rayPixelBuffer[i+2] = b * a / 255   +   rayPixelBuffer[i+2] * ( 255 - a ) / 255;
            rayPixelBuffer[i+3] = a;
        }
        else
        {
            i <<= 2;
    
            r = r * a / 255   +   rayPixelBuffer[i+0] * ( 255 - a ) / 255;
            g = g * a / 255   +   rayPixelBuffer[i+1] * ( 255 - a ) / 255;
            b = b * a / 255   +   rayPixelBuffer[i+2] * ( 255 - a ) / 255;
    
            // FEHLER HIER
            const RAYcolor_t olda = rayPixelBuffer[i+3];
            // /FEHLER HIER
    
            rayPixelBuffer[i+0] = r * ( 255 - olda ) / 255   +   rayPixelBuffer[i+0] * olda / 255;
            rayPixelBuffer[i+1] = g * ( 255 - olda ) / 255   +   rayPixelBuffer[i+1] * olda / 255;
            rayPixelBuffer[i+2] = b * ( 255 - olda ) / 255   +   rayPixelBuffer[i+2] * olda / 255;
            rayPixelBuffer[i+3] = a;
        }
    }
    

    Und hier ist die Fehlermeldung:

    d:[...]\spRayStandardTypes.h(388) : error C2143: Syntaxfehler: Es fehlt ';' vor 'const'
    d:[...]\spRayStandardTypes.h(389) : error C2065: 'olda': nichtdeklarierter Bezeichner
    

    Könnt ihr erkennen warum das nicht geht? Ich arbeite natürlich auch mit "#include guards". Aber eigentlich verwende ich wirklich kein C++ sondern nur reines C.



  • Hast du das Modul noch als .cpp?
    Dann benenne es mal um in .c.

    In C gehören Variablendeklarationen immer an den Beginn des {} Blocks.



  • Position der Variablendeclaration

    in C++ oder in C nach c99 wäre das okay.

    Aber nach älteren C-Normen kann das Probleme geben - die meisten der älteren oder die nach älteren Normen arbeitenden Compiler streiken da. Aber nicht alle 😉

    Natürlich ist das wie fast immer im Leben, mein Compiler hat recht 😃 🤡

    Jeder C oder C++-Compiler mit denen ich bisher gespielt hab, hat/hatte seine Vor- und Nachteile. Manchmal ist es gar abhängig von der Aufgabenstellung welcher gerade besser ist 😉

    MfG


Log in to reply