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?
Datentyp auslesen
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Datentyp auslesen
Hi und Willkommen im ForumHi

Es gibt für die Basistypen wie int, float, double in C und C++ keine Möglichkeit den Typ zu ermitteln aus unbekannten Daten.Nun kam bei mir die Frage auf: Gibt es in C eine Möglichkeit den Datentyp auszulesen?
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?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Datentyp auslesen
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.
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
Das kann C++ auch nicht (jedenfalls nicht ohne die Mithilfe des Programmierers). Und damit geht das auch mit C:
(va_arg macht "type promotion", deswegen gibt's bei float, char und short ein paar Problemchen, aber grundsätzlich geht das so)
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;
}
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Datentyp auslesen
Das Problem löst Du bitte mit Überladung der Ausgabe-Funktion oder durch abstrakte Klassen, die sich selbst in eine entsprechende Ausgabe transformieren.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.
Hier sei std::to_string<> eine Empfehlung.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Datentyp auslesen
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.
@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.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Datentyp auslesen
Halte ich für sinnvoll.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.
Vorsichtig aber der Hinweis, dass unser C++ Tutorial teilweise gut ist, aber eben teilweise auch noch nicht existiert. std::to_string existiert beispielsweise nicht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.