typedef?

-------

Mitäs tuo typedef oikein tekee?

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


Eikös ole ihan sama kuin
int Aika 4545;

9

1100

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • anonymous

      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.

      • aslkjf

        "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 :)


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


      • miksuh.
        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öä.


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


      • mulle
        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?


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


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


      • miksuh.
        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; };


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kumpi vetoaa enemmän sinuun

      Kaivatun ulkonäkö vai persoonallisuus? Ulkonäössä kasvot vai vartalo? Mikä luonteessa viehättää eniten? Mikä ulkonäössä?
      Ikävä
      87
      1724
    2. Ei se mene ohi ajan kanssa

      Näin se vaan on.
      Ikävä
      85
      1232
    3. Tavoitteeni onkin ärsyttää

      Sua niin turhaudut ja unohdat koko homman
      Ikävä
      110
      1123
    4. Tunnistebiisi

      Laita joku tunnistebiisi, niin tiedän ett oot täällä ja kaipaat ehkä mua
      Ikävä
      68
      915
    5. Taidat tykätä linnuista paljon

      Mikä on sun lemppari ☺️😉🥹🦢🐦‍⬛🦉🦜🦚
      Ikävä
      102
      884
    6. Okei nyt mä ymmärrän

      Olet siis noin rakastunut, se selittää. Onneksesi tunne on molemminpuolinen 😘
      Ikävä
      56
      818
    7. Miks käyttäydyt noin?

      Välttelet kaikkia kohtaamisia...
      Ikävä
      47
      731
    8. Ei sun tarvi jännittää enää

      en yritä enää mitään. Tiedän että olin mauton ja sössin kaiken.
      Ikävä
      36
      722
    9. Olen huolissani

      Että joku päivä ihastut/rakastut siskooni. Ja itseasiassa haluaisin, ettei hän olisi mitenkään sinun tyyppiäsi ja pitäis
      Ikävä
      47
      671
    10. Minkälainen ääni mulla on mies

      Sinun mielestä?
      Ikävä
      33
      663
    Aihe