[gcc 3.4.4] converting of negative value ... size_t



  • kann mir einer die folgende warnung erklären?

    {
    ...
       std::string filename = "c:/aaa/bbb/ccc";      
     ...  
       std::size_t pos1 = filename.rfind("/");  //gcc 3.4.4 warning: converting of
                                                // negative value `-0x00000000000000001' to `size_t'
    
       if(pos1==std::string::npos) pos1 = 0;
    
       std::size_t pos2 = filename.rfind(".");
       if(pos2!=std::string::npos && pos2>pos1)
          return filename.substr(pos2+1);
    
    ...
    }
    

    der Rückgabetyp von rfind ist ein size_t -> i.d.R. ein typedef auf unsigned int, der natürlich nicht negativ sein kann. aber wo genau ist das Problem bei der Zeile???



  • Der Rückgabetyp sieht aber eher nach 64bit aus.
    Verwende mal std::string::size_type statt std::size_t.



  • ja, es ist in der tat ein 64bit rückgabetyp!

    mit size_type sieht es schon besser aus. danke

    edit: problem gefunden... die fehlerursache war in einer anderen datei. dort wurde dem size_t tatsächlich -1 zugewiesen.

    ist es prinzipiell egal, ob ich std::size_t verwende anstatt das den size_type des entsprechenden containers???



  • Ich verwende bisher auch immer std::size_t, da dies kürzer zu schreiben ist als der Container-Datentyp.
    Aber sobald eine Warnung erscheint, versuche ich diese natürlich zu eliminieren.
    Bisher habe ich auch nur mit 32Bit-Compilern gearbeitet, d.h. es kann also sein, daß einige meiner alten Programme unter 64Bit-Compilern auch Warnungen erzeugen würden (aber wer kann schon von sich behaupten, seine C/C++ Programme für alle Compiler und Betriebssysteme kompatibel geschrieben zu haben? -)


Anmelden zum Antworten