Zacatecnicke dotazy v C
Miroslav Mraz
mrazik na volny.cz
Sobota Prosinec 19 14:33:06 CET 2015
typedef pro struktury a uniony je další věc, která je používána ze zvyku
nebo spíš z lenosti, protože je udělána v C dost nelogicky. Zatímco v
C++ můžete psát prostě
struct OBCAN {
int Jmeno;
int Prijmeni;
OBCAN * Rodic;
};
tedy název struktury je přímo vámi definovaný datový typ, v čistém C
musíte napsat něco jako
struct STRUCT_OBCAN {
int Jmeno;
int Prijmeni;
struct STRUCT_OBCAN * Rodic;
};
// a pak případně použít typedef
typedef struct STRUCT_OBCAN OBCAN;
a teprve potom se identifikátor OBCAN dá použít jako tt. datový typ. Z
lenosti se pak obvykle píše
typedef struct STRUCT_OBCAN {
int Jmeno;
int Prijmeni;
struct STRUCT_OBCAN * Rodic; // tady nejde vzít prostě jen OBCAN,
// protože překladač ještě neví,
// co je to zač.
} OBCAN; // to ví až tady
Ve všech případech tedy má název struktury, když se nad tím trochu
zamyslíte, svůj význam.
Mrazík
Dne 19.12.2015 v 13:48 Josef Štengl napsal(a):
> Za struct následuje jméno struktury, které je možné použít jen se struct
> <jméno_struktury>
>
> je to dobré ve dvou případech:
> a)
> definování proměnné. například
> struct STRUCT_OBCAN_NAME Starosta;
> ekvivalentní k
> STRUCT_OBCAN_DEF Starosta;
>
>
> b)
> deklarace odkazu ve struktuře na sebe samu. To je to, co vám napsal
> Milan B.
>
> Jinak název struktury by měl být z hlediska jazyka nezávislá entita
> oddělená od ostatních názvů, a bez struct před ní neznamenat vůbec nic.
>
> Samozřejmě MS C překladač s tím manipuluje po svém, ale pokud to
> používáte tak jak máte, tak to nepoznáte.
>
>
> Dne 18.12.2015 v 17:05 Milan B. napsal(a):
>> Skuste si skompilvat
>>
>> typedef struct
>> {
>> int Jmeno;
>> int Prijmeni;
>> STRUCT_OBCAN *Rodic;
>> }STRUCT_OBCAN;
>>
>> alebo
>>
>> typedef struct STRUCT_OBCAN_NAME
>> {
>> int Jmeno;
>> int Prijmeni;
>> struct STRUCT_OBCAN_NAME *Rodic;
>> }STRUCT_OBCAN_DEF;
>>
>> Najdite rozdiel
>>
>> -m-
>>
>>
Další informace o konferenci Hw-list