Warnungen ausgeben wenn: int geteilt wird



  • Hi!

    Wie bekomm ich eine Warnung ausgegeben, wenn ein Integer durch etwas
    geteilt wird?
    Umgebung ist VS2005 C++

    Viele Grüße
    Tomatojuice



  • Durch einen int teilen ist eine gueltige und sehr uebliche Aktion, ich bezweifle dass es dafuer eine Warnung gibt, die du aktivieren kannst. Zur Not: einfach alle einschaltbaren Warnungen in der IDE durchgehen, aber ich glaub wie gesagt nicht, dass du fuendig werden wirst 😉


  • Mod

    Hier ein übler Hack für Warnungen zur Laufzeit:

    class Int
    {
      int i;
    public:
      Int(int i):i(i){}
      Int(){}
      operator int(){return i;}
    
      // Alle Memberoperatoren die int so kennt, außer /=
    
      Int& operator/=(Int a)
      {
        cerr<<"Warnung\n";
        i/=a.i;
        return *this;
      }
    
      // Alle freien Operatoren die int so kennt, außer /
    
      friend const Int operator/(Int a, Int b)
      {
        cerr<<"Warnung\n";
        return Int(a.i/b.i);
      }
    };
    
    int main()
    {
    #define int Int
      int i=1;
      int j=2;
    
      int k=i/j;
    
    }
    

    Mit Templates könnte man eventuell auch eine Warnung zur Compilezeit erzeugen, aber dann nur beim ersten Vorkommen der Division.



  • Dein Hack ist noch nicht ganz korrekt.
    Tomatojuice wollte die Fehlermeldung, wenn ein Integer durch ETWAS geteilt wird, etwas kann auch ein double sein.

    Ich mach mal einen Anfang:

    template<typename TEtwas>
      Int& operator/=(TEtwas a){a/0;i/=a.i;return *this;} // a/0 gibt Warning; kein const Int&, weil sich ints anders verhalten.
    

    Das ganze kommt mir so sinnlos vor, dass ich auf weitere Ausführungen verzichte.


Anmelden zum Antworten