Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Compilerabhängigkeit: Größen von Variablen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
24.07.2003, 19:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
ich habe folgenden Codeschnipsel gefunden, welcher die Größe eines Arrays angeben soll. Ich hab ihn nicht genauer ausprobiert, bin mir aber nicht sicher ob er wirklich ÜBERALL (=allen Platformen & Compilern) funktionieren würde.


C++:
#define sizeof_array(x) (sizeof((x)) / sizeof((x)[0]))



Kommt da wirklich IMMER die richtige Größe raus? Theoretisch schon, oder?
--
class God : public ChuckNorris { };

Dieser Post wurde am 24.07.2003 um 19:37 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.07.2003, 19:44 Uhr
kronos
Quotenfisch
(Operator)


dabei kommt IMMER die anzahl der elemente im array x raus, vorausgesetzt sie ist definiert.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.07.2003, 19:56 Uhr
Marian



Korrigiert mich, wenn ich falsch liege, aber muss es nicht so aussehen?


C++:
#define sizeof_array(x) (sizeof(x) / sizeof(x[0]))



Vielleicht war es ja nur ein Tippfehler. Aber zur Sicherheit...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.07.2003, 21:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


@Marian
hmm jo natürlich
die doppelten klammern waren ein paar zuviele, ich hab das einfach rauskopiert...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.07.2003, 09:46 Uhr
0xdeadbeef
Gott
(Operator)


Du kannst du natürlich wilde Effekte haben, wenn du was anderes als ein Array in das Makro reinschiebst. Zum Beispiel:

C++:
double *my_array = malloc(10 * sizeof(double));
for(i = 0; i < 10; ++i)
    *my_array=sizeof(++myarray);


Gut, das ist jetzt ein bisschen hergeholt, aber du verstehst, was ich meine. Funktionsmakros sind immer so ne Sache.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.07.2003, 09:57 Uhr
~StefanD
Gast


Nein, es funktioniert nicht immer. Und zwar genau dann nicht, wenn die Deklaration des Arrays nicht im Sichtbarkeitsbereich des Makros ist:

C++:
int foo(int *array) {
   return sizeof_array(array);
}

int main() {

   int array[10];
   std::cout << sizeof_array() << std::endl
                 << foo(array);
   return 0;
}




Stefan.

--Edit: ThWboard-Code aktiviert.

Dieser Post wurde am 25.07.2003 um 10:05 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: