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