__STDC__ mal definiert, mal nicht. Probleme bei BDS2006 Pro auf Vista



  • Hallo Experts,
    Problemschilderung siehe Code.
    Danke für's Reinschauen, Lösung dringendst 😮

    //Das hier beispielhaft zur Demonstration meines Probs verwendete Projekt ist ohne jeden Schnickschnack,
    //einfach nur Datei | Neu | VCL-Formularanwendung erzeugtz und im Konstruktor einige Funktionsaufrufe hinzugefügt.
    //Die nun auftretenden "Erscheinungen" sind mittels der Kommentare hier im Quellcode beschrieben.
    //Auf allen Systemen gelten die gleichen Projekteinstellungen, zumindest wurden aktiv keine geändert!
    //Ich erhoffe mir nun schnellstmöglich Hilfe, da durch diesen Effekt ein relativ großes Projekt ins Stocken gerät!
    
    #ifdef __STDC__ //auf beiden Systemen "NEIN"
    #warning __STDC__ definiert
    #else
    #warning __STDC__ nicht definiert
    #endif
    
    #include <vcl.h>
    
    #ifdef __STDC__ //auf den "guten" Rechnern (BDS2006 Ent auf 2000/XP): NEIN, auf dem "bösen" aber plötzlich "JA" ??????
    #warning __STDC__ definiert
    #else
    #warning __STDC__ nicht definiert
    #endif
    
    //Meine Suche ergab, daß die "stdlib.h" aber eigentlich die einzige(?) Stelle ist, in der "#define __STDC__" steht.
    
    //Auf einem anderen Rechner (BDS2006 Pro auf Vista) ist diese Programmzeile auf einmal notwendig...,
    #undef __STDC__
    //...damit anschließend in der math.h "ordentlich" deklariert wird und so die z.B. hier verwendeten Fkt.
    //"abs", "pow10" und "hypot" erkannt werden... (???)
    
    #include <math.h>
    
    #pragma hdrstop
    
    #include "Unit8.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm8 *Form8;
    //---------------------------------------------------------------------------
    __fastcall TForm8::TForm8(TComponent* Owner)
    	: TForm(Owner)
    {
    	//Ist __STDC__ definiert, sind dem Compiler diese Fkt. unbekannt:
    	abs(3);
    	pow10(3);
    	hypot(3., 3.);
    
    	//Im Originalprojekt gibt es weitere Compilerfehlermeldungen, die nach meinen Recherchen (try 'n' error)
    	//allesamt tatsächlich am defined __STDC__ liegen...
    }
    //---------------------------------------------------------------------------
    


  • Hallo

    Auf jedenfall mischt du C und C++. Verwende nur aktuelles C++

    #include <cmath>
    ...
    std::abs(3);
    std::pow10(3);
    //hypot(3., 3.); ist mir nicht als Funktion aus der Standard-Lib bekannt
    

    bis bald
    akari



  • Danke, aber kein Erfolg. Weiterhin Meldung, daß die Fkt. pow10 und hypot (Länge der Hypotenuse eines rechtwinkligen Dreiecks in math.h(221, 396)) unbekannt.
    Die Variante mit std::abs hatte ich auch schon probiert, geht auch mit math.h, das scheint mir aber auch keine befriedigende Lösung zu sein, zumal der komplette Code bisher immer gefunzt hat...

    Außerdem werden im eigentlichen Großprojekt noch ganz andere Fehler gemeldet, die wir nach meiner Einschätzung soooooo einfach nicht beheben können, wie z.B.:
    Fehlermeldung in "comutil.h" Zeile 921: 'n1' ist kein Element von 'tagVARIANT'

    inline _variant_t::_variant_t(VARIANT& varSrc, bool fCopy) throw(_com_error)
    {
    	if (fCopy) {
    		::VariantInit(this);
    		_com_util::CheckError(::VariantCopy(this, &varSrc));
    	} else {
    		memcpy(this, &varSrc, sizeof(varSrc));
    >>Fehlerzeile>>		V_VT(&varSrc) = VT_EMPTY;
    	}
    }
    

    Ursache ausgemacht in "oleauto.h" Zeile 74 (in Zeile 72 steht unser __STDC__!!!), auch wenn völlig unklar ist, welche Unit bzw. Funktion diese Stelle benötigt, explizit wird das gar nicht verwendet!!!

    #if __STDC__ || defined(NONAMELESSUNION)
    #define V_UNION(X, Y)   ((X)->n1.n2.n3.Y)
    #define V_VT(X)         ((X)->n1.n2.vt)
    #define V_RECORDINFO(X) ((X)->n1.n2.n3.brecVal.pRecInfo)
    #define V_RECORD(X)     ((X)->n1.n2.n3.brecVal.pvRecord)
    #else
    

    Wo "mische" ich denn?? Das Projekt ist doch nahezu "leer"??
    Warum klappts seit Jahren mit GLEICHEM Code, GLEICHER IDE, GLEICHEN Projekteinstellungen und GLEICHEN Umgebungsoptionen auf den anderen Rechnern??



  • Hab's gefunden: 🙂
    Die define-Anweisung für __STDC__ in der stdlib.h gehört dort nicht hin!!! 😡
    Aus unerfindlichen Gründen hat einer der früheren "Entwickler" auf diesem Rechner diese Zeile hinzugefügt, ohne die Folgen zu kennen bzw. vergessen, diese fatale Änderung rückgängig zu machen... 🙄
    Nun ja, die Tatsache, daß dieses Problem nur auf diesem Rechner auftrat, bewog mich anfangs schon zu einer Reparatur der BDS-Installation, die ich auch mittels Original-CD durchführte! Im Nachhinein ist nun den Entwicklern dieser Funktion anzukreiden, daß hier offenbar nur sehr oberflächlich die Dateinamen und nicht auf deren Inhalt geprüft wird, schwach, ganz schwach, hat mich ne Menge Zeit gekostet 👎 👎 👎


Anmelden zum Antworten