Unterschied size_t zu UINT? Compilewarnung!
-
Meines Wissen ist die Warnung korrekt. Ein UINT ist wie der Name schon sagt immer ein unsigned int. Allerdings ist size_t die größte verfügbare Größe im System und könnte auf anderen Systemen eben ungleich unsigned int sind.
-
Wo ist denn size_t definiert????
Ich sehe das (VC++), wenn ich mir der Maus über den Datentyp gehe, kommt der kleine gelbe Popup.
Rechte Maustaste-> gehe zu Definition-> kommt Meldung:"...nicht definiert..."
Ist denn size_t IMMER ein unsigned? oder kann es auch ein signed sein?
ZB Liefert ja strlen ein size_t zurück.
habe ich eine Funktion zb:
MeineFunktion(int len);(...)
und übergebe dieser:
MeineFunktion(strlen(variable));KOmmt diese Fehlermeldung...
Was TUN???
-
nun,größen können nicht negativ sein,von daher müsste das immer unsigned sein
-
Mondmann schrieb:
Wo ist denn size_t definiert????
In etwa einem halben Dutzend Standard-Headern

Ich sehe das (VC++), wenn ich mir der Maus über den Datentyp gehe, kommt der kleine gelbe Popup.
Rechte Maustaste-> gehe zu Definition-> kommt Meldung:"...nicht definiert..."
Und woher hast du dann die obige Definition ausgegraben?
Ist denn size_t IMMER ein unsigned? oder kann es auch ein signed sein?
Ja, es ist vorzeichenlos. (btw, der dazugehörige vorzeichenbehaftete Typ nennt sich 'ptrdiff_t')
-
Ich sage ja: Wenn ich mit der Maus drüberfahre, kommt das Popup wo
"typedef unsigned int size_t drinsteht..."
Daher habe ich das...
-
Mondmann schrieb:
Wo ist denn size_t definiert????
In <cstddef>. (§18.1-2)
Um zu testen, was es nun genau ist, kannst du mit Templates spielen:
#include <iostream> #include <cstddef> using namespace std; template <typename T> void test(); template <> void test<unsigned>() { cout << "unsigned" << endl; } template <> void test<unsigned long>() { cout << "unsigned long" << endl; } int main() { test<size_t>(); }
-
7H3 N4C3R schrieb:
Mondmann schrieb:
Wo ist denn size_t definiert????
In <cstddef>. (§18.1-2)
Um zu testen, was es nun genau ist, kannst du mit Templates spielen:
#include <iostream> #include <cstddef> using namespace std; template <typename T> void test(); template <> void test<unsigned>() { cout << "unsigned" << endl; } template <> void test<unsigned long>() { cout << "unsigned long" << endl; } int main() { test<size_t>(); }Was soll das Beispiel? Zwischen "unsigned" und "unsigned long" gibts da einen
Unterschied(ausser unterschiedliche Schreibweise) ?
-
egon2 schrieb:
Was soll das Beispiel? Zwischen "unsigned" und "unsigned long" gibts da einen
Unterschied(ausser unterschiedliche Schreibweise) ?
Es sind unterschiedliche Datentypen. Das ist der Unterschied. unsigned long ist mindestens so breit wie unsigned (int), kann aber auch breiter sein. Selbst bei selber Größe sind es immernoch unterschiedliche Datentypen.
-
@N4C3R: Ich hoffe, dir ist klar, daß dein Testprogramm auch zu einem Linker-Fehler führen könnte
Es ist nirgends vorgeschrieben, daß size_t ein simpler typedef für einen der üblichen unsigned-Typen sein muß, also kann sich dahinter auch etwas vollkommen autonomes verbergen.
-
$17.4.4.7, Fußnote 174 sagt es explizit, dass es ein Basic Integral Type sein muss. Ansonsten, da size_t aus einem C-Header kommt und im Kompatiblitätsabschnitt keine Abweichung bezüglich size_t beschrieben wird, folgt daraus implizit, dass size_t ein integraler Typ sein muss.