Seite 1 von 1
Datentyp auslesen
Verfasst: Mo Mär 10, 2014 10:33 pm
von smith0815
Hi
ich bin gerade dabei das Tutorial für C durch zu arbeiten.
Nun kam bei mir die Frage auf: Gibt es in C eine Möglichkeit den Datentyp auszulesen?
Re: Datentyp auslesen
Verfasst: Mo Mär 10, 2014 10:46 pm
von cloidnerux
Hi
Hi und Willkommen im Forum
Nun kam bei mir die Frage auf: Gibt es in C eine Möglichkeit den Datentyp auszulesen?
Es gibt für die Basistypen wie int, float, double in C und C++ keine Möglichkeit den Typ zu ermitteln aus unbekannten Daten.
Es gibt die Compiler-Erweiterung "typeof" für den gcc, die aber nur zur Compilierzeit den Datentyp ermittelt.
Wirkliche Typenermittelung gibt es nur in Sprachen wie C# oder Java.
Damit zusammenhängend ist aber auch die Frage, was man mit dieser Information machen will?
Re: Datentyp auslesen
Verfasst: Mo Mär 10, 2014 10:56 pm
von smith0815
Das ging ja schnell, Danke.
Bei mir ging es einfach um die Frage:
Wenn ich eine Zeiger bekomme, möchte ich den Inhalt bzw. den Inhalt der Variable auf die er zeigt richtig ausgeben. So z.B. ein Ascii-Zeichen nicht als Zahl sondern als Zeichen und eine Zahl eben nicht als Zeichen.
Aber gut zu wissen, Danke.
Dann werde ich nach C eben auf C++ weiter machen.
Re: Datentyp auslesen
Verfasst: Mo Mär 10, 2014 11:29 pm
von mfro
Das kann C++ auch nicht (jedenfalls nicht ohne die Mithilfe des Programmierers). Und damit geht das auch mit C:
Code: Alles auswählen
enum data_type{ int_type, double_type, int_ptr_type };
union value
{
int _int;
double _double;
int *_int_ptr;
};
struct dynamic_type
{
enum data_type t;
union value v;
};
void assign(struct dynamic_type *dyn, enum data_type typ, ...)
{
va_list va;
va_start(va, typ);
switch (typ)
{
case int_type:
dyn->v._int = va_arg(va, int);
break;
case int_ptr_type:
dyn->v._int_ptr = va_arg(va, int *);
break;
case double_type:
dyn->v._double = va_arg(va, double);
break;
}
dyn->t = typ;
}
(va_arg macht "type promotion", deswegen gibt's bei float, char und short ein paar Problemchen, aber grundsätzlich geht das so)
Re: Datentyp auslesen
Verfasst: Mo Mär 10, 2014 11:51 pm
von Xin
smith0815 hat geschrieben:Das ging ja schnell, Danke.
Bei mir ging es einfach um die Frage:
Wenn ich eine Zeiger bekomme, möchte ich den Inhalt bzw. den Inhalt der Variable auf die er zeigt richtig ausgeben. So z.B. ein Ascii-Zeichen nicht als Zahl sondern als Zeichen und eine Zahl eben nicht als Zeichen.
Das Problem löst Du bitte mit Überladung der Ausgabe-Funktion oder durch abstrakte Klassen, die sich selbst in eine entsprechende Ausgabe transformieren.
Hier sei std::to_string<> eine Empfehlung.
Re: Datentyp auslesen
Verfasst: Di Mär 11, 2014 12:03 am
von smith0815
Ok, vielen Dank.
@Xin: Danke für den Tip.
Ich werde aber erst das C Tutorial fertig machen bevor ich zu C++ wechsel, zumal es ja auf dem Wissen von C aufbaut.
Re: Datentyp auslesen
Verfasst: Di Mär 11, 2014 12:12 am
von Xin
smith0815 hat geschrieben:Ok, vielen Dank.
@Xin: Danke für den Tip.
Ich werde aber erst das C Tutorial fertig machen bevor ich zu C++ Wechsel, zumal es ja auf dem Wissen von C aufbaut.
Halte ich für sinnvoll.
Vorsichtig aber der Hinweis, dass unser C++ Tutorial teilweise gut ist, aber eben teilweise auch noch nicht existiert. std::to_string existiert beispielsweise nicht.