Datentyp in einer Variablen speichern?
-
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.
-
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.
-
ich informier mich jetzt selber. von allen seiten hoer ich was anderes, das kann ja nicht angehen!
hab mich informiert (den standard nach "short" durchsucht). es ist NIRGENDS von mindest/maximalgroessen die rede.
<limits.h> beschreibt lediglich implementationscharakteristiken. es wird aber indirekt davon gesprochen, dass ein unsigned short normalerweise 16 bit hat (aber nicht haben muss).edit: oops, hab nochmal gelesen.
<limits.h> enthaelt mindestgroessen:5.2.4.2.1 Sizes of integer types <limits.h>
1 The values given below shall be replaced by constant expressions suitable for use in #if
preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the
following shall be replaced by expressions that have the same type as would an
expression that is an object of the corresponding type converted according to the integer
promotions. Their implementation-defined values shall be equal or greater in magnitude
(absolute value) to those shown, with the same sign.
-
TactX schrieb:
Sie haben eine garantierte Mindestmenge. Der Standard schreibt schon vor, dass ein short mindestens 16 Bit hat.
Und das steht genau wo?
-
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.