Avatar
Tycek
Člen
Avatar
Tycek:

Zdravím.

Četl jsem kapitolu o vlastních datových typech (http://www.sallyx.org/sally/c/c15.php) a dočetl jsem se, že používání vlastních datových typů je mnohem příjemnější, než používání struktury samotné.
Chci se teda zeptat v čem je to příjemnější, popřípadě jaké jsou rozdíly mezi strukturou a datovým typem, protože mi s nimi práce příjde stejná.

 
Odpovědět 15.5.2014 12:31
Avatar
coells
Redaktor
Avatar
Odpovídá na Tycek
coells:

Práce se strukturou:

struct cislo {
  int i;
};

void main()
{
  struct cislo x;
  x.i = 0;
}

Práce s definovaným typem:

typedef struct {
  int i;
} cislo;

void main()
{
  cislo x;
  x.i = 0;
}

Takže nemusíš psát všude 'struct'.

Druhá otázka: struktura je datový typ, můžeš si ale zadefinovat vlastní datový typ, který zjednoduší zápis.

 
Nahoru Odpovědět 15.5.2014 12:43
Avatar
Tycek
Člen
Avatar
Odpovídá na coells
Tycek:

Právě že ani u struktury nemusíš psát struct

struct cislo {
  int i;
}x;

void main()
{
  x.i = 0;
}
 
Nahoru Odpovědět 15.5.2014 12:47
Avatar
coells
Redaktor
Avatar
Odpovídá na Tycek
coells:

Ve skutečnost jsi struct napsal :-) jenom jsi to přehlédl.
Zadefinoval jsi totiž strukturu cislo a proměnnou toho typu.

Podívej se, jak funguje tenhle kód.

struct {
  int i;
} x;

struct cislo {
  int i;
} y;

int get_cislo(struct cislo x)
{
  return x.i;
}

void main()
{
  struct cislo z;
  z = y; // ok
  x = y; // chyba, rozdílné datové typy
  get_cislo(z);
}

A pokud bys chtěl funkci, který by tuhle strukturu přijímala jako parametr, budeš muset vždy psát struct cislo.

Editováno 15.5.2014 13:05
 
Nahoru Odpovědět 15.5.2014 13:04
Avatar
Tycek
Člen
Avatar
Odpovídá na coells
Tycek:

Aha, chápu. :)
A zkrácení zápisu je všechno, co vlastní datový typ nabízí, nebo má více jiných výhod oproti struktuře?

 
Nahoru Odpovědět 15.5.2014 13:11
Avatar
coells
Redaktor
Avatar
Odpovídá na Tycek
coells:

Definice vlastního datového typu nabízí vyšší úroveň abstrakce.

Pokud je datový typ tzv opaque (nevidíš do jeho definice), pak se může do budoucna libovolně měnit a celý kód bude stále fungovat. Například pracuješ s typem X a netušíš, jestli je to int nebo struktura (občas to bývá obojí naráz) - a díky abstrakci datového typu to ani nepotřebuješ vědět.

 
Nahoru Odpovědět 15.5.2014 13:21
Avatar
Tycek
Člen
Avatar
Tycek:

Aha, chápu.
Díky za rady, zase jsem o něco moudřejší. :)

 
Nahoru Odpovědět 15.5.2014 13:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.