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