bitte jemand mir helfen kann, sizeof()
Operator in c zu implementieren ..sizeof Operator in c
Ich kenne die Nutzung .. aber ich war nicht in der Lage, sie umzusetzen.
bitte jemand mir helfen kann, sizeof()
Operator in c zu implementieren ..sizeof Operator in c
Ich kenne die Nutzung .. aber ich war nicht in der Lage, sie umzusetzen.
Sie können nicht sizeof()
als Bibliotheksfunktion implementieren, ist es ein intrinsischer Compiler. Schreibst du einen Compiler?
zum Beispiel, wenn sizeof ('t') den output ist 1 – RJV
@RAVI JV: Es ist unwahrscheinlich, dass das Ergebnis von 'sizeof ('t')' '1' auf Ihrem Computer ist, weil eine Zeichenkonstante vom Typ 'int ist 'in C, nicht' char' (ja, 'int' _could_ kann ein Byte groß sein, wenn ein Byte mindestens 16 Bit hat; es ist nur unwahrscheinlich, dass Sie ein System haben, wo dies der Fall ist). –
@James Bist du dir da sicher? Ich bin mir ziemlich sicher, dass 't' vom Typ char sein wird, der garantiert 8 Bytes lang ist ... –
Sie können nicht sizeof
in C umzusetzen; Es ist ein Basisoperator (Sie können auch +
nicht implementieren).
Sie einen Makro schreiben könnten, die eine begrenzte Teilmenge von sizeof
‚s Verhalten hat, durch etwas entlang der Linien zu tun:
#define thisIsAHorribleHackDontDoThis(a) \
((size_t)((intptr_t)(&a + 1) - (intptr_t)&a))
aber das funktioniert nur, wenn a
ein L-Wert (und es ist schrecklich zu sehen). sizeof
ist nicht so begrenzt, und deshalb sollten Sie es verwenden, anstatt ein Rad neu zu erfinden, das nicht wirklich rund ist.
Oder '#define mysizeof (type) ((size_t) ((char *) ((typ *) 0 + 1) - (char *) 0))' –
@R: man sollte beide Ansätze als "Maximum" mischen tragbar". 'intptr_t' ist nicht unbedingt definiert, aber' (char *) (void *) & a' ist. Auf der anderen Seite, wenn ich mich richtig erinnere, ist Arithmetik auf Nullzeiger UB. –
Unten ist die Implementierung von sizeof Betreiber
#define SZOF(x) (size_t)(((x*)(0))+1)
das funktioniert nur für einige * type * x; sizeof funktioniert auch mit Variablennamen. Auch das ist ziemlich genau dasselbe wie R.'s Kommentar zu Stephen Canons Antwort oben. –
Was haben Sie versucht? Wo steckst du fest? Haben Sie Fehler? Schreibst du einen Compiler? –
Nein .. eigentlich werde ich das Verhalten des Operators sizeof implementieren – RJV
zum Beispiel, wenn sizeof ('t') den Ausgang ist 1 – RJV