typedef?

Mitäs tuo typedef oikein tekee?

typedef int TAika;
....
TAika Aika;
....
Aika = 4545;


Eikös ole ihan sama kuin
int Aika 4545;
91140
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

Google olisi auttanut tässäkin tilanteessa, mutta...
Typedefillä voi määritellä muuttujatyyppien nimet uusiksi.

Määrität vain esim:
typedef unsigned long ulong

Nyt ulong on sama kuin unsigned long, eli ei tarvitse kirjoittaa tuota pitkää litanjaa joka kerta.

Äänestä
  • "Typedefillä voi määritellä muuttujatyyppien nimet uusiksi. "

    Kun nyt tietokonepalstalla ollaan, niin nussitaas ajankuluksi pilkkua. Tarkalleen muuttujatyyppien nimiä ei määritellä uusiksi, vaan voidaan antaa tyypeille eri aliaksia. Yleinen esimerkkihän tästä on strukti.

    struct foo {
    ....
    };

    Ja muuttuja olisi
    struct foo a; /* a on struct foo tyyppinen muuttuja */

    versus

    typedef struct _foo {
    ....
    } foo;

    Ja muuttuja voidaankin määritellä
    foo a;

    Tätähän Anonymous Mäkinenkin varmasti tarkoitti, mutta hetkellisen huonon itsetuntoni kohottamiseksi halusin hieman viisastella :)

    Äänestä

  • aslkjf kirjoitti:

    "Typedefillä voi määritellä muuttujatyyppien nimet uusiksi. "

    Kun nyt tietokonepalstalla ollaan, niin nussitaas ajankuluksi pilkkua. Tarkalleen muuttujatyyppien nimiä ei määritellä uusiksi, vaan voidaan antaa tyypeille eri aliaksia. Yleinen esimerkkihän tästä on strukti.

    struct foo {
    ....
    };

    Ja muuttuja olisi
    struct foo a; /* a on struct foo tyyppinen muuttuja */

    versus

    typedef struct _foo {
    ....
    } foo;

    Ja muuttuja voidaankin määritellä
    foo a;

    Tätähän Anonymous Mäkinenkin varmasti tarkoitti, mutta hetkellisen huonon itsetuntoni kohottamiseksi halusin hieman viisastella :)

    Asia selvisi, yritin kyllä googlettaa mutta ei sieltä mitään vastausta löytyny jonka olisin tajunnut.

    Äänestä

  • aslkjf kirjoitti:

    "Typedefillä voi määritellä muuttujatyyppien nimet uusiksi. "

    Kun nyt tietokonepalstalla ollaan, niin nussitaas ajankuluksi pilkkua. Tarkalleen muuttujatyyppien nimiä ei määritellä uusiksi, vaan voidaan antaa tyypeille eri aliaksia. Yleinen esimerkkihän tästä on strukti.

    struct foo {
    ....
    };

    Ja muuttuja olisi
    struct foo a; /* a on struct foo tyyppinen muuttuja */

    versus

    typedef struct _foo {
    ....
    } foo;

    Ja muuttuja voidaankin määritellä
    foo a;

    Tätähän Anonymous Mäkinenkin varmasti tarkoitti, mutta hetkellisen huonon itsetuntoni kohottamiseksi halusin hieman viisastella :)

    Jos nyt oikein tarkkoja ollaan ja käytetään oikeita nimiä asioille, niin kyseessä ei ole mikään alias.

    Typedef määrittelee ohjelmoijan oman tietotyypin. Typedef tuleekin englanninkielisistä sanoista type define.

    Perustietotyyppejä on siis esim int, float ja char. Typedef määrittelee vastaavasti ohjelmoijan oman tietotyypin jota voidaan sitten käyttää samaan tapaan kuin perustietotyyppejä.

    Aiemmin annettu struct esimerkki toki pitää paikkansa. Pelkkä ohjelmoijan määrittelemä struct-tietorakenne ilman typedef:ä ei itsessään vielä ole uusi tietotyyppi. Tietotyyppi siitä tulee vasta kun käytetään typedef:ä.

    Toki typedef:llä voi määritellä muunkin tyyppisiä tietotyyppejä, pakko sen ei ole perustua struct rakenteeseen. Esimerkiksi voidaan määritellä osoitintietotyyppi tai ns handle, jolla voidaan yksinkertaistaa huomattavasti osoitinten käyttöä.

    Äänestä

  • miksuh. kirjoitti:

    Jos nyt oikein tarkkoja ollaan ja käytetään oikeita nimiä asioille, niin kyseessä ei ole mikään alias.

    Typedef määrittelee ohjelmoijan oman tietotyypin. Typedef tuleekin englanninkielisistä sanoista type define.

    Perustietotyyppejä on siis esim int, float ja char. Typedef määrittelee vastaavasti ohjelmoijan oman tietotyypin jota voidaan sitten käyttää samaan tapaan kuin perustietotyyppejä.

    Aiemmin annettu struct esimerkki toki pitää paikkansa. Pelkkä ohjelmoijan määrittelemä struct-tietorakenne ilman typedef:ä ei itsessään vielä ole uusi tietotyyppi. Tietotyyppi siitä tulee vasta kun käytetään typedef:ä.

    Toki typedef:llä voi määritellä muunkin tyyppisiä tietotyyppejä, pakko sen ei ole perustua struct rakenteeseen. Esimerkiksi voidaan määritellä osoitintietotyyppi tai ns handle, jolla voidaan yksinkertaistaa huomattavasti osoitinten käyttöä.

    Niin ja ohjelmoijan määrittelemää struct-tietorakennetta kutsutaan tietueeksi.

    Äänestä

  • miksuh. kirjoitti:

    Jos nyt oikein tarkkoja ollaan ja käytetään oikeita nimiä asioille, niin kyseessä ei ole mikään alias.

    Typedef määrittelee ohjelmoijan oman tietotyypin. Typedef tuleekin englanninkielisistä sanoista type define.

    Perustietotyyppejä on siis esim int, float ja char. Typedef määrittelee vastaavasti ohjelmoijan oman tietotyypin jota voidaan sitten käyttää samaan tapaan kuin perustietotyyppejä.

    Aiemmin annettu struct esimerkki toki pitää paikkansa. Pelkkä ohjelmoijan määrittelemä struct-tietorakenne ilman typedef:ä ei itsessään vielä ole uusi tietotyyppi. Tietotyyppi siitä tulee vasta kun käytetään typedef:ä.

    Toki typedef:llä voi määritellä muunkin tyyppisiä tietotyyppejä, pakko sen ei ole perustua struct rakenteeseen. Esimerkiksi voidaan määritellä osoitintietotyyppi tai ns handle, jolla voidaan yksinkertaistaa huomattavasti osoitinten käyttöä.

    mikä on tietotyyppi?

    Äänestä

  • mulle kirjoitti:

    mikä on tietotyyppi?

    http://goblin.tkk.fi/c/tutorials/tietueet.xhtml

    Lainauksia
    "Määrittellään uusi tietotyyppi 2d-avaruudessa sijaitsevaa pistettä varten.

    struct point {
    double x;
    double y;
    };"

    Eli kyllä "struct point" on tietotyyppi. Muutenhan jos määriteltäisiin muuttuja "struct point osoite;" niin mikä olisi osoite-muuttujan tyyppi?

    Myöhemmin:
    "Abstraktin tietotyypin yhteydessä
    voidaan käyttää varattua sanaa typedef jolla määritellään tietotyypille nimi.

    typedef struct {
    double x;
    double y;
    } TPoint;"

    Ehkä alias oli vähän harhaanjohtava, mutta kyseessä on kuitenkin kutsumanimi eikä uuden tyypin määritteleminen.

    Äänestä

  • mulle kirjoitti:

    mikä on tietotyyppi?

    Yksinkertastettuna tietotyyppi määrää kuinka paljon tilaa tietyn tyyppistä tietoa sisältävä muuttuja vie muistissa ja miten sen tyyppistä muuttujaa käsitellään ohjelmassa. Eli miten kokonaislukuja, merkkejä jne käsitellään ja paljonko ne vie muistia.

    C:n perustietotyyppejä on esim int, float, char jne,

    Perustietotyypeistä Johdettuja tietotyyppejä on esim taulukot, yhdisteet ja okei myös tietueet jne.

    Okei myös tietue on tietotyyppi vaikka se on oikeastaan vain kokoelma eri tietotyypeistä koostuvia tietuealkioita niputettuna yhteen.
    Pelkkää structia käytettäessä korostuu kuitenkin aina se, että se on vain jokin tietue, eikä esim tyyppiä piste mikä olisi monesti ohjelmassa loogisempaa. Int on kokonaisluku, ja vastaavasti esim piste on looginen tietotyyppi sisältämään pisteen koordinaatit.


    Tää saattaa nyt olla liian teknistä ja hämmentävää alottelijoille, mutta.. Tosta typedef:stä esimerkkinä esim:

    typedef char* MERKKIJONO;
    typedef struct PISTE {int x: int y; };
    typedef char *FUNC()[5];

    MERKKIJONO on nyt char-osoitintietotyyppi, joka voi sisältää osoitteen merkkitaulukkoon, eli siis merkkijonon.

    Nyt siis nämä kaksi muuttujien esittelyä on samat:
    char *nimi;
    MERKKIJONO nimi;


    PISTE on nyt selkeästi tietotyyppi, joka sisältää pisteen. Enää ei korosteta että kyseessä on jokin tietue joka sisältää jotain lukuja. Tälläinen määrittely ennenkaikkea selkeyttää ohjelmaa ja helpottaa sen ylläpitoa.

    FUNC on tietotyyppi funktiolle, joka palauttaa viisialkioisen taulukon. Eli tietotyyppi voi sisältää funktiopointterin tietyn tyyppiseen funktioon.

    Yksi typedef:n etu on myös se, että se mahdollistaa ns. abstraktien tietotyyppien rakentamisen. Abstraktit tietotyypit on puhtaan C:n lähin vastine oliokielten luokille. Tuosta jokainen voi kaivella lisää tietoa netistä tai ohjelmointikirjoista.

    Äänestä

  • miksuh. kirjoitti:

    Yksinkertastettuna tietotyyppi määrää kuinka paljon tilaa tietyn tyyppistä tietoa sisältävä muuttuja vie muistissa ja miten sen tyyppistä muuttujaa käsitellään ohjelmassa. Eli miten kokonaislukuja, merkkejä jne käsitellään ja paljonko ne vie muistia.

    C:n perustietotyyppejä on esim int, float, char jne,

    Perustietotyypeistä Johdettuja tietotyyppejä on esim taulukot, yhdisteet ja okei myös tietueet jne.

    Okei myös tietue on tietotyyppi vaikka se on oikeastaan vain kokoelma eri tietotyypeistä koostuvia tietuealkioita niputettuna yhteen.
    Pelkkää structia käytettäessä korostuu kuitenkin aina se, että se on vain jokin tietue, eikä esim tyyppiä piste mikä olisi monesti ohjelmassa loogisempaa. Int on kokonaisluku, ja vastaavasti esim piste on looginen tietotyyppi sisältämään pisteen koordinaatit.


    Tää saattaa nyt olla liian teknistä ja hämmentävää alottelijoille, mutta.. Tosta typedef:stä esimerkkinä esim:

    typedef char* MERKKIJONO;
    typedef struct PISTE {int x: int y; };
    typedef char *FUNC()[5];

    MERKKIJONO on nyt char-osoitintietotyyppi, joka voi sisältää osoitteen merkkitaulukkoon, eli siis merkkijonon.

    Nyt siis nämä kaksi muuttujien esittelyä on samat:
    char *nimi;
    MERKKIJONO nimi;


    PISTE on nyt selkeästi tietotyyppi, joka sisältää pisteen. Enää ei korosteta että kyseessä on jokin tietue joka sisältää jotain lukuja. Tälläinen määrittely ennenkaikkea selkeyttää ohjelmaa ja helpottaa sen ylläpitoa.

    FUNC on tietotyyppi funktiolle, joka palauttaa viisialkioisen taulukon. Eli tietotyyppi voi sisältää funktiopointterin tietyn tyyppiseen funktioon.

    Yksi typedef:n etu on myös se, että se mahdollistaa ns. abstraktien tietotyyppien rakentamisen. Abstraktit tietotyypit on puhtaan C:n lähin vastine oliokielten luokille. Tuosta jokainen voi kaivella lisää tietoa netistä tai ohjelmointikirjoista.

    typedef struct PISTE {int x; int y; };

    Äänestä

Kommentoi aloitusta


------- kirjoitti:

Mitäs tuo typedef oikein tekee?

typedef int TAika;
....
TAika Aika;
....
Aika = 4545;


Eikös ole ihan sama kuin
int Aika 4545;

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu