Datentyp auslesen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
smith0815
Beiträge: 3
Registriert: Mo Mär 10, 2014 10:30 pm

Datentyp auslesen

Beitrag von smith0815 » Mo Mär 10, 2014 10:33 pm

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?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Datentyp auslesen

Beitrag von cloidnerux » Mo Mär 10, 2014 10:46 pm

Hi
Hi und Willkommen im Forum :D
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?
Redundanz macht wiederholen unnötig.
quod erat expectandum

smith0815
Beiträge: 3
Registriert: Mo Mär 10, 2014 10:30 pm

Re: Datentyp auslesen

Beitrag von smith0815 » Mo Mär 10, 2014 10:56 pm

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.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Datentyp auslesen

Beitrag von mfro » Mo Mär 10, 2014 11:29 pm

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)
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Datentyp auslesen

Beitrag von Xin » Mo Mär 10, 2014 11:51 pm

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.
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.

smith0815
Beiträge: 3
Registriert: Mo Mär 10, 2014 10:30 pm

Re: Datentyp auslesen

Beitrag von smith0815 » Di Mär 11, 2014 12:03 am

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Datentyp auslesen

Beitrag von Xin » Di Mär 11, 2014 12:12 am

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.
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.

Antworten