Mitäs tuo typedef oikein tekee?
typedef int TAika;
....
TAika Aika;
....
Aika = 4545;
Eikös ole ihan sama kuin
int Aika 4545;
typedef?
9
1100
Vastaukset
- 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
Kumpi vetoaa enemmän sinuun
Kaivatun ulkonäkö vai persoonallisuus? Ulkonäössä kasvot vai vartalo? Mikä luonteessa viehättää eniten? Mikä ulkonäössä?871724- 851232
- 1101123
- 68915
- 102884
Okei nyt mä ymmärrän
Olet siis noin rakastunut, se selittää. Onneksesi tunne on molemminpuolinen 😘56818- 47731
- 36722
Olen huolissani
Että joku päivä ihastut/rakastut siskooni. Ja itseasiassa haluaisin, ettei hän olisi mitenkään sinun tyyppiäsi ja pitäis47671- 33663