Datentyp in einer Variablen speichern?
-
ich habs zitiert
-
TactX schrieb:
c.rackwitz schrieb:
die idee mit sizeof() ist nicht garantiert, weil datentypen keine von c garantierte laenge haben. z.b. kann es auf einem mikroprozessor passieren, dass short und int nur 8 bit haben.
Sie haben eine garantierte Mindestmenge. Der Standard schreibt schon vor, dass ein short mindestens 16 Bit hat.
Stimmt, aber trotzdem darf sizeof(short) eins geben und darum ging's hier ja eigentlich, oder?
-
Daniel E. schrieb:
Stimmt, aber trotzdem darf sizeof(short) eins geben und darum ging's hier ja eigentlich, oder?
wenn er pech hat (z.b. einige dsp's bei denen alles 32 bittig abläuft) ergibt sogar sizeof(long) == 1
-
lirum larum leute, gebt dem guten man lieber mal einen ratschläg der ihn weiterbringt, anstelle irgendwas von standards und mikroprozessoren zu sülzen, wenn er damit irgendwas am hut hätte, hätte er sich die frage selbst beantworten können.
-
hat er schon bekommen: in c ist nicht moeglich, was er vorhat. in c++ aber schon eher.
-
mein eigendliches Problem ist das immer die gleiche Funktion aufrufen will nur manchmal muß ich in der Funktion einen void-pointer als int, char oder double casten.
temp[0]!=*(int*)pData oder temp[0]!=*(char*)pData
Ich habe gedacht wenn ich den Datentyp in einer variablen speicher könnte ich das damit irgendwie machen. Bis jetzt hab ich die Funktion für jeden Dtaentyp einnmal im Programm hätte es halt lieber wenn ich die Funktion nur einmal definieren muß und dann immer mit unterschiedlich cast´s aufrufen könnte. Vielleicht weiß einer wie man das machen könnte?
-
Du sagst der Funktion jedes Mal dazu, wie sie die Daten casten soll:
typedef enum { dt_char, dt_int, ... } data_type; int func(data_type t,void* data) { switch(t) { case dt_char: //vergleiche mit *(char*)data case dt_int: //vergleiche mit *(int*)data ... } } int main() { void* whatever=...; func(dt_char,whatever); }
(sieht zwar grausam aus, aber besser wird es wohl nicht in C machbar sein)
-
so in der Art mach ich das ja was mir halt nicht gefällt. Wäre besser wenn man das dynamisch machen könnte.
-
dynamischer gehts nur mit c++. soll ich dich verschieben?
-
nein danke der rest meines programms ist ja schon in C. Dann muß ich es halt so machen.